某班有10个学生,进行了数学考试,编写程序求数学平均成绩及不及格学生的人数,C语言
时间: 2023-11-23 11:07:18 浏览: 148
好的,下面是一个求解平均成绩和不及格学生人数的C程序:
```c
#include <stdio.h>
int main() {
int i, score, sum = 0, fail = 0;
float avg;
for (i = 1; i <= 10; i++) {
printf("请输入第%d个学生的数学成绩:\n", i);
scanf("%d", &score);
sum += score;
if (score < 60) {
fail++;
}
}
avg = (float)sum / 10;
printf("数学平均成绩为:%.2f\n", avg);
printf("不及格学生人数为:%d\n", fail);
return 0;
}
```
程序中,我们使用`for`循环来获取每个学生的数学成绩,并累加总成绩和不及格学生人数。最后,根据累加的总成绩求出平均成绩,输出平均成绩和不及格学生人数。
需要注意的是,这个程序只是一个简单的例子,实际上,在实际应用中还需要考虑很多其他因素,例如对输入数据的合法性进行检查等。
相关问题
某班有10个学生,进行了“数学”、“语文”、“英语”、“C语言”等科目的考试,编写程序: (1)将考试成绩输入一个二维数组; (2)求每门课的平均成绩、每门课的不及格学生的人数及每门课的最高分与最低分; (3)求每个学生的平均成绩、总分、不及格门数; (4)按学生平均成绩的高低排序并输出。
以下是一个可能的解决方案,使用 C++ 语言实现:
```c++
#include <iostream>
#include <algorithm> // 用于排序函数
using namespace std;
const int NUM_STUDENTS = 10;
const int NUM_SUBJECTS = 4;
int main() {
int scores[NUM_STUDENTS][NUM_SUBJECTS]; // 存储每个学生的每门科目成绩
// 输入每个学生的成绩
for (int i = 0; i < NUM_STUDENTS; i++) {
cout << "请输入第" << i+1 << "个学生的成绩(数学 语文 英语 C语言):";
for (int j = 0; j < NUM_SUBJECTS; j++) {
cin >> scores[i][j];
}
}
// 计算每门课的平均成绩、不及格人数、最高分和最低分
double avg_scores[NUM_SUBJECTS] = {0}; // 平均成绩
int num_failed[NUM_SUBJECTS] = {0}; // 不及格人数
int max_scores[NUM_SUBJECTS] = {0}; // 最高分
int min_scores[NUM_SUBJECTS] = {100}; // 最低分(初始化为100分)
for (int j = 0; j < NUM_SUBJECTS; j++) {
for (int i = 0; i < NUM_STUDENTS; i++) {
avg_scores[j] += scores[i][j];
if (scores[i][j] < 60) {
num_failed[j]++;
}
max_scores[j] = max(max_scores[j], scores[i][j]);
min_scores[j] = min(min_scores[j], scores[i][j]);
}
avg_scores[j] /= NUM_STUDENTS;
}
// 输出每门课的平均成绩、不及格人数、最高分和最低分
cout << "每门课的平均成绩、不及格人数、最高分和最低分如下:" << endl;
cout << "数学:平均成绩:" << avg_scores[0] << ",不及格人数:" << num_failed[0] << ",最高分:" << max_scores[0] << ",最低分:" << min_scores[0] << endl;
cout << "语文:平均成绩:" << avg_scores[1] << ",不及格人数:" << num_failed[1] << ",最高分:" << max_scores[1] << ",最低分:" << min_scores[1] << endl;
cout << "英语:平均成绩:" << avg_scores[2] << ",不及格人数:" << num_failed[2] << ",最高分:" << max_scores[2] << ",最低分:" << min_scores[2] << endl;
cout << "C语言:平均成绩:" << avg_scores[3] << ",不及格人数:" << num_failed[3] << ",最高分:" << max_scores[3] << ",最低分:" << min_scores[3] << endl;
// 计算每个学生的平均成绩、总分、不及格门数
double avg_scores_per_student[NUM_STUDENTS] = {0}; // 每个学生的平均成绩
int total_scores[NUM_STUDENTS] = {0}; // 每个学生的总分
int num_failed_per_student[NUM_STUDENTS] = {0}; // 每个学生的不及格门数
for (int i = 0; i < NUM_STUDENTS; i++) {
for (int j = 0; j < NUM_SUBJECTS; j++) {
total_scores[i] += scores[i][j];
if (scores[i][j] < 60) {
num_failed_per_student[i]++;
}
}
avg_scores_per_student[i] = total_scores[i] / double(NUM_SUBJECTS);
}
// 按学生平均成绩排序并输出
int idx[NUM_STUDENTS];
for (int i = 0; i < NUM_STUDENTS; i++) {
idx[i] = i;
}
sort(idx, idx+NUM_STUDENTS, [&](int a, int b) {return avg_scores_per_student[a] > avg_scores_per_student[b];});
cout << "按学生平均成绩排序如下:" << endl;
for (int i = 0; i < NUM_STUDENTS; i++) {
int j = idx[i];
cout << "第" << j+1 << "个学生:";
cout << "平均成绩:" << avg_scores_per_student[j] << ",总分:" << total_scores[j] << ",不及格门数:" << num_failed_per_student[j] << endl;
}
return 0;
}
```
这个程序的主要思路是,先输入每个学生的成绩,然后对每门课计算平均成绩、不及格人数、最高分和最低分,再对每个学生计算平均成绩、总分和不及格门数,最后按学生平均成绩排序并输出。在计算平均成绩等统计数据时,使用了数组和循环结构。在排序时,使用了 `sort` 函数和 Lambda 表达式。
c语言编写一个程序,存储学生的学号,姓名,语文数学英语成绩,并统计各科成绩的平均值,优秀率,及格率,以及成绩排名
好的,关于您的问题,我可以为您提供一份示例代码,但是需要注意的是,程序的编写需要根据具体需求进行调整和优化。以下是示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 // 最大学生数
#define MAX_NAME_LEN 20 // 最大姓名长度
#define SUBJECT_NUM 3 // 学科数目
// 学生结构体
struct student {
char id[10]; // 学号
char name[MAX_NAME_LEN]; // 姓名
float score[SUBJECT_NUM]; // 成绩
float total; // 总分
int rank; // 排名
};
// 统计数据结构体
struct stats {
float avg[SUBJECT_NUM]; // 平均分
float excellent_rate; // 优秀率
float pass_rate; // 及格率
};
// 声明函数
void init_students(struct student students[]);
void input_scores(struct student students[], int num);
void calc_total(struct student students[], int num);
void sort_by_score(struct student students[], int num);
void calc_stats(struct student students[], int num, struct stats *stats);
void print_report(struct student students[], int num, struct stats stats);
int main() {
struct student students[MAX_STUDENT_NUM];
struct stats stats;
int num;
// 初始化学生信息
init_students(students);
// 输入学生成绩
printf("请输入学生数目:");
scanf("%d", &num);
input_scores(students, num);
// 计算总分并按成绩排序
calc_total(students, num);
sort_by_score(students, num);
// 计算统计数据
calc_stats(students, num, &stats);
// 打印报告
print_report(students, num, stats);
return 0;
}
// 初始化学生信息
void init_students(struct student students[]) {
for (int i = 0; i < MAX_STUDENT_NUM; i++) {
students[i].score[0] = students[i].score[1] = students[i].score[2] = 0;
}
}
// 输入学生成绩
void input_scores(struct student students[], int num) {
for (int i = 0; i < num; i++) {
printf("请输入第%d位学生的学号、姓名和各科成绩:", i+1);
scanf("%s%s%f%f%f", students[i].id, students[i].name,
&students[i].score[0], &students[i].score[1], &students[i].score[2]);
}
}
// 计算总分
void calc_total(struct student students[], int num) {
for (int i = 0; i < num; i++) {
students[i].total = students[i].score[0] + students[i].score[1] + students[i].score[2];
}
}
// 按成绩排序
void sort_by_score(struct student students[], int num) {
for (int i = 0; i < num-1; i++) {
for (int j = 0; j < num-i-1; j++) {
if (students[j].total < students[j+1].total) {
struct student tmp = students[j];
students[j] = students[j+1];
students[j+1] = tmp;
}
}
}
// 计算排名
for (int i = 0; i < num; i++) {
students[i].rank = i+1;
}
}
// 计算统计数据
void calc_stats(struct student students[], int num, struct stats *stats) {
float sum[SUBJECT_NUM] = {0};
int excellent_num = 0, pass_num = 0;
// 计算每个科目的总分
for (int i = 0; i < num; i++) {
sum[0] += students[i].score[0];
sum[1] += students[i].score[1];
sum[2] += students[i].score[2];
if (students[i].score[0] >= 90 && students[i].score[1] >= 90 && students[i].score[2] >= 90) {
excellent_num++;
}
if (students[i].score[0] >= 60 && students[i].score[1] >= 60 && students[i].score[2] >= 60) {
pass_num++;
}
}
// 计算平均分和及格率、优秀率
for (int i = 0; i < SUBJECT_NUM; i++) {
stats->avg[i] = sum[i] / num;
}
stats->excellent_rate = (float)excellent_num / num * 100;
stats->pass_rate = (float)pass_num / num * 100;
}
// 打印成绩报告
void print_report(struct student students[], int num, struct stats stats) {
printf("\n\n学生成绩报告\n");
printf("----------------------------------------------------\n");
printf("学号\t\t姓名\t\t语文\t数学\t英语\t总分\t排名\n");
printf("----------------------------------------------------\n");
for (int i = 0; i < num; i++) {
printf("%s\t%s\t\t%.2f\t%.2f\t%.2f\t%.2f\t%d\n", students[i].id, students[i].name,
students[i].score[0], students[i].score[1], students[i].score[2], students[i].total, students[i].rank);
}
printf("----------------------------------------------------\n");
printf("平均分\t\t\t%.2f\t%.2f\t%.2f\n", stats.avg[0], stats.avg[1], stats.avg[2]);
printf("及格率\t\t\t%.2f%%\n", stats.pass_rate);
printf("优秀率\t\t\t%.2f%%\n", stats.excellent_rate);
}
```
在这个程序中,我们使用了两个结构体:`student` 和 `stats`。其中,`student` 结构体包含每个学生的学号、姓名、三科成绩、总分和排名等信息,`stats` 结构体用于存储统计数据,包括每个科目的平均分、全局的及格率和优秀率。程序的主要流程可以分为以下几步:
1. 初始化学生信息。
2. 输入学生成绩,包括学号、姓名和三科成绩。
3. 计算每个学生的总分,并按总分排序,同时计算每个学生的排名。
4. 计算统计数据,包括每个科目的平均分、全局的及格率和优秀率。
5. 打印成绩报告,包括每个学生的详细成绩和排名,以及全局的统计数据。
上述代码只是给出了一个示例,实际的应用中需要根据具体需求进行调整和优化。希望对您有所帮助!