用cfree的大神进来看看。

freelywinder 2014-08-27 08:42:35
#include<stdio.h>
#define ROW 3
#define COL 5
#define ROWAVE 0
#define ALLAVE 1
#define MAX 2
#define SHOW 4
double row_ave(int c,double ar[]);//计算某一行元素的均值,c是每行中元素个数,ar是要计算的那行的首地址
double all_ave(int row,int col,double ar[row][col]);//计算全部数值的平均数。声明变长数组ar,其中row,col是它的行列数
double max(int r,int c,double ar[r][c]);//计算全部数值中最大的数。参数同上
void show(int type,int r,int c,double ar[r][c]);//根据输入的类型显示相应的数据。type是类型。后面的参数同上
void main()
{
double arr[ROW][COL];
int r=0;
int c=0;
double rowave;
double allave;
double max;

printf("请输入三个数集,每个数集包括五个值\n");
while(r<ROW)
{
printf("请输入第%d个数集:\n",r+1);
//上面一行提示输入,下面一行获取用户输入的值,一次输入5个(即一行),每个数字用单个空格间隔。

//但是目前运行结果表示它是倒序存储的,也就是第一个输入的存在了arr[r][c+4]里,而最后一个输入的
//存在了arr[r][c]里面 ,此处求解

scanf("%Lf %Lf %Lf %Lf %Lf",&arr[r][c],&arr[r][c+1],&arr[r][c+2],&arr[r][c+3],&arr[r][c+4]);
r++;//将行数加一
c=0;//将列数置零
}
show(SHOW,ROW,COL,arr);//显示数组
show(ROWAVE,ROW,COL,arr);//显示每一行的平均值
show(ALLAVE,ROW,COL,arr);//显示全部数值的平均值
show(MAX,ROW,COL,arr); //显示最大的数值
}

double row_ave(int c,double ar[])
{
int index;
double tot=0;
double ave=0;
for(index=0;index<c;index++)//计算获取到的行的数值的和
tot+=ar[index];
ave=tot/c;//求平均
return ave;
}

double all_ave(int r,int c,double ar[r][c])
{
int i,j;
double tot=0;
double ave=0;

for(i=0;i<r;i++)//计算全部值的和
{
for(j=0;j<c;j++)
tot+=ar[i][j];
}
ave=tot/(r*c);//求平均
return ave;
}

double maxium(int r,int c,double ar[r][c])
{
int i,j;
const double * max;//指向最大值
max=ar;//初始化为指向数组首元素
for(i=0;i<r;i++)//循环比较
{
for(j=0;j<c;j++)
{
if(*max<ar[i][j])//如果当前指向值比正在比较的值小,那么就让max指向新的值
max=&ar[i][j];
}
}
return *max;//返回最大值
}

void show(int type,int r,int c,double ar[r][c])
{
int i=1;
int n,m;
switch(type)//根据类型选择处理方式
{
case ROWAVE://计算并显示行平均
while(i<=r)
{
//从第一行开始计算,每计算一次,行号加一,直到到达最大停止。

//但是目前的问题是该语句目前返回了3次第三行的均值,而不是1,2,3每行的均值

printf("第%d个数集的平均值是:%5.2Lf\n",i,row_ave(COL,ar[i-1]));
i++;
}
break;

case ALLAVE://计算并显示全部值的均值
printf("所有数值的平均数是:%5.2Lf\n",all_ave(ROW,COL,ar));break;

case MAX://计算并显示最大值
printf("所有数的最大值是:%5.2Lf\n",maxium(ROW,COL,ar));break;

case SHOW://显示获取到的数组
for(n=0;n<r;n++)
{
for(m=0;m<c;m++)
printf("%5.2Lf",ar[n][m]);
printf("\n");
}
break;
}
}

这个程序的目的是,让用户输入一个3x5的数组,然后分别编写子函数,计算每一行的平均数(该子函数每调用一次计算一行的均值。总共调用3次),编写一个子函数计算整个数组的均值,编写一个函数找出最大值,再编写一个函数打印出这些结果。而且函数参量要用变长数组。
程序编译成功,但是在我输入数组的值之后,它的存储方式是倒序的,比如我输入1,2,3但是我显示数组时显示的是3,2,1。
还一个问题是计算每行的均值时,循环三次调用,但是结果每一行的均值显示的都是第三行的均值。
以上两个问题困扰我一个下午了,麻烦知道bug在那的大神不吝赐教啊~
...全文
204 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