实验三
Part 1:验证性实验
- 结合程序demo5_1.cpp和demo5_2.cpp运行结果对比,总结控制语句continue和break的功能区别:
demo5_1.cpp的运行结果:
demo5_2.cpp的运行结果:
观察运行结果,显然可以发现:
- continue语句只结束本次循环,而不是终止整个循环的执行;
- break语句直接结束整个循环过程,不再判断执行循环的条件是否成立。
- 结合程序demo6_1.cpp和demo6_2.cpp运行结果对比,总结控制语句continue和break在嵌套循环中的功能区别:
demo6_1.cpp:
demo6_2.cpp:
观察运行结果,显然可以发现:
两个循环里break 和continue 只会影响内层循环,不会影响外层循环。
Part 2:补足程序,使得程序运行
- 补足后的程序源码blank.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<5) { 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=1; printf("输入第%d个数: ",n); scanf("%d",&number); max=number; min=number; n++; for(;n<=5;n++){ printf("输入第%d个数: ",n); scanf("%d",&number); if(max<number) max=number; if(min>number) min=number; } printf("最大数为: %d\n",max); printf("最小数为: %d\n",min); return 0; }
运行结果:
- 使用do...while语句实现
原代码:
#include<stdio.h> int main(){ int number,max,min,n=1; printf("输入第%d个数:",n); scanf("%d",&number); max=number; min=number; n++; do{ printf("输入第%d个数:",n); scanf("%d",&number); switch(number>max){ case 1:max=number;break; default:switch(number<min){ case 1:min=number;break; default:break; }break; } n++; }while(n<=5); printf("最大数为:%d\n最小数为:%d\n",max,min); return 0; }
运行结果:
Part 3: 编程练习
- 编程输出101~200之间所有素数,并输出这一区间内素数个数。
源代码:
#include<stdio.h> #include<math.h> int main(){ int a=101,b,n=0; do{ for(b=2;b<=sqrt(a);b++) if(a%b==0) break; if(b>sqrt(a)){ printf("%d ",a); n++; if(n%5==0){ printf("\n"); } } a++; }while(a>=101&&a<=200); printf("\n100~200之间共有%d个素数",n); return 0; }
运行结果:
- 编程打印指定图形:
源代码:
#include<stdio.h> int main(){ int line=1,n; do{ for(n=0;n<=4-line;n++){ printf(" "); } for(n=0;n<=2*(line-1);n++){ printf("*"); } printf("\n"); line++; }while(line<=5); return 0; }
运行结果:
实验总结与体会
- part 1判断三角形的部分,很明显三个程序都是可以正常运行的。只是在编写程序的时候需要注意:
- 原代码和while循环代码在处理的时候,判断三角形形状的三条语句是并列的,无先后顺序(每一个条件独立判断);而替换语句是由三个if语句嵌套而成,运行时是由先后顺序的(在上一级条件成立的情况下再去判断下一级条件是否成立),因此在自己编程时一定要现将其中的逻辑关系梳理清楚。
- while的好处在于,可以在不退出程序的情况下进行连续的判断。
- 判断成绩的部分,两个程序的运行也是完全相同的。在选择使用switch和if...else语句时,我认为应当视情况而定。
- switch语句的优势是简明,一目了然(特别是如本题嵌套层数少,分支情况较多时),可以快速地看出各个分支条件的区别,结果的不同。
- if语句的优势是既可以嵌套,又可以选择,更加多元。比如后面的大小值判断的题目,我分别使用了if和switch两种方法。显然,if语句就显得更加直接简明,而switch语句则需要人为构造嵌套,反而看着不太协调。
p.s.可以发现,我们编写的程序越来越复杂了。为保证正确率,减少错误,有几个细节还是值得注意:
- 注意嵌套的使用。嵌套就必然面临几个问题:什么时候嵌套结束,使用嵌套想要达成么样的效果。因此括号的使用(特别是不要小看编译器的对齐线),逻辑的判断就非常重要;
- 边界值的确定。变量从多少开始(比如"0"还是"1"),到什么条件成立时结束(比如">"还是">=")都会对程序的运行结果产生影响。有时候影响虽小,但其实考试时就有可能影响得分。比如这次作业的最后一题,大家输出的图形的确是一个倒三角。但如果仔细观察,很多同学的图形前面是有一个空格的,而老师在实验要求的提示中明确说了最后一行的前面空格数为零。导致这个问题的原因就是控制空格输出的条件使结果多输出了一遍。平时练习时并不是什么大问题,但如果在考试里就有可能成为扣分点。
作为初学者,希望可以和大家互相学习,共同进步吧!
评论地址
https://www.cnblogs.com/jiuyuan/p/10713265.html
https://www.cnblogs.com/radius1/p/10693079.html
https://www.cnblogs.com/wyx-wyx/p/10705872.html