C语言课堂练习习题集 下载本文

《C语言程序设计》自主学习检验题汇编 第一、二章 C程序与算法 单项选择题

1. 将汇编语言编写的程序翻译成目标程序的程序是( ) A)解释 B)编译 C)汇编 D)目标 2. 不属于面向机器语言的是 ( )

A)符号语言 B)二进制语言 C)汇编语言 D)C语言 3. 将高级语言编写的程序翻译成目标程序的程序是()。 A)解释 B)编译 C)汇编 D)二进制 4. 不属于高级语言的是()。

A)BASIC B)C C)ALGOL D)符号语言 5. 程序段的基本结构中,不包含()。

A)函数结构 B)循环结构 C)顺序结构 D)分支结构 6、C语言源程序的最小单位是( )。

A、程序行 B、语句 C、函数 D、字符 7、以下说法正确的是( )。 A、 在C语言中,要调用的函数必须在main()函数中定义 B、 C语言程序总是从第一个定义的函数开始执行

C、 C语言程序中,main()函数必须放在程序的开始部分 D、 C语言程序总是从main()函数开始执行 8、以下对C语言描述中正确的是( )。 A、 C语言源程序中可以有重名的函数

B、 C语言源程序中要求每行只能书写一条语句 C、 C语言源程序中,注释可以出现在任何位置 D、 最小的C源程序中没有任何内容

9、对C语言源程序执行过程描述正确的是( )。 A、 从main() 函数开始执行,到main()函数结束

B、 从程序的第一个函数开始执行,到最后一个函数结束 C、 从main函数开始执行,到源程序的最后一个函数结束 D、 从第一个函数开始执行,到main函数结束。

填空题

1. 能完成某个任务的、有始有终的C语言__ _称为C程序。 2. 用来编写程序的计算机语言称为____。 3. 高级语言编写的程序称为____。

4. 用C语言编写的源程序简称为“C程序”,扩展名规定为“____”。 5. C程序经过“编译”后将获得扩展名为“OBJ”的____。

6. C程序经过编译后获得的中间代码文件还需要经过____,才能成为可执行的“程序”,标程序的扩展名规定为\。

7、ANSI C标准中共规定了 个关键字, 条控制语句。 8、一个执行的C语言源程序至少应包含一个 。 9. 选择结构是____选择某个操作来执行的—种程序结构。 10. 选择结构可以分为____、双分支结构和多分支结构。 11. 循环结构又可分为当型循环、____及次数型循环。

第三章 数据类型、运算符与表达式

目1 / 45

单项选择题

1. 以下程序的输出结果是A。 main()

{int a=10,b=10;

printf(\%d,%d\,a--,++b); }

A)10,11 B)10,10 C)9,9 D)9,11

2. 设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是( )

A)'a'&&'b' B)a<=b C)a||b+c&&b-c D)!((a='a'&&ch<='z')?(ch-32):ch 上面表达式的值是( )

A)'a' B)'A' C)'Z' D)'z' 4. 下面程序的输出是 main()

{int a=-1,b=4,k;

k=(a++<=0)&&(!(b--<=0));

printf(\%d%d%d\\n\,k,a,b);}

A)0 0 3 B)0 1 2 C)1 0 3 D)1 1 2 5. 字符串“\\ t \\ n \\ \\ \\ 045 \\’”的长度为( )。

A)4 B)10 C)5 D)说明不合法 6. C语言中最基本的数据类型包括( ) A)整型,实型,逻辑型 B)整型,实型,布尔型 C)整型,实型,字符型 D)整型,实型,指针型 7. C浯言中的构造类型包括。

A)数组型,结构体型,联合体型 B)结构体型,联合体型,指针型

C)结构体型,联合体型,枚举类型 D)数组型,结构体型,联合体型,指针型

8. 设C语言中,一个int型数据在内存中占用两个字节,则int型数据的取值范围为( A)-128~127 B)-32768~32767 C)0~65536 D)0~2147483647 9. 若a是float型变量,则表达式a=l,a++,a+=a的值为( )。 A) 2 B) 4 C) 2.0 D) 4.0 10. 以下运算符中,运算优先级最低的是( )。 A) -> B) ++ C) * D) = 11. 不属于字符型常量的是( )。

A)'A' B)\ C)'\\ \\' D)'\\\12. 不属于整型常量的是( )

A)10 B)010 C)0xl0 D)4/2.0 13. 属于实型常量的是

A)E10 B)10 C)10L D)1E10

14. ' \\060 '和\在内存中占用的字节数分别为( ) A)2 2 B)2 1 C)1 2 D)4 4

15. 设有以下程序片段,请问执行后的输出结果是( )

int i=010,j=10,k=0xl0;printf(\%d,%d,%d\,k,j,i); A)16,10,8 B)8 10 16 C)10,10,10 D)8,10,16

16. 设整型变量a的值为5,使整型变量b的值不为2的表达式是( )。 A)b=a/2 B)b=6-(--a) C)b=a%2 D)b=a>3?2:1

2 / 45

)17. 设单精度变量f,g的值均为5.0,则下面的表达式中,使f为10.0的表达式是( )。 A) f+=g B)f-=g+5 C)f*=g-5 D)f/=g*5 18. 表达式-l?(10?10:1):(0?0:-1)的值为 A)10 B)1 C)0 D) -1 19. sizeof(double)的值为

A)1 B)2 C)4 D)8 20. sizeof(float)是。

A)一种函数调用 B)—个单精度表达式 C)—个整型表达式 D)—个不合法的表达式 21. 设有以下的程序片段,请问执行后变量i的值是。 int i; float f=10.5; i=((int)f)/2; A) 5.0 B)5.5 C)6 D)5 22. 以下程序的输出结果是 #include main()

{int k=4,m=1,p;

p=func(k,m); printf(\%d,\,p); p=func(k,m); printf(\%d\\n\,p); } func(a,b)

int a,b;

{static int m=0,i=2; i+=m+1; m=i+a+b; return(m); }

A)8,17 B)8,16 C)8,20 D)8,8 填空题 1. 数学式sin2x*(a+b)/(a-b)写成C语言表达式是____。

2. 若已知a=1,b=2,则表达式!a

3. C语言的常量可以分为____,____,____,____,____,____。 4. C语言的基本数据类型分为____,____,____,____。

5. 已知字母'A'的ASCII码值为十进制数65,且ch为字符型,则执行语句ch='A'+'6'-'0’后,ch的值为____。

6. 设C语言中,一个int型数据在内存中占用两个字节,则unsigned int型数据的取值范围为____。

7. 若a是float型变量,且a=6,则表达式a/2+(int)(a+1)%2的值为____。

8. 假设m是一个三位数,百位、十位、个位的数值分别为a、b、c,则百位、十位、个位的数值分别为c、a、b的数的表达式是____。 第四章 顺序程序设计 单项选择题

1. 设有整型变量m值为8,下列赋值语句中,正确的是 。

A)++m=6; B) m=m++; C) m+1=8; D) m+1+=8;

2. 设字符型变量ch的值为'A',整型变量m的值为'1',假定执行ch=getchar();m=getchar();时,从键盘输入B,则变量ch和m的值分别为 。

A)'A'和'1' B)'B'和'1' C)'B'和' ' D)'B'和'\\n'

3. 设字符型变量ch的值为'A',整型变量m的值为'1',假定执行putchar(m);putchar(' ');putchar(ch);后,则输出结果是 。

A)A1 B)lA C)A l D)1 A

4. 如果用scanf()来输入长整型数据,则正确的格式控制符是 ( ) 。 A)%x B)%lx C)%lD D)%d

3 / 45

5. 如果用printf()来输出双精度型数据、则正确的格式控制符是 ( ) 。 A)%-10.2f B)%lf C)%le D)%lg

6. 执行语句scanf(\%d,%d\,&m,&n);使m和n的值分别为1和2,正确输入是( ) 。 A)1 B)1 2 C)1,2 D)12 2

7. 设整型变量a和b的值分别为8和9。printf(\%d,%d\,(a++,++b),b--);的输出是D。 A)8,8 B)8,7 C)9,9 D)10,9 8. 设有下列程序段,则其正确的输出是 ( ) 。 int x=011,y=0xll;

printf(\%-3dy=%3d\,x,y);

A)口口917口 B)x=9口口y=口17 C)x=口口9y=17口 D)x=lly=x11 9. 设字符型变量ch已有值,下列语句中错误的是 ( ) 。

A)scanf(\%c%c\; B){int ch=6;printf(\%d\,ch);} C)5; D)ch>48&&ch<0x3A; 10. 下列表达式中,结果不为1.0的表达式是 。

A)fabs(-1.0) B)powl0(0) ) C)floor(0.99) D)sin(90*3.14159/180) 11. 运行下列程序的输出是 ( ) 。 main()

{int k=1;

{int k=2; printf(\%d\,k);} printf(\%d\,k); }

A)12 B)21 C)11 D)22 12. 运行下列程序的输出是 ( )。 main()

{char ch='B';

printf(\%c%d\,ch,ch++); } A)C65 B)B65 C)B66 D)C66 填空题

1. 使用\函数时,程序的开头必须写一条包含命令:____。

2. 用输入函数scanf()输入长整型十六进制数据时,对应的格式控制符是____.

3. 用输入函数scanf()输入双精度实型数据时,对应的格式控制符可以是%lf或____。 4. 用输出函数printf()输出双精度实型数据时,对应的格式控制符可以选用%f,%e或____ 5. 在输出函数printf()中使用了%s格式字符,则输出表达式是____。 6. 表达式语句的构成规则是在任何表达式的后面加上一个____。 7. 表达式\的运算结果是____。

