33,311
社区成员
发帖
与我相关
我的任务
分享
#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;
}
}