【实验结论】
Part1:验证性内容
• demo5_1.cpp和demo5_2.cpp运行结果对比:
demo5_1 demo5_2
从运行结果可以看到,在使用continue语句的demo5_1中,当 i 的值为三的倍数时,则跳过输出 i=3 这次循环,继续执行下一次循环,直到i=5为止;而在使用break语句的demo6_2中,当 i 的值为三的倍数时,直接结束整个循环结构。
由此我们可以得出结论:在循环结构中,当遇到continue语句,程序就跳过循环体中位于该语句后的所有语句,提前结束本次循环并开始新一轮循环;而当遇到break语句时,则结束本层循环,转而执行本层循环语句后的语句。
• demo6_1.cpp和demo6_2.cpp运行结果对比:
demo6_1 demo6_2
从运行结果可以看到,在使用continue语句的demo6_1中,程序只跳过了 col=3 的那次内循环,而不影响其他的内循环和外循环;而在使用break语句的demo6_2中,当遇到 col=3 的那次内循环时,则跳过该层内循环转而执行下一次外循环。
由此我们可以得出结论:在两层嵌套循环中,内层循环不论是出现continue还是出现break,都不会影响外层循环,只会影响其所在的内循环。
Part2:补足程序,使得程序运行
• 补足后的程序源码blank.cpp
1 /* 2 编程找出5个整数的最大数和最小数 3 《C语言程序设计教程学习指导》p122实验内容(3) 4 */ 5 6 #include <stdio.h> 7 int main() { 8 int number, max, min, n; 9 10 n=1; 11 printf("输入第%d个数: ", n); 12 scanf("%d", &number); 13 14 max = number; 15 min = number; 16 17 while(n<5) { 18 n++; 19 printf("输入第%d个数: ", n); 20 scanf("%d", &number); 21 22 if(number>max) 23 max = number; 24 else if(number<min) 25 min = number; 26 } 27 28 printf("最大数为: %d\n", max); 29 printf("最小数为: %d\n", min); 30 31 return 0; 32 }
运行测试结果截图:
使用for语句实现的程序源码:
1 /* 2 编程找出5个整数的最大数和最小数 3 《C语言程序设计教程学习指导》p122实验内容(3) 4 */ 5 6 #include <stdio.h> 7 int main() { 8 int number, max, min, n; 9 10 n=1; 11 printf("输入第%d个数: ", n); 12 scanf("%d", &number); 13 14 max = number; 15 min = number; 16 17 for(n=2;n<=5;n++) { 18 printf("输入第%d个数: ", n); 19 scanf("%d", &number); 20 21 if(number>max) 22 max = number; 23 else if(number<min) 24 min = number; 25 } 26 27 printf("最大数为: %d\n", max); 28 printf("最小数为: %d\n", min); 29 30 return 0; 31 }
运行测试结果截图:
Part3:编程练习
(1)编程输出101~200之间的所有素数,并输出这一区间内素数的个数。
程序源代码:
1 #include<stdio.h> 2 #include<math.h> 3 int main() 4 { 5 int num=0,n,i,m; 6 for (n=101;n<=200;n++) 7 { 8 m=sqrt(n); 9 for(i=2;i<=m;i++) 10 if(n%i==0)break; 11 if(i>m) 12 { 13 printf("%d ",n); 14 num++; 15 if(num%5==0)printf("\n"); 16 } 17 } 18 printf("\n101~200之间共有&d个素数",num); 19 return 0; 20 }
运行结果截图:
(2)编程输出星号图案。
程序源代码:
1 # include <stdio.h> 2 int main() 3 { 4 void blank(int x); //声明blank函数 5 int a,b,c,i; 6 for(a=1;a<=9;a+=2) 7 { 8 b=(9-a)/2; 9 blank(b); //调用blank函数打印空格 10 for(c=1;c<=a;c++) //打印‘*’ 11 printf("*"); 12 blank(b); 13 printf("\n"); 14 } 15 return 0; 16 } 17 void blank(int x) //编写blank函数 18 { 19 int i; 20 for(i=1;i<=x;i++) 21 printf(" "); 22 } 23
ps:关于打印每行星号前后的空格一时没有想到更好的办法,于是想到定义一个打印空格的函数试试。
运行结果截图:
【实验总结与体会】
本次实验所接触的三种循环,感觉在解决很多问题时都非常的实用、方便,很高兴能get到这项新技能,希望能够继续深入。由于循环结构的特殊性,很多时候一些节点处还不能够理得很清楚,个人感觉把一组数据代进去把循环走几次就能够很好地解决,或者逐行逐段地调试也很有用。
给别人的评论:
http://www.cnblogs.com/neorenaissance/
https://www.cnblogs.com/blogdzm/
https://www.cnblogs.com/nuist-tyl/