8. 表达式\的运算结果是产生____—个整数。 9. 运行下列程序的输出结果是____ #include”math. h”

main()

{float f1=1.0,f2=-2.0;

printf(“f2=%f,fabs(f2)>f1=%d”,f2+=f1,fabs(f2)>f1); } 10. 运行下列程序的输出结果是____ #include”math. h”

main()

{int m=64;

printf(%d,%c,%#o,%#x”,m,m+1,m+2,m+3); }

4 / 45

第五章 选择程序设计 单项选择题

1.已知a,b,c的值分别是1,2,3,则执行下列语句后a,b,c的值分别是

if (a++

A)0,0,0 B)1,2,3 C)1,2,1 D)2,2,2 2.以下if语句中格式正确的是

A)if(a>b) b++ else a++;

B)if(a>b) {b++;printf (\%d\,b);} else {a++;printf(\%d\,a);} C)if(a>b) {b++;printf(\%d\,b)} else{a++;printf(\%d\,a);} D)if(a>b)b++;printf(\%d\,b); else printf(\%d\,a);

3.若i是int型变量,且有下面的程序片段

i=0;

if(i<=0) printf(\ else printf(\;

上面程序片段的输出结果是( )

A) #### B) **** C) ####**** D)有语法错误,无输出结果4.有以下程序:

#include main()

{int x,y; printf(\:\;

scarf(\%d\,&x); if(x++<0) y=-1;

else if(x==0) y=0;else y=1; printf(\%d\;} 现从键盘上输入-1,则程序的输出是。

A) -1 B)0 C)1 D)不确定的值 5.有以下程序,运行后的输出结果是

main()

{int a=2,b=0,c=-1; if(a=b+c)

if(a>0) b=c=a;

else if(a==0)a=b=c=0; else a=b=c=1; else a=b=c=-1;

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

A)1,1,1 B)0,0,0 C)-1,-1,-1 D)2,2,2 6.若执行下面的程序时从键盘上输入10,则输出是

main()

{int a;scanf(\%d\,&a); if(a++>10)

printf(\%d\\n\,++a); else printf(\%d\\n\,a--); }

5 / 45

A)12 B)11 C)10 D)9 7.下面程序的输出结果是。

#include main()

{int i=2,p;p=f(i,i+1); printf(\%d\,p); }

int f(a,b) int a,b; {int c; c=a; if(a>b) c=1; else

if(a==b)c=0; else c=-1; return(c); }

A) -1 B)0 C)1 D)2 8.有以下程序:

#include . main()

{int al=0,a2=0,a3=0; char ch;

while((ch=getchar())!='\\n') switch(ch)

{case 'A':a1++; case 'B':a2++;

default:a3++; }

printf(\%d,%d,%d\,a1,a2,a3);}

现从键盘上输入AAAAABBBC<回车>,则程序执行后的输出结果是 A)5,8,9 B)5,3,1 C)5,3,9 D)5,8,1 9.请读程序:

#include main()

{int x=l,y=0,a=0,b=0; switch(x) {case l:

switch(y)

{case 0: a++; break;

case 1:b++;break;} case 2:

a++;b++; break;}

printf(\%d, b=%d\\n\,a,b);} 上面程序的输出结果是

A)a=2,b=l B)a=l,b=l C)a=l,b=0 D)a=2,b=2 10.若要求表示a不等于0的关系,错误的表达式是 A)a<>0 B)a!=0 C)a D)a<0| |a>0 11.程序的三种基本结构是。

A)顺序结构,循环结构,递归结构 B)顺序结构,循环结构,选择结构 C)选择结构,循环结构,递归结构 D)顺序结构,选择结构,递归结构

6 / 45

12.C语言中,逻辑真表示为

A)TRUE B)'y'或'Y' C)1 D)非零值

13.设有如下程序:

#include< stdio. h> main()

{ char ch1,ch2;

scanf(“%c%c”,&ch1,&ch2); if (ch1!=’B’) { switch(ch2) { case’B’:

switch(ch1)

{ case’A’:printf (“AB”) break;

case’B’:printf(“BB”); break; } case ‘A’:

switch(ch1)

{case’A’:printf (“AA”) break;

case’B’:printf(“BA”); break; } } }}}

若执行是从键盘上输入的数据时AB,则输出是

A) AB B)ABAA C)ABBBAABA D)BBBA

14. 已知a,b,c,w时int型变量,a,b均以赋值,且满足a

if (w<=b) w=b;

if (w<=c) printf (“%d”,w); else w=c;

为把c的值放入w中,则执行此程序段时,从键盘输入的c的值不应取的范围是A) b>c B) c>=b C) c>a且ca或c

15.设a,b,w为整型变量,ch为字符型变量,用if语句改写以下的程序段: switch(ch)

{ case'+':w=a+b;break; case'-':w=a-b;break; case'*':w=a*b;break; case'/':w=a/b;break;} 在下列写法中,错误的是

A)if(ch= ='+') w=a+b; B)if(ch= ='*') w=a*b; if(ch= ='-') w=a-b; else if(ch= ='/') w=a/b; if(ch= ='*') w=a*b; if(ch= ='+') w=a+b; if(ch= ='/') w=a/b; else if(ch= ='-') w=a-b; C)if(ch= ='+') w=a+b; D)if(ch= ='+') w=a+b; else if(ch= ='-') w=a-b; elseif(ch= ='-') w=a-b;

7 / 45

if(ch= ='*') w=a*b; if(ch= ='*') w=a*b; else w=a/b; else if(ch= ='/') w=a/b; 16.实型变量a,b中放有两门课程的考试成绩,如果两门成绩都及格(成绩>=60),则显示“pass”,如果a成绩不及格,则显示\,如果a成绩及格而b成绩不及格则不做任何处理。下列程序段中可实现上述要求的是( )

A)if(a>=60) B)if(a<60)

if(b>=60) printf(”fail”); printf(\; else if(b>=60) else printf(\; printf(\;

C)if(a>=60)&&(b>=60)) D)if(b>=60) printf(\; if(a>=60)

else if(b<60) printf(\; printf(\; else printf(\;

17.下面满足当(a>=b)&&(c= =d)时u=w,否则x=y的if语句是 A)if(a

if(c= =d) x=y; else if(c= =d) u=w; else x=y; else x=y; else u=w;

C)if(a=b)

{if(c= =d)x=y; {if(c= =d) x=y; else u=w; else u=w; } } 18.以下程序的输出结果是

#include main()

{ int a=0,b=l,c=0,x=0,y=0; if(x<=y) if(y=l0)

if(!b) a=1; else if(c) a=10; a=-1;

printf(\%d\,a);}

A)1 B)10 C)-1 D)不确定的值 填空题

1.有以下程序: main() {int i;

scanf(“%d”,&i); swith(1) {case 1:

printf(“%d”,i++) case 2:

printf(“%d,i++) case 3:

printf(“%d”,i++)

8 / 45

case 4:

printf(“%d”,i++) break; default:

printf(“END”)} }

输入数据1,执行以上程序,则输出结果是_1234___ 2.执行下面程序后输出的结果为__14_。 main()

{ int i=0,j;

for(j=0;j<4;j++)

switch(j)

{ case 1: i=i+1; case 2: i=i+2; case 3: i=i+3; } printf(“%d\\n”,i);} 3.设有以下程序: #include main()

