写一下输入某班某科考试成绩,统计哪些学生成绩低于平均分并输出学号,设数组下标代表学生学号的算法设计思路和必要的流程图,使用模块及变量的说明
时间: 2024-02-28 19:55:30 浏览: 175
算法设计思路:
1. 定义一个数组存储每个学生的成绩,数组下标代表学生学号;
2. 输入每个学生的成绩,并累加总分;
3. 计算平均分;
4. 遍历数组,比较每个学生的成绩和平均分,将低于平均分的学生学号输出。
必要的流程图:
```
开始
输入班级人数n
定义数组grade[n]
定义变量avg
定义变量sum
循环输入每个学生的成绩
累加总分
计算平均分
循环遍历数组
如果grade[i] < avg
输出i
结束
```
模块及变量的说明:
- 输入模块:用于输入班级人数和每个学生的成绩;
- 累加模块:用于累加每个学生的成绩;
- 平均分计算模块:用于计算平均分;
- 比较模块:用于比较每个学生的成绩和平均分,并输出低于平均分的学生学号;
- 变量:数组grade用于存储每个学生的成绩,变量avg用于存储平均分,变量sum用于累加总分。
相关问题
编程实现: 某班级共有50名学生,本学期共有5门课程,分别是高等数学、大学物理、计算机基础、C语言程序设计和马克思主义原理。请定义结构体存储学生的姓名、性别、学号和5门课程的期末考试成绩。 要求: 1)学号格式为220101~220150,有序生成;姓名和性别请在主程序中给定。 2)请利用随机数生成5门课的期末考试成绩;各门课的成绩最大值不能超过100分,最小值高于40分。 3)查找功能1:用二分(折半)查找算法实现根据学号查找该学生的各个科目成绩,输出该学生的姓名、学号、各科目成绩以及平均成绩。 4)查找功能2:用线性查找算法实现查找各个科目大于90分和小于60分的成绩,并输出相应的学生的姓名、学号和该科目成绩。 5)排序功能:根据总成绩对学生成绩进行从高到低排序,并依次输出姓名、学号、各科目成绩以及总成绩。
以下是代码实现,注释中有详细说明:
```c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
// 定义学生结构体
struct student{
char name[20]; // 姓名
char sex[5]; // 性别
char id[10]; // 学号
int score[5]; // 各门课程成绩
float total_score; // 总成绩
};
// 二分查找学生函数
int binary_search(struct student s[], int n, char* target){
int left = 0, right = n-1;
while(left <= right){
int mid = (left + right) / 2;
if(strcmp(s[mid].id, target) == 0){
return mid; // 找到了,返回下标
}
else if(strcmp(s[mid].id, target) < 0){
left = mid + 1; // 目标在右侧
}
else{
right = mid - 1; // 目标在左侧
}
}
return -1; // 没找到,返回-1
}
// 线性查找成绩函数
void linear_search(struct student s[], int n, int low, int high){
for(int i=0; i<n; i++){
for(int j=0; j<5; j++){
if(s[i].score[j] < low || s[i].score[j] > high){
printf("姓名:%s\t学号:%s\t%s成绩:%d\n", s[i].name, s[i].id, j==0?"高数":(j==1?"大物":(j==2?"计算机基础":(j==3?"C语言程序设计":"马原"))), s[i].score[j]);
}
}
}
}
// 总成绩比较函数,用于排序
int cmp(const void* a, const void* b){
return ((struct student*)b)->total_score - ((struct student*)a)->total_score;
}
int main(){
srand(time(NULL)); // 初始化随机数种子
struct student stu[50]; // 存储学生信息
int used[50] = {0}; // 标记学号是否被使用过
char name[10][20] = {"张三","李四","王五","赵六","孙七","周八","吴九","郑十","冯十一","陈十二"}; // 姓名
char sex[10][5] = {"男","女","男","女","男","男","女","女","男","女"}; // 性别
for(int i=0; i<50; i++){
// 生成学号
int id;
do{
id = rand() % 50 + 101;
}while(used[id-101]);
used[id-101] = 1;
sprintf(stu[i].id, "220%d", id);
// 给定姓名和性别
strcpy(stu[i].name, name[i%10]);
strcpy(stu[i].sex, sex[i%10]);
// 随机生成成绩
for(int j=0; j<5; j++){
stu[i].score[j] = rand() % 61 + 40;
}
// 计算总成绩
stu[i].total_score = 0;
for(int j=0; j<5; j++){
stu[i].total_score += stu[i].score[j];
}
}
// 排序
qsort(stu, 50, sizeof(struct student), cmp);
// 输出排序结果
printf("按总成绩排名:\n");
for(int i=0; i<50; i++){
printf("姓名:%s\t学号:%s\t高数:%d\t大物:%d\t计算机基础:%d\tC语言程序设计:%d\t马原:%d\t总成绩:%.1f\n", stu[i].name, stu[i].id, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].score[3], stu[i].score[4], stu[i].total_score);
}
// 查找
char target[10];
printf("请输入要查找的学号:");
scanf("%s", target);
int index = binary_search(stu, 50, target);
if(index != -1){
printf("姓名:%s\t学号:%s\t高数:%d\t大物:%d\t计算机基础:%d\tC语言程序设计:%d\t马原:%d\t平均成绩:%.1f\n", stu[index].name, stu[index].id, stu[index].score[0], stu[index].score[1], stu[index].score[2], stu[index].score[3], stu[index].score[4], stu[index].total_score/5.0);
}
else{
printf("未找到该学生!\n");
}
printf("大于90分或小于60分的成绩:\n");
linear_search(stu, 50, 90, 100);
linear_search(stu, 50, 0, 60);
return 0;
}
```
注意:由于每次生成的随机数都是不同的,因此每次运行程序得到的结果都是不同的。
用c语言用数组做一个班级学生档案记录的程序,要求: 1)用二维数组表示学生成绩记录:第一维为单个学生信息,包括学号及成绩:学号,数学,英语,模电,数电,高程等不少于5门成绩信息; 第二维学生记录; 2)学生成绩记录用二维数组存储,按照学号递增顺序记录,记录人数不少于30个; 3)学生记录插入:插入包括自己在内的10名学生的学号及成绩; 4)学生记录删除:删除指定学号学生; 5)查找学生:根据学号查找学生在记录中的位序,并输出成绩;
好的,以下是一个完整的程序,可以满足你的需求:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STUDENT_COUNT 50
#define SUBJECT_COUNT 5
struct student {
int id;
int scores[SUBJECT_COUNT];
};
struct student_class {
struct student students[MAX_STUDENT_COUNT];
int student_count;
};
void init_class(struct student_class* cls) {
cls->student_count = 0;
}
void add_student(struct student_class* cls, struct student s) {
if (cls->student_count == 0) {
cls->students[0] = s;
cls->student_count++;
return;
}
int i = 0;
while (i < cls->student_count && cls->students[i].id < s.id) {
i++;
}
if (i == cls->student_count) {
cls->students[i] = s;
} else {
for (int j = cls->student_count - 1; j >= i; j--) {
cls->students[j + 1] = cls->students[j];
}
cls->students[i] = s;
}
cls->student_count++;
}
void remove_student(struct student_class* cls, int id) {
int i = 0;
while (i < cls->student_count && cls->students[i].id != id) {
i++;
}
if (i == cls->student_count) {
printf("Cannot find student with id %d\n", id);
return;
}
for (int j = i; j < cls->student_count - 1; j++) {
cls->students[j] = cls->students[j + 1];
}
cls->student_count--;
}
int find_student_index(struct student_class* cls, int id) {
int i = 0;
while (i < cls->student_count && cls->students[i].id != id) {
i++;
}
if (i == cls->student_count) {
printf("Cannot find student with id %d\n", id);
return -1;
}
return i;
}
void print_scores(struct student_class* cls, int id) {
int i = find_student_index(cls, id);
if (i == -1) {
return;
}
printf("Student %d scores:\n", id);
for (int j = 0; j < SUBJECT_COUNT; j++) {
printf("Subject %d: %d\n", j + 1, cls->students[i].scores[j]);
}
}
int main() {
struct student_class cls;
init_class(&cls);
// 添加10名学生的学号及成绩
struct student s;
s.id = 1001;
s.scores[0] = 80;
s.scores[1] = 75;
s.scores[2] = 85;
s.scores[3] = 90;
s.scores[4] = 70;
add_student(&cls, s);
// ...
// 输出所有学生信息
for (int i = 0; i < cls.student_count; i++) {
printf("Student %d:\n", cls.students[i].id);
for (int j = 0; j < SUBJECT_COUNT; j++) {
printf("Subject %d: %d\n", j + 1, cls.students[i].scores[j]);
}
}
// 删除指定学号学生
remove_student(&cls, 1003);
// 查找学生并输出成绩
print_scores(&cls, 1005);
return 0;
}
```
在这个程序中,我们定义了一个结构体 `student` 表示单个学生信息,包括学号和成绩。我们还定义了一个结构体 `student_class`,用于存储整个班级的学生信息。在 `main` 函数中,我们首先使用 `init_class` 函数初始化班级,然后添加10名学生的学号及成绩,使用 `add_student` 函数将学生插入到班级中。随后我们输出所有学生的信息,删除指定学号的学生,查找学生并输出其成绩。在 `add_student` 函数中,我们使用插入排序算法,将新的学生插入到正确的位置,以保证学号递增顺序。在 `remove_student` 函数和 `find_student_index` 函数中,我们使用线性查找算法,找到指定学号的学生,并将其删除或返回其下标。在 `print_scores` 函数中,我们根据学生的学号找到其在数组中的位置,然后输出成绩信息。
阅读全文