C primer plus 第十章 练习12:

来源:互联网 发布:阿里云大厦是做什么的 编辑:程序博客网 时间:2024/06/07 03:54
/*=======================================================================================    编写一个程序,提示用户输入3个数集,每个数集包括5个double值。程序应当实现以下功能:    a.  把输入信息存储到一个3*5的数组中    b.  计算出每个数集(包含5个数值)的平均值    c.  计算所有数值的平均数    d.  找出这15个数中的最大值    e.  打印出结果========================================================================================*/#include <stdio.h>void arr_3m5(double ar1[], double ar2[], double ar3[], double arr[][5], int x);void ar_p(double ar1[], int x);void all_p(double arr[][5], int x);void max_arr(double arr[][5], int x);void show_arr(double ar1[],double ar2[],double ar3[],double arr[][5],int x);int main(void){    double ar1[5];    double ar2[5];    double ar3[5];    double arr[3][5];    int i=0;    printf("请输入ar1数集中的5个double值: \n");    fflush(stdout);    for(i=0;i<5;i++)        scanf_s("%lf", &ar1[i]);    printf("请输入ar2数集中的5个double值: \n");    fflush(stdout);    for(i=0;i<5;i++)        scanf_s("%lf", &ar2[i]);    printf("请输入ar3数集中的5个double值: \n");    fflush(stdout);    for(i=0;i<5;i++)        scanf_s("%lf", &ar3[i]);    show_arr(ar1,ar2,ar3,arr,5);    return 0;}void arr_3m5(double ar1[], double ar2[], double ar3[], double arr[][5], int x){    int i=0;    int j=0;    for(i=0;i<x;i++)        arr[0][i] = ar1[i];    for(i=0;i<x;i++)        arr[1][i] = ar2[i];    for(i=0;i<x;i++)        arr[2][i] = ar3[i];    printf("数组arr3*5的数据为: \n");    for(i=0;i<3;i++){        for(j=0;j<x;j++){            printf("%g\t",arr[i][j]);        }        printf("\n");    }}void ar_p(double ar1[], int x){    double total=0;    int i=0;    for(i=0;i<x;i++)        total += ar1[i];    printf("数集arr的平均值为%g.\n", total / x);}void all_p(double arr[][5], int x){    double total = 0;    int i=0;    int j=0;    for(i=0;i<3;i++)        for(j=0;j<x;j++)            total += arr[i][j];    printf("数组arr_3m5的平均值为: %g.\n", total / 15);}void max_arr(double arr[][5], int x){    double max = 0;    int i=0;    int j=0;    for(i=0;i<3;i++){        for(j=0;j<x;j++){            if(max<arr[i][j])                max = arr[i][j];        }    }    printf("数组arr_3m5的最大值为: %g.\n", max);}void show_arr(double ar1[],double ar2[],double ar3[],double arr[][5],int x){    arr_3m5(ar1,ar2,ar3,arr,5);    ar_p(ar1,5);    ar_p(ar2,5);    ar_p(ar3,5);    all_p(arr,5);    max_arr(arr,5);    return;}

以下为别人写的,可以借鉴!结构以及逻辑!

/*  ============================================================================ 12.编写一个程序,提示用户输入3个数集,每个数集包括5个double值,程序应当实现下列所有功能 a.把输入的信息存储到一个3x5的数组中 b.计算出每个数集(包含5个数值)平均值 c.计算所有数值的平均值 d.找出这15个数中最大值 e.打印出结果 每个任务需要一个单独函数来实现(使用传统C处理数组的方法),对于任务b,需要编写计算并返回 一维数组的平均值函数,循环3次调用该函数来实现任务b,对于其他任务,函数应当把整个数组做为参 数,并且完成任务c和d的函数应当向它的调用函数返回答守案。  ============================================================================  */  #include <stdio.h>  double lines(int m,int n,int s,const double  (* rain)[5]); //返回二维数组中第s行的数据平均值  void inputnum(int m,int n,double (* rain)[5]);     //向rain[m][n]输入数值  double getnum(void); //从键盘获取一个double数  double allnum(int m,int n,const double (* rain)[5]); //计算二维数组中所有数据的平均值  double allmax(int m,int n,const double (* rain)[5]); //返回二维数中最大的数值  int main(void)  {      double rain[3][5];      inputnum(3,5,rain);      for(int i=0;i<3;i++){          printf("第%d个数集的平均值:%g\n",i+1,lines(3,5,i,rain));      }      printf("数组的平均值为:%g \n",allnum(3,5,rain));      printf("数组中最大数值为:%g \n",allmax(3,5,rain));      return 0;  }  double lines(int m,int n,int s,const double (* rain)[5]){      double sums = 0;      for(int i=0;i<n;i++){          sums += rain[s][i];      }      return sums/n;  }  void inputnum(int m,int n,double (* rain)[5]){      printf("输入%dx%d二维数组的数据:\n",m,n);      for(int i=0;i<m;i++){          printf("开始输入第%d数集:\n",i+1);          for(int j=0;j<n;j++){              printf("第%d个数:",j+1);              rain[i][j] = getnum();          }      }      printf("数据输入完成,如下所示:\n");      for(int i=0;i<m;i++){              printf("第%d数集:  ",i+1);              for(int j=0;j<n;j++){                  printf("%g\t",rain[i][j]);              }      printf("\n");      }  }  double getnum(void){      double i;      char ch;      while(scanf("%lf",&i) != 1){          while((ch=getchar())!='\n'){              putchar(ch);          }          printf("输入错误,请重新输入\n");      }      return i;  }  double allnum(int m,int n,const double (* rain)[5]){      double total = 0;      for(int i=0;i<m;i++){          for(int j=0;j<n;j++){              total += rain[i][j];          }      }      return total / (double)(3*5);  }  double allmax(int m,int n,const double (* rain)[5]){      double tmax = rain[0][0];      for(int i=1;i<m;i++){          for(int j = 1;j<n;j++){              if(tmax < rain[i][j]){                  tmax = rain[i][j];              }          }      }      return tmax;  }  
0 0
原创粉丝点击