C语言习题(详细解答) 下载本文

内容发布更新时间 : 2024/5/20 21:39:33星期一 下面是文章的全部内容请认真阅读。

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

程序运行后的输出结果是________。 A)1,2,3 B)1,3,2 C)l,3,3 D)3,2,1

【解析】 程序首先执行第一个判断语句,a==1成立;b++==2,先判断b是否为2,再进行b加1操作,执行后b的值为3。继续执行第二个判断语句,注意程序此时进行逻辑或运算,b!=2的值为真,因此条件表达式b!=2||c--!=3的值为真,程序便不再执行第二个逻辑语句c--!=3,而直接进行输出操作。因此,本题正确答案为C)。 5.执行以下程序段后,w的值为________。

int w='A',x=14,y=15; w=((x‖y)&&(w<'a')); A)-1 B)NULL C)1 D)0

【解析】根据题目所给条件可知,x||y为1,w<'a'为1,1&&1结果为1。因此正确答案为C)。 6.若变量已正确定义,有以下程序段:

int a=3,b=5,c=7; if(a>b) a=b; c=a; if(c!=a) c=b;

printf(\,%d,%d\\n\,a,b,c); 其输出结果是 A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7

【解析】两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没能变化,程序输出的结果为3,5,3。所以正确答案为选项B)。 7.有以下程序段:

int a,b,c;

a=10; b=50; c=30; if(a>b)a=b, b=c; c=a;

printf(\=%d b=%d c=%d\\n\,a,b,c); 程序的输出结果是________。 A)a=10 b=50 c=10 B)a=10 b=50 c=30 C)a=10 b=30 c=10 D)a=50 b=30 c=50

【解析】该题考查if条件语句,当条件为真时,将b值赋给a,c值赋给b;当条件为假时,将a值赋给c。该题中if条件为假,所以将a的值赋给c,故a=10 b=50 c=10。 8.有以下程序:

#include

6

main()

{ int x=1,y=2,z=3; if(x>y)

if(y

程序的运行结果是________。 A)331 B)41 C)2 D)1

【解析】该题目考查if条件语句。else语句和最近的一个if语句配对。由于x>y为假,所以直接执行最后一行代码。 9.有以下程序:

#include main()

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

{ case 0: a++; break; case 1: b++; break; }

case 2:a++; b++; break; case 3:a++; b++; }

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

程序的运行结果是 A)a=1,b=0 B)a=2,b=2 C)a=1,b=1 D)a=2,b=1

【解析】本题考查了 switch结构的内容。在C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case 常量表达式只是起语句标号作用,并不是在该处进行条件判断。本题程序在执行完内部switch结构后,继续执行了外部switch结构的 case 2分支。最后a和b的值分别为2和1。 二.填空题

1.在C语言中,当表达式值为0时表示逻辑值\假\,当表达式值为 时表示逻辑值\真\。 参考答案:非0

【解析】本题一定要明确一个概念,即:所有非0的数(并不只是\),在c语言中都表示逻辑值为\真\。

2.设x为int型变量,请写出一个关系表达式__ ,用以判断x同时为3和7的倍数时,关系表达式的值为真。 参考答案:(x%3==0)&&(x%7==0)

【解析】x%3==0能保证x是3的倍数,x%7==0能保证x是7的倍数,(x%3==0)&&(x%7==0)能保证x是3的倍数并且

7

x是7的倍数。 3.有以下程序

#include main()

{ int a=1,b=2,c=3,d=0; if(a==1) if(b!=2) if(c==3)d=1; else d=2; else if(c!=3)d=3; else d=4; else d=5; printf(\}

程序运行后的输出结果是__ 。 参考答案:4

【解析】a==1为真,b!=2为假,c!=3为假,所以d=4。 4.有以下程序

#include main() { int x;

scanf(\,&x); if(x>15)printf(\,x-5); if(x>10)printf(\,x); if(x>5)printf(\,x+5); }

若程序运行时从键盘输入12<回车>,则输出结果为 。 参考答案:1217