{ char ch1, ch2;

scanf(\%c%c\,&ch1,&ch2); if(ch1!='B')

{ switch(ch2) { case 'B': switch(ch1)

{ case'A':printf(\; case'B':printf(\;} break; case'A': switch(ch1)

{case'A':printf(\; case'B':printf(\; } } } else printf(\; }

若执行此程序段时输入的数据是AB 4.有以下程序:

#include main() { int c;

while((c=getchar())!='\\n') { switch(c-'2') { case 0:

case l:putchar(c+4);

case 2:putchar(c+4);break; case 3:putchar(c+3);

abbb__。 9 / 45

default:putchar(c+2);break; } }}

若执行时从键盘上输入2473(代表回车),则程序的输出结果是___668977_。

5.若x是int型变量,请写出\是偶数则为真\的表达式__if(x/2=0)_x==1_。5.x%2= =0 6.x,y,z均为整型变量,请写出描述\或y等于z\的表达式____。6.(x= =z)||(y= =z) 7.已知a=3,b=03,c='0',则表达式a>b&&a>c||b>c&&a>c的值为__0__。

8.以下程序的功能是:输入圆的半径,和运算标志,按照运算标志进行运算,输出运算后的结果。请在下划线处填入合适内容。

标志 指定运算 'a'或'A' 求面积 'b'或'B' 求周长

其他值 求周长,面积 #include #define P 3.14 main()

{ char c;

float r,area,length;

seanf(\%c,%f\,&c,&r); switch(___c_) {case 'a':

case 'A':area=P*r*r;printf(\%f\,area);break; case 'b':

case 'B':length=2*P*r;

printf(\%f\,length); —break—; default:area=P*r*r; length=2*P*r;

printf(\%d,length=%f\,area,length);

9.以下程序的功能是:从键盘上接受三个十进制整型数据,对这三个数据进行从小到大的排序,输出排序后的数据。请完成该程序。

#include main()

{int x,y,z,i;

scanf(\%d,%d,%d\,&x,&y,&z); if(_x>y___){i=x;x=y;y=i;} if(_y>z___){i=y;y=z;z=i;} if(__x>z__){i=x;x=z;z=i;}

printf(\%d,%d,%d\\n\,x,y,z);}

10.以下程序的功能是:从键盘输入一年份数据,判断此年份是否为闰年。其中判断闰年的条件是:能被4整除但不能被100整除,或能被400整除。请填空完成该程序。

#include main()

{int x,i;

seanf(\%d\,&x); if(x%400= =0) i=1; else if(_x%4==0

10 / 45

&&x0!=0___) i=1;

else__i=0__;

if(i= =1) printf(\; if(i= =0) printf(\;}

11.现要根据学生的成绩,将学生划分为A,B,C,D,E五个等级,其对应的关系已用if语句写出如下(其中整型变量result存放学生成绩,字符型变量grade存放学生等级):

if(result<60) grade='E'; else if(result<70) grade='D'; else if(result<80) grade='C'; else if(result<90) grade='B';

else if(result<=100) grade='A';

现要将上述关系写成switch语句如下,请在下划线处填入正确内容.

switch( )

{case 6:grade='D’;break; case 7:grade='C';break; case 8:grade='B';break; case 9:

case 10:grade='A';break; ____:grade='E';}

12.假设公民交纳个人所得税的税率如下(a代表个人收入,r代表税率):

r= 0 (a<1000)

r=5% (1000<=a<2000)

r=10% ( 2000<=a<3000)

r=15% (3000<=a<4000) r=20% (a>=4000)

以下程序要求从键盘上输入个人收入,根据以上的税率计算出应付的税金并输出。请 完成该程序。

#include main()

{float a,b; . int i;

scanf(\%f\,a); if(a>=4000)i=4; else i=____; switch(i)

{case 0:b=a*0.0;break; case 1:b=a*0.05;break; case 2:b=a*0.10;break; case 3:b=a*0.15;break; case 4:b=a*0.20;break;} printf(\%f\,b);}

第六章 循环控制 单项选择题

1.有以下程序片段,请问执行后的输出结果是 int i;

11 / 45

for (i=1;;i++); printf(“%d”,i++);

A)1 B)2 C)3 D)陷入死循环,无输出结果 2.下面有关for语句的说法中,正确的是

A)任何情况下,for语句的三个表达式一个都不能少 B)for语句中的循环体至少会被执行一次

C)for语句只能用于循环次数已经确定的情况下 D)for语句中的循环体可以是复合语句 3.下面程序的输出是 main() {int y=9; for(;y>0;y--) if(y%3= =0)

{printf(“%d”,--y);continue;}}

A)741 B)852 C)963 4.请读程序:

#include main() {int a,b;

for(a=1,b=1;a<=100;a++) {if(b>=20) break;

if(b%3= =1){b+=3;continue;} b=-5;}

printf(“%d\\n”,a);} 上面程序的输出结果是

A)7 B)8 C)9 5.请读程序

#include main()

{int num=0;

while(num++<=2)

{printf(“%d\\n”,num);}} 上面程序的输出结果是

A) 1 B) 1 C) 1 2 2 2 3 4

6.执行下面程序片段的结果是 int x=0; do

{printf(“-”,x--);} while(x);

A)打印出321 B)打印出23 7.下面的程序,描述正确的是 main()

{int x=3; do

12 / 45

D)875421 D)10 D)1 3 C)打印不确定结果D)陷入死循环 {printf(“%d\\n”,x-=2);} while(!(--x));}

A)输出的是1 B)输出的是1和-2 C)输出的是3和0 D)是死循环 8.下列循环中哪一个不是无限循环

A) for(i=1;;i++) B) i=1;while(i--)

printf(“%d”,i); {printf(“%d”,i++);} C) i=1 D) for(i=0;i;i++) do printf(“%d”,i);

{printf(“%d”,i); i++;}while(--i);

9.有以下程序段:

int i,j;

for(i=0;i<5;++i) for(j=i;j<5;++j) printf(“*”);

则执行以上的程序片段后,输出‘*’个数是 A)15 B)10 C)25 D)20 10.有以下程序段:

int i,j; i=0;j=0;

while(i++<5) {j=0; do

{printf(“*”);} while(++j<4);}

则执行以上的程序片段后,输出‘*’的个数为

A)15 B)10 C)25 D)20 11.下面的程序段不能实现求阶乘8!(8!=1*2*3*4*5*6*7*8,结果存放在p中)的是 A)p=1; B)p=2;

for(i=1;i<9;i++) for(i=8;i>3;i--) p=p*i; p=p*i; C)p=1;i=1; D)p=1;i=8; while(i<9) do

p=p*i++ ; {p=p*i--;} while(i>1);

12.有下列程序段: char ch; int s=0;

for(ch=’A’;ch<’Z’;++ch) if(ch%2= =0)s++;

printf(“%d”,s);

则执行上述片段后,程序的输出结果是 A)13 B)12 C)26 D)25 13.有下面的程序:

main() {int i,n,k;

13 / 45

n=15496;k=2; for(i=1;i

printf(“%d”,n);} 则执行后的输出结果是 A)9 B)6 C)2 D)1 14.有以下程序:

main()

{int a[10]={4,3,3,4,3,8,4,2,8,3}; int i,j,b[10]; for(i=0;i<10;++i) {b[i]=0;

for(j=0;j<10;++j)

if(a[j]= =a[i])b[i]=b[i]+1;} j=0;

for(i=1;j<10;++i) if(b[i]>b[j])j+I; printf(“%d”,a[j]);}

执行程序后的输出结果是 A)8 B)4 C)3 D)2 15.语句while(!e= =0);是什么时候将会陷入死循环

A) e==0 B) e!=0 C) e!=1 D)e!= -1 16.以下程序的输出结果是 #include main()

{int i;

for(i=1;i<=5;++i)

{if(i%2) printf(“*”);

else continue;printf(“#”);}printf(“$”);} A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$ 17.有以下程序片段 int k=5;

while(k=1)k--;

执行此程序片段,则描述正确的是 A)while循环执行4次 B)循环体执行一次 C)循环体一次也不执行 D)死循环 18.下面程序的运行结果是 #include main() {int i=1;

do{i--;}while(i++); printf(“%d”,i--);}

A) -1 B) 0 C) 1 D)陷入死循环 19.以下说法中正确的是

A)continue语句的作用是结束整个循环的执行 B)break语句应出现在switch语句和循环语句中

14 / 45

C)利用goto语句可以使程序的执行从一个函数跳到另一个函数 D)循环语句中break语句不能单独出现 填空题:

1.执行下属程序片段后的输出结果为____. int a=6;

while(a--)

printf(“%d”,a--);

2.有以下程序,其功能是将从键盘上输入的小写字母转换成大写字母输出,当输入为‘#’时,结束转换,请在下划线处填上合适的语句。 #include main()

{char c; scanf(“%c”,&c); while(__c!=‘#’____) {if((c>=’a’)&&(c<=’z’)) printf(“%c”,___c-32___); scanf(“%c”,&c);} }

3.为输出入下图形,请在程序中的下划线处填入合适的内容 *

** *** * * * * * * * * * * main() {int i,j;

for(i=0;i<4;++i)

{for(j=0;j<______;j++)

print(“ ”);

for(j=0;j<______;j++) printf(“*”); printf(”\\n”);}

for(i=0;i<3;++i)

{for(j=0;j

printf(“ “); for(j=0;j<3-i;j++) printf(“*”);

printf(“\\n”);} }

4.现有已知长度为n的整型数组a,其前n-1个元素中已有数据,并且数据按从小到大的顺序排列,函数insert要完成的功能是:把任意整数i填入数组a中,并使插入数据后的数组依然保持从小到大的顺序(函数参数的意义分别是:i为需插入的数据,n为数组a的长度,a为数组名)。

insert(int i,int n,int a[ ]) { int k; k=n-1;

while((k>0)&&(______))

15 / 45

{ a[k]=a[k-1];

k=k-l;}

a[k]=______;}

11115.已知e=l++++…+,试用此公式求e的近似值,要求累加所有不小于1e-6的项值,

1!2!3!n!请在程序中下划线处填上合适内容,完成程序功能。 #include main()

{ int i; float e,n; e=1.0;i=1; n=1.0;

while(______)

{ n=1.0 / tun(i);i++;

e+=n; } } fun(int i)

{ int j,k; k=l;

for(j=1; ____;++j) k=k*j;

return(k); }

6. 下面程序可从键盘上输入一个大于0且小于1000的整数,然后输出此整数的所有整数因子。如:输入12,输出l,2,3,4,6,12。请在下划线处填上合适的内容,完成该程序。 main() {int a,k;

scanf(”%d,&a); if((a>0)&&(a<1000)) {printf(\%d\,a); for(k=1; ;++k)

if(______)printf(\%d\,k);} }

7. 现有一等差数列,已知第一项a=1,公差b=4,下面程序的功能是输出满足前n项之和小于100的n最大值,请填空完成该程序。 #include main()

{ int a=1,b=4,sum=1,n=1; while(______)

{ a=a+b; sum=sum+a; n++; } printf(\%d\,n-1); }

8.以下程序的输出结果是______。 #incude main() { int i;

for(i=0;i<=20;i=i+5) switch(i/5)

16 / 45

{case 0:printf(\;break; case 1:printf(\;break; case 2:printf(\; default:printf(\;}}

9.已知一正整数递增等差数列前5项之和为25,之积为945,根据以上条件,要求编写以下程序,输出该数列的前十项,请完成该程序。 #include main()

{ int x,y,z,i,a,b; for(x=1;x<30;x++) for(y=1;y<=5;y++) {a=0;b=1;z=x; for(i=1;______;i++)

{a=a+z;b=b*z;z=z+y;} if(a= =25&&b= =945) for(i=0;i<10;i++)

printf(\%4d\,______);} }

10. 下面程序的功能是求1到1000之间能同时被3,5,7整除的数,按每行十个数的格式输出这些数,请完成该程序。 #include main()

{ int i=1,j=0;

for(i=1;i<1000;i++)

{if(____){pfintf(\%4d\,i);j=j+1;}

if(j= =10){printf(\;j=0;} } }

11.下面程序的功能是:从键盘上输入一个五位整数,对此整数中的五个数值(即万位,千位,百位,十位,个位上的数字)进行从大到小的排序,形成一个新的五位整数,输出这个整数。如输入12435,则输出54321。请完成该程序。 #include main()

{ long int x,y; int i,a[5];

scanf(\%1d\,&x); if((x<10000)||(x>99999))

{printf(\; exit(0);}

for(i=0;i<5;++i) {a[i]=x%10; x=x/10;} fun(a); y=0;

for(i=0;i<5;++i) y=y*10+a[i]; printf(\%1d\,y);} fun(int a[])

17 / 45

{ int i,j,k; for(i=0;i<5;++i) for(j=i;j<5;++j) if(______) {______; a[i]=a[j];

a[j]=k; } }

12.下面程序的功能是求500以内的所有完全数,请填空(说明:一个数如果恰好等于它的因子(自身除外)之和,则称该数为完全数,如6=1+2+3,则6是完全数)。 #include main()

{ int i,sum,a=2; do

{i=1;sum=0; do

{if(a%i= =0)______ i++;} while(i<=a/2);

if(sum==a) printf(\%d\,______);

a++;}while(a<500); }

第七章 数组 单项选择题 1.请读程序:

#include main()

{int n[2],i,j,k;

for(i=0;i<2;i++) n[i]=0; k=2;

for(i=0;i

for(j=0;j

上面程序的输出结果是。

A)不确定的值 B)3 C)2 D)1 2.下列四个选项中,正确的数组定义是。

A)int 3a[3]; B)int i;scanf(\%d\,&i);char ch[i]; C)#define MAX l0 D)#define MAX l0.0 int a[MAX] int a[MAX]; 3.下列数组的定义中,会产生错误的是

A)int a[10]={'0','1','2','3','4','5','6','7','8','9'};

B)int a[10]={0,1,2,3,4,5,6,7,8,9}; C)char a[5]=\;

D)char a[5]={'H','e','l','l','o'};

