C语言初步-第37讲: 循环嵌套(大奖赛计分 )<scanf(),printf()格式控制小结>
来源:互联网 发布:成都怎么样知乎 编辑:程序博客网 时间:2024/06/05 10:38
任务和代码:
/**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')就可以避免上述情况啦~
- C语言初步-第37讲: 循环嵌套(大奖赛计分 )<scanf(),printf()格式控制小结>
- C语言初步-第31讲:循环控制结构及流程图(循环的嵌套流程图)
- 第37讲-项目四-大奖赛计分
- 黑马程序员-C语言printf和scanf函数中格式控制符使用小结
- C语言-scanf与printf的格式控制
- C语言初步-第31讲:循环控制结构及流程图(简单循环的流程图)
- 第37讲项目4——大奖赛计分(2)
- C语言提高-第8讲: 函数的声明、定义和调用(歌手大奖赛计分函数版)
- C语言初步-第39讲:问题求解——求素数(输出格式控制)
- C语言初步-第31讲:循环控制结构及流程图(次数不定的循环的流程图)
- C语言输入输出格式printf(),scanf()
- c语言 printf格式控制
- 第九周:C语言:大奖赛计分
- C语言课程设计:歌手大奖赛计分程序
- C语言课程设计----歌手大奖赛计分系统
- 第2周 C语言及程序设计初步例程-37 循环嵌套
- 第37讲项目4——大奖赛计分(1)
- 第38讲-项目一-大奖赛计分(续一)
- 刷题基础----Manacher算法求解最大回文子串
- 实验一:顺序表
- Kotlin类型层级一览(翻译原文)
- @Valid配置
- 用网页实现判断某一年是否为闰年
- C语言初步-第37讲: 循环嵌套(大奖赛计分 )<scanf(),printf()格式控制小结>
- Poj 1862 Stripies【贪心+数学】
- 【实验报告】高软实验2
- leetcode Trim a Binary Search Tree 修剪二叉搜索树
- 第三周第二次课(链表)
- 如何理解const char*, char const*, char*const等
- redis基础信息
- Tensorflow 的组件 placeholder,Variable
- linux学习笔记(2)-正则表达式