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 }