实验三
Part 1.(1)判断三角形的形状
#include<stdio.h> int main(){ int a,b,c; scanf("%d,%d,%d",&a,&b,&c); if(a+b>c && a+c>b && b+c>a){ if(a==b&&a==c) printf("等边三角形\n"); else if(a==b||b==c||a==c) printf("等腰三角形\n"); else printf("一般三角形\n"); } else printf("不构成三角形\n"); return 0; }
可用循环语句进行连续判断
#include<stdio.h> int main(){ int a,b,c; printf("输入三角形三边\n"); while(scanf("%d %d %d",&a,&b,&c)){ if(a+b>c&&a+c>b&&b+c>a){ if(a==b&&a==c) printf("等边三角形\n"); else if(a==b||b==c||a==c) printf("等腰三角形\n"); else printf("一般三角形\n"); } else printf("不构成三角形\n"); printf("\n输入三角形三边\n"); } return 0; }
要注意的还是一些基本问题,比如运行的时候的形式与scanf里的形式还是要一致,否则运行不了真的挺郁闷。
(2)判断学生的成绩等级
#include<stdio.h> int main(){ int score; char grade; while(1){ //1表示条件永远为真,即无限循环,可在循环体内添加某些语句,满足语句时跳出循环 printf("输入学生成绩\n"); 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<90) grade='B'; else if(score>=70&&score<80) grade='C'; else if(score>=60&&score<70) grade='D'; else grade='E'; printf("等级为%c\n\n",grade); //两个换行符 } return 0; }
我有一点好奇为什么这个代码结尾有两个\n,于是我试了试一个\n,会是怎样
原来就是换的行数不同,虽然不是什么大发现(或许老师上课的时候就讲过),但解决了疑惑。
关于while(1),continue,break是什么意思,已经在代码中标注。
当然用switch语句运行结果相同
#include<stdio.h> int main(){ int score; char grade; while(1){ printf("输入学生乘积\n"); if(scanf("%d",&score)==0) break; if(score<0||score>100){ printf("输入错误\n\n"); continue; } switch(score/10){ case 10: //case后必须有空格 case 9: grade='A';break; case 8: grade='B';break; case 7: grade='C';break; case 6: grade='D';break; default: grade='E';break; } printf("等级为%c\n\n",grade); } return 0; }
比较两个实验发现一个小细节略有不同,判断三角形形状的代码末尾处还有一个printf("输入三角形三边\n"),这是因为第一个printf("输入三角形三边\n")没有在
while循环里,所以在末尾加一个printf使每一次循环都出现“输入三角形三边”。而判断学生成绩等级while语句中开始有printf,末尾就不用了。
(2)for 循环
#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; }
#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是跳出循环即终止循环。
(3)嵌套循环
#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\n",col); } printf("\n"); } return 0; }
#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\n",col); } printf("\n"); } return 0; }
内层循环出现continue,break皆不影响外层循环。
Part 2.补写程序,判断最大最小数
#include<stdio.h> int main(){ int number,max,min,n; n=1; printf("输入第%d个数\n",n); scanf("%d",&number); max=number; min=number; while(n<5){ n++; printf("输入第%d个数\n",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; }
n<=4,也正确
n<=5,则会有6个数
Part 3.(1)
#include<stdio.h> #include<math.h> int main(){ int m,n,i; int s=0; for(n=101;n<=200;n=n+1){ m=sqrt(n); for(i=2;i<=m;i++) if(n%i==0) break; if(i>m){ printf("%5d",n); s=s+1; } }
printf("\n"); printf("共有%d个素数\n",s); return 0; }
(2)
#include<stdio.h> int main(){ int line,col; for(line=1;line<=5;line++){ for(col=5-line;col>0;col--){ printf(" "); } for(col=1;col<=line*2-1;col++){ printf("#"); } printf("\n"); } printf("\n"); return 0; }
实验结论:
已经在每个部分分别写了,不再重复。
https://www.cnblogs.com/1346si/p/10690776.html#4231907
https://www.cnblogs.com/LIUxh/p/10707964.html#4231902
https://www.cnblogs.com/zxy-345/p/10708159.html#4231899