第五章选择结构循环结构
1.能正确表示x的取值范围在[0,100]和[-10,-5]内的表达式是。(1级)
A)(x<=-10)||(x>=-5)&&(x<=0)||(x>=100)
B)(x>=-10)&&(x<=-5)||(x>=0)&&(x<=100)
C)(x>=-10)&&(x<=-5)&&(x>=0)&&(x<=100)
D)(x<=-10)||(x>=-5)&&(x<=0)||(x>=100)
2.main( )
{ int x=5,a=0,b=0;
if(x=a+b) prin tf(“** **\n”);
else printf(“## ##\n”);
以上程序。(1级)
A)有语法错,不能通过编译B)通过编译,但不能连接
C)输出** ** D)输出## ##
3.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是。(1级)
main( )
{ int x;
scanf(“%d”,&x);
if(x++>5) printf(“%d”,x);
else printf(“%d\n”,x--);
}
A)7和5 B)6和3 C)7和4 D)6和4
4.假定所有变量均已正确说明,下列程序段运行后x的值是。(1级)
a=b=c=0;x=35;
if(!a) x=-1;
else if(b);
if(c) x=3;
else x=4;
A)34 B)4 C)35 D)3
5.能表示整数x符合下面两个条件的语句是。
(1)“能被4整除,但不能被100整除”.(2)能被4整除,又能被400整除.
A)(x%4==0&&x%100!=0)||x%400==0
B)(x%4==0||x%100!=0)&&x%400==0
C)(x%4==0&&x%400!=0)||x%100==0
D)(x%100==0||x%4!=0)&&x%400==0
6.若I为整型变量,则下列程序段的运行结果为。(03试题)
I=322;
if(I%2==0) printf(“#####”)
else printf(“*****”);
A)##### B)#####*****
C)***** D)有语法错误,无法输出结果
7.已知int x=30,y=50,z=80;以下语句执行后变量x、y、z的值分别为:。
if (x>y||x
z=x; x=y; y=z;
A)x=50, y=80, z=80 B)x=50, y=30, z=30
C)x=30, y=50, z=80 D)x=80, y=30, z=50
8.已知int x=30,y=50,z=80;以下语句执行后变量x、y、z的值分别为:。
if (x>y||x
{ z=x; x=y; y=z; }
A)x=50, y=80, z=80 B)x=50, y=30, z=30
C)x=30, y=50, z=80 D)x=80, y=30, z=50
9.在C的if语句中,可用作判断的表达式是:。
A)关系表达式B)逻辑表达式
C)算术表达式D)任意表达式
10.在C语言中,多分支选择结构语句为:
switch(c)
{ case 常量表达式1:语句1;
……
case 常量表达式n-1:语句n-1;
default 语句n;}
其中括号内表达式c的类型:。
A)可以是任意类型B)只能为整型
C)可以是整型或字符型D)可以为整型或实型
11.若x=3,y=z=4,则下列表达式的值分别为。
(1)(z>=y>=x)?1:0
(2)y+=z,x*=y
A)0 24 B)1 8 C)0 8 D)1 12
12.程序段如下
int k=-20;
while(k=0) k=k+1;
则以下说法中正确的是。
A)while循环执行20次B)循环是无限循环
C)循环体语句一次也不执行D)循环体语句执行一次
13.程序段如下
int k=1;
while(!k==0) {k=k+1;printf("%d\n",k);}
说法正确的是。)
A)while循环执行2次B)循环是无限循环
C)循环体语句一次也不执行D)循环体语句执行一次
14.在下列程序中,while循环的循环次数是。
main( )
{ int i=0;
while(i<10)
{if(i<1) continue;
if(i= =5) break;
i++; }
......
}
A)1 B)10 C)6 D)死循环、不能确定次数15.程序段如下
int k=0; while(k++<=2) printf("%d\n",k);
则执行结果是。
A)2 B)3 C)4 D)无结果
16.执行下面的程序后,a的值为。
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;
}
}
A)7 B)8 C)9 D)10
17.以下程序的输出结果。
main()
{
int x=3;
do
{printf("%3d",x-=2);
}while(--x);
}
A)1 B)30 3 C)1 -2 D)死循环
18.以下程序的输出结果是。
main()
{int i;
for(i=1;i<=5;i++)
{if(i%2)printf("#");
else continue;
printf("*");
}
printf("$\n");
}
A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$
二、填空题
1.设有程序片段如下:
switch(class)
{case 'A':printf("GREAT!\n");
case 'B':printf("GOOD!\n");
case 'C':printf("OK! \n");
case 'D':printf("NO!\n");
default:printf("ERROR!\n");
}
若class的值为'C',则输出结果是。
2.以下程序段的运行结果是。
int x=1,y=0;
switch(x)
{case 1:
switch(y)
{
case 0:printf("x=1 y=0\n");break;
case 1:printf("y=1\n");break;
}
case 2:printf("x=2\n");
}
3.根据以下if语句写出与其功能相同的switch语句(x的值在0~100之间)。if语句:
if(x<60) m=1;
else if(x<70) m=2;
else if(x<80) m=3; C 语言程序设计习题集29
else if(x<90) m=4;
else if(x<100) m=5;
switch语句:
switch((1))
{
(2)m=1;break;
case 6:m=2;break;
case 7:m=3;break;
case 8:m=4;break;
(3)m=5;
}
4.写出结果:--------
#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;
}
printf(“%d,%d\n”,a,b);
}
三、编程:
1.编写程序,判断某一年是否是闰年 p106
main( )
{int year,leap;
scanf(“%d”,&year);
if(year%4= =0)
{if(year%100= =0)
{if(year%400= =0)
leap=1;
else leap=0;
}
else leap=1;
}
else leap=0;
if(leap)
printf(“%d is ”,year);
else printf(“%d is not ”,year);
printf(“ a leap year\n”);
}
2. 编一程序,对于给定的一个百分制成绩,输出相应的五分制成绩。设:90分以上为…A?;80~89分为…B?;70~79分为…C?;60~69分为…D?;60分以下为…E?。(switch 实现)p111 5.6
3.输入一个不多于4位的整数,求出它是几位数,并逆序输出各位数字。P112 5.7
main( )
{int num,a,b,c,d,p;
scanf(“%d”,&num);
if(num<=9999&&num>999) p=4;
else if(num>99) p=3;
else if(num>9) p=2;
else if(num>0) p=1;
printf(“位数是:%d\n”,p);
a=num/1000;
b=num/100%10;
c=num/10%10;
d=num%10;
switch(p)
{case 4:printf(“%d%d%d%d\n”,d,c,b,a);
case 3:printf(“%d%d%d \n”,d,c,b);
case 2:printf(“%d%d\n”,d,c);
case 1:printf(“%d \n”,d);
}
}
4.判断m是否素数
素数:除了1和它本身外,不能被其它整除
所以只需循环判断m是否能够被2到m-1之间的数整除
可缩小范围,只需判断m是否能够被2到根号m之间的数整除即可。(设一个标志位flag, flag 等于0,代表是素数,flag等于1,代表不是素数)
5.请编写一程序,打印出九九乘法口诀表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
第i行1*i 2*i 3*i ……. (i-1)*i i*i
6.编写一程序,求1-3+5-7+.........-99+101的值。
#include
mian( )
{int k,sum=0,sign=1;
for(k=1;k<=101;k+=2)
{sum+=k*sign;
sign*=-1;
}
printf(“\nsum=%d”,sum);
}
7.编写程序,计算1!+2!+3!+.......+n!的值,其中n的值由用户输入
mian( )
{int k,l,n;
double sum=0,fact_k=1;
printf(“Please Input n:”);
scanf(“%d”,&n);
for(k=1;k<=n;k++)
{
fact_k=fact_k*k;
sum+=fact_k;
}
printf(“sum=%.2lf”,sum);
}
8.利用e=1+1/1!+1/2!+…+1/n!+….求e的近似值,直到某一项小于10-6
void main()
{float e,t;
int n=1;
e=1;t=1;
while(t>=1e-6)
{
t=t/n;
e=e+t;
n++;
}
9.编程实现下列图形的打印
*
***
******
*******
******
***
*
前四行第i行打印9-2*i个空格 2*i-1个* 后三行。。。。。
第五章循环结构程序设计 1.用for循环语句编程输出1~20之间的所有整数,两数之间以空格分隔。 #include
printf(" "); } } 4.输出100~200之间所有能被3和7整除的数(每行输出4个数)。#include
int i,j=0; for(i=1;i<=1000;i++) { if((i%3==2)&&(i%5==3)&&(i%7==2)) { j++; printf("%12d",i); if(j%5==0) printf("\n"); } } } 6.先读入一个正整数n,然后计算并显示前n个偶数的和。例如n为5,则求2+4+6+8+10的值,即sum=30。 #include
第5章循环结构程序设计作业参考答案 班级学号姓名 【第140页】 5-1、请画出课本里5.6中给出的3个程序段的传统流程图。 (1)程序1: #include
for (j=1;j<=5;j++,n++) { if(n%5==0)printf("\n"); //控制在输出5个数据后换行 if (i==3 && j==1) continue; //遇到第3行第1列,提前结束执行本次内循环体 printf("%d\t",i*j); } printf("\n"); return 0; } (1)程序1流程图(2)程序2流程图(3)程序3流程图 5-3、输入两个正整数m和n,求其最大公约数和最小公倍数。 #include
第五章循环结构 一、选择题 1.C语言中while和do_while循环的主要区别是( )。 A.do_while的循环体至少无条件执行一次 B.while的循环控制条件比do_while的循环控制条件严格 C.do_while允许从外部转到循环体内 D.do_while的循环体不能是复合语句 2.以下描述中正确的是( )。 A.由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句 B.do-while循环由do开始,用while结束,在while(表达式)后面不能写分号 C.在do-while循环体中,是先执行一次循环,再进行判断 D.do-while循环中,根据情况可以省略while 3.语句while (!E); 括号中的表达式!E等价于( ) 。 A.E==0 B.E!=1 C.E!=0 D.E==1 4.以下程序的功能是计算:s= 1+1/2+1/3+……+1/10 main() { int n; float s s=1.0; for(n=10;n>1;n--) s=s+1/n; printf("%6.4f\n",s); } 程序运行后输出结果错误,导致错误结果的程序行是( )。 A.s=1.0; B.for(n=10;n>1;n--) C.s=s+1/n; D.printf("%6.4f\n",s); 5.下面程序段的运行结果是( )。 a=1;b=2;c=2; while(a第5章循环结构程序设计
第5章循环结构程序设计 通过本章实验作业应达目标 1.熟悉while、for、do_while、break、continue语句的作用与使用规范,能使用while语句、for 语句、do_while语句实现循环结构; 2.掌握循环结构和选择结构之间嵌套、多重循环间嵌套的设计方法。 3.进行算法设计训练,能综合所学控制结构语句解决一般问题。 本章必须上交作业 程序5_1.c、5_2.c、5_3.c、5_5.c、5_6.c、5_7.c、5_8.c、5_11.c上传至http://121.251.227.27:8080/c 1.循环设计 循环是在循环条件为真时重复执行一组循环体语句的控制结构,是计算机解题的一个基本结构。循环控制有两种基本方法:计数法和标志法。 (1)计数器控制的循环 事先准确地知道循环次数,因此设计一个循环控制变量,由变量值来控制循环次数。每循环一次,循环变量的值会递增(增值通常为1或-1),当其值达到终值时结束循环。 (2)标志控制的循环 事先不知道准确的循环次数,由某一目标值标记循环的结束。如,例3-23中以变量sum的值达到标记值1000作为循环的结束,例3-24中就是以键盘输入一个负数为标记结束循环。 2.基本算法 程序设计的首要工作是算法设计,离开了算法也就没有了程序。算法,是指完成某一项工作而采取的方法和步骤,具体到程序设计,是对解题过程的准确而完整的描述,并用一种程序设计语言的来实现。 循环主要用来解决程序设计中两类基本的算法:穷举和迭代。 1. 穷举算法 穷举的基本思想是对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试过为止。穷举是一种重复型算法,其核心是设计循环,在循环体中依次测试。 例1 输入两个正整数x和y,求其最大公约数。 #include 第三章循环结构 3.1 选择题 1.以下程序的输出结果是( )。 main() { int n=4; while (n--) printf(〞%d〞,--n); } A.20 B.31 C.321 D.210 2.以下程序的输出结果是( )。 main() {int x=10,y=10,i; for(i=0;x>8;y=++i) printf("%d%d",x--,y); } A.10192 B.9876 C.10990 D.101091 3.当执行以下程序段时。 x=-1; do {x=x*x;} while (!x); A.循环体将执行一次 B.循环体将执行两次 C.循环体将执行无数多次 D.系统将提示有语法错误4.执行以下程序后输出的结果是()。 main() { int y=10; do{y--;}while(--y); printf("%d\n",y--);} A.-1 B.1 C.8 D.0 5.下面程序的输出结果是()。 main() { int x=3,y=6,a=0; while (x++!=(y-=1)) {a+=1; if (y A.x=4,y=4,a=1 B.x=5,y=5,a=1 C.x=5,y=4,a=3 D.x=5,y=4,a=1 6.若i,j已定义为int类型,则以下程序段中内循环的总的执行次数是()。 for (i=5;i;i--) for (j=0;j<4;j++) {…} A.20 B.24 C.25 D.30 7.请读程序: #include 第五章循环结构 5.1 选择题 1.以下程序的输出结果是( )。 main() { int n=4; while (n--) printf(〞%d〞,--n); } A.20 B.31 C.321 D.210 2.以下程序的输出结果是( )。 main() {int x=10,y=10,i; for(i=0;x>8;y=++i) printf("%d%d",x--,y); } A.10192 B.9876 C.10990 D.101091 3.当执行以下程序段时。 x=-1; do {x=x*x;} while (!x); A.循环体将执行一次 B.循环体将执行两次 C.循环体将执行无数多次 D.系统将提示有语法错误4.执行以下程序后输出的结果是()。 main() { int y=10; do{y--;}while(--y); printf("%d\n",y--);} A.-1 B.1 C.8 D.0 5.下面程序的输出结果是()。 main() { int x=3,y=6,a=0; while (x++!=(y-=1)) {a+=1; if (y A.x=4,y=4,a=1 B.x=5,y=5,a=1 C.x=5,y=4,a=3 D.x=5,y=4,a=1 6.若i,j已定义为int类型,则以下程序段中内循环的总的执行次数是()。 for (i=5;i;i--) for (j=0;j<4;j++) {…} A.20 B.24 C.25 D.30 7.请读程序: #include 第五章循环结构 一、单项选择题(本大题共20小题,每小题1分,共20分) 1.执行下面程序段后,输出字符B的个数是() x=0; while(x<=5) {printf("B"); x+=2;} A.0个B.3个C.5个D.6个 2.在下述程序中,for循环执行的次数是() main( ) {int i =0,j=10,k=2,s=0; for(; ;) {i+=k; if(i>j) {printf("%d\n",s); break;} s+=i; } } A.4 B.5 C.6 D.7 3.执行下面程序段后,输出字符A的个数是() for(i=0;i<=5;i+=2) printf(“A”); A.0个B.3个C.5个D.6个 4.执行while(表达式)循环的条件是() A.当表达式的值为0时B.仅当表达式的值为1时 C.当表达式的值非0时D.当表达式的值不为1时 5.下列程序段输出的结果是() for(i=1;i<3;i+ +) for(j=1;j<3;j+ +) printf("%d",i+j); A.2 3 3 4 B.2 3 4 C.2 3 D.2 3 4 3 4 6.对do语句while(表达式);结构的循环,下列说法正确的是()A.当表达式的值为非零时不执行循环体 B.循环体至少被执行一次 C.当表达式的值为零时循环体一次也不执行 D.循环体仅被执行一次 7.只能在循环语句中用于结束本轮循环的语句是() A.break; B.continue; C.goto D.if 10.下列程序段的输出结果是() i=1; while(i<3) {j=1; while(j<=i) {printf(“%d”,i+j); j++;} i++; printf(“\n”); } A. 2 3 3 4 B. 2 3 4 C. 2 3 D. 2 3 4 3 4 8.下列程序段的输出结果是() a=100; do a=a+l; while(a>120); printf(“%d”,a); A.100 B.101 C.120 D.121 9.关于break和continue语句,下列说法正确的是() A.在循环体中可以用break语句结束本次循环 B.在循环体中可以用continue语句结束本次循环 C.break语句仅能使用在switch结构中 D.可以使用continue语句跳出switch结构 10.对于for(表达式l;表达式2;表达式3)语句;控制循环结束的表达式是() A.表达式1 B.表达式2 C.表达式3 D.表达式l和表达式3 11.下列语句中不能 ..实现循环结构的语句是() A.if语句 B.while语句 C.do—while语句 D.for语句 12.以下程序的输出结果是() main()第5章 循环结构 习题
第五章 循环结构
第5章 循环结构