不考虑数据的存储,直接循环累计即可。
想要数据存储:
方法一:定义一个非常大的数组,循环输入并检测输入值,累计求平均。
方法二:动态数组,根据有效输入,实时扩展数组地址长度。
方法三:把每个数字创建成结构体,构建链表,实现自由扩展和删除。
下面我的代码是用方法二写的:
#include <stdio.h>
#include <malloc.h>
int input(int **nsp);//输入任意个整数,忽略负数,输入0结束,成功返回数组长度,失败返回-1
int main()
{
int i,len,sum=0,*nums=NULL;
len=input(&nums);
printf("输入的正整数为:\n");
for(i=0;i<len;printf("%d ",nums[i]),i++)
sum+=nums[i];
printf("\n");
printf("个数为%d,平均值为%.2f\n",len,(sum*1.0)/len);
free(nums);
return 0;
}
int input(int **nsp)
{
int len=0;
int n,*nTemp=NULL,*nums=NULL;
if(*nsp) free(*nsp),nsp=NULL;
while(1)
{
scanf("%d",&n);
if(n==0) break;
if(n>0)
{
if(nums==NULL)//记录首个数字
{
nums=(int *)malloc(sizeof(int));
if(!nums) return -1;
nums[len]=n;
len++;
}
else//非首数字,扩展内存空间
{
nTemp=realloc(nums,sizeof(int)*(len+1));
if(nTemp) nums=nTemp,nTemp=NULL;
nums[len]=n;
len++;
}
}
}
*nsp=nums;
return len;
}