C语言实现-输入多个数计算平均值、排序(随机个数)

创作灵感:

        由于老师布置的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]);
	}

}

运行结果如下:

更多的需要大家自行探索啦~以上是我的学习记录,谢谢观看,欢迎交流讨论!

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值