题目
输入5个学生的数学、英语、物理和计算机4门课的成绩,调用函数计算每个学生的总分,返回最高总分和最低总分。
提示:在主函数中输入数据、显示最高总分和最低总分
我的代码
#include
#include
int max = 0, min =10000,zongfen[2] = { 0};
int f2(int a, int b);
int f1(int a, int b);
int fa(int a);
int fi(int **a);
void main()
{
int **a=0;
int i,j;
a = (int)malloc(sizeof(int*)*3);
for (i= 0; i <=5; i++)
a[i] = (int*)malloc(sizeof(int)*5);
printf("***陈岑_Exam09_SheJi的运行结果:***\n");
for (i=0; i < 2; i++)
{
printf("请依次输入学生的数学英语物理计算机成绩:");
for (j = 0; j < 4; j++)
{
scanf("%f", &a[i][j]);
}
}
max = fa(a);
min = fi(a);
printf("最高分是%.1f,最低分是%.1f", max, min);
for (i= 0; i <=4; i++)
free(a[i]);
free(a);
}
int f2(int a, int b)
{
return (a > b ? a : b);
}
int f1(int a, int b)
{
return (a <b ? a : b);
}
int fa(int **a)
{
int zongfen[2] = { 0 };
int i, j;
for (i=0; i <2; i++)
{for (j=0; j < 4; j++)
zongfen[i] =zongfen[i]+ a[i][j];}
for (i = 0; i < 2; i++)
max = f2(max, zongfen[i]);
return max;
}
int fi(int **a)
{
int zongfen[2] = { 0 };
int i, j;
for (i=0; i < 2; i++)
{for (j=0; j < 4; j++)
zongfen[i]= zongfen[i]+a[i][j];}
for (i = 0; i < 2; i++)
min = f1(min, zongfen[i]);
return min;
}
求大家帮帮忙,看了五个小时了怎么都找不出原因……谢谢!
需要注意的几个地方:
更正后的代码如下:
#include <stdio.h>
#include <stdlib.h>
int max = 0, min = 10000, zongfen[2] = { 0 };
int f2(int a, int b);
int f1(int a, int b);
int fa(int **a);
int fi(int **a);
void main()
{
int **a = 0;
int i, j;
a = (int **)malloc(sizeof(int*) * 2);//此行原来代码有错误,修改为此。
for (i = 0; i < 2; i++)
a[i] = (int*)malloc(sizeof(int) * 4);
printf("***陈岑_Exam09_SheJi的运行结果:***\n");
for (i = 0; i < 2; i++)
{
printf("请依次输入学生的数学英语物理计算机成绩:\n");
for (j = 0; j < 4; j++)
{
scanf("%d", &a[i][j]);
}
}
max = fa(a);
min = fi(a);
printf("最高分是%d,最低分是%d", max, min);
for (i = 0; i < 2; i++)
free(a[i]);
free(a);
}
int f2(int a, int b)
{
return (a > b ? a : b);
}
int f1(int a, int b)
{
return (a <b ? a : b);
}
int fa(int **a)
{
int zongfen[2] = { 0 };
int i, j;
for (i = 0; i <2; i++)
{
for (j = 0; j < 4; j++)
zongfen[i] = zongfen[i] + a[i][j];
}
for (i = 0; i < 2; i++)
max = f2(max, zongfen[i]);
return max;
}
int fi(int **a)
{
int zongfen[2] = { 0 };
int i, j;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 4; j++)
zongfen[i] = zongfen[i] + a[i][j];
}
for (i = 0; i < 2; i++)
min = f1(min, zongfen[i]);
return min;
}
测试结果如图:
说实话,代码真乱。如果贴的是全部的代码,肯定编译都不通过(#include 这是什么)?
a = (int)malloc(sizeof(int*)*3);
for (i= 0; i <=5; i++)
//上面写的3,下面的循环怎么又变成5了?a不是int **吗?怎么强转int了.
scanf("%f", &a[i][j]);
//a不是int类型的吗?
这个代码不用找问题,正常没这么写的,代码可读性太差,即使过了也没意义