xvsgesshergdfbd 2021-09-07 13:17 采纳率: 100%
浏览 367
已结题

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")
  • 写回答

4条回答 默认 最新

  • CSDN专家-link 2021-09-07 13:21
    关注

    错误比较多:
    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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月15日
  • 已采纳回答 9月7日
  • 创建了问题 9月7日

悬赏问题

  • ¥15 vscode问题请教
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM