C语言初步-第37讲: 循环嵌套(大奖赛计分 )<scanf(),printf()格式控制小结>
2017-09-23 20:29
267 查看
任务和代码:
![](https://img-blog.csdn.net/20170923203657000)
知识点总结:
1.max、min设定时的小技巧。
2.scanf()可以进行输入格式控制的,比如scanf("%6d",1234); 是指整个字符长度为6,输出结果是 1234,前面俩空格,但是不能控制输入的小数点位数,如
scanf("%6.2d",1234);
printf()则可以控制输出小数点后的位数,比如printf("%10.3f\n",1234.56),是指整个字符长度为10,小数点后三位,不足则前面用空格补齐。
3.scanf()内不需要”\n“,按换行键后自动停止输入,输入的时候多余的部分会放入缓存区。
4.scanf()里的%f对应的是float,%lf对应的是double; printf()里的%f对应的是double,%lf对应long double;
精度小的转换成精度大的,允许。如float i; printf(%f",i);
反之,绝对不允许。如double i;scanf(%f",i);则是错误的;
int i;printf("%f",i) 也是错误的。
心得:
这次把输入输出语句好好补了补,温故知新,哈哈哈哈,以后遇到新的再更新。
任务和代码:
![](https://img-blog.csdn.net/20170925112237740)
知识点总结:
循环的嵌套
心得:
1.在初始化 max=0,min=10,sum=0;的时候,应该在
if(x>max)
max=x;
if(x<min)
min=x;
之前,否则很可能出错
2.自己碰到循环的嵌套的时候应该一步步来,在积木上添积木
代码和程序:
运行结果:
![](https://img-blog.csdn.net/20170925164031770)
知识点总结:
if() break; if() continue;语句在循环语句中的使用。
break回到循环体之外,continue回到循环体之前。
心得:
1.在for循环体中使用continue;变量仍+1;
2.使用do() while();或while();语句可以避免上述问题,但在变量赋值的时候,不注意变量的位置,很容易出错。
*注:上述两段代码有两处错误
1.缺少语句fflush(stdin); //将输入缓冲清空,否则getchar()会读入之前录入中的回车等符号
2.while((c=getchar())!='N'&&(c=getchar())!='n');这条语句有错误,详细如下:
while((c=getchar())!='n'&&(c=getchar())!='N');
此时按n可以退出,按N不可退出;
换成while((c=getchar())!='N'&&(c=getchar())!='n');
此时按N可以退出,按n不可退出
换成c=getchar();放在fflush(stdin);之后
while(c!='n'&&c!='N');
此时按N或n均可以退出
单独换成while((c=getchar())!='N');
按N可以退出
单独换成while((c=getchar())!='n');
按n可以退出
原因:把getchar()写在同一个判断语句中,比如if(getchar()='N'||getchar()='n'),输入n再回车,第一个getchar()读入n,第二个读入enter,所以不会执行判断句后的语句。
改成c=getchar();if(c='N'||c='n')就可以避免上述情况啦~
/* *Copyright (c)2017 CSDN学院 *All rights reserved *文件名称:main.c *作者: Osseyda 完成日期:2017.9.23 *版本号:v2. * *问题描述:在歌手大奖赛中,有10个评委为参赛的选手打分,分数为1~10分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。 *问题输出:输出该学生的平均得分 */ #include <stdio.h> int main(){ int i; double max=0,min=10,sum=0,x; for(i=1;i<=10;i++){ printf("第%d位评委打分为:",i); scanf("%lf",&x); if(x>max) max=x; if(x<min) min=x; sum+=x; } printf("该选手平均分为:%.2f",(sum-max-min)/8); return 0; }运行结果:
知识点总结:
1.max、min设定时的小技巧。
2.scanf()可以进行输入格式控制的,比如scanf("%6d",1234); 是指整个字符长度为6,输出结果是 1234,前面俩空格,但是不能控制输入的小数点位数,如
scanf("%6.2d",1234);
printf()则可以控制输出小数点后的位数,比如printf("%10.3f\n",1234.56),是指整个字符长度为10,小数点后三位,不足则前面用空格补齐。
3.scanf()内不需要”\n“,按换行键后自动停止输入,输入的时候多余的部分会放入缓存区。
4.scanf()里的%f对应的是float,%lf对应的是double; printf()里的%f对应的是double,%lf对应long double;
精度小的转换成精度大的,允许。如float i; printf(%f",i);
反之,绝对不允许。如double i;scanf(%f",i);则是错误的;
int i;printf("%f",i) 也是错误的。
心得:
这次把输入输出语句好好补了补,温故知新,哈哈哈哈,以后遇到新的再更新。
任务和代码:
/*问题描述:拓展为多人版,输出当前选手的最后得分后,提示“按任意键计算下一位选手的成绩,退出请选择N:”如果输入的不是N或n,可以为下一位选手计算成绩。 *问题输出:输出多个学生的成绩,每个学生都有10个评委的打分及平均分 */ #include <stdio.h> int main(){ int i; char c; double max,min,sum,x; do{ max=0,min=10,sum=0; for(i=1;i<=10;i++){ printf("第%d位评委打分为:",i); scanf("%lf",&x); if(x>max) max=x; if(x<min) min=x; sum+=x; } printf("该选手平均分为:%.2f",(sum-max-min)/8); printf("\n"); printf("请按任意键继续:"); } while((c=getchar())!='N'&&(c=getchar())!='n'); return 0; }运行结果:
知识点总结:
循环的嵌套
心得:
1.在初始化 max=0,min=10,sum=0;的时候,应该在
if(x>max)
max=x;
if(x<min)
min=x;
之前,否则很可能出错
2.自己碰到循环的嵌套的时候应该一步步来,在积木上添积木
代码和程序:
*问题描述:在前一题的基础上,增加功能,若用户输入不在0-10范围内,则立即要求重输,直到正确。 *问题输出:输入1~10分外重新输入,直到正确。 */ #include <stdio.h> int main(){ int i; char c; double max,min,sum,x; do{ i=1;max=0,min=10,sum=0; do{ printf("第%d位评委打分为:",i); scanf("%lf",&x); if(x>10||x<0) continue; if(x>max) max=x; if(x<min) min=x; sum+=x; i++; } while(i<=10); printf("该选手平均分为:%.2f",(sum-max-min)/8); printf("\n"); printf("请按任意键继续:"); } while((c=getchar())!='N'&&(c=getchar())!='n'); return 0; }
运行结果:
知识点总结:
if() break; if() continue;语句在循环语句中的使用。
break回到循环体之外,continue回到循环体之前。
心得:
1.在for循环体中使用continue;变量仍+1;
2.使用do() while();或while();语句可以避免上述问题,但在变量赋值的时候,不注意变量的位置,很容易出错。
*注:上述两段代码有两处错误
1.缺少语句fflush(stdin); //将输入缓冲清空,否则getchar()会读入之前录入中的回车等符号
2.while((c=getchar())!='N'&&(c=getchar())!='n');这条语句有错误,详细如下:
while((c=getchar())!='n'&&(c=getchar())!='N');
此时按n可以退出,按N不可退出;
换成while((c=getchar())!='N'&&(c=getchar())!='n');
此时按N可以退出,按n不可退出
换成c=getchar();放在fflush(stdin);之后
while(c!='n'&&c!='N');
此时按N或n均可以退出
单独换成while((c=getchar())!='N');
按N可以退出
单独换成while((c=getchar())!='n');
按n可以退出
原因:把getchar()写在同一个判断语句中,比如if(getchar()='N'||getchar()='n'),输入n再回车,第一个getchar()读入n,第二个读入enter,所以不会执行判断句后的语句。
改成c=getchar();if(c='N'||c='n')就可以避免上述情况啦~
相关文章推荐
- 如何像printf一样控制cout的输出格式?#include <iomanip>!
- 黑马程序员-C语言printf和scanf函数中格式控制符使用小结
- C语言-scanf与printf的格式控制
- 【C语言学习笔记】printf,%n格式控制符中的异类?
- C语言的printf格式控制问题(3)
- C语言<三>-控制流
- printf/scanf格式控制符的完整格式
- c语言 printf()输出格式控制
- c语言 printf格式控制
- C语言里printf函数格式控制符的完整格式
- MSP430程序库<四>printf和scanf函数移植
- <C语言>printf的对齐输出
- C语言里printf函数格式控制符的完整格式
- c语言 printf()输出格式控制
- printf和scanf格式控制
- #include <stdio.h> //c库要.h。printf("Input n:\n");scanf("%d",&n);
- C语言里printf函数格式控制符的完整格式
- c语言 printf()输出格式控制
- C语言初步-第39讲:问题求解——求素数(输出格式控制)
- 第三章数程序设计初步--控制结构综合项目3-1大奖赛计分拓展