C语言全部章节习题集(参考答案) 联系客服

发布时间 : 星期日 文章C语言全部章节习题集(参考答案)更新完毕开始阅读

(9) 以下程序的输出结果是a=___,b=___,c=___。 #include

int func(int a,int *p); void main() {

int a=1,b=2,c; c=func(a,&b); b=func(c,&a); a=func(b,&c);

printf(\}

int func(int a,int *p) {

a++; *p=a+2;

return(*p+a); }

36 16 19

第九章 预处理 A部分

一、 选择题

1、 以下不正确的叙述是(D)

A、宏替换不占用运行时间。 B、宏名无类型。

C、宏替换只是字符替换。 D、宏名必须用大写字母表示。

2、 C语言的编译系统对宏命令的处理(D) A、在程序运行时进行的。 B、在程序连接时进行。

C、和C程序中的其它语句同时进行编译的。 D、在对源程序中其它语句正式编译之前进行的。 3、以下程序的输出结果是(C)。 A、15 B、100 C、10 D、150

#define MIN(x,y) (x)<(y)?(x):(y) void main() {

int I,j,k;

i=10;j=15;k=10*MIN(i,j); printf(“%d\\n”,k); }

4、以下叙述中正确的是(D)

A、 用#include包含的文件的后缀必须是“.h”。 B、 若一些源程序中包含某个头文件;当该文件有错时,只需对该头文件进行修改,包含此头文件的所有源程序不必重新进行编译。 C、 宏命令行可以看作是一行C语句。 D、 预处理是在编译之前进行的。 5、以下叙述中正确的是(C)

A、源程序中所有的行都参加编译。

B、宏定义常量与const定义常量是一样的。 C、宏定义可以嵌套定义,即在宏定义中的字符串可以引用另一个宏定义的标识符。 D、以上都不正确。 二、 填空题

1、 以下程序中for 循环执行的次数是 6 。 #define N 2 #define M N+1

#define NUM (M+1)*M/2 void main() {

int i;

for(i=1;i<=NUM;i++); printf(“%d\\n”,i); }

2、以下程序的输出结果是 x=93 。 #define A 3

#define B(a) ((A+1)*a) void main() {

int x;

x=3*(A+B(7));

printf(“x=%d\\n”,x); } B部分(

编程:请写出一个宏定义MYALPHA(c),用以判断c是否是字母字符,若是,得1,否则,得0。 解:#define MYALPHA(c) ((c>=’A’&&c<=’Z’)||( c>=’a’&&c<=’z’)?1:0)

第十章 指针 A部分) 一、选择题

1、若有定义:int x,*pb;则以下正确的表达式是(A)

A、pb=&x B、pb=x C、*pb=&x D、*pb=*x 2、以下程序的输出结果是(B) A、因变量无定义输出不定值

B、0 C、-1 D、1 #include void main()

{printf(“%d\\n”,NULL);}

3、以下程序的输出结果是(B)

A、5,2,3 B、-5,-12,-7 C、-5,-12,-17 D、5,-2,-7

#include

void sub(int x,int y,int *z) {*z=y-x;} void main() {

int a,b,c;

sub(10,5,&a); sub(7,a,&b); sub(a,b,&c);

printf(“%d,%d,%d\\n”,a,b,c); }

4、以下程序的输出结果是(C)

A、4 B、6 C、8 D、10 #include void main() {

int k=2,m=4,n=6;

int *pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf(“%d\\n”,n); }

5、已知指针p的指向(图一)的a[1],则执行语句*p++;后,*p的值是(B)。

A、20 B、30 C、21 D、31 a[0] a[1] a[2] a[3] a[4] 10 20 30 40 50 (图一)

6、已知指针p的指向(图一)的a[1],则表达式*++p的值是(B)。

A、20 B、30 C、21 D、31

7、已知指针p的指向(图一)的a[1],则表达式++*p的值是(C)。

A、20 B、30 C、21 D、31 8、以下程序的输出结果是(D)。 A、23 B、24 C、25 D、26 #include void prtv(int *x)

{printf(“%d\\n”,++*x);} void main() {

int a=25;prtv(&a); }

9、以下程序的输出结果是(B)。 A、运行出错 B、100

C、a的地址 D、b的地址 #include void main() {

int **k,*a,b=100; a=&b;k=&a;

printf(“%d\\n”,**k); }

10、以下程序运行后,输出结果是(D)。

A)8 B)7 C)6 D) 5 #include ss(char *s)

{ char *p=s; while(*p) p++; return(p-s); }

main()

