聪智学校
main() {int c=0,k; for(k=1;k<3;k++) switch(k) {default:c+=k; case 2:c++;break; case 4:c+=2;break; }
printf(“%d\\n”,c);
}程序运行后的输出结果是(A)
A)3 B)5 C)7 D)9
【解析】当k=1时,没有匹配的case,执行default语句,c=c+k=0+1=1。继续往下执行case 2后边的语句,c++,c变为2,遇到break语句,于是退出内层switch结构。当k=2时,找到匹配的case 2,执行c++; c变为3,遇到break语句,于是退出内层switch结构。执行外层循环for结构的k++,k变为3,k<3不成立,跳出for语句。最后输出结果为3。 ?
{ int s; scanf(\ while(s>0) { switch(s) { case1:printf(\ case2:printf(\ case3:printf(\ default:printf(\ } scanf(\ }
} 运行时,若输入1 2 3 4 5 0<回车>,则输出结果是(A)
A)6566456 B)66656 C)66666 D)6666656
【解析】while循环s<=0时退出循环,输入1 2 3 4 5 0,只有当输入0时退出循环,switch中当s=1时,执行case 1,case 2,由于case 1后面没有break,会继续执行case 2,遇到break,退出switch;当s=2时,执行case 2,退出switch;当s=3时,执行case 3,default,由于case 3后面没有break,会继续执行default,遇到break,退出switch;当s=4和5时,执行default,退出switch。所以输入1时,输出65;输入2时,输出6;输入3时,输出64;输入4时,输出5;输入5时,输出6。故选择A。
5.知识点:while,do-while,for三种循环结构 例1:(2011-09-20)有以下程序:
退出的位置。解决这一问题的方法是:首先划分结构,确定循环的语句体包括#include
while(a--);
继续执行下一次循环。
printf(“%d\\n”,a);
例1:(2011-03-26)有以下程序
}程序运行后的输出结果是 (B)
main()
A.- 1 B.0 C.1 D.7
当switch语句和循环语句(for、while)时,要注意switch里面的break语句
第 16 页 共 61 页
聪智学校
【解析】此类题一定要注意标点符号的位置,while(a--);该行末尾的分号即
为一条空语句,来作为while的循环体。
例1:(2010-09-20)有以下程序 #include
while(a<6) {b+=a;a+=2;b%=10;} printf(“%d,%d\\n”,a,b); }程序运行后的输出结果是(B)
A)5,11 B)7,1 C)7,11 D)6,1 例2:(2011-03)有以下程序段 main() { ?
while( getchar()!='\\n'); ?
}以下叙述中正确的是(C)
A)此while语句将无限循环
B) getchar()不可以出现在while语句的条件表达式中
C)当执行此while语句时,只有按回车键程序才能继续执行 D)当执行此while语句时,按任意键程序就能继续执行
【解析】while条件表达式getchar()!='\\n'只要输入的字符不是回车,就一直执行循环,而循环内是一个空语句,所以按回车键程序才能继续执行,选择C。 ?
循环体部分可以只有一条空语句,不做任何操作。
main() {int y=10; while(y--); printf(“y=%d\\n”,y);
}程序执行后的输出结果是(B)
A)y=0 B)y=-1 C)y=1 D)while构成无限循环
【解析】while(y--)后面的分号是一个空语句,当y--不等于0时执行空语句,当y—等于0时,执行printf函数输出y值,当y—等于0时退出循环,此时y值变成-1。 ?
如果第一次判断表达式的值为0,则循环一次也不执行。即while循环体最少执行0次。
例4:(2011-03)当执行下列程序时,输入1234567890
while((ch=getchar()==?0?)) printf(?#?); }
【解析】ch=getchar(),ch第一次读入的值为?1?,故while((ch=getchar()==?0?))不成立,循环一次也不执行。 ? while循环与switch结构 例5、(2011-03)有以下程序 main() { int s;
例3:(2010-09-21)有以下程序 #include
第 17 页 共 61 页
聪智学校
} scanf(\while(s>0) { switch(s) { case1:printf(\ case2:printf(\ case3:printf(\ default:printf(\ } scanf(\}
运行时,若输入1 2 3 4 5 0<回车>,则输出结果是(A)
printf(“%d\\n”,a);} ?
do-while循环体最少执行1次。
例2:(2007-09)若变量已正确定义,有以下程序段 i=0;
do printf(“%d,”,i); while(i++);
printf(“%d\\n”,i); 其输出结果是 (B)
A)0,0 B)0,1 C)1,1 D)程序进入无限循环
【解析】执行do-while循环,输出i的值为0,接着判断循环条件i++,i++的值为0,i的值为1,故答案是B。
A)6566456 B)66656 C)66666 D)6666656
【解析】:while循环s<=0时退出循环,输入1 2 3 4 5 0,只有当输入0时退出循环,switch中当s=1时,执行case 1,case 2,由于case 1后面没有break,会继续执行case 2,遇到break,退出switch;当s=2时,执行case 2,退出switch;当s=3时,执行case 3,default,由于case 3后面没有break,会继续执行default,遇到break,退出switch;当s=4和5时,执行default,退出switch。所以输入1时,输出65;输入2时,输出6;输入3时,输出64;输入4时,输出5;输入5时,输出6。故选择A。
7.知识点:for语句
例1:(2011-03)有以下程序
main()
{ char b,c; int i; b='a'; c='A'; for(i=0;i<6;i++) { if(i%2) putchar(i+b); else putchar(i+c); }
printf(\
} 程序运行后的输出结果是(B)
A)ABCDEF B)AbCdEf C)aBcDeF D)abcdef 【解析】:for循环执行6次,每次判断i能否被2整除,如果不能,则输出i+b,如果可以则输出i+c,注意if(i%2)是求表达式i%2是否为true,即其结果是不是非0。所以i为0时,输出0+A=A,i为1时,输出1+a=b,i为2时,输出2+A=C,i为3时,输出3+a=d,i为4时,输出4+A=E,i为5时,输出5+a=f。故选B。 ?
表达式1、表达式2、表达式3可以缺省,但两个分号不能省略。
6.知识点:do-while语句
例1:(2009-09-09)以下程序运行后的输出结果是 5 。 #include
第 18 页 共 61 页
聪智学校
表达式1省略的情况如下: 例2:(2010-03-21)有以下程序 #include
for(;a<8;a++) {b+=a;a+=2;} printf(“%d,%d\\n”,a,b); }程序运行后的输出结果是(D)
A)9,18 B)8,11 C)7,11 D)10,14 ?
表达式1和表达式3也可以是逗号表达式。
例3:(2009-04-20)以下程序段中的变量已正确定义 for(i=0;i<4;i++,i++)
for(k=1;k<3;k++) printf(“*”);程序段的输出结果是 (B) A)******** B)**** C)** D)* 【解析】外层for循环,表达式3是逗号表达式,即i自加2。. ?
for循环与switch结构
例4:(2009-09-29)有以下程序 #include
{int a[]={2,3,5,4},i; for(i=0;i<4;i++) switch(i%2)
第 19 页{case 0:switch(a[i]%2) {case 0:a[i]++;break; case 1:a[i]--; }break; case 1:a[i]=0; }
for(i=0;i<4;i++) printf(“%d”,a[i]); printf(”\\n”); }程序运行后的输出结果是( C)
A)3 3 4 4 B) 2 0 5 0 C)3 0 40 C)0 3 0 4 例5、(2011-03)有以下程序段
int i,n;
for(i=0;i<8;i++)
{ n=rand()%5; switch (n) { case 1: case 3:printf(\ case 2: case 4:printf(\ case 0:exit(0); }
printf(\
} 以下关于程序段执行情况的叙述,正确的是(D)A)for循环语句固定执行8次
B)当产生的随机数n为4时结束循环操作 C)当产生的随机数n为1和2时不做任何操作 D)当产生的随机数n为0时结束程序运行
共 61 页
聪智学校
【解析】:rand()是随机产生一个整数,rand()%5即随机得到0-4这五个数字,for{int i,j,m=1; 循环控制随机产生8次,当得到1,3时执行printf(\并退出switch,当得
for(i=1;i<3;i++)
到2,4时执行printf(\并继续循环,当得到0时,exit(0)正常结束程序。所
{ for(j=3;j>0;j--) 以循环不一定执行8次,故选择D。 ?
for循环与数组
{if(i*j>3) break; m*=i*j;
} }
printf(“m=%d\\n”,m);
}程序运行后的输出结果是 (A)
A)m=6 B)m=2 C)m=4 D)m=5 例2:(2011-03)有以下程序
例6:(2010-09-09)有以下程序 #include
{int i,n[]={0,0,0,0,0}; for(i=1;i<=4;i++)
{n[i]=n[i-1]*3+1; printf(“%d ”,n[i]);} }程序运行后的输出结果是 1 4 13 40 。
main() ? 注意区 赋值语句和判断语句
例 7:(2011-03)若i和k都是int类型变量,有以下for语句 { int x=1,y=0; for(i=0,k=-1;k=1;k++) printf(\
if(!x) y++;
下面关于语句执行情况的叙述中正确的是 (D)
else if(x==0) A)循环体执行两次 B)循环体执行一次
if (x) y+=2; C)循环体一次也不执行 D)构成无限循环
【解析】:for循环的表达式1和表达式3可以是一个简单的表达式也可以是逗号表else y+=3; 达式,本题表达式1是一个逗号表达式,i赋值为0,同时k赋值为-1。所以判断
printf(\
表达式2:k=1是k赋值为1,故无限循环,选择D。
}程序运行后的输出结果是 (D)
8.知识点:循环嵌套
#include
例1:(2010-03-20)有以下程序
A)3 B)2 C)1 D) 0
【解析】:if-else的嵌套,注意else总是与前面最近的且未配对的if语句配对组合。if(!x)中x为1,!x为0为false,即if(!x) 后的语句不执行,else if(x==0),x为1
第 20 页 共 61 页