|
发表于 2016-7-27 23:52:43
|
显示全部楼层
第一个问题:全局变量是可以赋值的!
本帖最后由 Whitehat_K 于 2016-7-27 23:56 编辑
- #include <stdio.h>
- #define N 2
- #define M 2
- float a[N][M];
- float a_stu[N], a_cour[M];
- int r,c;
- int main ()
- {
- int i,j;
- float h,k;
- float f1(void);
- float f2();
- void f3(void);
- void f4(void);
- void f5(void);
- f3();
- f4();
- f5();
- for (i=0;i<N;i++)
- {
- printf("\n No %2d",i+1);
- for (j=0;j<M;j++)
- printf("%8.2f",a[i][j]);
- printf("%8.2f",a_stu[i]);
- }
-
- printf("每门课的平均成绩为"); /*每门课的平均分*/
- for (j=0;j<M;j++)
- printf("%8.2f",a_cour[j]); /*a_cour[j]*/
- printf ("\n");
- h=f2();
- k=f1();
- printf("最高分为:%7.2f 是第 %d 位同学的第 %d 门课程",h,r,c);
- printf("方差为:%8.2f\n",k);
- return 0;
- }
- void f3(void)
- {
- int i,j;
- for (i=0;i<N;i++)
- { printf("请输入第 %2d 位同学的成绩:\n",i+1);
- for (j=0;j<M;j++)
- scanf("%f",&a[i][j]);
- }
- }
- void f4(void)
- {
- int i,j;
- float sum=0;
- for (i=0;i<N;i++)
- {
- for (j=0, sum=0;j<M;j++) /*1.sum需清零,不然计算错误*/
- sum = sum +a[i][j];
- a_stu[i]=sum/M;
- }
- }
- void f5(void)
- {
- int i,j;
- float sum=0;
- r = 1; /*如果第一个学生第一门课就是最大值*/
- c = 1;
- for (j=0;j<M;j++)
- {
- for (i=0, sum=0;i<N;i++)
- sum = sum +a[i][j];
- a_cour[j]=sum/N; /*1.i应该从0开始或者改为j; 2.此处有死循环应换成j++; 3.sum清零*/
- }
- }
- float f2()
- {
- int i,j;
- float sum=a[0][0];
- for (j=0;j<M;j++) /*1.死循环更改为j++*/
- {
- for (i=0;i<N;i++)
- if (sum<a[i][j])
- {
- sum=a[i][j]; /*即时记录最大值得标号*/
- r=i+1;
- c=j+1;
- }
- }
- return sum;
- }
- float f1(void) /*个人认为求方差应该是求两个课程各自的方差,这部分就持保留意见*/
- {
- int i;
- float c=0,d=0;
- for (i=0;i<N;i++)
- {
- c=c+a_stu[i]*a_stu[i];
- d=d+a_stu[i];
- }
-
- return (c/N-(d/N)*(d/N));
- }
复制代码 |
-
|