besaudade4me 2022-11-21 23:50 采纳率: 100%
浏览 5
已结题

代码显示只能输入两组数据,请大家帮我看看问题出在哪儿

描述:
有n个学生,每个学生的数据包括学号、姓名和3门课程的成绩,
要求输出平均成绩高于90分以上(包括90分)或全部课程成绩均在85分以上(包括85分)的学生信息(包括学号和姓名),
如果没有符合条件的,则输出“No”。
输入:
有n+1行,第1行有1个整数,即学生数n;接下来有n行,每行有7个数据项,分别为学号、姓名和3门课程成绩,数据项之间用空格隔开。
输出:
有多行,每行包含2个数据项,即学号、姓名,数据项之间用空格隔开。
提示:
学生数n大于1小于等于20,“学号”是4位整数,“姓名”为不超过8个字符的字符串,“成绩”为0~100。


#include<stdio.h>

struct student
{
    int num;
    char name[8];
    double score[3];
}stu[20];

int main()
{
    int n = 1, i, j, k, a = 0;
    //学生数输入 
    scanf("%d", &n);
    
    //数据输入 
    for(i=0; i<n; i++)
    {
        scanf("%d", &stu[i].num);
        scanf("%s",  stu[i].name);
        for(j=0; j<3; j++)
            scanf("lf", &stu[i].score[j]);
    }
    
    //数据处理
    int sum;
    double avg[n];
    for(i=0; i<n; i++)
    {
        for(j=0; j<3; j++)
        {
            sum += stu[i].score[j];
            for(k=0; k<n; k++)
            {
                avg[k] = (stu[i].score[j])/n;
                if( avg[k] >= 90 && stu[i].score[j]>=85 )
                {
                    printf("%d %s", stu[i].num, stu[i].name);
                    a = 1;
                }
            }
        }
    }
    if(a == 0) printf("No");
    
    return 0;
}

img

测试数据为:
3
1001 Make 86 91 89
1002 Linda 78 78 80
1003 Jone 90 67 71
1001 Make

5
1011 Kitty 66 71 79
1012 Lena 78 79 90
1013 Marry 83 77 78
1014 Jone 91 89 92
1015 Make 85 85 86
1014 Jone
1015 Make

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-11-22 09:14
    关注

    修改如下,供参考:

    #include<stdio.h>
    #define N 21
    struct student
    {
        int num;
        char name[8];
        double score[3];
        double avg;
    }stu[N];
    int score_85(struct student stu_t)
    {
        return stu_t.score[0] >= 85 && stu_t.score[1] >= 85 
                                    && stu_t.score[2] >= 85;
    }
    int main()
    {
        int n = 1, i, j, k, a = 0;
        scanf("%d", &n);     //学生数输入 
        for (i = 0; i < n; i++)//数据输入 
        {
            scanf("%d %s", &stu[i].num, stu[i].name);
            for (j = 0, stu[i].avg = 0; j < 3; j++) {
                scanf("%lf", &stu[i].score[j]);
                stu[i].avg += stu[i].score[j];
            }
            stu[i].avg /= 3;//数据处理
        }
        
        //int sum;
        //double avg[n];
        for (i = 0; i < n; i++)
        {
            //for (j = 0; j < 3; j++)
            //{
                //sum += stu[i].score[j];
                //for (k = 0; k < n; k++)
                //{
                //    avg[k] = (stu[i].score[j]) / n;
                    if (stu[i].avg >= 90 || score_85(stu[i])) //stu[i].score[j] >= 85)
                    {
                        printf("%d %s\n", stu[i].num, stu[i].name);
                        a = 1;
                    }
                //}
            //}
        }
        if (a == 0) printf("No");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月30日
  • 已采纳回答 11月22日
  • 修改了问题 11月21日
  • 修改了问题 11月21日
  • 展开全部

悬赏问题

  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能