int f2(int)
float f3(int,int)
这三句完全可以不要
再子函数的定义中,如果子函数的代码在调用它的前面写,完全可以不用再定义
你的这个问题,完全可以不要子函数,因为子函数带来的计算了会更大一些
你应该见过1!+2!+3!+...+n!这个题目的计算代码
我现在给你写一下
int i,n=1,sum=0
for(i=1i<=ni++)
{
n*=i //先后荣获就是计算n!的,如你的子函数计算,但是在这里计算了会小很多
sum+=n
}
参考一下,你应该能写出这个题目的更简单的代码
其实你的错误在这里
sum=f1(i,n)/f2(i)就是这一句
因为f1,f2返回的都是int型的,那么f1(i,n)/f2(i)得到的结果也是int型的,如果在0~1之间的结果,那么就是0
改为
sum=1.0*f1(i,n)/f2(i)
或者sum=(float)1.0*f1(i,n)/f2(i)
#include <stdio.h>#define N 2
#define M 2
int s[N]={0},a[N][M]
char b[N][10]
void fun1(int a[N][M])
{
int i,j
for(i=0i<Ni++)
{
for(j=0j<Mj++)
s[i]+=a[i][j]
printf("第%d个同学的平均分是%.2f\n",i+1,s[i]/5.0)
}
}
void fun2(int a[N][M])
{
float p[M]={0}
int i,j
for(i=0i<Mi++)
{
for(j=0j<Nj++)
p[i]+=a[j][i]
p[i]/=10.0
printf("第%d门课程的平均分是%.2f\n",i+1,p[i])
}
}
void fun3(char b[N][10])
{
int max,t,i
max=s[0]
for(i=1i<Ni++)
if(s[i]>max)
{
max=s[i]
t=i/*记住最大时i的值,以便找到姓名*/
}
printf("%s荣获所有学生中最高分%d分\n",b[t],max)
}
main()
{
int i,j
float p[M]={0}
/* 输入姓名和成绩*/
for(i=0i<Ni++)
{
printf("输入第%d个学生的姓名:",i+1)
scanf("%s",&b[i])
for(j=0j<Mj++)
{
printf("输入该学生的第%d门成绩:",j+1)
scanf("%d",&a[i][j])
}
}
printf("\n")
/*计算每个同学平均分*/
fun1(a)
printf("\n")
/*计算每门课的平均分*/
fun2(a)
printf("\n")
/*比较求出最大总分和输出姓名*/
fun3(b)
return 0
}
代码经过测试了 运行成功
如果有什么不懂的可以问我
"Is the fifth national education cup ITAT education project employability skills contest" language C program design group won prizes.