数组(2021.10.3)

这篇博客介绍了如何编写C程序来计算用户输入数字的平均数,并输出大于平均数的数。文章强调了在使用固定大小数组时可能存在的越界风险,并提供了一个动态统计[0,9]范围内整数出现次数的程序作为示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初试数组

1.如何写一个程序计算用户输入的数字的平均数?

#include<stdio.h>

int main()
{
	int x;
	double sum=0;
	int cnt=0;
	
	scanf("%d",&x);
	while(x!=-1)
	{
		sum +=x;
		cnt++;
		scanf("%d",&x);
	}
	if(cnt>0){
		printf("%f\n",sum/cnt);
	}
	return 0;
 } 

此时不需要记录输入的每个数

2.如果同时还需要输出每一个大于平均数的数呢?这时候就要想办法把前面输入的每一个数记录下来,就要用到数组了。

#1定义数组   int number[100];    这个数组里面的每一个单元都是一个int,数组的大小为100,可以放下100个int;

#2对数组中的元素赋值   number [cnt] = x;    cnt从零不断增长的过程中,我们让number这个数组中cnt这个位置上的那个单元等于x,即x不断的往后放。例如,第一个x放到number[0]的位置,第二个x放到number[1]的位置

#3遍历数组,使用数组   再通过一个循环判断并输出数组中大于平均数的数字,判断过程就是遍历整个数组的过程。

改造后如下:

#include<stdio.h>

int main()
{
	int x;
	double sum=0;
	int cnt=0;
	
	scanf("%d",&x);
	int number[100];                 //#1
	while(x!=-1)
	{
		number[cnt]=x;               //#2
		sum +=x;
		cnt++;
		scanf("%d",&x);
	}
	if(cnt>0){
		printf("%f\n",sum/cnt);
	}
	int i;                           //#3
	for(i=0;i<cnt;i++)
	{   if(number[i]>sum/cnt)
	    {	printf("%d\n",number[i]);
		}
	}
	return 0;
 } 

 但其实这个程序是危险的,后续会说到。

数组的认识

定义数组:

<类型>变量名称[元素数量];

  int grades[100];   double weight[20].

数组的特点:

元素的数量是整数,且在C99之前,元素数量必须是编译时刻确定的字面量。

数组是其中所有的元素具有相同的数据类型,一旦创建,不得改变大小,且数组中的元素在内存中是联系依次排列的。

数组的单元:

数组的每个单元就是数组类型的一个变量,使用数组时放在[]中的数字叫做下标或索引,下标一定是从0开始计数的。

 所以计算平均数中直接限制元素数量为100的做法是很危险的,因为无法保证输入的数量不超过100,容易出现越界的情况。如果是C99的编译器,可以这样做:

使数组的大小变成一个动态的值,随用户输入的大小而定。 

数组应用:统计个数 

写一个程序,输入数量不确定的[0,9]范围里的整数,统计每一种数字出现的次数,输入-1表示结束。

#include<stdio.h>

int main(void)
{
	const int number = 10;			//数组的大小 
	int x;
	int count[number];			    //定义数组 
	int i;
	
	for(i=0;i<number;i++){			//利用for循环初始化数组 
		count[i] = 0;
	}
	scanf("%d",&x);
	while(x != -1){
		if(x>=0&&x<=9){
			count[x]++;				//数组参与运算 
		}
		scanf("%d",&x);
	}
	for(i=0;i<number;i++){			//遍历数组输出 
		printf("%d:%d\n",i,count[i]);
	}
	
	return 0;
}		

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值