{ char *a=\ int i; i=ss(a);

printf(\ } 二、填空题

1、若有定义:char ch;

(1)使指针p指向变量ch的定义语句是 char *p=&ch; 。

(2)若已定义char *p;,使指针p指向变量ch的赋值语句是 p=&ch; 。

(3)在(1)的基础上,通过指针p给变量ch读入字符的scanf调用语句是 scanf(“%c”,p); 。 (4)在(1)的基础上,通过指针p给变量ch赋字符’a’的语句是*p=’a’; 。

(5)在(1)的基础上,通过指针p用格式输出函数输出ch中字符的语句是printf(“%c”,*p); 。 2、以下程序输出的是 C 。 void main( ) { int i=3, j=2;

char *a=\DCBA\

printf(\ }

3、以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。请填空。

void exchange(int *x, int *y) { int t;

t=*y; *y= *x ; *x= t ; } B部分

程序填空:

1、下面程序的输出结果是 A B C D B C D C D D 。 char b[]=\ABCD\ void main() { char *chp;

for(chp=b; *chp: chp+=2) A、p++->n B、p->n++ C、(*p).n++ D、

++p->n

struct st{int n;struct st *next;}; struct st a[3],*p;

a[0].n=5;a[0].next=&a[1];a[1].n=7;a[1].printf(\

printf(\ }

2、 下面是一个字符串连接函数,请补充完整。 void mystrcat(char *s1,char *s2) {

char *p,*q;

for(p=s1; *p ; p++ );

for( q=s2 ;*q;q++) *p++=*q ; *p=’\\0’ ; }

第十一章 结构体与共用体 A部分( 一、选择题

1、设有如下定义: struct sk

{int a;float b;}data,*p;

若有p=&data;,则对data中的a域的正确引用是(B)。

A)(*p).data.a B)(*p).a C)p->data.a D)p.data.a

2、根据以下定义,能输出字母M的语句是(D)。 A、printf(“%c\\n”,class[3].name); B、printf(“%c\\n”,class[3].name[1]); C、printf(“%c\\n”,class[2].name[1]); D、printf(“%c\\n”,class[2].name[0]);

struct person{char name[9];int age;}; struct person class[10]={“John”,17,”Paul”,19,”Mary”,18,”Adam”,16,}; 3、以下程序的输出结果是(D)。 A、0 B、1 C、3 D、6 #include void main() {

struct emplx{int x;int y;}enum[2]={1,3,2,7};

printf(“%d\\n”,enum[0].y/enum[0].x*enum[1].x); } 4、若有以下说明及语句,则值为6的表达式是(D)。 next=&a[2];

a[2].n=9;a[2].next=’\\0’;p=&a[0];

5、已知字符0的ASCII码的十进制的值是48,且数组的第0个元素在低位,以下程序的输出结果是(B)。

A、39 B、9 C、38 D、8 void main() {

union{int i[2];long k;char c[4];}r,*s=&r;

s->i[0]=0x39;s->i[1]=0x38; printf(“%x\\n”,s->c[0]); }

6、以下程序输出的结果是(C)。 A、32 B、16 C、8 D、24

typedef union{long x[2];int y[4];char z[8];}MYTYPE; MYTYPE them; void main() {

printf(“%d\\n”,sizeof(them)); }

7、设有以下语句

typedef struct S

{ int g; char h;} T; 则下面叙述中正确的是(B)。

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

C)S是struct类型的变量 D)T是struct S类型的变量 8、有以下说明和定义语句 struct student

{ int age; char num[8];}; struct student stu[3]={{20,\200403\

struct student *p=stu;

以下选项中引用结构体变量成员的表达式错误的是(D)。

A) (p++)->num??B) p->num C) (*p).num D) stu[3].age

二、填空题

1、为了建立结构体(含有两个成员,data是数据成员,next是指向自身结构体的指针成员),请填空:

Struct link {

char data;

struct link *next ; } 2、把类型int另取一个类型名称INT,则以下应填: typedef int INT;

3、以下程序的运行结果是2002Shangxian 。 # include typedef struct student{

char name[10]; long sno; float score; }STU; main( ) { STU a={“zhangsan”,2001,95},b={“Shangxian”,2002,90},

c={“Anhua”,2003,95},d,*p=&d; d=a;

if(strcmp(a.name,b.name)>0) d=b; if(strcmp(c.name,d.name)>0) d=c; printf(“%ld%s\\n”,d.sno,p->name); } B部分

程序填空:

以下程序的功能是:处理由学号和成绩组成的学生记录,N名学生的数据已在主函数中放入结构体数组s中,它的功能是:把分数最高的学生数据放在b所指的数组中,注意:分数最高的学生可能不只一个,函数返回分数最高学生的人数。请填空。 #include #define N 16 typedef struct {

char num[10]; int s; }STREC;

int fun(STREC *a,STREC *b) {

int i,j=0,max=a[0].s;

for(i=0;i

if(max

if( a[i].s==max ) b[j++]=a[i]; return j; }

void main() {

STREC

s[N]={{“GA005”,85},{“GA003”,76},{“GA002”,69},{“GA004”,85},

{“GA001”,91},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GA0015”,85},

{“GA0013”,91},{“GA0012”,64},{“GA0014”,91},{“GA0011”,66},{“GA0017”,64}, {“GA0018”,64},{“GA0016”,72},}; STREC h[N]; int i,n; n=fun(s,h);

printf(“The %d highest score:\\n”, n ); for(i=0;i

printf(“%s M\\n”,h[i].num,h[i].s); printf(“\\n”); }