【解析】本题中输入12时,第一条if的条件x>15不满足因此不执行,第二条if的条件x>10满足因此输出12,第三条if的条件x>5满足因此输出17。

5.以下程序运行后的输出结果是 。

#include main()

{ int x=10,y=20,t=0;

if(x==y)t=x;x=y;y=t; printf(\,x,y); }

参考答案:20 0

【解析】本题中if选择的条件x==y不满足,因此直接执行后面的x=y和y=t,则x的值为20,y的值为0。 第05章 一.选择题

1.以下不构成无限循环的语句或语句组是 A)n=0;

do{++n;}while(n<=0);

循环结构

8

B)n=0;

while(1){n++;} C)n=10;

while(n);{n--;} D)for(n=0,i=1;;i++) n+=i;

【解析】项A)中变量n的值,先自加1,再进行循环条件判断,此时循环条件n<=0不成立,跳出循环。所以正确答案为A)。 2.有以下程序

#include main() { int y=10; while(y--); printf(\=%d\\n\,y); }

程序执行后的输出结果是 A)y=0 B)y=-1

C)y=l D)while构成无限循环

【解析】当y减为1时判断while(y--),此时满足条件,但是y变成0。下次循环判断while(y--)时,因为y为0不满足条件跳出循环,但是此时也要执行y--,所以y变成了-1。 打印输出时输出-1。 3.有以下程序:

#include main() { int i=5; do

{ if(i%3==1) if(i%5==2)

{ printf(\,i); break; } i++;

} while(i!=0); printf(\; }

程序的运行结果是________。 A)*7 B)*3*5 C)*5 D)*2*6

【解析】整个程序中只有对i增加的语句而没有对i减少的语句,所以2、3都不可能出现,选项B)和D)错误。而i=5时第一个if语句的表达式为假,所以选项C)也错误。 4.以下程序段中的变量已正确定义:

for(i=0;i<4;i++,i++) for(k=l;k<3;k++);printf(\; 程序段的输出结果是________。 A)******** B)****

9

C)** D)*

【解析】 本题考察for循环语句,注意第二个for语句的后面有一个分号,即printf函数不属于循环体,无论循环执行多少次,printf(\语句只执行一次。因此,本题正确答案为D)。 5.有以下程序

#include main() { int a=1,b=2;

for(;a<8;a++){b+=a;a+=2;} printf(\}

程序运行后的输出结果是

A)9,18 B)8,11 C)7,11 D)10,14

【解析】初始值a=1,b=2,第一次循环:b=b+a=2+1=3,a=a+2=1+2=3,a=a+1=3+1=4;第二次循环:b=b+a=3+4=7,a=a+2=4+2=6,a=a+1=6+1=7;第三次循环:b=b+a=7+7=14,a=a+2=7+2=9,a=a+1=9+1=10,故本题答案选D。 6.有以下程序:

#include main() { int i,j;

for(i=3;i>=1;i--)

{ for(j=1;j<=2;j++)printf(\,i+j); printf(\; } }

程序的运行结果是________。 A)2 3 4 B)4 3 2 3 4 5 5 4 3 C)2 3 D)4 5 3 4 3 4 4 5 2 3

【解析】该题目主要考查for嵌套循环,要注意循环变量i和j的取值范围。输出结果为变量i和j的和。 8.设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是________。 A)n=0;while((ch=getchar())!='\\n')n++; B)n=0;while(getchar()!='\\n')n++; C)for(n=0;getchar()!='n';n++); D)n=0;for(ch=getchar();ch!='\\n';n++);

【解析】 A)项每进行一次循环判断一个字符是否为回车,如果不是就进行下一次判断,因此可以统计出输入字符个数;B)项与A)项的判断相似,仅为是否将读入的数据赋值给一个变量,因此并不影响判断结果;C)想用for循环来判断,与B)项的判断完全相同,可以统计出输入字符个数;D)项中ch=getchar()是给变量ch赋初值,如果输入回车,则程序只循环一次,如果输入一个非回车的字符,则程序进入死循环。因此,本题正确答案为D)。 9.有以下程序

#include main() { int i,j,m=1;

10