编程实现:有n个学生参加某门课程的考试,统计并输出该课程高于平均 成绩的学生的学号和课程成绩。学号和成绩之间空一格
时间: 2024-02-26 09:58:37 浏览: 56
好的,这是一个简单的统计成绩的问题,可以使用以下Python代码实现:
```python
n = int(input("请输入学生人数:")) # 输入学生人数
grades = [] # 初始化成绩列表
# 循环输入每个学生的成绩并加入成绩列表
for i in range(n):
grade = int(input("请输入学生{}的成绩:".format(i+1)))
grades.append(grade)
# 计算平均成绩
average = sum(grades) / n
# 找到高于平均成绩的学生并输出学号和成绩
for i in range(n):
if grades[i] > average:
print("{} {}".format(i+1, grades[i]))
```
以上代码中,我们首先输入学生人数,然后循环输入每个学生的成绩并加入成绩列表。接着计算平均成绩并循环遍历成绩列表,找到高于平均成绩的学生并输出其学号和成绩。
相关问题
编程实现: 某班级共有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语言 编程实现学生信息管理系统设计: 某班级共有50名学生,本学期共有5门课程,分别是高等数学、大学物理、计算机基础、C语言程序设计和马克思主义原理。请定义结构体存储学生的姓名、性别、学号和5门课程的期末考试成绩。 要求: 1)学号格式为220101~220150,有序生成;姓名和性别请在主程序中给定。 2)请利用随机数生成5门课的期末考试成绩;各门课的成绩最大值不能超过100分,最小值高于40分。 3)查找功能1:用二分(折半)查找算法实现根据学号查找该学生的各个科目成绩,输出该学生的姓名、学号、各科目成绩以及平均成绩。 4)查找功能2:用线性查找算法实现查找各个科目大于90分和小于60分的成绩,并输出相应的学生的姓名、学号和该科目成绩。 5)排序功能:根据总成绩对学生成绩进行从高到低排序,并依次输出姓名、学号、各科目成绩以及总成绩。请指明用什么排序方法。
好的,我已经记录下了您的问题。针对您的问题,我可以为您进行解答。
这个学生信息管理系统设计需要用到结构体来存储学生的姓名、性别、学号和5门课程的期末考试成绩。具体实现过程如下:
1. 定义结构体Student,包括姓名、性别、学号和5门课程的期末考试成绩。
```
struct Student {
char name[20];
char gender;
int id;
int score[5];
};
```
2. 生成50名学生的学号,并使用随机数生成每个学生的5门课程的期末考试成绩。
```
for (int i = 0; i < 50; i++) {
students[i].id = 220101 + i;
for (int j = 0; j < 5; j++) {
students[i].score[j] = rand() % 61 + 40; // 随机数生成40-100之间的整数
}
}
```
3. 实现二分查找算法和线性查找算法,分别用于查找学生的成绩和查找各个科目大于90分和小于60分的成绩。
```
// 二分查找算法
int binarySearch(Student students[], int n, int id) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (students[mid].id == id) {
return mid;
} else if (students[mid].id < id) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 没有找到
}
// 线性查找算法
void linearSearch(Student students[], int n, int minScore, int maxScore) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < 5; j++) {
if (students[i].score[j] >= minScore && students[i].score[j] <= maxScore) {
printf("姓名:%s 学号:%d 科目%d成绩:%d\n", students[i].name, students[i].id, j + 1, students[i].score[j]);
}
}
}
}
```
4. 实现按照总成绩从高到低排序的功能,并输出学生的姓名、学号、各科目成绩和总成绩。这里可以使用快速排序算法实现。
```
// 快速排序算法
void quickSort(Student students[], int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right;
int pivot = students[left].score[0] + students[left].score[1] + students[left].score[2] + students[left].score[3] + students[left].score[4];
while (i < j) {
while (i < j && (students[j].score[0] + students[j].score[1] + students[j].score[2] + students[j].score[3] + students[j].score[4]) <= pivot) {
j--;
}
students[i] = students[j];
while (i < j && (students[i].score[0] + students[i].score[1] + students[i].score[2] + students[i].score[3] + students[i].score[4]) >= pivot) {
i++;
}
students[j] = students[i];
}
students[i].score[0] = pivot - students[i].score[0] - students[i].score[1] - students[i].score[2] - students[i].score[3] - students[i].score[4];
quickSort(students, left, i - 1);
quickSort(students, i + 1, right);
}
// 按总成绩从高到低排序并输出
void sortByTotalScore(Student students[], int n) {
quickSort(students, 0, n - 1);
for (int i = 0; i < n; i++) {
printf("姓名:%s 学号:%d 科目1成绩:%d 科目2成绩:%d 科目3成绩:%d 科目4成绩:%d 科目5成绩:%d 总成绩:%d\n",
students[i].name, students[i].id, students[i].score[0], students[i].score[1], students[i].score[2], students[i].score[3], students[i].score[4],
students[i].score[0] + students[i].score[1] + students[i].score[2] + students[i].score[3] + students[i].score[4]);
}
}
```
以上就是学生信息管理系统设计的具体实现过程。
阅读全文