4. 若有以下的程序,请问执行后的输出结果是。

main()

18 / 45

{ int i=0;

int a[3][3]={'0','1','2','3','4','5','6','7','8'};

for(i=0;i<3;i++) printf(\%d\,a[i][1]); }

A)50,53,56 B)49,52,55 C)2,5,8 D)1,4,7 5.阅读下列程序:

main()

{int n[3],i,j,k=2; for(i=0;i

A)字符数组中存放的一定是—个字符串 B)所有的字符数组都可以被当作字符串处理

C)对存放字符串的字符数组可以象一般数组一样对数组中的单个元素进行操作D)一个字符数组可以认为就是一个字符串 7.下列对字符串的说法中,错误的是 A)字符串就是一个字符数组 B)字符串可以整体输入输出 C)字符串可以比较大小

D)存储字符串所需的内存空间等于字符串的长度 8.有以下程序:

#include main()

{ char a[4];

scanf(\%c,%c,%c\,&a[0],&a[1],&a[2]); printf(\%s\,a); }

现若从键盘上输入abc,则输出是

A)abc B)ABC C)无特定值 D)程序出错,不能通过编译 9.已知有如下说明: int i,j;

char a[3][4][5],b[3][4][5];

现数组b已赋值,则不能将数组b中所有元素的值赋给数组a的选项是。 A) for(i=0;i<3;i++) B)for(i=2;i>=0;i--) for(j=0;j<4;j++) for(j=3;j>=0;j--)

for(k=0;k<5;k++) for(k=4;k>=0;k--)

a[i][j][k]=b[i][j][k]; a[i][j][k]=b[i][j][k]; C)for(i=0;i<3;i++) D)for(i=2;i>=0;i--) for(j=4;j>0;j--) for(j=3;j>=0;j--) for(k=0;k<5;k++) for(k=0;k<5;k++) a[i][j][k]=b[i][j][k]; a[i][j][k]=b[i][j][k]; 10.若有说明:int a[ ][4]={1,2,3,4,5,6,7,8,9},则数组第一维的大小为。 A)2 B)3 C)4 D)不确定的值

19 / 45

11 .若数组a有m列,则ali][j]之前的数组元素个数为。 A)(i-1)*(i-1) B)i*m+j+1 C)i*m+j-1 D)i*m+j 12 .下面是对数组s的初始化,其中不正确的是。 A)char s[ ]=\; B)char s[5]={1,2,3,4,5}; C)char s[5]={'a','b','c','d','e'}; D)char s[5]=\; 13 .有以下程序片段,请问执行后的输出结果是 char a[6]={'a','b','c','\\0','d','e'}; printf(\%s\,a);

A)abc B)abcde C)abcde D)出错,无输出结果 填空题

1.若有以下定义:int a[9];,则数组a元素下标的上限为______,下限为______.

2.下面的findmax函数返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空: findmax(int s[ ],int t) {int k,p;

for(p=0,k=p;ps[k])______; return k; }

3.构成数组的各个元素必须具有相同的______。 4.以下程序的输出结果为____20,2,1__。 #include main()

{ int i,j,il=0,jl=0,m;

static int s[3][3]={{101,202,303}, {28,78,38},{85,20,89} };

m=s[0][0];

for(i=0;i<3;i++) for(j=0;j<3;j++)

if(s[i][j] main()

int a[10],s,i,j=0,k=0;scanf(\%d\,&s);

while(s>-1) { a[++k]=s;scanf(\%d\,&s); } for(i=1;i<=k;i++) if(a[i]%2= =0)a[j++]=a[i]; for(i=0;i 10 5 14

-1

则程序的输出结果是______

6.有以下程序,其功能是对数组中的数据由小到大进行排序,最后输出排序后的数组内容。 请在下划线处填上正确的内容,以实现程序功能。 #include

20 / 45

main()

{ int a[10]={10,45,23,62,98,42,87,37,86,28}; int i,j,x;

for(i=0;i<10;++i) {x=a[i];

for(j=i;j<9;++j) if(a[j+1]<______) {a[i]=a[j+1];

a[j+1]=______; x=a[i]} }

for(i=0;i<10;++i) printf(“%d”,a[i]);}

7.有以下程序,其功能是将两个有序(由小到大排列)数组中的数据合并到一个数组中,要求合并后的数组依然是由小到大顺序排列,最后输出排序后数组内容。数组中以数据0表示数据的结束。请在下划线处填上正确的内容,以实现程序功能。

#include main()

{int a[20]={1,4,7,17,23,0};

int b[20]={2,6,9,10,15,24,45,72,81,92,0}; int i,j,k,c[20]; i=j=k=0;

while((a[i]!=0)&&(b[j]!=0)) { if(a[i]

{ c[k]=____; j++;} k++;} if(a[i]= =0)

while(b[j]!=0)

c[k++]=b[j++]; if(b[i]= =0)

while(a[j]!=0)

c[k++]=a[j++]; c[k]=0; }

8.下面程序将二维数组a的行和列互换后存放到数组b中,请完成该程序。

#include main()

{int a[3][3]={{1,2,3,},{4,5,6},{7,8,9}},b[3][3]; int i,j;

for(i=0;i<3;++i) for(j=0;j<3;++j) ______; }

9.以下程序的功能是求小于1000的水仙花数(所谓水仙花数是指一个三位正整数,其各位数字的立方和等于该数本身,例如:407=4*4*4+0*0*0+7*7*7,407是一个水仙花数),请完成

21 / 45

该程序。

#include main()

{int x,y,z,m,i,j; for(i=100;i<1000;++i) {j=i; x=j/100; j=____;

y=j/10; z=j%10;

m=x*x*x+y*y*y+z*z*z; if(____)printf(\%d\,i); } }

第八章 函数 单项选择题

1.下列有关函数的说法中错误的是。

A)C语言中的函数只具有static和extern两种类型 B)C语言中允许函数的递归调用

C)调用函数时,C语言要求实参与形参的个数,类型完全一致 D)C语言函数的缺省数据类型是空类型(void型) 2.请选出以下语句的输出结果。

printf(\%d\\n\,

strlen(\;

A)7 B)18 C)9 D)输出项不合法,无正常输出 3.设有以下程序片段,请问执行后的输出结果是

char a[ ]=\; printf(\%d\\n\,

strlen(strcat(a,\; A)11 B)5 C)6 D)12 4.设有如下的函数:

funl(float a) { int b; a=a+b;

printf(“%d”,a);}

则函数的返回类型是。

A)与参数a的类型相同 B)与变量b的类型相同 C)是void型 5.标准库函数fgets(s,n,f)的功能是。

A)从文件f中读取长度为n的字符串存入指针s所指向的内存

B)从文件f中读取长度为n-1的字符串存入指针s所指向的内存空间中C)从文件f中读取n个字符串存入指针s所指向的内存空间中 D)从文件f中读取n-1的字符存入指针s所指向的内存空间中

6.C语言中规定,各个函数之间。

A)允许直接递归调用也允许间接递归调用 B)不允许自接递归调用也不允许间接递归调用 C)允许直接递归调用,不允许间接递归调用 D)不允许直接递归调用,允许间接递归调用

22 / 45

D)是int型 7.下面函数的功能是 char *s(s,t)

