实验三
Part1
demo5_1.cpp
#include <stdio.h> int main() { int i;
for(i=1; i<=5; i++) { if (i%3 == 0) continue; printf("i=%d\n",i); } return 0; }
运行结果
demo5_2.cpp
#include <stdio.h> int main() { int i; for(i=1; i<=5; i++) { if (i%3 == 0) break; printf("i=%d\n",i); } return 0; }
运行结果
小结continue与break
在demo5_1的循环结构中,遇到了continue,程序就跳过了continue后面的语句——printf("i=%d\n",i),开始执行下一次循环,即遇到3的倍数时不输出,继续执行下面的循环,输出i=4,i=5
在demo5_2的循环结构中,遇到了break,程序就结束了整个循环,后面的i=4,i=5也没有输出,即遇到3的倍数时,结束整个循环
在循环结构中,碰到continue语句时,程序就跳过循环体中位于continue后的所有语句,提前结束本次循环并开始新一轮循环;碰到break语句时,这一层循环立即结束,转而执行这层循环体后面的语句。
demo6_1.cpp
#include <stdio.h> const int LINE=3; const int COLUME=5; int main() { int line; int col; for(line=1; line<=LINE; line++) { for(col=1; col<=COLUME; col++) { if(col%3 == 0) continue; printf("%5d", col); } printf("\n"); } return 0; }
运行结果
demo6_2.cpp
#include <stdio.h> const int LINE=3; const int COLUME=5; int main() { int line; int col; for(line=1; line<=LINE; line++) { for(col=1; col<=COLUME; col++) { if(col%3 == 0) break; printf("%5d", col); } printf("\n"); } return 0; }
运行结果
在demo6_1中,由运行结果可知,在遇到continue时,程序不输出第三列的数字,但继续内层循环的下一步,输出第四列、第五列的数,外层循环也正常运行,一直输出到规定的3行。
在demo6_2中,由运行结果可知,在遇到break时,程序停止内层循环的所有步骤,不再输出第四列、第五列的数,但外层循环不受影响,依然输出了3行。
在两层循环结构中,内层循环中出现continue,break,不影响外层循环。
Part2 补足程序
补足后的程序
#include <stdio.h> int main() { int number, max, min, n; n=1; printf("输入第%d个数: ", n); scanf("%d", &number); max = number; min = number; while(n<5&&n>=1) { n++; printf("输入第%d个数: ", n); scanf("%d", &number); if(number>=max) max = number; else if(number<=min) min = number; } printf("最大数为: %d\n", max); printf("最小数为: %d\n", min); return 0;
运行结果
用for语句实现
#include <stdio.h> int main() { int number, max, min, n; n=1; printf("输入第%d个数: ", n); scanf("%d", &number); max = number; min = number; for(n=2;n<=5;){ printf("输入第%d个数: ", n); scanf("%d", &number); if(number>=max) max = number; else if(number<=min) min = number; n++; } printf("最大数为: %d\n", max); printf("最小数为: %d\n", min); return 0; }
运行结果
小结:这一部分我真的做的很不顺利,一开始做程序填空时,光看程序我还没太理解这个程序的运行方法,,看了实验指导文档才理解,但依然不顺利。我逻辑思维不太好,写第一个空时,n>5总是写成n>=5,导致显示到让我输入到第六个数字;if和else if后面的空,我最初写的是n>=number,n<=number,结果出来当然是不对的,但我怎么都发现不了,最终还是参考了别人的程序,又想了一会,才弄明白,程序出来才是对的,唉。换用for语句来写时,也是出现了好多问题,有时候我只输入一个数就出来结果,有时它显示两行字都是请输入第一个数字,反正也是一点点改,一点点试才做对。
Part3 编程练习
1.找出101-200之间的所有素数
#include<stdio.h> int main() { int i,j,count =0; /*i为101到200间的数,j为从2开始的除数,count为素数个数*/ for(i=101;i<=200;i++) { /*将101赋值给i,若i小于200,则执行下一步*/ for(j=2;j<=i;j++) { /*将2赋值给j,若j比i小,就判断i%j是否为零,若为零就结束循环,;再判断下一个数*/ if(i%j==0) break; } if(j==i) { /*若除到j等于i时,说明i是素数,这时count++,输出i*/ count++; printf("%d ",i); if(count%5==0) printf("\n"); } } printf("\n101到200间有%d个素数\n",count); return 0; }
运行结果
2.输出星号
#include<stdio.h> int main() { int i,j,k; for(i=1;i<=5;i++) { for(j=1;j<=5-i;j++) { printf(" "); } for(k=1;k<=2*i-1;k++) { printf("*"); } printf("\n"); } return 0; }
运行结果
小结:真......写那个找素数的程序,费了我九牛二虎之力。开始的开始,可能是因为我听课左耳进右耳出......(老师对不起我错了!)所以开始做这题时不知从何下手,如何把判断素数,循环结构,if结构串联在一起,在我脑子里简直就是一锅浆糊。我在网上搜索类似题目,看看别的同学是怎么写的,然而发现我看不懂,好吧,只能一点点来了。老师说,编一道程序,首先要抛开语言格式的束缚,不用C语言,应该用什么方法来解决,思路是什么,我觉得真的很对。我自己先用流程图大概把思路画了一下,再把那些语句的用法好好的看了一遍,好像就有点思路了,网上搜索出来的那些写法好像也能看懂了。然而,当我自以为写的程序已经很对了的时候,却运行不出来,我只能一行行找我可能出错的地方,比如:这里只能用break不能用continue,这里要加个\n 等等。最后当我把最后一个错误i=j改成i==j后,我的程序终于正常了......
好好学习 多多实践......