c语言循环结构.docx
- 文档编号:15894122
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:30
- 大小:24.34KB
c语言循环结构.docx
《c语言循环结构.docx》由会员分享,可在线阅读,更多相关《c语言循环结构.docx(30页珍藏版)》请在冰点文库上搜索。
c语言循环结构
实验八循环结构
1.下面是一个计算e的近似值(使误差小于给定的δ)的程序。
main()
{
doublee=1.0,x=1.0,y,detax;
inti=1;
printf("\npleaseinputenteradata:
");
scanf("%lf",&detax);
y=1/x;
while(y>=detax)
{
x=x*I;//未定义变量I
y=1/x;
e=e+y;
++i;
}
printf("%12.10lf",e);
}
2.实验步骤
(1)阅读上面的程序,写出程序所依据的计算公式。
(2)当输入的detax各是什么值时,能分别使程序按下面的要求运行:
不进入循环;
只循环一次;
只循环两次;
进入死循环(程序将永远循环下去)。
为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?
(3)原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y (4)把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。 假如不知道机器内的程序实际上是怎么写的,输入什么样的detax就能测试出少了上述这条语句。 (5)若把原程序中的++i换成i++,观察程序的运行发生了什么变化? (6)把原程序中的while结构改写成do—while结构,再分别按上述的 (2)、(3)两步进行实验。 3.验证程序输出结果 (1)#include main() {intm,n,sign,t; scanf("%d%d",&m,&n); while(m*n) { if(m>=0&&n>=0||m<=0&&n<=0)sign=0; elsesign=1; m=m>0? m: -m;n=n>0? n: -n; t=0; while(n--)t+=m; printf("\nTheresultis: "); if(sign)printf("-"); printf("%d\n",t); scanf("%d%d",&m,&n); } } (2)main() {intk=1; while(k<=20) if(++k%4! =2)continue; elseprintf(‘%d”,k); printf(“\n”); } (3)main() {intn=4; while(n--)printf("%d",--n); } 4.输入两个正整数分别赋给m和n,求他们的最大公约数和最小公倍数。 5.北京市体育彩票采用整数1、2、3、……、36表示36种体育运动,一张彩票可选择7种运动。 编写程序,选择一张彩票的号码,使得这张彩票的7个号码之和是105且相邻两个号码之差按顺序依次是1、2、3、4、5、6。 如果第一个号码是1,则后续号码应是2、4、7、11、16、22。 6.编写程序实现输入整数n,输出如下所示由数字组成的菱形。 (图中n=5) 1 121 12321 1234321 123454321 1234321 12321 121 1 7.(选做题)已知2001年1月1日是星期一,编写程序,在屏幕上输出2000年的年历。 关于闰年的计算方法: 如果某年的年号能被400除尽,或能被4除尽但不能被100除尽,则这一年就是闰年。 8.运行程序,分析并观察运行结果 main() { inti; clrscr(); for(i=1;i<=20;i++) if(i%4==0)printf(“%d\n”,i); } 9.验证程序输出结果 (1)main() {inti; for(i=1;i<6;i++) {if(i%2){printf("#");continue;} printf("*"); } printf("\n"); } (2)main() {intx,i; for(i=1;i<=100;i++) {x=i; if(++x%2==0)/*当x==28的时候,这句等价于if(29%2==0)吗? */ if(++x%3==0)/*当x==70的时候,这句等价于if(72%2==0)吗? */ if(++x%7==0) printf("%d",x); } } (3)main() {inta=1,b; for(b=1;b<=10;b++) {if(a>=8)break; f(a%2==1){a+=5;continue;} a-=3; } printf("%d\n",b); 10.下列程序计算SUM的值。 调试该程序,使之能正确地计算SUM。 写出调试过程。 计算公式如下: SUM=1+2-3+4-5+……-n main() {intt,s,i,n; scanf("%d",&n); for(i=1;i<=n;i++) t=1/i; s=s+t; printf("s=%f\n",s); } 在调试过程中,用单步执行的方法观察变量s和t的值的变化,找到程序中存在的问题,加以改正。 11.下面程序的功能是计算n! 。 main() {inti,n,s=1; printf("Pleaseentern: "); scanf("%d",&n); for(i=1;i<=n;i++) s=s*i; printf("%d! =%d",n,s); } 首次运行先输入n=4,输出结果为4! =24,这时正确的。 为了检验程序的正确性,再输入n=10,输出为10! =24320,这显然是错误的。 为了找到程序的错误,可以通过单步执行来观察变量的变化。 分析产生这种现象的原因,把程序改正过来,再用n=20进行实验,分析所得到的结果。 12.完善程序: 打印乘法表。 main() { intI,j; clrscr(); for(______________;I<=9;I++) {for(j=1;___________;j++) printf(“____________=%2d”,I,j,I*j); ______________________; } } 运行结果: 1*1=1 2*1=22*2=4 3*1=33*2=63*3=9 4*1=44*2=84*3=124*4=16 5*1=55*2=105*3=155*4=205*5=25 6*1=66*2=126*3=186*4=246*5=306*6=36 7*1=77*2=147*3=217*4=287*5=357*6=427*7=49 8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64 9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81 13.下面是一个用以计算和的C程序。 #include voidmain() { inti,j; longsum=0; for(i=1,i<=20,i++)//查查错误 for(j=1;j<=3;j++) sum=sum+(i+1)*(i+1)*(j+2); printf("sumis: %d\n",sum); } 实验步骤 (1)将上述程序中的和分别做什么样修改,能使程序按如下要求运行: .不循环; .外循环1次,不进入内循环; .外循环,内循环各1次; .外循环1次,内循环2次; .外循环2次,内循环1次; .外循环19次,内循环3次; .外循环20次,内循环2次; .外循环21次,内循环3次。 注: 控制循环次数可通过控制i,j的值以及循环终止条件来进行。 (2)试修改程序,以便能知道控制表达式 i=1;j<=20;i++ 和 j=1;j<3;j+= 各执行了多少次? (3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观察对 换后的外循环与内循环控制表达式执行的总次数有无变化? (4)将(3)中程序写为 #include main() { inti,j,k; longsum=0; for(j=1;j<=3;j++) { k=j+2; for(i=1.i<=20.i++)//有错误 sum=sum+(i+1)*(i+1)**k;//有错误 } printf("sumis: %d\n",sum); } 观察程序的执行结果有无变化? (5)将(3)中程序改写为 #include main() { intI,j,m,n; longsum=0; for(j=1;j<=3;j++) { m=j+2; for(I=1;j<=20;I++)//循环会终止吗,为什么,注意观察j的变化。 { n=I+1; sum=sum+m*m*n; } } printf("sumis: %d\n",sum); } 观察程序的执行结果有无变化? (6)在(5)的程序中,若将外循环控制表达式分别做如下修改: .j=1;j<3;j++ .j=1;j=3;j++ .j=1;j>=3;j++ .j=1;j>3;j++ .j=1;j<=3;j-- .j=1;j>3;j-- .j=1;j<3;j++ .j=0;j<=3;j+=1 .j=0;j<3;j++ j=1;j<=3;j++j=1;j<3;++j 观察程序的执行结果有无变化? 思考如何退出死循环。 一)选择题 1.设有程序段 intk=10; while(k=0)k=k-1; 这下面描述中正确的是_________. a)while循环执行10次 b)循环是无限循环 c)循环体语句以此也不执行 d)循环体语句执行一次 2.语句while(! E);中的表达式! E等价于________. a)E==0 b)E! =1 c)E! =0 d)E==1 3.下面程序段的运行结果是__________. intn=0; while(n++<=2);printf("%d",n); a)2 b)3 c)4 d)有语法错 4.下面程序的运行结果是____. #include main() { intnum=0; while(num<=2) { num++; printf("%d\n",num); } } a)1 b)1 c)1 d)1 2 2 2 3 3 4 5.以下程序段________. x=-1; do{ x=x*x; }while(! x); a)是死循环 b)循环执行二次 c)循环执行一次 d)有语法错误 6.若有如下语句 intx=3; do{printf(""%d\n",x-=2);}while(! (--x)); 则上面程序段______. a)输出的是1 b)输出的是1和-2 c)输出的是3和0 d)是死循环 7.下面程序的运行结果是______. #include
{
inty=10;
do{y--;}while(--y);
printf("%d\n",y--);
}
a)-1 b)1 c)8 d)0
8.若i为整型变量,则以下循环执行次数是_____.
for(i=2;i==0;)printf("%d",i--);
a)无限次 b)0次 c)1次 d)2次
9.执行语句for(i=1;i++<4;);后变量i的值是______.
a)3 b)4 c)5 d)不定
10.以下正确的描述是_______.
a)continue语句的作用是结束整个循环的执行
b)只能在循环体内和switch语句体内使用break语句
c)在循环体内使用break语句或continue语句的作用相同
d)从多层循环嵌套中退出时,只能使用goto语句
(二)、填空题
1.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束
循环。
请填空。
intn=0,c;
c=getchar();
while(____)
{
if(_____)n++;
c=getchar();
}
2.下面程序的功能是用"辗转相除法"求两个正整数的最大公约数。
请填空。
#include
main()
{intr,m,n;
scanf("%d%d",&m,&n);
if(m r=m%n; while(r){m=n;n=r;r=______;} printf("%d\n",n); } 3.下面程序的运行结果是_________. #include main() { inta,s,n,count; a=2;s=0;n=1;count=1; while(count<=7){n=n*a;s=s+n;++count;} printf("s=%d",s); } 4.下面程序段的运行结果是_________. i=1;a=0;s=1; do{a=a+s*i;s=-s;i++;}while(i<=10); printf("a=%d",a); 5.下面程序段的运行结果是_______. i=1;s=3; do{s+=i++; if(s%7==0)continue; else++i; }while(s<15); printf("%d",i); (24)main0 {intn=9; while(n>6){n--;printf(“%d”,n);} } 该程序段的输出结果是 A)987 B)876 C)8765 D)9876 (25)以下循环体的执行次数是 A)3B)2C)1D)0 main() {inti,j; for(i=0,j=1;i<=j+1;i+=2,j--)printf("%d\n",i); } (26)以下叙述正确的是 A)do-while语句构成的循环不能用其它语句构成的循环来代替。 B)do-while语句构成的循环只能用break语句退出。 C)用do-while语句构成的循环,在while后的表达式为非零时结束循环。 D)用do-while语句构成的循环,在while后的表达式为零时结束循环。 (27)以下程序段的执行结果是 A)a=12y=12B)a=12y=12 a=14y=16 a=16y=28 a=16y=20 a=18y=24 C)a=12y=12D)a=12y=12 a=14y=26 a=14y=44 inta,y; a=10;y=0; do {a+=2;y+=a; printf("a=%dy=%d\n",a,y); if(y>20)break; {while(a=14); (28)以下程序的输出结果是 A)10192 B)9876 C)10990 D)101091 main() {intx=10,y=10,欢迎光临学网,点击这里查看更多文章教程[1][2][3][4][5][6][7][8] I; for(i=0;x>8;y=++i) printf("%d,%d",x--,y); } (29)以下程序的输出结果是 A)20 B)31 C)321 D)210 main() {intn=4; while(n--)printf("%d",--n); } (30)以下程序的输出结果是 A)#*#*# B)##### C)***** D)*#*#* main() {inti; for(i=1;i<6;i++) {if(i%2){printf("#");continue;} printf("*"); } printf("\n"); } (31)执行以下程序段时 A)循环体将执行一次 B)循环体将执行两次 C)循环体将执行无限次 D)系统将提示有语法错误 X=-1; do{x=x*x;}while(! x); (32)执行以下程序后,输出的结果是 A)-1B)1C)8D)0 main() {inty=10; do{y--;}while(--y); printf("%d\n",y--); } (33)在下列选项中,没有构成死循环的程序段是 A)inti=100 B)for(;;); while (1) {i=i%100+1; if(i>100)break; } C)intk=1000; D)ints=36; do{++k;}while(k>=10000);while(s);--s; (34)执行语句: for(i=l: i++<4: );后,变量i的值是 A)3 B)4 C)5 D)不定 (35)以下程序的输出结果是 A)x=4B)x=8C)x=6D)x=12 main() {inti,j,x=0; for(i=0;i<2;i++) {x++; for(j=0;j<=3;j++) {if(j%2)continue; x++; } x++; } printf("x=%d\n",x); } (36)运行以下程序后,如果从键盘上输入6514<回车>,则输出结果为: A)m=3B)m=2C)m=1 D)m=1 main() {intm,n; printf("Enterm,n;");scanf("%d%d",&m,&n): while(m! =n) {while(m>n)m-=n; while(n>m)n-=m; } printf("m=%d\n",m); } (37)设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 (38)假定a和b为int型变量,则执行以下语句后b的值为 a=1;b=10; do {b-=a;a++;} while(b--<0); A)9B)-2C)-1D)8 (39)设j为int型变量,则下面for循环语句的执行结果是 for(j=10;j>3;j--) {if(j%3)j--; --j;--j; printf("%d",j); } A)63 B)74 C)62 D)73 (40)若ij已定义为int类型,则以下程序段中内循环体的总的执行次数是 for(i=5;i;i--) for(j=0;j<4;j++){...} A)20 B)25 C)24 D)30 (41)执行下面的程序后,a的值为 main() {inta,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 (42)以下程序段的输出结果是 intx=3; do{printf("%3d",x-=2);}while(! (--x)); A)1 B)30 C)1-2 D)死循环 (43)定义如下变量: intn=10;则下列循环的输出结果是 while(n>7) {n--; printf("%d\n",n);} A)10B)9C)10D)9 9898 8787 76 (44)下面的程序 A)输出的是1 B)输出的是1和-2 C)输出的是3和0 D)是死循环 main() {intx=3; do{ printf("%d\n",X-=2); }while(! (--x));} (45)下面程序的输出是 A)741 B)852 C)963 D)875421 main() {inty=9; for(;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 循环 结构