char *s,*t; {char *p; p=s; while(*s!='\\0')s++;

while(*t!='\\0') *s++= *t++; *s='\\0'; return p; } A)求字符串的长度 B)比较两个字符串的大小

C)将字符串t接续到字符串s中 D)将字符串s接续到字符串t中 8.请读程序;

#include fune(int a,int b)

{int c; c=a+b; return c;} main()

{ int x=6,y=7,z=8,r;

r=func((x--,y++,x+y),y--); printf(\%d\\n\,r); } 上面程序的输出结果是 A) 11 B) 10 C)21 D) 31 9.请选出以下程序的输出结果。

#include fun(s,n1,n2) int *s,nl,n2;

{ int i,j,t; i=n1;j=n2; while(i

{ int a[10]={1,2,3,4,5,6,7,8,9,0}; int i,*p=a;

fun(p,0,3);fun(p,4,9);fun(p,0,9); for(i=0;i<10;i++)

printf(\%d\,*(a+i);printf(\; }

A)0,9,8,7,6,5,4,3,2,1 B)4,3,2,l,0,9,8,7,6,5 C)5,6,7,8,9,0,1,2,3,4 D)0,9,8,7,6,5,1,2,3,4 10.请选出以下程序的输出结果

#include main()

{ int a[]={1,2,3,4},i; int x=0;

for(i=0;i<4;i++)

{ x=sub(a,x);printf(\%d\,x);} printf(\; }

23 / 45

sub(s,x) int *s,x;

{ static int t=3;x=s[t];t--;return(x); } A)1234 B)4321 C)0000 D)4444 11.下面函数的功能是。 int funl(char*x)

{ char *y=x;while(*y++);return(y-x-1);} A)求字符串的长度

B)比较两个字符串的大小

C)将字符串x复制到字符串y D)将字符串x连接到字符串y后面 12.有以下程序: main()

{ int a,b;

a=5;b=8; p(a,b); p(a+b,a); p(a/b,b);}

p(int x,int y) { y=x+y;

printf(\%d,%d\\n\,x,y); }

则执行上述程序后的输出是。

A)5,13 B)5,13 C)5,13 D)5,13 13,18 18,5 18,5 18,23 0,8 1,13 1,14 1,13 13.有函数如下: f (int a)

{ int n,d;n=0;d=2*a; while(d>=a)

{d=d%3;n=n+1;} return(n);}

设a,b,c均为整型变量,下面的程序段在调用函数f时会出现死循环的是

A)b=100;c=2*(f(b)+5); B)for(b=1;b<6;++b)

if(f(b)>3)c=f(b*b);

C)b=1 D)b=2;

do while(f(b)>3) {b=b+1;} b=f(b*b)+f(b); while(f(b)>3);

14. 下面程序正确的输出结果是 main() .

{ int x,y,z; x=5;y=7;z=4; p(7,x+y+z,&x);

printf(\%d,%d,%d\,x,y,z);} p(int x,int y,int *z)

{ *z=y-x-*z; }

A)7,7,4 B)5,7,-2 C)5,7,4 D)4,7,4

24 / 45

16. C语言中,形参的缺省存储类别是。

A)自动(auto) B)寄存器(register) C)外部(extern) D)静态(static)

填空题

1.设有下列程序: #include #include main()

{ int i; char str[10],temp[10]; gets(temp); for(i=0;i<4;i++)

{ gets(str);if(stcmp(temp,str)<0) strcpy(temp,str); }

printf(\%s\\n\,temp);}

上述程序运行后,如果从键盘上输入(在此代表回车键) C++ BASIC QuickC Ada Pascal

则程序的输出结果为____。 2. 设有以下程序:

#include main(argc,argv) int argc; char *argv;

{ while(--argc>0) printf(\%s\,argv[argc]); printf(\; }

假定上述程序经编译和链接后生成可执行文件PROG.EXE,如果在DOS提示符下键入PROG ABCD EFGH IJKL则输出结果为____。 3. 设有如下程序: #include main(argc,argv) int argc;

char *argv[ ]; { FILE *fP; void fc(); int i;

while(--argc>0)

if((fp=fopen(argv[i++],\

{ printf(\; exit(1);} else

{ fc(fP);fclose(fp); } } void fc(ifp) FILE *ifp; { char c;

while((c=getc(ifp))!='#')

25 / 45

putchar(c-32); }

上述程序经编译、链接后生成的可执行文件名为cpy.exe,假定磁盘上有三个文本文 件,其文件名和内容分别为:

文件名 内容 a aaaa# b bbbb# c cccc#

如果在DOS下键人cpy a b c则程序输出为____。 4. 下面程序的输出结果是____。 #include fun(int x) { int p;

if(x= =0)||(x= =1))return(3); p=x-fun(x-2); return p;} main()

{ printf(\%d\\n\,fun(9)); } 5. 下面程序的输出结果是____ #include funa(int a,int b)

{ return a+b } funb(int a,int b)

{ return a-b; } sub(int(*t)(),int x,int y)

{ return((*t)(x,y)); } main()

{ int x,(*p)(); p=funa;

x=sub(p,9,3); x+=sub(funb,8,3); printf(“%d\\n”,x);} 6. 请读程序

#include main(int argc,char *argv[]) int i;

printf(\%d,\,argc);

for(i=0;i<=argc-1;i++) printf(\%s\,argv[i]); printf(\; }

若上面的程序执行后的输出结果是____。

7. 下面invert函数的功能是将一个字符串str中的字符顺序颠倒过来,请填空。 #include void invert(char str[]) { int i,j,____;

for(i=0,j=strlen(str),____;i

8. 下面pi函数的功能是根据以下的公式,返回满足精度e要求的值,请填空。

26 / 45

π/2=1+1/3+1/3*(2/5)+1/3*(2/5)*(3/7)+…… double pi(double eps)

{ double s=1.0,t=1.0; int n;

for(____;t>eps;n++) { s+=t;

t=n*t/(2*n+1);} return(2.0*____); }

9. 以下程序的功能是:从学生成绩数据文件data.dat中读取每个学生的成绩,统计最高 成绩和最低成绩,当遇到成绩为负数是,结束统计并输出最高成绩和最低成绩。请填空。

#include main()

{ FILE *fp;

float i,max,min;

if((fp=fopen(\.dat\ { printf(\; exit(0); }

fscanf(fp,\%f\,&i); while(____)

{ if(____)max=i; if(i

printf(\%f,%f\,max,min); }

10. 若有以下程序片段: #include main()

{ int a[10];

sub(a);}

其中函数sub的类型为void型,则定义函数sub时,其首部定义可以有以下三种形式____,____,____。(形参的名字请用p)

11. 以下程序的功能是:从键盘上输入10个数值并存储在数组a中,调用函数findmax求数组中的最大值并输出。请在下划线处填上合适的语句,完成函数功能。 #include main()

{ int a[10],i,j; for(i=0;i<10;++i) scanf(\%d\,&a[i]);

findmax(a,10,____); printf(\%d\,a[j]); } findmax(s,t,k) int * s,t,* k; { int p;

for(p=0,*k=P;Ps[*k])____;

12. 孪生素数是指两个相差为2的素数。例如:3和5,5和7,11和13等,下面的程序可输出15对孪生素数,请填空。其中函数isprime的功能是判断整数a是否为素数。 #include

27 / 45

main()

{ int k,n; n=0;k=2; do

{if(isprime(k)&&____) { n=n+1;

printf(\%d,%d\,k,k+2);} k=k+l;}

while(n<15);} isprime(int a) { int k,j; j=1; k=2;

while((k<=a/2)&&j) { if(____) j=0

else k=k+1; }

return(j); }

13. 函数judge的功能是判断方阵,是否关于主对角线对称,若对称则返回1,否则返回0。 函数参数的意义是:n为矩阵的阶数,a为存储矩阵元素数据的数组名。请在程序中下划线处填上合适内容。

judge(int n,int * *a); { int i,j;

for(i=0;i

第九章 预处理命令 单项选择题

1. 请选出以下程序段的输出结果。 #include

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

{ int i,j,k; i=10;j=15;

k=10*MIN(i,j);

printf(\%d\\n:,k); } A)15 B)100 C)10 D)150 2. 以下程序,执行后的输出结果是。 #include · #define PI 3 main()

{ printf(\%d,\,funl()); printf(\%d\; }

28 / 45

funl()

{ int i; i=PI*PI;return i; }

#undef PI

fun2()

{ int i; i=PI*PI*PI; return i; }

A)9,27 B)9 27

C)程序出错,无法通过编译、链接 D)死机 3. 以下程序,执行后的输出结果是。 #include #define P 2

#define POWER(x) P*x*x main()

{ int x=1,y=2;

printf(\%d,%d\,POWER(x+y), POWER(y+x));} A)18,18 B)6,7 C)6,6 D)7,7 4. 以下程序执行后的输出结果是。 #include #define P 2

#define POWER(x) P*(x)*(x) main()

{ int x=l,y=2;

printf(\%d,%d\,POWER(x+y), POWER(y+x)); }

A)18,18 B)6,7 C)6,6 D)7,7 5. 有以下程序:

#include

#define MAX(x,y) ((x>y)?(x):(y)) main()

{short int a,b; float i,j;

scanf(\%hd,%hd\,&b); scanf(\%f,%f,&i,&j);

printf(\%d,%d\,sizeof(MAX(a,b)),sizeof(MAX(i,j))); } 若从键盘上输入1,2,1.0,2.0,则程序执行后的输出结果是。 A)4,4 B)2,2 C)2,4 D)程序出错6. 请读程序:

