c++问题:功能: 班级成绩表的程序实现 输入:输入n个学生的:学号,姓名,语文,数学,英语成绩 输出n个学生的三科(语数英)平均成绩,班级单科平均成绩。

#include<string>
using namespace std;

struct student{
 int    id;
    string name[5];
    int chinese;
    int math;
    int english;
  double average;
 }stu[5];
int main( )
{
  int i,n,j;
  int sum[3];
  int ave[3];
  struct student s1;
  printf("输入 n:");
  scanf("%d",&n);
  printf("输入学生学号、姓名、成绩\n");
  for(i=1;i<=n;i++){
    printf("No.%d:",i);
    scanf("% d% s% d% d% d",&s1.id,&s1.name,&s1.chinese,&s1.math,&s1.english);
    s1.average=(s1.math+s1.english+s1.chinese)/3.0;
    printf(" 三科平均成绩:%lf\n",s1.average);
     
 };
 
  for(j = 0;j < n;j++) {
        
        sum[0] += stu[j].chinese;
        sum[1] += stu[j].math;
        sum[2] += stu[j].english;
        ave[0] = sum[0] / 3;
        ave[1] = sum[1] / 3;
        ave[2] = sum[2] / 3;
    }
   printf("语文平均分;%d;数学平均分:%d;英语平均分:%d",ave[0],ave[1],ave[2]);   
 
 return 0;
}```
运行结果:
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/898666199036117.png "=600 #left")

错误比较多:
string name[5];---这不对啊,名字为啥用string数组啊? string name或者 char name[20]就可以了
scanf("% d% s% d% d% d",&s1.id,&s1.name,&s1.chinese,&s1.math,&s1.english);
改成
scanf("%d%s%d%d%d",&s1.id,s1.name,&s1.chinese,&s1.math,&s1.english);

#include<string>
using namespace std;
struct student{
 int    id;
    char name[20];
    int chinese;
    int math;
    int english;
  double average;
 }stu[5];
int main( )
{
  int i,n,j;
  int sum[3] = {0};
  float ave[3] = {0};
  printf("输入 n:");
  scanf("%d",&n);
  printf("输入学生学号、姓名、成绩\n");
  for(i=1;i<=n;i++){
    printf("No.%d:",i);
    scanf("%d%s%d%d%d",&stu[i-1].id,&stu[i-1].name,&stu[i-1].chinese,&stu[i-1].math,&stu[i-1].english);
    stu[i-1].average=(stu[i-1].math+stu[i-1].english+stu[i-1].chinese)/3.0;
    printf(" 三科平均成绩:%lf\n",stu[i-1].average);
 };
  for(j = 0;j < n;j++) {
        sum[0] += stu[j].chinese;
        sum[1] += stu[j].math;
        sum[2] += stu[j].english;
    }
        ave[0] = sum[0] / 3.0;
        ave[1] = sum[1] / 3.0;
        ave[2] = sum[2] / 3.0;
   printf("语文平均分;%.1f;数学平均分:%.1f;英语平均分:%.1f",ave[0],ave[1],ave[2]);   
 return 0;
}

img


这写的啥..

scanf("%d %s %d %d %d", &s1.id, &s1.name, &s1.chinese, &s1.math, &s1.english);

而且num数组没有初始化,导致算出来的值不对
而且你中间一直用的是s1,就没对stu数组赋值,所以最后也跑不出平均分来
建议自己修改一下

提问中的图片发不出来/(ㄒoㄒ)/~~
运行结果是这样的:
n:5 \学生学号、姓名、成绩 sf. 23, 34, 35 三科平均成绩5742088。0000 No.2::三科平均成绩5742088。0000 No.3三科平均成绩5742088。0000No.4:三科平均成绩5742088。0000 No.5:三科平均成绩5742088。0000语文平均分,2162645;数学平均分:1416948;英语平均分,1416917 fsraxtafter 19. 98 secondsdsw th rturn value 按任 意 继续.

img