count数组元素应该初始赋值为0
count[5] = {0}
struct Student SetGrade(struct Student *p,int *d,double *q) //q是指针前面要加*
SetGrade(s,count,&auer);//调用时auer前面要加&
你题目的解答代码如下:
#include <stdio.h>
#define N 10
struct Student
{
int num;
char name[20];
int score;
char grade;
};
int main()
{
int i, count[5] = {0};
char g[5] = {'A', 'B', 'C', 'D', 'E'};
double auer;
struct Student s[N];
struct Student SetGrade(struct Student * p, int *d, double *q); //q是指针前面要加*
printf("请输入%d个学生的学号、姓名和成绩:\n", N);
for (i = 0; i < N; i++)
{
printf("No%d:", i + 1);
scanf("%d%s%d", &s[i].num, s[i].name, &s[i].score);
}
SetGrade(s, count, &auer); //调用时auer前面要加&
for (i = 0; i < N; i++)
printf("%4d%10s%6d%6c\n", s[i].num, s[i].name, s[i].score, s[i].grade);
printf("各等级人数为:\n");
for (i = 0; i < 5; i++)
printf("%c:%d\n", g[i], count[i]);
printf("平均成绩为%.2f\n", auer);
return 0;
}
struct Student SetGrade(struct Student *p, int *d, double *q) //q是指针前面要加*
{
int i, sum = 0;
for (i = 0; i < N; i++, p++)
{
if (p->score >= 90)
{
p->grade = 'A';
(*d)++; //*d要加括号先计算
}
else if (p->score >= 80)
{
p->grade = 'B';
(*(d + 1))++;
}
else if (p->score >= 70)
{
p->grade = 'C';
(*(d + 2))++;
}
else if (p->score >= 60)
{
p->grade = 'D';
(*(d + 3))++;
}
else
{
p->grade = 'E';
(*(d + 4))++;
}
sum += p->score;//p已经++了,不用p+i
}
*q = 1.0 * sum / N;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!