顺序结构、选择结构和循环结构
一、单项选择题
1. 假定所有变量均已正确定义,下列程序段运行后y的值是( )。
int a=0, y=10;
if(a=0) y- - ;else if(a>0) y++; else y+=y ; A.20 B.11 C.9 D.0 2. 假定所有变量均已正确定义,下列程序段运行后x的值是( )。
a=b=c=0,x=35;
if(!a) x- -; else if(b) ;if(c) x=3;else x=4; A.34 B.4 C.35 D.3 3. 下面的程序片段所表示的数学函数关系是( )。
y= -1;
if(x! =0)if(x>0) y=1; else y=0;
(x?0)??????1 (x?0)?1 ?0 (x?0)??1 (x?0)A.y??0 (x?0) B.y??-1 (x?0) C.y??-1 (x?0) D.y??1 (x?0)
?????1 (x?0)?0 (x?0)?1 (x?0)?0 (x?0)4. 下列各语句序列中,能够且仅输出整型变量a、b中最大值的是( )。 A、if(a>b) printf(”%d\\n”,a); printf(”%d\\n”,b); B、printf(”%d\\n”,b); if(a>b) printf(”%d\\n”,a); C、if(a>b) printf(”%d\\n”,a); else printf(”%d\\n”,b); D、if(a
5. 下列各语句序列中,能够将变量u、s中最大值赋值到变量t中的是( )。 A、if(u>s)t=u; t=s; B、t=s; if(u>s)t=u; C、if(u>s)t=s; else t=u; D、t=u; if(u>s)t=s; 6. 下列各语句中,能够输出整型变量a、b中最大值的是( )。
A、printf(”%d\\n”,(a>b)?a,b); B、(a>b)? printf(”%d”,a):printf(”%d”,b); C、printf(”%d”,if(a>b)a else b); D、printf(”%d\\n”,(a>b)?a:b); 7. 下列语句应将小写字母转换为大写字母,其中正确的是( )。
A、if(ch>=?a?&ch<=?z?) ch=ch-32; B、if(ch>=’a’&&ch<=’z’)ch=ch-32; C、ch=(ch>=?a?&&ch<=?z?)?ch-32:??; D、ch=(ch>?a?&&ch
8. int a=1, x=1; 循环语句while(a<10) x++; a++; 的循环执行( )。
A. 无限次 B.不确定次 C.10次 D.9次 9. 下列语句中,错误的是( )。 A.while(x=y) 5; B.do x++ while(x= =10);
C.while(0) ; D.do 2;while(a= =b); 10. 循环语句for(x=0,y=0;(y! =123)| | (x<4); x++); 的循环执行( )。
A.无限次 B.不确定次 C.4次 D.3次 11. 循环语句for(i=0, x=1; i=10 && x>0; i++); 的循环执行( )。
A.无限次 B.不确定次 C.10次 D.9次 12. i、j 已定义为int类型,则以下程序段中内循环体的执行次数是( )。
for(i=5;i;i--)
for(j=0;j<4;j++){………}
8
A.20 B.24 C.25 D.30 13. C语言 while语句中,用于条件的表达式是( )
A. 关系表达式 B. 逻辑表达式 C. 算术表达式 D. 任意表达式 14. while循环,执行次数是( )
i=4; while(--i) printf(“%d”,i);
A. 3次 B. 4次 C. 0次 D. 无数次 15. 下列程序段执行后 s的值为( )
int i=1, s=0; while(i++) if( !(i%3) ) break ; else s+=i ; A. 2 B. 3 C. 6 D. 以上均不是 16. 下列程序输出结果是( )
#include
{ int x=3, y=6, z=0;
while(x++!=(y-=1)){ z++; if(y A. x=4,y=4,z=1 B. x=5,y=4,z=3 C. x=5,y=4,z=1 D. x=5,y=5,z=1 17. int i=1,s=0; while (i<100) {s+=i++;if (i>100 ) break;} 执行以上程序段后,s的值是( )。 A.1到101的和 B.1到100的和 C.1到99的和 D.以上均不是 18. 假定i和j为int型变量,则执行以下语句后i的值为 ( )。 int i=1; switch (i++){ case 1: for (j=0;j<9;j++) if (i= =1) break; case 2: for (j=1;j<10;j++) if (i= =2) break; case 3: printf (“i=%d\\n”,i ); } A.0 B.1 C.9 D.10 19. 假定a和b为int型变量,则执行以下语句后b的值为 ( )。 a=1;b=10; do { b - =a;a++;} while (b- -<0); A.9 B.-2 C.-1 D.8 20. 设x和y均为int型变量,则执行下面的循环后,y的值为 ( )。 for (y=1,x=1;y<=50;y++) { if (x>=10 ) break; if (x%2==1) {x+=5;continue;} x - =3; } A.2 B.4 C.6 D.8 21. 求整数1至10的和并存入变量s,下列语句中错误的是( )。 A、s=0;for(i=1;i<=10;i++) s+=i; B、s=0;i=1;for(;i<=10;i++) s=s+i; C、for(i=1,s=0;i<=10;s+=i,i=i+1); D、for(i=1;s=0;i<=10;i++) s=s+i; 9 22. 若sizeof(int)为2,计算1至10的乘积,下列语句序列中正确的是( )。 A、int jc=1; for(int i=2;i<=10;i++) jc*=i; B、for(float jc=1,int i=2;i<=10;i++,jc*=i); C、float jc=1; for(int i=2;i<=10;jc*=i,i=i+1); D、for(float jc=1;i=2;i<=10;i++) jc*=i; 23. 下列语句中,哪一个可以输出26个大写英文字母( )。 A、 for(a=?A?;a<=?Z?;printf(”%c”,++a)); B、for(a=?A?;a=0&&i<=10) { if(i++==5)continue; printf(”%f\\n”,1.0/(i-5));} 功能相同的是( )。 A、for(;i>=0&&i<=10;i++) if(i!=5) printf(”%f\\n”,1.0/(i-5)); B、for(;i>=0&&i<=10;i++) if(i==5) printf(”%f\\n”,1.0/(i-5)); C、for(;i>=0&&i<=10;i++) if(i!=5) printf(”%f\\n”,1.0/(i-5)); else break; D、for(;i<=0&&i>=10;i++) if(i!=5) printf(”%f\\n”,1.0/(i-5)); 25. 下列语句中与语句 while(1){if(i>=100)break;s+=i;i++;} 功能相同的是( )。 A、for(;i<100;i++) s=s+i; B、for(;i<100;i++;s=s+i); C、for(;i<=100;i++) s+=i; D、for(;i>=100;i++;s=s+i); 26. 在C语言中,下列说法中正确的是 ( )。 A.不能使用“do语句while(条件)”的循环 B.“do语句while(条件)”的循环必须使用“break”语句退出循环 C.“do语句while(条件)”的循环中,当条件为非0时将结束循环 D.“do语句while(条件)”的循环中,当条件为0时将结束循环 27. 在C语言的语句中,用来决定分支流程的表达式是 ( )。 A.可用任意表达式 B.只能用逻辑表达式或关系表达式 C.只能用逻辑表达式 D.只能用关系表达式 二、填充题 1. 结构化程序设计规定的三种基本结构是 结构、 结构和 结构。 2. 三种循环语句是 价的。 3. 当循环体中的switch语句内有break语句,则只跳出 语句。同样,当switch 语句中有循环语句,内有break语句,则只跳出 语句。 4. 循环体中的continue 语句是 。 5. 若有定义语句int a=25,b=14,c=19; 以下语句的执行结果是 。 if(a++<=25 && b--<=2 && c++) printf(“***a=%d,b=%d,c=%d\\n”, a, b, c); else printf(“***a=%d,b=%d,c=%d\\n”, a, b, c); 6. 以下两条if语句可合并成一条if语句 。 if(a<=b) x=1; else y=2; if(a>b) printf(“***y=%d\\n”,y); else prinft(“***x=%d\\n”,x); 7. 若int k=10, 循环语句while (k=0) k=k-1; 执行 次。 8.若int k=2, 循环语句while (k!=0) { printf(\执行 次。 9. 若int i=10,s=0;,执行语句while(s+=i--,--i);后s、i值分别为 。 10 10. 程序段 int s,i; for(i=1;i<=100;s+=i,i++); 能否计算1~100的和? , 原因是 。 11. 若int类型变量字长为2,程序段 int jc=1; for(int i=2;i<10;i++)jc*=i; 能否 计算10的阶乘? 原因是 。 12. 设i, j, k均为int型变量,则执行完下面的for循环后,k的值为 。 for(i=0,j=10; i<=j; i++,j--) k=i+j; 13. 下列程序的功能是输入一个正整数,判断是否能被3或7整除,若能整除,输出“YES”, 若不能整除,输出“NO”。请为程序填空。 void main( ) { int k; scanf (“%d”, &k); if ( ) printf(“YES\\n”); else printf (“NO\\n”); } 14. 下列程序的功能是输入一个正整数,判断是否是素数,若为素数输出1,否则输出0, 请为程序填空。 void main( ) { int i, x, y=1; scanf(“%d”, &x); for(i=2; i<=x/2; i++) if ( ) { y=0; break; } printf(“%d\\n”,y); } 15. 输入2个整数,输出它们的最小公倍数和最大公约数。 #include { int m,n,gbs,gys; scanf( ); for(gbs=m; ; gbs=gbs+m); gys= ; ; } 16. 输入N个实数,输出其中的最大值、最小值。 #include { float no1,nmax,nmin; scanf(\ nmax=no1; for(i=2;i<=n;i++) { scanf(\&nox ); if(nox>nmax) nmax=nox; } printf(\ MIN=%f\\n\ } 17. 输入若干个字符,分别统计数字字符的个数、英文字母的个数,当输入换行符时输 11 出统计结果,运行结束。 #include { char ch; while(( )!='\\n') { if(ch>='0'&&ch<='9') s1++; if(ch>='a'&&ch<='z' || ) s2++; } } 18. 输入m,求n使 n!<=m<=(n+1)!,例如输入726,应输出n=6。 void main() { int ; scanf( ); for(n=2;jc<=m;n++) jc=jc*n; printf(”n=%d\\n”, ); /* 想一想为什么n-2 */ } 19. 下列程序计算并输出方程 X2+Y2+Z2=1989 的所有整数解。 #include { for(i=-45;i<=45;i++) /* 想一想为什么值域为 (-45,45)*/ for( ) ) for(k=-45;k<=45;k++) if( ) printf( , i,j,k); } 三、程序分析题 1. 阅读程序,写出运行结果。 void main ( ) { int a=10, b=4, c=3; if(a printf(“%d, %d, %d\\n”, a, b, c) ; } 2. 阅读下列程序,写出程序的输出结果。 void main ( ) { int x=100, a=10, b=20, ok1=5, ok2=0 ; if(a 12