VC用指针实现读入一行数列,求数列的和、平均值、最大值、最小值。无错误无警告程序运行后却出错!期待高手

来源:百度知道 编辑:UC知道 时间:2024/05/29 19:38:52
#include<stdio.h>
void abc(int x[],int y,int *sum,float *avg,int*max,int *min){
int a,b,c,d,i,*p;
for(i=0;i<y;i++) *sum=*sum+x[i];
*avg=*sum/y;
*max=x[0];
a=x[0];
b=x[0];
p=x;
for(i=0;i<y;i++){
if(*(max+1)>*max){
c=*p;
*p=*(p+1);
*(p+1)=c;
}
}

for(i=0;i<y;i++){
if(*(min+1)<*min){
d=*p;
*p=*(p+1);
*(p+1)=d;
}
}
}

void main(){
int num[80],i,j,he,zuida,zuixiao;
float pingjun;
printf("请输入你要输入数字的个数:\n");
scanf("%d",&j);
printf("请输入%d个数字:\n",j);
for(i=0;i<j;i++) scanf("%d",&num[i]);
abc(num,j,&he,&pingjun,&zuida,&zuixiao);
printf("它们的和是:\n它们的平均值是:\n它们的最大值是:\n它们的最小值是:\n",he,pingjun,zuida,zuixiao);
}

根据我改的代码,你看看什么有问题吧

#include<stdio.h>
void abc(int x[],int y,int *sum,float *avg,int*max,int *min){
int i;
*max=x[0];
*min=x[0];
for(i=0;i<y;i++){
*sum=*sum+x[i];
if (x[i]>*max)
{
*max=x[i];
}
if (x[i]<*min)
{
*min=x[i];
}
}
*avg=(float)(*sum/y);
}

void main(){
int num[80],i,j,he=0,zuida,zuixiao;
float pingjun;
printf("请输入你要输入数字的个数:");
scanf("%d",&j);
printf("请输入%d个数字:",j);
for(i=0;i<j;i++){
scanf("%d",&num[i]);
}
abc(num,j,&he,&pingjun,&zuida,&zuixiao);
printf("总和是:%d\t平均值是:%f\t最大值是:%d\t最小值是:%d\n",he,pingjun,zuida,zuixiao);
}

请先了解一下参数的传递形式,你的和变量,还有其它的变量全不是以实参的形式传值给调用函数,调用函数在赋值以后,就会释放掉这些值,实参的值是没有的,所以不能输出,你可以在子函数中输出这些值,或者换用一下参数的传递形式