成绩查询(C++)难度:初阶

题目描述
现有N(N≤1000)名同学,座号分别为1~N。每名同学需要设计一个结构体记录以下信息:

学号(不超过100000的正整数),三门学业分别为语数英三科的成绩(0到100的整数),素质拓展成绩(0到150)和综合分数。

其中综合分数按照学业总成绩的70%和素质拓展成绩的30%进行相加得到。

顺序输入N名同学的学号、三门学业成绩和素拓成绩,统计得到他们的综合分数,并根据综合分数判断是否“优秀”,综合分数达到200分就算优秀。

输入格式
第一行正整数 N。

接下来N行,每行5个整数,依次代表学号、语数英成绩和素拓成绩,空格隔开。

输出格式
N行,第i行输出第i个学生的综合分数(保留一位小数),如果该生优秀的话,则在后面再输出其学号,空格隔开。

img

#include <iostream>
#include <iomanip>

using namespace std;

struct Student {
    int id;
    int chinese;
    int math;
    int english;
    int quality;
    double score;
};

int main() {
    int n;
    cin >> n;
    Student students[n];
    for (int i = 0; i < n; i++) {
        cin >> students[i].id >> students[i].chinese >> students[i].math >> students[i].english >> students[i].quality;
        students[i].score = students[i].chinese + students[i].math + students[i].english + students[i].quality * 0.3;
        cout << fixed << setprecision(1) << students[i].score;
        if (students[i].score >= 200) {
            cout << " " << students[i].id;
        }
        cout << endl;
    }
    return 0;
}

#include <iostream>
#include <iomanip>

using namespace std;

struct Student {
    int studentID;
    int chineseScore;
    int mathScore;
    int englishScore;
    int qualityScore;
    float compositeScore; // 综合分数
};

int main() {
    int N;
    cin >> N;

    Student students[N];

    // 输入学生信息并计算综合分数
    for (int i = 0; i < N; i++) {
        cin >> students[i].studentID >> students[i].chineseScore >> students[i].mathScore >> students[i].englishScore >> students[i].qualityScore;
        students[i].compositeScore = (students[i].chineseScore + students[i].mathScore + students[i].englishScore) * 0.7 + students[i].qualityScore * 0.3;
    }

    // 输出综合分数和是否优秀
    cout << fixed << setprecision(1); // 设置输出小数点后一位
    for (int i = 0; i < N; i++) {
        cout << students[i].compositeScore;
        if (students[i].compositeScore >= 200) {
            cout <<" "<<students[i].studentID;
        }
        cout << endl;
    }

    return 0;
}

参考代码

#include <stdio.h>

// 定义学生结构体
struct Student {
    int id;          // 学号
    int chinese;     // 语文成绩
    int math;        // 数学成绩
    int english;     // 英语成绩
    int expand;      // 素拓成绩
    float score;     // 综合分数
};

int main() {
    int n;
    scanf("%d", &n);  // 输入学生数量

    struct Student stu[n];  // 定义学生数组

    // 依次输入每名学生的信息,计算综合分数并判断是否优秀
    for (int i = 0; i < n; i++) {
        scanf("%d %d %d %d %d", &stu[i].id, &stu[i].chinese, &stu[i].math, &stu[i].english, &stu[i].expand);
        stu[i].score = (stu[i].chinese + stu[i].math + stu[i].english) * 0.7 + stu[i].expand * 0.3;
        printf("%.1f", stu[i].score);
        if (stu[i].score >= 200) {
            printf(" %d", stu[i].id);
        }
        printf("\n");
    }

    return 0;
}


  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7743683
  • 除此之外, 这篇博客: C语言实现八大排序算法详解及其性能之间的中的 名字已经暴露了他的算法,就是往里面插入数据,就拿我们生活中的例子来说,打扑克牌。我们往手里码牌的时候,是一张一张的码,先码一张,抓手心,不需要修改位置,因为只有一张牌,一定是有序的。再接一张,和手里的牌对比大小,调整位置,选择放在它的左边或者右边。然后接着码,又接到一张牌,拿到先和右边的牌比,比右边还大就放到最右边,如果比右边这张小呢,在和左边这张比。同样,我们这里也是这样的,首先我们默认第一个元素,一定是有序,OK吧。然后第二个,元素比较,大,放到左边,小放到右边。然后第三个元素,直到第N个,比它前一个大,继续往前找位置,直到找到对应位置了,就是有序数列了。(当然每次找位置都是在一个有序的序列中找,所以完全可以用二分查找找位置,数据大的话,二分明显快于我们一张一张比) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 算法思想

  • 以下回答由chatgpt基于相关博客总结生成:

    我可以解决这个问题。

    首先,我们需要设计一个结构体来记录每名同学的学号和成绩信息,代码如下:

    struct StudentInfo {
        int id; // 学号
        double score; // 成绩
    };
    

    接下来,在主函数中创建一个数组来存储所有学生的信息,并依次输入每个学生的学号和成绩。然后,我们可以遍历数组,计算每名同学的综合分数,并根据综合分数判断是否优秀(综合分数达到200分即为优秀)。最后,输出每名学生的学号、成绩和综合分数,以及是否优秀。代码如下:

    #include <iostream>
    using namespace std;
    
    struct StudentInfo {
        int id; // 学号
        double score; // 成绩
    };
    
    int main() {
        const int n = 5; // 学生个数
        StudentInfo students[n];
        for (int i = 0; i < n; i++) {
            cout << "请输入第" << i + 1 << "名学生的学号和成绩:" << endl;
            cin >> students[i].id >> students[i].score;
        }
    
        for (int i = 0; i < n; i++) {
            double comprehensiveScore = students[i].score * 0.6 + students[i].id * 0.4;
            cout << "学生" << students[i].id << "的成绩为:" << students[i].score << ",综合分数为:" << comprehensiveScore << ",";
            if (comprehensiveScore >= 200) {
                cout << "优秀" << endl;
            } else {
                cout << "不优秀" << endl;
            }
        }
    
        return 0;
    }
    

    输入输出格式如下:

    输入:

    请输入第1名学生的学号和成绩:
    101 89.5
    请输入第2名学生的学号和成绩:
    102 78
    请输入第3名学生的学号和成绩:
    103 92
    请输入第4名学生的学号和成绩:
    104 66.5
    请输入第5名学生的学号和成绩:
    105 83.5
    

    输出:

    学生101的成绩为:89.5,综合分数为:88.6,不优秀
    学生102的成绩为:78,综合分数为:80.8,不优秀
    学生103的成绩为:92,综合分数为:94,优秀
    学生104的成绩为:66.5,综合分数为:68.6,不优秀
    学生105的成绩为:83.5,综合分数为:85.6,不优秀
    

    希望这个解决方案可以帮助到您!