计算并输入全班30人成绩的平均值,并计算每人成绩与平均成绩的差值(在其中需要两次用到30人的成绩,可以运用一个一堆数组存放30个学生的成绩。输入以下代码,人数可根据自己需求改变便可求值)

该程序用于输入三十名学生的成绩,计算平均分,并显示每位学生的成绩与平均分的差距。它使用C语言实现,通过`for`循环读取成绩,`scanf_s`函数读取输入,然后计算总分和平均分,最后用`printf`打印结果。

#include<stdio.h>
main()
{
    int i, s[30];
    float sum, average;
    sum = 0;
    printf("请输入三十名学生的成绩:");
    for (i = 0; i < 30; i++)
    {
        scanf_s("%d", &s[i]);
        sum += s[i];
    }
    average = sum / 30;
    printf("average=%.2f", average);
    for (i = 0; i < 30; i++)
        printf("每人成绩与平均成绩之差=%.2f\n", s[i] - average);
}

### 实现方案 以下是基于C语言实现的一个完整程序,用于计算30学生6门功课的成绩计算每个学生的总分和个平均分,最后按照总分降序排列输出次表。 #### 程序逻辑说明 1. 定义结构体 `student` 存储每位学生的信息,包括学号、每门课成绩、总分和平均分。 2. 使用循环输入30学生的数据。 3. 编函数分别完成以下功能: - **计算总分**:通过遍历每位学生成绩累加得到总分。 - **计算平均分**:利用总分除以科目数得出平均分。 - **排序**:采用冒泡排序或其他高效算法对学生按总分从高到低排序。 - **打印成绩单**:显示每位学生的详细信息及排。 4. 添加查询功能,允许用户输入特定学号来获取对应学生的排和其他信息。 下面是完整的代码实现: ```c #include <stdio.h> #define STUDENT_COUNT 30 #define COURSE_COUNT 6 typedef struct { int id; float scores[COURSE_COUNT]; float totalScore; float averageScore; } Student; void calculateTotalAndAverage(Student students[], int count); void sortStudentsByTotalScore(Student students[], int count); void displayStudentRanking(const Student students[], int count); int main() { Student students[STUDENT_COUNT]; // 输入学生信息 for (int i = 0; i < STUDENT_COUNT; ++i) { printf("请输入第 %d 学生的学号和六门课程成绩:\n", i + 1); scanf("%d", &students[i].id); for (int j = 0; j < COURSE_COUNT; ++j) { scanf("%f", &students[i].scores[j]); } } // 计算总分和平均分 calculateTotalAndAverage(students, STUDENT_COUNT); // 对学生进行排序 sortStudentsByTotalScore(students, STUDENT_COUNT); // 显示排表 displayStudentRanking(students, STUDENT_COUNT); return 0; } // 函数:计算总分和平均分 void calculateTotalAndAverage(Student students[], int count) { for (int i = 0; i < count; ++i) { students[i].totalScore = 0; for (int j = 0; j < COURSE_COUNT; ++j) { students[i].totalScore += students[i].scores[j]; } students[i].averageScore = students[i].totalScore / COURSE_COUNT; } } // 函数:按总分排序 void sortStudentsByTotalScore(Student students[], int count) { for (int i = 0; i < count - 1; ++i) { for (int j = 0; j < count - i - 1; ++j) { if (students[j].totalScore < students[j + 1].totalScore) { Student temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } } } // 函数:显示排表 void displayStudentRanking(const Student students[], int count) { printf("\n排\t学号"); for (int k = 0; k < COURSE_COUNT; ++k) { printf("\t科目%d", k + 1); } printf("\t总分\t平均分\n"); for (int i = 0; i < count; ++i) { printf("%d\t%d", i + 1, students[i].id); for (int j = 0; j < COURSE_COUNT; ++j) { printf("\t%.2f", students[i].scores[j]); } printf("\t%.2f\t%.2f\n", students[i].totalScore, students[i].averageScore); } } ``` --- ### 功能扩展建议 为了进一步完善此程序的功能,可以考虑加入以下特性: - 查询指定学号的学生信息及其排。 - 处理异常情况(如输入负数或非法字符)。 - 支持保存和加载学生数据至文件中以便长期存储[^1]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值