
C语言求指点!!!!!
13.某班有5个学生,三门课。分别编写3个函数实现以下要求:(1)求各门课的平均分;(2)找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩;(3)找出三门课平均...
13. 某班有5个学生,三门课。分别编写3个函数实现以下要求:
(1) 求各门课的平均分;
(2) 找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩;
(3) 找出三门课平均成绩在85-90分的学生,并输出其学号和姓名。
主程序输入5个学生的成绩,然后调用上述函数输出结果。
#include<stdio.h>
int average(int f,int s,int t)
{int a;
a=(f+s+t)/3;
return a;
}
int unable(int sstu[5])
{int i;
struct *p;
for(i=0;i<5;i++)
{int j=1,f=0;
p=&sstu[i].fs;
for(;j<=3;j++,p++)
{if(*p<60) f++;
if(f==2)
{struct *s;
int k=0;
for (s=&sstu[i].fs;k<3;k++,s++)
{if(*s<60) printf("number is %d,unable score is %d\n",sstu[i].num,*s);}
}
printf("\n");
}
}
}
int good(int sstu[5])
{int i,k;
for(i=0;i<5;i++)
{k=average(sstu[i].fs,sstu[i].ss,sstu[i].ts);
if(k>=85&&k<=90)
printf("average between 85 and 90,number is %d,name is %s\n",sstu[i].num,sstu[i].na);
}
}
main()
{int i,a;
struct stu
{char *na;
int num;
int fs,ss,ts;
}sstu[5];
for(i=0;i<5;i++)
{printf("enter form:name,number,first score,second score,third score\n">;
scanf("%s,%d,%d,%d",&sstu[i].na,&sstu[i].num,&sstu[i].fs,&sstu[i].ss,&sstu[i].ts);
}
for(i=0;i<5;i++)
{a=average(sstu[i].fs,sstu[i].ss,sstu[i].ts);
printf("name:%s,average:%d\n",sstu[i].n,a);
}
unable(sstu);
good(sstu);
};
这个程序错误很多,都错在哪里??求解!!!
#include<stdio.h>
struct stu
{char *na;
int num;
int fsts[3];
}sstu[5];
float average(int f,int s,int t)
{float a;
a=(f+s+t)/3.0;
return a;
}
int unable(struct stu sstu[])
{int i;
struct stu *p;
for(i=0;i<5;i++)
{int j=1,f=0;
p=&sstu[i].fsts[0];
for(;j<=3;j++,p++)
{if(*p<60) f++;
if(f==2)
{struct stu *s;
int k=0;
for (s=&sstu[i].fsts[0];k<3;k++,s++)
{if(*s<60) printf("number is %d,unable score is %d\n",sstu[i].num,*s);}
}
printf("\n");
}
}
}
int good(struct stu sstu[])
{int i,k;
for(i=0;i<5;i++)
{k=average(sstu[i].fsts[0],sstu[i].fsts[1],sstu[i].fsts[2]);
if(k>=85&&k<=90)
printf("average between 85 and 90,number is %d,name is %s\n",sstu[i].num,sstu[i].na);
}
} 展开
(1) 求各门课的平均分;
(2) 找出有两门以上不及格的学生,并输出其学号和不及格课程的成绩;
(3) 找出三门课平均成绩在85-90分的学生,并输出其学号和姓名。
主程序输入5个学生的成绩,然后调用上述函数输出结果。
#include<stdio.h>
int average(int f,int s,int t)
{int a;
a=(f+s+t)/3;
return a;
}
int unable(int sstu[5])
{int i;
struct *p;
for(i=0;i<5;i++)
{int j=1,f=0;
p=&sstu[i].fs;
for(;j<=3;j++,p++)
{if(*p<60) f++;
if(f==2)
{struct *s;
int k=0;
for (s=&sstu[i].fs;k<3;k++,s++)
{if(*s<60) printf("number is %d,unable score is %d\n",sstu[i].num,*s);}
}
printf("\n");
}
}
}
int good(int sstu[5])
{int i,k;
for(i=0;i<5;i++)
{k=average(sstu[i].fs,sstu[i].ss,sstu[i].ts);
if(k>=85&&k<=90)
printf("average between 85 and 90,number is %d,name is %s\n",sstu[i].num,sstu[i].na);
}
}
main()
{int i,a;
struct stu
{char *na;
int num;
int fs,ss,ts;
}sstu[5];
for(i=0;i<5;i++)
{printf("enter form:name,number,first score,second score,third score\n">;
scanf("%s,%d,%d,%d",&sstu[i].na,&sstu[i].num,&sstu[i].fs,&sstu[i].ss,&sstu[i].ts);
}
for(i=0;i<5;i++)
{a=average(sstu[i].fs,sstu[i].ss,sstu[i].ts);
printf("name:%s,average:%d\n",sstu[i].n,a);
}
unable(sstu);
good(sstu);
};
这个程序错误很多,都错在哪里??求解!!!
#include<stdio.h>
struct stu
{char *na;
int num;
int fsts[3];
}sstu[5];
float average(int f,int s,int t)
{float a;
a=(f+s+t)/3.0;
return a;
}
int unable(struct stu sstu[])
{int i;
struct stu *p;
for(i=0;i<5;i++)
{int j=1,f=0;
p=&sstu[i].fsts[0];
for(;j<=3;j++,p++)
{if(*p<60) f++;
if(f==2)
{struct stu *s;
int k=0;
for (s=&sstu[i].fsts[0];k<3;k++,s++)
{if(*s<60) printf("number is %d,unable score is %d\n",sstu[i].num,*s);}
}
printf("\n");
}
}
}
int good(struct stu sstu[])
{int i,k;
for(i=0;i<5;i++)
{k=average(sstu[i].fsts[0],sstu[i].fsts[1],sstu[i].fsts[2]);
if(k>=85&&k<=90)
printf("average between 85 and 90,number is %d,name is %s\n",sstu[i].num,sstu[i].na);
}
} 展开
3个回答
展开全部
1.struct结构体定义在主函数外部。
2.int unable(int sstu[5])函数中struct *p;应为:struct stu *p,标记名漏掉了
3.p=&sstu[i].fs怎么能把一个int型赋值给一个结构体,怎么着也应该p->fs=&sstu[i].fs差不多。
下面多出结构体与整形比大小,不一一指出
4.p++?意思是p指向下一个结构体地址,但是你的p并非指向结构体数组何来下一个?如果你是想实现指向下一个成绩(貌似你的程序是这个意思),那么将3个成绩改成定义一个数组int score[3]来存放,然后p不要定义成结构体,定义为int *p;p=score,后面p++就是指向下一个成绩。
5.main()函数中printf("enter form:name,number,first score,second score,third score\n">;“>”改成“)”
6.unable(sstu); good(sstu);是错误的,定义的函数参数为int型,但是带入的是结构体类型。所以需要在定义函数时将函数的参数改为结构体类型。
语法错误太多。先按照4把成绩改成数组记录,将函数修改下,然后把改好的函数再贴上来。算法没仔细看,先把语法改好再说吧。
2.int unable(int sstu[5])函数中struct *p;应为:struct stu *p,标记名漏掉了
3.p=&sstu[i].fs怎么能把一个int型赋值给一个结构体,怎么着也应该p->fs=&sstu[i].fs差不多。
下面多出结构体与整形比大小,不一一指出
4.p++?意思是p指向下一个结构体地址,但是你的p并非指向结构体数组何来下一个?如果你是想实现指向下一个成绩(貌似你的程序是这个意思),那么将3个成绩改成定义一个数组int score[3]来存放,然后p不要定义成结构体,定义为int *p;p=score,后面p++就是指向下一个成绩。
5.main()函数中printf("enter form:name,number,first score,second score,third score\n">;“>”改成“)”
6.unable(sstu); good(sstu);是错误的,定义的函数参数为int型,但是带入的是结构体类型。所以需要在定义函数时将函数的参数改为结构体类型。
语法错误太多。先按照4把成绩改成数组记录,将函数修改下,然后把改好的函数再贴上来。算法没仔细看,先把语法改好再说吧。
追问
接问题补充
main()
{int i,a;
for(i=0;i<5;i++)
{printf("enter form:name,number,first score,second score,third score\n");
scanf("%s,%d,%d,%d",&sstu[i].na,&sstu[i].num,&sstu[i].fsts[0],&sstu[i].fsts[1],&sstu[i].fsts[2]);
}
for(i=0;i<5;i++)
{a=average(sstu[i].fsts[0],sstu[i].fsts[1],sstu[i].fsts[2]);
printf("name:%s,average:%d\n",sstu[i].na,a);
}
unable(sstu);
good(sstu);
};
追答
char *na这么定义na已经是个地址了,,&sstu[i].na取地址的地址没必要。不过这个建议直接定义字符数组char na[10],然后sstu[i].na数组名就已经表示地址了。
所以你就知道了int unable(struct stu sstu[])里面可以直接用数组名表示数组的地址,因为已经地址传递,自定义函数里的修改会影响主函数的变量的。
上面指出的第三条你木有改啊,p=&sstu[i].fsts[0],int型不能赋值给结构体的呀,只能结构体赋值结构体。
int unable(struct stu sstu[])、int good(struct stu sstu[])这两个函数既然不需要返回值,别定义int,用void;然后求平均数是flaot型,你在调用的时候全部赋值给了int型,(k=average、a=average)精度会丢失的,把这两个位置的k和a定义为float型
然后int good(struct stu sstu[])函数的算法貌似有点繁琐,你看看这么改下:
void unable(struct stu sstu[])
{
int i,j,f,k;
for(i=0;i<5;i++)
{
f=0;
for(j=1;j<=3;j++/*,p++*/)
{
if(sstu[i].fsts[j]<60) f++;
if(f==2)
{
for (k=0;k<3;k++)
{if(sstu[i].fsts[k]<60) printf("number is %d,unable score is %d\n",sstu[i].num,sstu[i].fsts[k]);}
}
printf("\n");
}
}
}
请无视格式,可粘贴后全选,然后设置格式就行了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询