实验结论:
Part1:
验证性内容:
(1)从键盘上输入三个数,让它们代表3条线段的长度,判断能否组成三角形且三角形的类型#include<stdio.h> int main(){ double a,b,c; scanf("%1f %1f %1f",&a,&b,&c); if(a+b>c && a+c>b && b+c>a){ if(a==b && a==c) printf("构成等边三角形\n"); else if(a==b||a==c||b==c) printf("构成等腰三角形\n"); else printf("构成一般三角形\n"); } else printf("不能构成三角形\n"); return 0; }
运行结果:
把 demo1.cpp中嵌套使用的if语句部分替换成以下代码:
if(a+b>c && a+c>b && b+c>a) { if(a==b || a==c || b==c) { if (a==b && a==c) printf("构成等边三角形\n"); else printf("构成等腰三角形\n"); } else printf("构成一般三角形\n"); } else printf("不能构成三角形\n");
运行结果:
换成上述语句后,也是可以运行的
拓展:把demo1.cpp中输入三边长并且判断三角形类型的代码放到while循环里,运行程序
#include <stdio.h> int main() { double a,b,c; printf("输入三角形三边:\n"); while(scanf("%lf%lf%lf",&a,&b,&c)) { if(a+b>c && a+c>b && b+c>a) { if(a==b && a==c) printf("构成等边三角形\n"); else if(a==b || a==c || b==c) printf("构成等腰三角形\n"); else printf("构成一般三角形\n"); } else printf("不能构成三角形\n"); printf("\n输入三角形三边:\n"); } return 0; }
运行结果为
(这次程序一直会运行下去,直到操作者选择关闭)
(2)用scanf()函数输入一个百分制成绩(整型量),要求输出成绩等级A,B,C,D,E。其中,90~100分为A,80~89
分为B, 70~79分为C, 60~69分为D,60分以下为E。
#include <stdio.h> int main() { int score; // 用于存放百分制分数 char grade; // 用于存放等级制分数(取值‘A‘, ‘B‘,‘C‘,‘D‘, ‘E‘) while(1) { printf("输入学生成绩: "); if(scanf("%d",&score) == 0) // 如果检测到没有成绩输入,则结束整个循环 break; if(score<0 || score > 100) { printf("输入成绩有误!\n\n"); continue; // 结束本次循环,开始下一次循环 } else if(score>=90 && score<=100) grade = ‘A‘; else if(score>=80 && score<=89) grade = ‘B‘; else if(score>=70 && score<=79) grade = ‘C‘; else if(score>=60 && score <=69) grade = ‘D‘; else grade = ‘E‘; printf("等级为: %c\n\n", grade); } return 0; }
运行结果为
用switch语句改写后:
#include <stdio.h> int main() { int score; // 用于存放百分制分数 char grade; // 用于存放等级制分数(取值‘A‘, ‘B‘,‘C‘,‘D‘, ‘E‘) while(1) { printf("输入学生成绩: "); if(scanf("%d",&score) == 0) // 如果检测到没有成绩输入,则结束整个循环 break; if(score<0 || score > 100) { printf("输入成绩有误!\n\n"); continue; // 结束本次循环,开始下一次循环 } switch(score/10){ case 10: case 9: grade = ‘A‘;break; case 8: grade = ‘B‘;break; case 7: grade = ‘C‘;break; case 6: grade = ‘D‘;break; default: grade = ‘E‘;} printf("等级为: %c\n\n", grade); } return 0; }
运行结果为
(3)理解控制语句continue和break的功能
第一个程序:
#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; }
运行结果为
第二个程序:
#include <stdio.h> int main() { int i; // 在循环语句中使用continue for(i=1; i<=5; i++) { if (i%3 == 0) // 如果i是3的倍数,则结束整个循环 break; printf("i=%d\n",i); } return 0; }
运行结果为:
思考:在循环中使用控制语句continue和break,其功能区别是什么?
答:当遇到continue语句时,程序就跳过循环体中位于该语句后的所有语句,结束这一次循环;但是break语句的作用不同,它会结束本层循环,转而执行本层循环后的语句。所以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的倍数,则结束本次循环,开始下一次循环 continue; printf("%5d", col); } printf("\n"); // 每输出完一行,换行 } return 0; }
运行结果为:
第二个程序:
#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; }
运行结果为:
思考1:在两层嵌套循环中,内层循环中如果出现continue,是否影响外层循环?
答:不影响。由第一个程序可知,内层循环出现continue出现只是影响了内层循环,而对外层循环并无影响。
思考2:在两层嵌套循环中,内层循环中如果出现break,是否影响外层循环?
答:不影响。内层循环出现break时,会中断内层循环的运行,直接进入外层循环的运行,因此对外层循环是不影响的。
Part 2:补足程序,使得程序运行。
#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; 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; else if(number<=min) min = number; } printf("最大数为: %d\n", max); printf("最小数为: %d\n", min); return 0; }
运行结果为:
使用do...while:
#include <stdio.h> int main() { int number, max, min, n; n=1; printf("输入第%d个数: ", n); scanf("%d", &number); max = number; min = number; do { ++n; printf("输入第%d个数: ", n); scanf("%d", &number); if(number>=max) max = number; else if(number<=min) min = number; }while(n<5); printf("最大数为: %d\n", max); printf("最小数为: %d\n", min); return 0; }
运行结果为:
Part 3:
1.
#include<stdio.h> int main() { int x=100,y=0; int count=0; //记录素数的个数 do { x++; for(y=2;y<=x;y++) { if(x%y==0) break; } if(x==y) { count++; printf("%d ",x); } } while(x<=200); printf("\n100~200之间有%d个素数\n",count); return 0; }
运行结果为:
2.
#include<stdio.h> int main() { int a,b,c; do { a++; for(b=1;b<=5-a;b++) { printf(" "); } for(c=1;c<=(2*a-1);c++) { printf("*"); } printf("\n"); } while(a<5); return 0; }
运行结果为:
实验总结与体会:
1.当在进行for语句和do...while语句的转化时,常常会把for和while后括号内的条件搞错,忘记改条件,且容易在其它地方忘记换条件,比如int定义的数据的初始值。
大家也可以关注一下这个小细节,可以帮助我们节约时间。
2.还是发现语言类的学习必须多练习,练习就像和外国人练口语一样,只有说出来才能熟练。
原文:https://www.cnblogs.com/blogdzm/p/10713406.html