#include

#define SUB(X,Y) (X)*Y main()

{ int a=3,b=4;

printf(\%d\\n\,SUB(a+b,b++)); } 上面程序的输出结果是。 A)12 B)15 C)16 D)28

29 / 45

7. 有以下程序:

#include

#define FUN(x,y) x*y main()

{ int a=1,b=2;

printf(\%d\,FUN(a+b,a-b)); } 则执行后的输出结果为 A) -3 B)1 C) -1 D)0 8. 以下程序的运行结果是。

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

{ int a=1,b=2,c; c=10*MIN(a,b); printf(\%d\,c); } A)1 B)10 C) 2 D)20 9. 有关宏定义的叙述中不正确的是。 A)宏替换不占用运行时间 B)宏名无类型

C)宏替换就是简单的字符替换 D)可以在一行中定义多个宏 10. 有以下程序:

#include

#define MUL(x,y) (x)*y main()

{ int a=4,b=3;

printf(\%d\,MUL(a+b,a-b));} 其输出结果为。 A)13 B)7 C)25 11. 以下程序的输出结果为。 #include #define F(y) 3.84+y

#define PR(a) printf(\%d\,(int)(a))

#define PRINT(a) PR(a);putchar('\\n'); main()

{ int x=2;

PRINT(F(3)*x); } A)8 B)9 C)10 D)11 填空题

1. 下面程序的运行结果是____。

#define MAX(a,b,c) ((a)>(b)?((a)>(c)?(a):(c)):((b)>(c)?(b):(c))) main()

{int x,y,z; x=1;y=2;z=3;

printf(\%d,\,MAX(x,y,z));

printf(\%d,\,MAX(x+y,y,y+x)); printf(\%d\,MAX(x,y+z,z)); } 2. 下面程序运行结果是____.

#define SELECT(a,b) a

30 / 45

main()

{ int m=2,n=4;

printf(\%d\,SELECT(m,n)); } 3. 下面程序的运行结果是____。 #define PR(ar) printf(\%d\,ar) main()

{ int j,a[]={1,3,5,7,9,11,13,15},i=5; for(j=3;j;j- -) {switch(j) { case 1:

case 2:PR(a[i++]);break; case 3:PR(a[- -i]); } } } 4. 以下程序的运行结果是____

#define A 4

#define B(x) A*x/2 main()

{ float c,a=4.5; c=B(a);

printf(“%5.1f”,c); }

第十章 指针 单项选择题

1. 下面各语句行中,能正确进行赋字符串操作的是

A) char st[4][5]={“ABCDE”}; B) char s[5]={‘A’,’B’,’C’,’D’,’E’};

C) char *s;s=”ABCDE”; D) char *s;scanf(“%s”,s); 2. 设有说明:char *str[10];则标识符str的意义是。 A)str是一个指向有10个元素的数组的指针

B)str是一个有10个元素的数组,数组元素的数据类型是指向char型的指针型 C)str是一个指向char型函数的指针

D)str是具有10个指针元素的…维指针数组,每个元素都只能指向整型变量 3. 设有以下程序: #include main()

{int a[9]={1,2,3,4,5,6,7,8,9},*p; p=a;

printf(\%d\,p);

printf(\%x\,p+5); }

执行此程序,如果第一个printf语句输出值是200,则第二个printf语句的输出是 A)210 B)205 C)D2 D)195

4. 若有以下说明和语句,则对a数组元素的正确引用的选项是。 int a[4][5],(*p)[5]; p=a;

A)p+1 B) *(p+3) C) *(p+1)+3 D) *(*p+2) 5. 若有下面的程序片段:

int a[12]={0},*p[3],* *pp,i; for(i=0;i<3;i++)

31 / 45

p[i]=&a[i*4]; pp=p;

则对数组元素的错误引用是。 A)pp[0][11] B)a[10] C)p[3][1] D)*(*(p+2))+2)

6. 以下程序段的功能是给数组所有的元素输入数据,则应在程序横线填上的选项是。 #include main()

{ int a[10],i=0;

while(i<10) scanf(\%d\; } A)a+(i++) B)&a[i+1] C)a+i D)&a[++i] 7. 请读程序:

#include #include main()

{ char *s1=\,*s2=\; s1++;s2++; printf(\%d\\n\,strcmp(s1,s2));} 上面程序的输出结果是 A)正数 B)负数 C)零 D)不确定的数 8. 设有以下程序片段: char a[ ]=\,*p;

p=a;printf(\%d\,*(p+5));

执行上面的程序片段后的结果为 A) 111 B) 0 C) 104 D) 不确定的值 9. 设有以下程序:

#inlude main()

{int * *k,*j,i=100;

j=&i;k=&j;

printf(“%d”, * *k);} 上述程序的输出结果是 A)运行错误 B)100 C) i的地址 D)j的地址

10. 若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元,则应填入。 int *p;

p=____malloe(sizeof(int));

A)int B)int * C)(*int) D)(int *) 11. 下面程序的输出结果是 void prtv(int *x)

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

{ int a=25; prtv(&a); } A)23 B)24 C)25 D)26 12. 若有以下程序片段,请问执行后的输出结果是。 int * * pp,*p,a=10; p=&a;pp=&p; printf(\%d',* *pp); A)10 B)P的地址 C)a的地址 D)pp的地址

32 / 45

13. 若有以下定义:

char s[10]=\,*p=s; 则不能代表字符u的表达式是。 A)s[4] B)s+4 C)*(p+4) D)p+=4,*p; 14. 若有以下定义:

iht a[ ]={1,2,3,4,5,6,7,8,9},*p=a; 则值为5的表达式是。 A)p+=4,*(p++) B)p+=4,*++p C)p+=5,*p++ D)p+=4,++*p

15. 若有以下定义,则对数组元素地址的正确引用是。 int a[5]={1,2,3,4,5},*p,i; i=3;p=a; A)&p B)a++ C)&(p+1) D)&p[i] 16. 有以下程序片段,执行后a的值为 int a=10,* p,* * pp;

p=&a;pp=&p;a=**pp+10; A)20 B)10 C)30 D)无确定值 17. 设有以下程序片段:

char s[ ]=\;char *p; p=s;

则执行完上面的程序段后,*(p+8)的值为。 A)'!' B)'\\0' C)'m' D)不定值 18. 有以下程序,请问执行后的输出结果是。 #include main()

{ int a[]={1,2,3,4,5,6},*p; p=a;*(p+3)+=2;

printf(\%d,%d\,*p,a[3]); } A)1,4 B)0,4 C)1,6 D)0,6 19. 有以下程序片段:

int a[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[3],i;for(i=0;i<3;i++) p[i]=&a[i*4];

printf(“%d”,*(p[2]+1)); 则输出结果为 A) 9 B) 5 C) 10 D) 6 填空题

1. 下列程序的输出结果是____。 #include main()

{char a[10]=\,*p; p=&a[4]; puts(p); } 2. 下列程序的输出结果是____。 #include main()

33 / 45

{ char *p[ ]={\,\,\,\; int i;

for(i=3;i>=0;i--,i--)

printf(\%c\,*p[i]);printf(\;}

3. 若有以下定义和语句,则通过指针p对值为8的数组元素的引用的表达式是____ int a[10]={1,2,3,4,5,6,7,8,9},*p; p=&a[1];

4. c语言的数组名是一个____常量,不能对它进行加减和赋值等运算。 5. 以下程序的输出结果是____。 #include main()

{ int a[20],*p[5],i; for(i=0;i<19;++i) a[i]=i; for(i=0;i<5;++i) p[i]=&a[i*4]; for(i=0;i<5;++i)

printf(\%d\,*(p[i]+1)); } 6. 以下程序的输出结果是____。 #include main()

{ char *p[4]={\,\,\,\; char * *pp; int i;pp=p; for(i=1;i<3;++i)

printf(\%s\,*(pp+i));}

7. 以下程序片段的输出结果为____。

char *s=\; printf(“%d”,strlen(s));

第十一章 结构体与共同体 单项选择题

1. 设有如下枚举类型定义:enum color {red=1,black,white=10,green=100,blue};则枚举量blue的值为

A)5 B)3 C)101 D)11 2. 下面程序的输出结果是 struct st

{ int x; int *y; }; int dt[4]={10,20,30,40};

struct st *p,aa[4]={50,&dt[0], 60,&dt[1], 70,&dt[2], 80,&dt[3]}; main()

{ p=aa;

printf(\%d\\n\,++p→x) printf(\%d\\n\→x);

printf(\%d\\n\,++(*p→y)); }

34 / 45

A)10 B)50 C)51 D)60 20 60 60 70 20 21 2l 31 3. 下面程序的输出是。 main()

{ struct cmplx{int x;int y;} cnum[2]={1,3,2,7};

printf(\%d\\n\,cnum[0].y/cnum[0]. x*cnum[1].x); } A)0 B)1 C)3 D)6 4. 下面程序的输出是。 typedef union {long x[2]; int y[4]; char z[8]; }MYTYPE; MYTYPE them; main()

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

A)32 B)16 C)8 D)24 5. 以下对C语言中联合体类型数据的叙述正确的是。 A)可以对联合体变量直接赋值

B)一个联合体变量中可以同时存放其所有成员 C)一个联合体变量中不能同时存放其所有成员

D)联合体类型定义中不能同时出现结构体类型的成员 6. 下列表达式中正确的是。 A)struct person

{int age; char name[8];char sex;}personl,person2;

B)struct person

{int age; char name[8]; char sex;} person personl,person2; C)struct person

