赞
踩
创作灵感:
由于老师布置的C语言作业中,让我们算十个输的平均值,那么问题来了,如果事先并没有说明个数,阁下又该如何应对?
通过查阅资料,可以得到“键盘缓冲区”的概念,可以通过getchar函数读取并取走键盘缓冲区的数据,这样我们只需要检测到,如果用户按下回车键(读取‘\n’)时,记录输入的个数和跳出scanf输入循环,然后将数据计入平均值函数,即可得到我们想要的答案。
具体代码如下
- #include<stdio.h>
- float Score_adver[20]={0};
- float Adver(float Score_adver[],int Count) { //定义求平均数的函数
- float Sum=0;
- int i=0;
- for(i=0;i<Count;i++) //通过对输入数据进行累加
- {
- Sum+=Score_adver[i];
- }
- return Sum/Count*1.0; //返回平均值
- }
- int main()
- {
- printf("请输入成绩:\n");
- float adver=0;
- char ch = ' '; //定义一个空格(因为进入循环会读走一个数据)
- int Count=0; //所以需要向缓存区存入一个空格
- int n = 0;
- int i = 0;
- ungetc(ch, stdin); //输入一个空格到缓存区防止跳过第一个数据)
- for(i=0;(ch=getchar())!='\n';i++){ //判断是否有回车键,若有则跳出for循环,进入函数
- scanf("%f",&Score_adver[i]); //输入数据到分数数组
- Count++; //判断输入数据的个数
- }
- adver=Adver(Score_adver,Count); //传入数组和个数,进行计算平均值
- printf("平均数是%5.2f",adver);
- }
细节:因为进入scanf循环的时候他会把第一个数据读走,所以事先要给键盘缓存区输入一个空格,让它读走的
运算结果如下:
有了此基础,基本可以解决一般的不确定数输入问题,例如:不确定个数排序问题:
- #include<stdio.h>
- float Arr[20]={0};
- void Arrange(float Arr[],int Count) { //定义求平均数的函数
- int i=0;
- int j=0;
- int t=0;
- for(j=1; j<Count; j++) { //冒泡排序法对十个数据开始排序
- for(i=0; i<(Count-j); i++) { //通过前一个数组与与后一个数组比较大小
- if(Arr[i]>Arr[i+1]) { //如果前一个小于后一个,则相互交换一下位置
- t=Arr[i];
- Arr[i]=Arr[i+1];
- Arr[i+1]=t;
- }
- }
- }
- }
- int main()
- {
- printf("请输入成绩:\n");
- float adver=0;
- char ch = ' '; //定义一个空格
- int Count=0;
- int n = 0;
- int i = 0;
- ungetc(ch, stdin); //输入一个空格到缓存区防止跳过第一个数据
- for(i=0;(ch=getchar())!='\n';i++){ //判断是否有回车键,若有则跳出for循环,进入函数
- scanf("%f",&Arr[i]); //输入数据到分数数组
- Count++; //判断输入数据的个数
- }
- Arrange(Arr,Count);
- printf("\n排序后的数如下:\n"); //输出排序后的数组
- for(i=0; i<Count; i++) {
- printf("%.2f\t",Arr[i]);
- }
-
- }
运行结果如下:
更多的需要大家自行探索啦~以上是我的学习记录,谢谢观看,欢迎交流讨论!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。