C语言课堂练习习题集

更新时间:2024-01-04 18:30:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《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语言源程序中要求每行只能书写一条语句

1

C、 C语言源程序中,注释可以出现在任何位置 D、 最小的C源程序中没有任何内容

9、对C语言源程序执行过程描述正确的是( )。 A、 从main() 函数开始执行,到main()函数结束 B、 从程序的第一个函数开始执行,到最后一个函数结束 C、 从main函数开始执行,到源程序的最后一个函数结束 D、 从第一个函数开始执行,到main函数结束。 填空题

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

2

3. 高级语言编写的程序称为____。

4. 用C语言编写的源程序简称为“C程序”,扩展名规定为“____”。

5. C程序经过“编译”后将获得扩展名为“OBJ”的____。 6. C程序经过编译后获得的中间代码文件还需要经过____,才能成为可执行的“程序”, 目标程序的扩展名规定为\。 7、ANSI C标准中共规定了 个关键字, 条控制语句。

8、一个执行的C语言源程序至少应包含一个 。 9. 选择结构是____选择某个操作来执行的—种程序结构。 10. 选择结构可以分为____、双分支结构和多分支结构。 11. 循环结构又可分为当型循环、____及次数型循环。

第三章 数据类型、运算符与表达式 单项选择题

1. 以下程序的输出结果是 。 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

3. 设ch是char型变量,其值为'a',且有下面的表达式: ch=(ch>='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 \\?”的长度为。

3

A)4 B)10 C)5 D)说明不合法 6. C语言中最基本的数据类型包括。

A)整型,实型,逻辑型 B)整型,实型,布尔型 C)整型,实型,字符型 D)整型,实型,指针型 7. C浯言中的构造类型包括。

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

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

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

4

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 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 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. 以下程序的输出结果是

5

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);}

} 11

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--); } A)12 B)11 C)10 D)9 7.下面程序的输出结果是。 #include main()

12

{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;}

13

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)顺序结构,选择结构,递归结构

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

14

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

以下的程序段: 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;

16

C)if(ch= ='+') w=a+b; D)if(ch= ='+') w=a+b; else if(ch= ='-') w=a-b; elseif(ch= ='-') w=a-b; 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

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;

17

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:

18

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

printf(“%d”,i++) 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(\;

19

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

若执行此程序段时输入的数据是AB abbb__。 4.有以下程序: #include main() { int c;

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

20

case l:putchar(c+4); case 2:putchar(c+4);break; case 3:putchar(c+3); 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\,break;

case 'b':

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

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

area);21

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;}

22

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

&&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代表税率):

23

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; .

24

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; 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 D)875421 4.请读程序:

#include main() {int a,b;

for(a=1,b=1;a<=100;a++)

25

{if(b>=20) break;

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

printf(“%d\\n”,a);} 上面程序的输出结果是 A)7 B)8 C)9 D)10 5.请读程序

#include main() {int num=0;

while(num++<=2)

26

{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 入死循环

D)1 3 C)打印不确定结果D)陷 7.下面的程序,描述正确的是 main()

{int x=3; do

{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.有以下程序段:

27

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

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

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

28

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

printf(“%d”,s);

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

main() {int i,n,k; n=15496;k=2; for(i=1;i

n=n; 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;}

29

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()

30

{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语句和循环语句中

C)利用goto语句可以使程序的执行从一个函数跳到另一个函数

D)循环语句中break语句不能单独出现 填空题:

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

while(a--)

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

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

{char c; scanf(“%c”,&c);

31

while(__c!=‘#’____)

{if((c>=?a?)&&(c<=?z?)) printf(“%c”,___c-32___); scanf(“%c”,&c);} }

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

** *** * * * * * * *

32

* * * 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)&&(______)) { a[k]=a[k-1];

k=k-l;} a[k]=______;}

5.已知e=l+1+1+1+?+1,试用此公式求e的近似值,要求累

1!2!3!n!33

加所有不小于1e-6的项值,请在程序中下划线处填上合适内容,完成程序功能。 #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); }

34

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)

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

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

#include

35

本文来源:https://www.bwwdw.com/article/fiax.html

Top