{int age;char name[8];char sex;};personl,person2; D)struct person

{int age;chat name[8]=\;char sex=\;} person1 7. 以下程序的运行结果为。 #include main()

{struct date

{int year,month,day;}today; printf(\%d\\n\,sizeof(struct date));} A)6 B)8 C)10 D)12

8. 下列语句中可以完成建立2结点的单向链表的功能的选项是。 A)head→next=new;new→next=head; B)new→next=head;head=new;

C)new→next=head;head=new;new→next=Null;

D)head→next=Null;head→next=new;new→next=NULL; 9. 以下对结构体变量stul中成员age的非法引用是

35 / 45

struct st

{int age;int num;}stul,*p; p=&stul;

A) stul.age B) age C) p→age D) (*p).age 10. 再定义一个结构体变量时,系统分配给它的内存是 A)结构体中第一个成员所需内存量

B)结构体中最后一个成员所需内存量 C)成员中占内存量最大者所需内存量 D)各成员所需内存量的总和

11. 定义一个联合体变量时,系统分配给它的内存是。 A)联合体中第一个成员所需内存量 B)联合体中最后一个成员所需内存量 C)成员中占内存量最大者所需的容量 D)各成员所需内存量的总和

12. 关于联合体,下面叙述不正确的是

A)联合体变量中成员项共用同一存储空间,因此,联合体变量的地址和每一个成员项的

地址是同一地址

B)联合体变量中成员项所占存储空间量不同,因此,联合体中每一个成员项的地址不是同一地址

C)C语言规定不能对联合体变量赋值;也不能通过直接引用变量名来得到成员项,这与

结构体是相同的

D)不允许将联合体变量作为函数参数,也不允许用联合体变量作为函数的返回值 13. 设有以下结构体定义: struct emproyer

{char name[8];int age;char sex;}staff; 则下面的叙述不正确的是

A)struct是结构体类型的关键字

B)struct emproyer是用户定义的结构体类型 C)staff是用户定义的结构体类型名 D)nameage和sex都是结构体成员名 14. 下面程序的运行结果是。 main()

{struct cmplx

{int x;int y;}cnum[2]={l,3,2,7}; printf(\%d\\n\,cnum[0].y/cnum[0].x*cnum[1].x);} A)0 B)1 C)3 D)6 15. 根据下面的定义,能打印出字母“M”的语句是。

struct person

{char name[9];int age;};

struct person class[10]={\,17,

\,19,\,18,\,16 }; A)printf(\%c\\n\,class[3].name ); B)printf(\%c\\n\,class[3].name[l]); C)Printf(\%c\\n\,class[2].name[l]); D)printf(\%c\\n\,class[2].name[0]); 16. 若有以下定义和语句:

36 / 45

struct student

{int num ;int age;};

struct student stu[3]={{l001,20},{1002,19},{1003,2l}}; main()

{struct student *p;p=stu; ... } 则下列引用中不正确的是。 A) (p++)→num B) p++ C) (*p).num D) p=&stu.age 17. 设有一联合体变量定义如下: union data

{long w;float x;int y;char z;}; union data beta;

执行下面赋值语句后,正确的联合体变量beta的值是。 beta.w=123321;beta.y=88;beta.x=99.9;beta.z='A'; A)123321 B)88 C)99.9 D) 'A' 18. 以下程序的运行结果是。

typedef union {long a[2];int b[4];char c[8];}TY; TY our; main()

{printf(\%d\\n\,sizeof(our)); } A)32 B)16 C)8 D)24 19. 下面程序的输出是。 main()

{enum team {my,your=4,his,her=his+10}; printf(\%d%d%d%d\\n\,my,your,his,her);} A)0 1 2 3 B)0 4 0 10 C)0 4 5 15 D)l 4 5 15 填空题

1. 结构体作为一种数据构造类型,在c语言中必须经过“______”的过程。

2. 定义结构体变量名表可以在定义结构体时直接进行,常用的定义结构体变量名表的方法是______。

3. 引用结构体变量中成员的一般形式是______。

4. 设已定义P为指向某一结构体类型的指针,如引用其成员可以写成______,也可以写成 ______。

5. 结构体类型是建立动态数据结构的非常有用的工具,在构造链表时必须在结构体类型定义中包含______。

6. 将字符串转换成整数函数是______;将字符串转换成实数函数是______;将字符串转换成长整数函数是______。

7. 以下程序用以输出结构体变量bt所占内存单元的字节数,请在空白处填上适当内容。 struct ps

{double i;char arr[20]; }; main()

{struct ps bt;printf(\:%d\\n\,______);}

8. 以下程序的功能是按学生姓名查询其排名和平均成绩,查询可连续进行,直到键入0时结束,请在空白处填入正确内容。 #include #include #define NUM 4

37 / 45

struct student

{ int rank;char * name;float score; }; ______stu[ ]={3,\,98.3, 4,\,78.2, l,\,95.1, 2,\,90.6, }; main()

{char str[10]; int i;

do { printf(\:\; scanf(\%s\,str); for(i=0;i

{printf(\:%8s\\n\,stu[i].name); printf(\:%3s\\n\,stu[i].rank);

printf(\:%5.1f\\n\,stu[i].score); ______; }

if(i>=NUM)printf(\; } while(strcmp(str,\;}

9. 已知head指向单链表的第一个结点,以下函数del完成从单向链表中删除值为num的第一个结点。请在空白处填入正确内容。 #include struct student

{int info; struct student * link;};

struct student *del(struct student *head,int num) {struct student pl,*p2; if(head= =NULL)

printf(\; else

{ p1=head; while(______)

{p2=p1;p1=p1→link;} if(num= =p1→info) { if(p1= =head)______; else______;

printf(\:%d\\n\,num);}

else printf(\%d not been found!\\n\,num);} return(head);}

第十二章 位运算 单项选择题

1. a为0111,b为0123,a、b、c均为无符号短整型变量,则语句printf(\%o,%o,%o,%o\,c=~a,c=a&b,c=a|b,c=a∧b)的输出结果为 A)177666,101,133,32 B)0177666,0123,0333,032 C)0177666,0101,0133,032 D)177666,0123,0133,034

38 / 45

2. 以下运算符优先级最低的是__,优先级最高的是 __ A)&& B)& C) || D)| 3. 表达式a

A)操作数*2 B)操作数/2 C)操作数*4 D)操作数/4 5. 设有以下程序: #include main()

{int nl,n2;n1=0123;n2=0234;

printf(\%o,%o,%o,%o\\n\,~ n1,nl&n2,n1|n2,n1∧n2); }

该程序运行后结果为。

A)0176654,020,0337,0317 B)177654,20,357,317 C)177654,20,337,317 D)176654,20,357,317 6. 设有以下程序: #include main()

{unsigned short u;short n; u=0123;n=-72;

printf(\%o,%o,%d,%d\\n\,u<<2,u>>3,n<<2,n>>3); } 该程序运行结果为

A)514,12,-228,-9 B)515,12,-238,-9 C)514,21,-228,-8 D)515,21,-228,-8 7. 设有以下程序: #include main()

{unsigned short nl,n2,n3,n4,n5,a,b; n1=n2=n3=n4=n5=a=100;b=5;

printf(\%d,%d,%d,%d,%d\\n\,n1&b,n2|b,n3∧b,n4<>b); 该程序运行后结果为。

A)100,100,97,320,3 B)5,101,97,3200,3 C)100,101,97,3200,3 D)4,101,97,3200,3 8. 下面程序的输出是。 main()

{char x=040;printf(\%d\\n\;} A)100 B)160 C)120 D)64 填空题

1. 测试char型变量a第6位是否为1的表达式为(设最右位为第1位)______。 2. 在c语言中,&的含义有______和______。

3. 设x为16bit整数,若要通过x|y使x低8位置1,高8位不变,则y的八进制数是______. 4. 设二进制数x的值是11001101,通过x&y运算使x中的低4位不变,高4位清零,则y的二进制数是______。

5. 下面的程序是实现左右循环移动,当输入位移的位数是一正整数时,循环右移,输入一负整数时循环左移,请填空。 main()

39 / 45

{ unsigned a; int n;

printf(\请输入一个八进制数:\; scanf(\%o\,&a);

printf(\请输入位移的位数:\; scanf(\%d\,&n); if(______)

{ moveright(a,n);

printf(\循环右移的结果为:%d\,moveright(a,n));} else if(______)

{moveleft(a,-1*n);

printf(\循环左移的结果为:%d\,moveleft(a,-1*n));} } moveright(unsigned value,int n) { unsigned z;

z=(value>>n);(value<<(16-n)); return (z);}

moveleft(unsigned value,int n) {unsigned z; ______; return(z);}

6. 把int类型变量low中的低字节及变量hign中的高字节放入s中的表达式为______。 7. 下面程序的运行结果是______。 main()

{unsigned a=0112,x,y,z; x=a>>3;printf(\%o,\,x); y=(0<<4);printf(\%o,\,y); z=x&y;printf(\%o\\n\,z); }

第十三章 文件 单项选择题

1. 系统的标准输入文件是指。 A)键盘 B)显示器 C)软盘 D)硬盘 2. fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是。 A)只写 B)追加 C)读或读写 D)B与C正确 3. 关于fseek函数,以下有关操作的叙述不正确的是。 A)可以改变文件的位置指针 B)可以实现文件的顺序读写

C)可以实现文件的随机读写 D)只可以顺序定位文件的位置指针 4. 函数ftell的作用是。

