《C语言程序设计》习题集 下载本文

《C语言程序设计》习题集

for(j=1;j

if(a[k][i]>a[j][i]) k=j; s+= ; } =s; }

void main()

{ int x[M][N]={3,2,5,1,4,1,8,3},s; SumColumMin( ); printf(\}

6、以下程序运行后的输出结果是 void main()

{ char s[ ]=“9876”,*p; for ( p=s ; p

7、若有如下图所示五个连续的int类型的存储单元并赋值如下图,a[0]的地址小于a[4]的地址。

p和s是基类型为int的指针变量。请对以下问题进行填空。

a[0] 22 a[1] a[2] a[3] 33 44 55 a[4] 66 (1)若p已指向存储单元a[1]。通过指针p,给s赋值,使s指向最后一个存储单元a[4]的

语句是 。

(2)若指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是 。 三、编程题

1、利用指针编写求字符串长度的函数strlen()。

2、利用函数和指针编写一个程序,在main函数中输入一个字符串,在pcopy函数中将此字符串从第n个字符开始到第m个字符为止的所有字符全部显示出来。

3、利用函数和指针编写一个程序,从键盘输入三个字符串,并按由小到大的顺序显示出来。

- 40 -

《C语言程序设计》习题集

第十一章 结构体与共用体

一、选择题

1、有以下程序段 typedef struct NODE { int num; struct NODE *next; } OLD;

以下叙述中正确的是( )。 A)以上的说明形式非法 B)NODE是一个结构体类型 C)OLD是一个结构体类型 D)OLD是一个结构体变量 2、有以下程序 # include struct STU { int num;

float TotalScore; }; void f(struct STU p) { struct STU s[2]={{20044,550},{20045,537}}; p.num = s[1].num; p.TotalScore = s[1].TotalScore; } void main() { struct STU s[2]={{20041,703},{20042,580}}; f(s[0]); printf(\ %3.0f\\n\ }

程序运行后的输出结果是( )。 A)20045 537 B)20044 550 C)20042 580 D)20041 703 3、有以下程序 # include struct STU { char name[10];

int num; }; void f(char *name, int num) { struct STU s[2]={{\ num = s[0].num; strcpy(name, s[0].name); } void main() { struct STU s[2]={{\ p=&s[1]; f(p->name, p->num); printf(\ %d\\n\ }

程序运行后的输出结果是( )。 A)SunDan 20042 B)SunDan 20044

- 41 -

《C语言程序设计》习题集

C)LiSiGuo 20042 D)YangSan 20041 4、有以下程序 struct STU { char name[10]; int num; float TotalScore; }; void f(struct STU *p) { struct STU s[2]={{\ ++p ; ++q; *p=*q; } void main() { struct STU s[3]={{\ f(s); printf(\ %d %3.0f\\n\ }

程序运行后的输出结果是( )。 A)SunDan 20044 550 B)Penghua 20045 537 C)LiSiGuo 20042 580 D)SunDan 20041 703 5、设有如下说明 typedef struct ST { long a; int b; char c[2]; } NEW;

则下面叙述中正确的是( )。 A)以上的说明形式非法 C)NEW是一个结构体类型

B)ST是一个结构体类型

D)NEW是一个结构体变量

6、有以下结构体说明和变量定义,如图所示,指针pqr分别指向此链表中三个连续结点。

struct node

{ int data; struct node *next; } *p,*q,*r;

现要将q所指结点从链表中删除,同时保持链表的连续,以下不能完成指定操作的语句是( )。

A)p->next=q->next; B)p->next=p->next->next; C)p->next=r; D)p=q->next; 7、以下对结构体类型变量td的定义中,错误的是( )。

B)struct aa A)typedef struct aa

{ {

int n; int n;

float m; float m;

} td; }AA;

struct aa td; AA td;

- 42 -

《C语言程序设计》习题集

C)struct

{

int n; float m; }aa;

struct aa td;

D)struct

{

int n; float m; }td;

8、有以下说明和定义语句

struct student

{ int age; char num[8];};

struct student stu[3]={{20,\struct student *p=stu;

以下选项中引用结构体变量成员的表达式错误的是( )。 A) (p++)->num B) p->num C) (*p).num D) stu[3].age 9、设有以下语句

typedef struct S

{ int g; char h;} T; 则下面叙述中正确的是( )。 A) 可用S定义结构体变量 C)S是struct类型的变量

B)可以用T定义结构体变量

D)T是struct S类型的变量

10、有以下程序

struct STU

{ char name[10]; int num; int Score; };

void main( )

{ struct STU s[5]={{“YangSan”,20041,703},{“LiSiGuo”,20042,580}, {“wangYin”,20043,680},{“SunDan”,20044,550}, {“Penghua”,20045,537}},*p[5],*t; int i,j;

for(i=0;i<5;i++) p[i]=&s[i]; for(i=0;i<4;i++) for(j=i+1;j<5;j++)

if(p[i]->Score>p[j]->Score) { t=p[i];p[i]=p[j];p[j]=t;}

printf(“5d %d\\n”,s[1].Score,p[1]->Score); }

执行后输出结果是( )。

A) 550 550 B) 680 680 C) 580 550 D) 580 680 11、有以下程序

#include struct NODE{ int num;

- 43 -