首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这段程序错在哪里了?解决思路

2012-03-09 
这段程序错在哪里了?#includestdio.hintmain(){inttotal(int*num,intn)inti,s[5],*max,*min,aver,*pma

这段程序错在哪里了?
#include   <stdio.h>
int   main()
{
int   total(int   *num,int   n);
int   i,s[5],*max,*min,aver,*p;
max=s;min=s;
p=s;
printf( "please   input   five   numbers:\n ");
for(i=0;i <5;i++,p++)
    scanf( "%d ",p);
printf( "\n ");
p=s;
for(i=0;i <5;i++,p++)
printf( "%2d ",*p);
printf( "\n ");
aver=total(s,5);
printf( "aver=%d,maxs=%d,mins=%d\n ",aver,*max,*min);
}

int   total(int   *num,int   n)
{
int   i,aver,*maxs,*mins;
aver=*num;maxs=num;mins=num;
for(i=1;i <n;i++)
  {   aver=aver+*(num+i);
          if(*(num+i)> *maxs)
              *maxs=*(num+i);
          else   if(*(num+i) <*mins)
                            *mins=*(num+i);
      }  
aver=aver/n;
return   (aver);
}

程序要求输入五个数,然后分别输出平均值,最大值和最小值
运行后只有aver是正确的,而max和min都得不到想要的结果
把它们做为函数参数也不行,不知问题出在哪里了?

[解决办法]
你的最大值和最小值都没有返回,当然没法输出了
#include <stdio.h>
int main()
{
int total(int *,int ,int*,int*);
int i,s[5],max,min,aver,*p;//,*max,*min;
//max=s;min=s;
p=s;
printf( "please input five numbers:\n ");
for(i=0;i <5;i++,p++)
scanf( "%d ",p);
printf( "\n ");
p=s;
for(i=0;i <5;i++,p++)
printf( "%2d ",*p);
printf( "\n ");
aver=total(s,5,&max,&min);//将max和min的地址传入函数
printf( "aver=%d,maxs=%d,mins=%d\n ",aver,max,min);
}

int total(int *num,int n,int *maxs,int *mins)
{
int i,aver;//,*maxs,*mins;
aver=*num;*maxs=*num;*mins=*num;
for(i=1;i <n;i++)
{ aver=aver+*(num+i);
if(*(num+i)> *maxs)
*maxs=*(num+i);
else if(*(num+i) <*mins)
*mins=*(num+i);
}
aver=aver/n;
return (aver);
}

[解决办法]
错误原因:max,min只是一个局部变量。使用到int total()函数中,试图更改其值不成功!
更正方法一:将max,min设成全局变量!
方法二:将max,min做为地址传递传到int total()中,(二楼已给出)

更正方法一:
#include <stdio.h>
int *max ,*min;//更正第一步
int main()
{
int total(int *num,int n);
int i,s[5],aver,*p;//第二步将原来的去掉*max ,*min
max=s;min=s;
p=s;
printf( "please input five numbers:\n ");
for(i=0;i <5;i++,p++)
scanf( "%d ",p);
printf( "\n ");
p=s;
for(i=0;i <5;i++,p++)
printf( "%2d ",*p);
printf( "\n ");
aver=total(s,5);
printf( "aver=%d,maxs=%d,mins=%d\n ",aver,*max,*min);
}

int total(int *num,int n)
{
int i,aver;//第二步将下面所有的*maxs,*mins用全局变量*max,*min换.
aver=*num;max=num;min=num;
for(i=1;i <n;i++)
{ aver=aver+*(num+i);
if(*(num+i)> *max)
*maxs=*(num+i);
else if(*(num+i) <*min)
*min=*(num+i);
}
aver=aver/n;
return (aver);
}
//更改完成!
程序要求输入五个数,然后分别输出平均值,最大值和最小值
运行后只有aver是正确的,而max和min都得不到想要的结果
把它们做为函数参数也不行,不知问题出在哪里了?

热点排行