A)取得当前文件指针的位置,该位置为相对于文件开头的位移量表示 B)取得当前文件指针的位置,该位置为相对于文件末尾的位移量表示 C)出错时返回值为0 D)以上叙述都不正确 5. 函数rewind的作用是

A)使位置指针指向文件的末尾

B)将位置指针指向文件中所要求的特定位置 C)使位置指针重新返回文件的开头

D)使位置指针自动移到下一个字符位置

40 / 45

6. 若以\方式打开一个已存在的文件,则以下叙述正确的是。

A)文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加和修改操作 B)文件打开时,原有文件内容不被删除,位置指针移到文件开头,可作重写和读写操作 C)文件打开时,原有文件内容被删除,只可作写操作 D)以上叙述皆不正确

7. 以读写方式打开一个已有的文件filel,下面有关fopen函数正确的调用方式是。 A)FILE *fp B)FILE *fp

fP=fopen(\,\ fp=foden(\,\ C)FILE *fp D)FILE *fp

fp=fopen(\,\ fp=fopen(\,\8. 阅读以下程序及对程序功能的描述,其中正确的描述是。 #include main()

{ FILE *in,*out;

char c,infile[10],outfile[10]; printf(\:\\n\; scanf(\%s\,infile);

printf(\:\\n\; scanf(\%s\,outfile);

if((in=fopen(infile,\ { printf(\; exit(0); }

if((out=fopen(outfile,\ {printf(\; exit(0); }

while((c=fgetc(in))!=EOF) fputc(c,out); fclose(in); fclose(out); }

A)程序完成将两个磁盘文件合二为一的功能

B)程序完成将磁盘文件的信息在屏幕上显示的功能

C)程序完成将一个磁盘文件复制到另一个磁盘文件中的功能 D)程序完成将两个磁盘文件合并且在屏幕上输出的功能 9. 以下read函数的调用形式中,参数类型正确的是。 A)read(int fd,char *buf,int count) B)read(int *buf,int fd,int count) C)read(int fd,int count,char *buf) D)read(int count,char *buf,int fd) 填空题

1. C语言中文件按外部设备可分为______和______文件。

2. C语言程序中的文件存取方式可以是______,也可以是______。 3. C语言程序中,可以用____和____两种代码形式存放数据。 4. C语言中文件按系统对文件的处理方法可分为____和____文件。 5. 在C语言中输入输出设备均作为文件进行处理,常把常用的外部设备作为标准设备文件来处理,它们是:____,____和____。这些标准设备所对应的三个标准设备文件是:____,

41 / 45

____和____。

6. 设有以下结构体类型: struct st

{char name[6] int num; float s[4]; }student[40];

并且结构体数组student中的元素都已有初值,语句fwrite(student,____,1,fp)将这些元素写到硬盘文件fP中。

7. 读下面程序,从一个二进制文件中读人结构体数据,并把结构体数据显示在终端屏幕 #include struct rec

{int num; float total; } main()

{FILE *fp;

fp=fopen(\.dat\; reout(fp); ____; } reout(____)

{struct rec r; while(!feof(fp))

{fread(&r,____,1,fp);

printf(\%d,%f\\n\,____,____); } }

8. 以下程序的功能是显示磁盘文件内容的十六进制代码和对应的字符,若代码对应的字符是非显示字符时则显示“.”。请在空白处填人适当的内容。 #include\.h\

main(int argc,char *argv[]) {char letter[17]; int c,i,cnt; FILE *fp; if(____)

{puts(\:dumpf filename\; exit();}

if(fp=fopen(argv[1],\

{printf(\%s can't opened\\n\,argv[1]); exit(); } cnt=0;

do { i=0; printf(\%06x:\,cnt *16); while((c=getc(fp))!=EOF) {printf(\%02x\,c);

if(c<\; else letter[i]=c; if(++i= =16)break;} letter[i]='0'; if(i!=16)

for(;j<16;i++) {printf(\;

printf(\%s\\n\,____); ____ ;}

42 / 45

} while(c!=EOF); fclose(fp);}

9. feof(fP)函数用来判断文件是否结束,如果遇到文件结束,函数值为____,否则为____。

习题参考答案

第一、二章 参考答案 单项选择题

1. C 2. D 3. B 4. D 5. A 6.D 7.D 8.C 9.A 填空题

1. 语句序列 2. 程序设计语言3. 源程序 4. C 5. 中间代码文件(目标文件) 6. 连接 7. 37,9

8. 主函数 9.按某种条件 10.单分支结构 11. 直到型循环 第三章 参考答案 单项选择题

1.A 2.D 3.B 4.C 5.C 6.C 7.A 8.B 9.D 10.D 11.B 12.D 13.D 14.C 15.A 16.C 17.A 18.A 19.D 20.C 21.D 22.A 填空题

1.sin(x)*sin(x)*(a+b) / (a-b) 2.1

3.整型常量 实型常量 字符常量 字符串常量 符号常量和枚举常量 4.整型 实型 字符型 枚举类型 5.G 6.0~65535 7.4.0

8.(m%10)*100+m/100*10+m%100/10 第四章 参考答案 单项选择题

1. B 2. D 3. D 4. B 5. A 6. C 7. C 8. B 9. A 10. C 11. B 12. D 填空题

1. #include \,h\ 或 #include 2. %1x 3. %1e 4. %g 5. 字符串常量 6. ;

7. 发出频率为1200赫兹的鸣笛声 8. 0~888之间的 9. f2= -1.0,fabs(f2)>f1=1 10. 64,A,102,43 第五章 参考答案 单项选择题

1. D 2. B 3. D 4. A 5. A 6. B 7. A 8. A 9. A 10. A 11.B 12.C 13.B 14.B 15.C 16.B 17.B 18.C 填空题

1.1234 2. 14 3.ABBB

4.668977 5.x%2= =0 6.(x= =z)||(y= =z)

7.0 8.c break 9.x>y y>z x>z 10.(x%4= =0&&x%100!=0) i=0

11.result%10 default 12.a/1000

43 / 45

第六章 参考答案 单项选择题

1.D 2. D 3.B 4.B 5.A 6.C 7. B 8.D 9.A 10.D 11.B 12.A 13.B 14.B 15. B 16. A 17. D 18.C 19.B 填空题

1. 531 2. c!='#' c-32

3. 4-i i 4.a[k-1]>i i

5. n>=1.0e-6 j<=i 6. k<=a (a%k)= =0 7. sum<100 8. *#&@@@ 9. i<=5 x+i*y

10.i%3= =0&&i%5= =0&&i%7= =0 11.a[j]

1.A 2.C 3.C 4.B 5.D 6.C 7.D 8.C 9.C 10. B 11.D 12.D 13.A 填空题

1.8 0 2.k=p 3.数据类型

4.20,2,1 5.口口10口口14 6.x 8.b[j][i]=a[i][j] 9.i0 m= =i 第八章 参考答案 单项选择题

1.D 2.A 3.A 4.D 5.B 6.A 7.C

8.C 9.C 10.C 11.A 12.A 13.B 14.D 15.A 填空题

1. QuickC 2. IJKLEFGHABCD

3. AAAABBBBCCCC 4. 7 5. 17 6. 3,abc file1 file2 7. k k=str[0] 8. n=1 s 9. i>=0 i>max 10. void sub(p) int *p; void sub(p) int p[ ] void sub(p) int p[10]

11. &j *k=p 12. isprime(k+2) a%k= =0 13. a[i][j]!=a[j][i] return1; 第九章 参考答案 单项选择题

1.A 2.C 3.B 4.A 5.C 6.D 7.B 8.C 9.D 10.C 11.B 填空题

1. 3,3,5 2. 2 3. 9911 4. 9.0 第十章 参考答案 单项选择题

1.C 2.B 3.C 4.D 5.C 6.A 7.A 8.B 44 / 45

x 7.a[i] b[j]

9.B 10.D 11.D 12.A 13.B 14.A 15.D 16.A 17.B 18.C 19.C 填空题

1. 56789 2. SO 3. *(p+6) 4. 指针(或地址) 5. 1591317 6. efghijkl 7. 10 第十一章 参考答案 单项选择题

1.C 2.C 3.D 4.C 5.C 6.A 7.A 8.B 9. B 10.D 11.C 12.B 13.C 14.D 15.D 16.D 17.D 18.C 19.C 填空题

1.定义—初始化—引用 2.struct结构体类型名{ } 结构体变量名表 3.结构体变量名.成员名 4.p→成员名,(*p).成员名(顺序不限) 5.指向同种结构体类型的指针变量(叙述不唯一) 6.atoi() atof() ato1() 7.sizeof(srtuct ps) 8.struct student strcmp(str,stu[i].name) break

9. (num!=p1→info)&&(p1→link!=NULL) head=p1→link p2→link=p1→link 第十二章 参考答案 单项选择题

1.A 2.C B 3.D 4.C 5.C 6.A 7.D 8.D 填空题

1.a&0x20 2.取地址 位与运算 3.0377 4.00001111 5.n>0 n<0 z=(value<>(16-n)) 6.s=high&0xff00 | low&0x00ff (表达式形式不唯一) 7.x=11,y=17,z=11 第十三章 参考答案 单项选择题

1.A 2.C 3.D 4.A 5. C 6.A 7.B 8.C 9.A 填空题

1.设备文件 磁盘文件 2.顺序文件 随机文件 3.二进制文件 文本文件 4.缓冲文件 非缓冲文件 5.键盘 显示器 打印机 鼠标 stdin stdout stderr 6.40 * sizeof(struct st)

7.fclose(fp) FILE * fp sizeof(struet rec) r.num r.total 8.argc!=2 letter cnt++ 9.非零值 0

45 / 45