实验三(4.9)
实验结论
part 1:验证性内容
1.体会并说明在循环中continue与break的功能与区别
(1)continue
#include <stdio.h> int main() { int i; // 在循环语句中使用continue for(i=1; i<=5; i++) { if (i%3 == 0) // 如果i是3的倍数,则结束本次循环,开始下一次循环 continue; printf("i=%d\n",i); } return 0; }
可观察到跳过是3的倍数的数字输出,继续循环
(2)break
#include <stdio.h> int main() { int i; // 在循环语句中使用break for(i=1; i<=5; i++) { if (i%3 == 0) // 如果i是3的倍数,则结束整个循环 break; printf("i=%d\n",i); } return 0; }
可观察到跳过3倍数数字的输出,且提前结束本层循环,执行后面语句
continue与break二者的区别在于跳过后是否继续本层循环,还是跳出结束本层循环
2.体会并回答在两层嵌套循环中,内层出现continue或出现break,是否影响外层循环?
(1)内层出现continue
#include <stdio.h> const int LINE=3; // 定义符号常量LINE const int COLUME=5; // 定义符号常量COLUME int main() { int line; // 定义变量line, 用来控制行数 int col; // 定义变量col, 用来控制列数 // 输出LINE行信息 for(line=1; line<=LINE; line++) { // 每一行中,利用循环,输出各列信息 for(col=1; col<=COLUME; col++) { if(col%3 == 0) // 如果col是3的倍数,则结束本次循环,开始下一次循环 continue; printf("%5d", col); } printf("\n"); // 每输出完一行,换行 } return 0; }
(2)内层出现break
#include <stdio.h> const int LINE=3; // 定义符号常量LINE const int COLUME=5; // 定义符号常量COLUME int main() { int line; // 定义变量line, 用来控制行数 int col; // 定义变量col, 用来控制列数 // 输出LINE行信息 for(line=1; line<=LINE; line++) { // 每一行中,利用循环,输出各列信息 for(col=1; col<=COLUME; col++) { if(col%3 == 0) // 如果col是3的倍数,则结束内层循环体 break; printf("%5d", col); } printf("\n"); // 每输出完一行,换行 } return 0; }
则由观察可得,无论是使用二者哪一个语句,输出行数均是3行,即continue及break均不影响外层循环,只对填写本层起作用
part 2:补足程序,使程序运行
(1)blank1.cpp<输出五个整数中的最大数与最小数>
#include <stdio.h> int main() { int number, max, min, n; n=1; printf("输入第%d个数: ", n); scanf("%d", &number); max = number; min = number; while(n<=4) { 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; }
值得注意的地方:一开始我在while后的括号中填的是n<=5,运行后出现了输入六个数的情况,于是我重新仔细想了想,发现应该填n<=4,原因是这样的,循环前输入了一次数,这个数直接进入循环,先自增之后再要求输入,此时已经算输入第二个数了。同样的道理,当n=4作为通行证进入循环时,直接要求输入第五个数了。我想是否能改进一下,是的while后的条件能变成n<=5.所以抱歉,容我再想想。
(2)尝试用for来做这道题
#include<stdio.h> int main(){ int max,min,n,number; n=1; printf("请输入第%d个数字:",n); scanf("%d",&number); max=number; min=number; for(n=2;n<=5;++n) { printf("请输入第%d个数字:",n); scanf("%d",&number); if(number>max) max=number; if(number<min) min=number; } printf("最大数为:%d",max); printf("最小数为:%d",min); return 0; }
我感到太开心了,因为之前我一直不熟练for语句的使用,刚刚上完体育课,坐在寝室写程序,我自己一次性就把这个for语句写出来了,wow~ ⊙o⊙,好happy
part 3:尝试编写两个程序
(1)素数的问题
让计算机自己计算素数
#include<stdio.h> #include<math.h> int main() { int m,n,i; for(n=101;n<=200;++n) { m=sqrt(n); for(i=2;i<=m;++i) if(n%i==0)break; if(i>m) printf("%d\t",n); } return 0; }
我的思路就是:首先想到传统的输一个数进去判断是不是素数,这个题不同的方法就是要计算机自己循环,自己挨着挨着计算,所以我就在外面套了一个for语句来让计算机自己计算n的值。
(2)输出星号的图案
#include<stdio.h> int main(){ int line,col,star; for(line=1;line<=5;++line) { for(col=1;col<=5-line;++col) printf(" "); for(star=1;star<=2*line-1;++star) printf("*"); printf("\n"); } return 0; }
一开始我打出来的星号是一整行,后来才发现是我循环每行后没有打换行的符号。以后一定要更加注意这些问题。
实验总结与体会:
这一次实验中我学到了很多的东西,比如说循环,循环嵌套的应用。掌握了输出图案的有效方法,解决了素数的问题
我的实验感悟就是:我们在写程序的时候先构思一个整体框架,我们需要做什么,我们需要用到哪些知识。等到我们把代码写出来后,先不要直接运行,先自己读一遍自己的程序,把自己想象成计算机,把代码转换出来,看看是否能得到自己预期的答案,因为这个方法不仅可以找出自己的问题,还可以锻炼自己对代码的阅读能力。
还有最后最重要的感悟就是,自己每天必须得挨个练习书上的代码,这样才能够熟能生巧。灵活运用。
我的评论:https://www.cnblogs.com/yaoxioana/p/10707530.html
https://www.cnblogs.com/LIUxh/p/10707964.html
https://www.cnblogs.com/angel-x/p/10706562.html