苏夜是憨憨 2021-11-26 15:25 采纳率: 0%
浏览 120

实验求解答,这个结构体我有点不太懂

7-1 实验二 (100 分)
设计一种结构体,用来保存学生信息。假定学生的总人数不超过100人。学生的信息包括学号(<10000的整数)、姓名(长度不超过19的字符串)、三科成绩(整数)以及综合成绩(实数)。除综合成绩外,各项数据均由键盘输入。综合成绩在计算前,其值为0。现在要求实现如下几种功能,分别有对应的操作方式: 1)输入若干学生的信息。 对应的操作为: 在第一行中输入1和整数N,N代表要输入的学生人数。其后是N行数据,每行数据代表一个学生的信息。
2)计算所有学生的综合成绩,综合成绩 = 第1科成绩 * r1 + 第2科成绩 * r2 + 第3科成绩 * r3。 对应的操作为: 在一行中输入2和三个实数r1、r2、r3,其中r1、r2和r3代表计算综合成绩时的加权系数,输入保证时r1 + r2 + r3 = 1.0。 3)插入学生信息; 对应的操作为: 在第一行中输入3和整数N,N表示要将新输入的学生信息插入到原来的第N个学生前面。如果N大于当前学生人数,则插入到最后面。 第二行数据代表要插入的一个学生的信息。 4)删除学生; 对应的操作为: 在第一行中输入4和整数N,N表示将要删除的学生的序号(从1开始)。如果N大于当前的学生人数,则不会删去学生信息。 5)查询学生; 对应的操作为: 在第一行中输入5和学生的学号,如果能查询到对应的学生,则在一行中显示学生的信息,如果查询不到,则显示“Not Found.”。 还有一种查询方式为按姓名查询,操作如下: 在第一行中输入6和学生的姓名,如果能查询到对应的学生,则在一行中显示学生的信息,如果查询不到,则显示“Not Found.”。 6)显示学生信息。 对应的操作为: 在第一行中输入7,会显示所有学生的信息,每位学生的信息占一行。 7)退出系统 对应的操作为: 在第一行中输入0。

输入格式:
按上述要求输入信息。

输出格式:
按上述要求输出信息,同一行的各项信息间用一个空格分隔,综合成绩保留两位小数。并在最后输出一个空行。

输入样例:
1 4
2001 Wang 90 85 75
2003 Li 78 69 86
2008 Zhao 85 74 90
2010 Liu 85 72 85
7
2 0.2 0.35 0.45
7
6 Li
5 2002
3 3
2005 Bai 80 76 80
7
2 0.5 0.5 0.0
7
4 1
7
0
结尾无空行
输出样例:
学号:2001 姓名:Wang 成绩1:90 成绩2:85 成绩3:75 综合成绩:0.00
学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:0.00
学号:2008 姓名:Zhao 成绩1:85 成绩2:74 成绩3:90 综合成绩:0.00
学号:2010 姓名:Liu 成绩1:85 成绩2:72 成绩3:85 综合成绩:0.00

学号:2001 姓名:Wang 成绩1:90 成绩2:85 成绩3:75 综合成绩:81.50
学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:78.45
学号:2008 姓名:Zhao 成绩1:85 成绩2:74 成绩3:90 综合成绩:83.40
学号:2010 姓名:Liu 成绩1:85 成绩2:72 成绩3:85 综合成绩:80.45

学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:78.45

Not Found.

学号:2001 姓名:Wang 成绩1:90 成绩2:85 成绩3:75 综合成绩:81.50
学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:78.45
学号:2005 姓名:Bai 成绩1:80 成绩2:76 成绩3:80 综合成绩:0.00
学号:2008 姓名:Zhao 成绩1:85 成绩2:74 成绩3:90 综合成绩:83.40
学号:2010 姓名:Liu 成绩1:85 成绩2:72 成绩3:85 综合成绩:80.45

学号:2001 姓名:Wang 成绩1:90 成绩2:85 成绩3:75 综合成绩:87.50
学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:73.50
学号:2005 姓名:Bai 成绩1:80 成绩2:76 成绩3:80 综合成绩:78.00
学号:2008 姓名:Zhao 成绩1:85 成绩2:74 成绩3:90 综合成绩:79.50
学号:2010 姓名:Liu 成绩1:85 成绩2:72 成绩3:85 综合成绩:78.50

学号:2003 姓名:Li 成绩1:78 成绩2:69 成绩3:86 综合成绩:73.50
学号:2005 姓名:Bai 成绩1:80 成绩2:76 成绩3:80 综合成绩:78.00
学号:2008 姓名:Zhao 成绩1:85 成绩2:74 成绩3:90 综合成绩:79.50
学号:2010 姓名:Liu 成绩1:85 成绩2:72 成绩3:85 综合成绩:78.50

  • 写回答

3条回答 默认 最新

  • 关注

    如下:

    #include <stdio.h>
    struct Student 
    {
        int id;
        char name[20];
        int score[3];
        double zh;
    };
     
    //输入
    void input(struct Student stu[],int n)
    {
        int i;
        for (i=0;i<n;i++)
        {
            scanf("%d %s %d %d %d",&stu[i].id,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
        }
    }
    //综合
    void zh(struct Student stu[],int n,double r1,double r2,double r3)
    {
        int i;
        for (i=0;i<n;i++)
        {
            stu[i].zh = r1 * stu[i].score[0] + r2 * stu[i].score[1] + r3 * stu[i].score[2];
        }
    }
    //插入
    void insert(struct Student stu[],int pos,int *n,double r1,double r2,double r3)
    {
        int j;
        if(pos > *n)
        {
            scanf("%d %s %d %d %d",&stu[*n].id,stu[*n].name,&stu[*n].score[0],&stu[*n].score[1],&stu[*n].score[2]);
            stu[*n].zh = r1 * stu[*n].score[0] + r2 * stu[*n].score[1] + r3*stu[*n].score[2];
        }else
        {
            for (j = *n;j>=pos;j--)
            {
                stu[j]  = stu[j-1];
            }
            scanf("%d %s %d %d %d",&stu[pos-1].id,stu[pos-1].name,&stu[pos-1].score[0],&stu[pos-1].score[1],&stu[pos-1].score[2]);
            stu[pos-1].zh = r1 * stu[pos-1].score[0] + r2 * stu[pos-1].score[1] + r3*stu[pos-1].score[2];
        }
        *n = *n + 1;
    }
    //查询
    void find(struct Student stu[],int n,int id)
    {
        int i;
        for(i=0;i<n;i++)
        {
            if(id == stu[i].id)
            {
                printf("%d %s %d %d %d\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
                break;
            }
        }
        if(i==n)
            printf("Not Found.\n");
    }
    //显示所有
    void showall(struct Student stu[],int n)
    {
        int i=0;
        for (i=0;i<n;i++)
        {
            printf("%d %s %d %d %d\n",stu[i].id,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
        }
    }
    int main()
    {
        int op,n,pos,id;
        struct Student stu[1000];
        double r1,r2,r3;
        //输入
        scanf("%d %d",&op,&n);
        input(stu,n);
        //计算综合
        scanf("%d %lf %lf %lf",&op,&r1,&r2,&r3);
        zh(stu,n,r1,r2,r3);
        //插入
        scanf("%d %d",&op,&pos);
        insert(stu,pos,&n,r1,r2,r3);
        //查询
        scanf("%d %d",&op,&id);
        find(stu,n,id);
        //显示所有学生信息
        showall(stu,n);
        //退出
        scanf("%d %d",&op,&pos);
        return 0;
    }
     
     
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 11月26日