二维数组 同时计算 练习题

  1 #include <stdio.h>
  2 /*
  3 题目1:编写程序:读取6X5的整数数组,然后显示出每行的和与每列的和
  4 例:enter row 1: 8 3  9 0 10
  5     enter row 2: 3 5 17 1  1
  6     enter row 3: 2 8  6 23 1
  7     enter row 4:15 7  3  2 9
  8     enter row 5: 6 14 2  6 0 
  9     enter row 6: 1 1  1  1  1 
 10 题目2:修改上面一题  使其提示用户输入每个学生5们测验的成绩,一共有6个学生,然后计算每个学生的总分和平均分,以及:每门测验的平均分
 11           高分和低分。    
 12 */
 13 
 14 #define M 6  //6个学生
 15 #define N 5     //5门成绩
 16 #define K 2     //高分和低分
 17 void get_row(int (*p)[N],int n);
 18 void total(int (*p)[N],int *p2,int *p3,int (*p1)[K],int n);
 19 void input_Student_ScoreSum(int *p,int m,int n);
 20 void input_Tese_avg(int *p,int n);
 21 void input_Tese_high_low(int (*p)[K],int n);
 22 int main(void)
 23 {
 24     int arr[M][N];// 6个学生的5门成绩
 25     int Student_ScoreSum[M] = {0};//每个学生的总分
 26     int Tese_sum[N] = {0};//每门测验总分
 27     int Tese_high_and_low[N][K] = {-1,101,-1,101,-1,101,-1,101,-1,101};//5门测验的高分和低分.初始化:高分初始为0分-1,即-1,低分初始为满分+1 即:101
 28 //输入6个学生的5门成绩
 29     get_row(arr,N);
 30 //每个学生的总分与每门测验的总分  分别存入Student_ScoreSum和Tese_sum ,每门测验的高分,低分存入Tese_high_and_low
 31     total(arr,Student_ScoreSum,Tese_sum,Tese_high_and_low,N);
 32 //输出每个学生的总分和平均分
 33     input_Student_ScoreSum(Student_ScoreSum,M,N);
 34 //输出每门测验的平均分
 35     input_Tese_avg(Tese_sum,M);
 36 //输出每门测验的高分和低分
 37     input_Tese_high_low(Tese_high_and_low,N);
 38 
 39 
 40     return 0;
 41 }
 42 void get_row(int (*p)[N],int n)
 43 {
 44     for(int i = 0;i<M;i++)
 45     {
 46         printf("please enter student%d five score:",i+1);
 47         for(int j = 0;j<n;j++)
 48             scanf("%d",*(p+i)+j);
 49     }
 50     return ;
 51 }
 52 
 53 void total(int (*p)[N],int *Student_ScoreSum,int *Tese_sum,int (*p1)[K],int n)
 54 {
 55     for(int i = 0;i<M;i++)
 56     {
 57 //        p1[i][0] = p[i][1] = **(p+i);   //错误原因:第一行初始化了。程序继续运行,会将第二行的元素进行比较,但是第二行的元素没有初始化,内是垃圾值,并且是很大的负数
 58                                         //所以结果是错误的。
 59         for(int j = 0;j<n;j++)
 60         {
 61             Student_ScoreSum[i] += *(*(p+i)+j);//计算每个学生的总分
 62             Tese_sum[j] += *(*(p+i)+j);//计算每门测验的总分
 63             if(*(*(p+i)+j) >p1[j][0])//计算每门测试的最高分
 64                 p1[j][0] = *(*(p+i)+j);
 65             if(*(*(p+i)+j) < p1[j][1])//计算每门测试的最低分
 66                 p1[j][1] = *(*(p+i)+j);    
 67         }
 68     }
 69     return ;
 70 }
 71 void input_Student_ScoreSum(int *p,int m,int n)//每个学生的总分和平均分
 72 {
 73     printf("-------------每个学生的总分和平均分-----------------\n\n");
 74     for(int i = 0;i< m;i++)
 75     {
 76         printf("Student%d ScoreSum = %d    ",i+1,*(p+i));//输出学生的总分
 77         printf("Student%d Scoreavg = %.2f\n",i+1,(*(p+i)*1.0)/n);//输出学生的平均分
 78     }
 79     return ;
 80 }
 81 void input_Tese_avg(int *p,int n)
 82 {
 83     printf("-------------每门功课的平均分-----------------\n\n");
 84     for(int i = 0;i<n;i++)
 85     {
 86         printf("第%d们%.2f\t",i+1,(*(p+i)*1.0)/n);//输出每门功课的平均分
 87     }
 88     putchar(10);
 89 
 90     return ;
 91 }
 92 void input_Tese_high_low(int (*p)[K],int n)
 93 {
 94     printf("-------------每门功课的高分和低分-----------------\n\n");
 95     printf("序号    高分    低分\n");
 96     for(int i = 0;i<n;i++)
 97     {
 98         printf("第%d门",i+1);
 99         for(int j = 0;j < K;j++)
100         {
101             printf("%d\t",*(*(p+i)+j));
102         }
103         putchar(10);
104     }
105     return ;
106 }

 

posted on 2018-08-22 16:49  王朝马汉  阅读(300)  评论(0编辑  收藏  举报

导航