一道C语言的题,不会做,麻烦大家帮下忙,感谢

编写一个程序,它反复要求用户输入一个整数n,后跟一系列n个数字,然后打印这些数字的平均值。程序必须使用动态内存分配函数在每次输入新整数时分配数组,并在计算每个平均值后取消分配数组。当用户为整数输入0时,程序应该停止。
程序的行为应如下(冒号后面的数字由用户输入):
输入整数:4
输入4个数字:1 2 3 4
平均值为:2.5
输入整数:0

(下面是提示)算法设计过程:
1.声明变量。最重要的是,您需要一个指向int(称为数组)的指针类型变量来存储动态内存分配函数返回的内存块的地址。此指针将存储内存块的地址,您将在其中放置用户输入的数字。
2.提示用户并读取n的值。
3.使用malloc/calloc分配一个大小为n的整数数组,将返回值分配给指针变量数组,然后将用户的整数值读取到数组中。
4.计算整数值的平均值(应该是浮点值)并打印出来。
5.释放为整数值(数组指针)分配的内存块。
6.设置一个for循环,重复步骤2到6,直到用户为整数n输入0。

首先要说的是此题有悖编程思想——计算n个整数的平均值是一件很容易的事,连数组都用不着,题目却不但要数组而且还要动态数组,这样舍近求远并不可取。

#include "stdio.h"
#include <stdlib.h>
int main(int argc,char *argv[]){
int n,*p,i,sum;
while(1){
printf("Please enter n(int 0<=n)...\n");
if(scanf("%d",&n)!=1 || n<0){
printf("Input error, exit...\n");
return 0;
}
if(n==0)
break;
if((p=(int *)malloc(sizeof(int)*n))==NULL){
printf("Application memory failure...\n");
return 0;
}
printf("Please enter %d integers...\n",n);
for(sum=i=0;i<n;scanf("%d",p+i),sum+=p[i++]);
free(p);
printf("The average are %g\n",sum/(n+0.0));
}
return 0;
}

运行样例:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-29

C语言实现,按以上输入输出格式要求,循环统计n个整数的平均值,参考代码如下:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int *a,i,n,sum;
    while(1){
     sum=0;
printf("输入整数:");
     scanf("%d",&n);
     if(n<1)return 0;
     a=(int *)malloc(n*sizeof(int));
     if(a==NULL) return 1;
     printf("输入%d个数字:",n);
    for(i=0;i<n;++i)
     scanf("%d",&a[i]);
     for(i=0;i<n;++i)
     sum+=a[i];
     printf("平均值为:%g\n",(float)sum/n);
     free(a);
}
    return 0;
}

相似回答