C语言输入15个同学的成绩,并按照从高到低的次序进行排名输出
时间: 2024-05-09 11:17:14 浏览: 111
好的,以下是示例代码:
```c
#include <stdio.h>
int main()
{
int scores[15];
int i, j, temp;
// 输入成绩
for (i = 0; i < 15; i++) {
printf("请输入第%d个同学的成绩:", i+1);
scanf("%d", &scores[i]);
}
// 从高到低排序
for (i = 0; i < 14; i++) {
for (j = i+1; j < 15; j++) {
if (scores[i] < scores[j]) {
temp = scores[i];
scores[i] = scores[j];
scores[j] = temp;
}
}
}
// 输出排序后的成绩
printf("按从高到低排序后的成绩为:\n");
for (i = 0; i < 15; i++) {
printf("%d\n", scores[i]);
}
return 0;
}
```
注意:以上代码只是一个示例,可能存在漏洞和不足之处,仅供参考。
相关问题
帮我用C语言写一个项目,其中学生基本信息:如学号、姓名、性别、年龄、宿舍号码、电话号码等。 学生选修课程的基本信息:课程编号、课程名称、考试成绩、平时成绩、综合成绩(综合成绩=平时成绩0.4+考试成绩0.6)、学分、重修否等。如果重修,需要考虑重修学期、重修成绩。并且要考虑多次重修的情况。功能: 基本功能:录入、修改、插入、删除、查询。统计功能: (1)统计每个学生各门功课的平均成绩,并按平均成绩从高到低的次序排名输出每个学生各门功课的综合成绩和平均成绩(名次、学号、姓名、平均成绩、各门功课的考试成绩、平时成绩、综合成绩)。 (2)统计并输出各班各门功课的平均成绩和总平均成绩。(3)统计并输出每个同学已修学分。 (4)列出不及格学生清单(学号、姓名、不及格的课程和成绩)。
好的,这是一个比较复杂的项目,需要使用C语言进行编写。我先给您提供一个基本的框架,供您参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENT_NUM 100 // 最大学生数量
#define MAX_COURSE_NUM 10 // 最大课程数量
#define MAX_COURSE_NAME_LEN 20 // 最大课程名长度
#define MAX_NAME_LEN 10 // 最大姓名长度
#define MAX_PHONE_NUM_LEN 20 // 最大电话号码长度
#define MAX_GRADE_LEN 3 // 最大成绩长度
// 学生基本信息结构体
typedef struct {
int id; // 学号
char name[MAX_NAME_LEN]; // 姓名
char sex; // 性别
int age; // 年龄
int dorm_num; // 宿舍号码
char phone_num[MAX_PHONE_NUM_LEN]; // 电话号码
} Student;
// 学生选修课程信息结构体
typedef struct {
char course_id[MAX_GRADE_LEN]; // 课程编号
char course_name[MAX_COURSE_NAME_LEN]; // 课程名称
int exam_grade; // 考试成绩
int usual_grade; // 平时成绩
float final_grade; // 综合成绩
int credit; // 学分
int is_retake; // 是否重修
char retake_semester[MAX_GRADE_LEN]; // 重修学期
int retake_grade; // 重修成绩
} Course;
// 学生信息结构体,包含基本信息和选修课程信息
typedef struct {
Student info; // 学生基本信息
Course courses[MAX_COURSE_NUM]; // 选修课程信息
int course_num; // 选修课程数量
} StudentInfo;
// 学生信息数组,存储所有学生信息
StudentInfo students[MAX_STUDENT_NUM];
int student_num = 0; // 学生数量
// 函数声明
void add_student(); // 录入学生信息
void modify_student(); // 修改学生信息
void insert_student(); // 插入学生信息
void delete_student(); // 删除学生信息
void query_student(); // 查询学生信息
void rank_student(); // 排名学生信息
void avg_grade(); // 统计平均成绩
void total_avg_grade(); // 统计班级平均成绩
void count_credit(); // 统计已修学分
void list_fail_student(); // 列出不及格学生清单
int main() {
int choice = 0;
while (1) {
printf("请选择功能:\n");
printf("1. 录入学生信息\n");
printf("2. 修改学生信息\n");
printf("3. 插入学生信息\n");
printf("4. 删除学生信息\n");
printf("5. 查询学生信息\n");
printf("6. 排名学生信息\n");
printf("7. 统计平均成绩\n");
printf("8. 统计班级平均成绩\n");
printf("9. 统计已修学分\n");
printf("10. 列出不及格学生清单\n");
printf("0. 退出\n");
printf("请输入选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
modify_student();
break;
case 3:
insert_student();
break;
case 4:
delete_student();
break;
case 5:
query_student();
break;
case 6:
rank_student();
break;
case 7:
avg_grade();
break;
case 8:
total_avg_grade();
break;
case 9:
count_credit();
break;
case 10:
list_fail_student();
break;
case 0:
printf("谢谢使用,再见!\n");
exit(0);
default:
printf("输入错误,请重新选择\n");
}
}
return 0;
}
void add_student() {
// TODO: 实现录入学生信息功能
}
void modify_student() {
// TODO: 实现修改学生信息功能
}
void insert_student() {
// TODO: 实现插入学生信息功能
}
void delete_student() {
// TODO: 实现删除学生信息功能
}
void query_student() {
// TODO: 实现查询学生信息功能
}
void rank_student() {
// TODO: 实现排名学生信息功能
}
void avg_grade() {
// TODO: 实现统计平均成绩功能
}
void total_avg_grade() {
// TODO: 实现统计班级平均成绩功能
}
void count_credit() {
// TODO: 实现统计已修学分功能
}
void list_fail_student() {
// TODO: 实现列出不及格学生清单功能
}
```
您可以在上述框架的基础上,实现各个功能。需要注意的是,每个功能都需要先打印出相应的提示信息,然后等待用户输入相应的信息,然后进行相应的操作。比如,录入学生信息功能需要等待用户输入学生的基本信息和选修课程信息,然后将这些信息存储到相应的数据结构中。其他功能也需要类似地进行实现。
某班开设有英语、数学、程序设计三门课程,该班同学信息保存在文本文件student.txt中,用C语言编写程序从文件读入该班同学信息,分别按总成绩和英语成绩排序。该班同学不多于50人。 输入描述 文本文件student.txt,每行数据描述一个同学信息,包括名字、英语、数学、程序设计成绩 输出描述 该班同学总成绩排序和英语成绩排序,成绩相同时按输入次序。 每项占12位。
以下是使用C语言编写的班级成绩排序程序:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STUDENTS 50
#define MAX_NAME_LENGTH 20
#define GRADE_WIDTH 12
typedef struct {
char name[MAX_NAME_LENGTH];
int english;
int math;
int programming;
int total;
} Student;
// 比较函数,用于qsort()排序
int cmp(const void *a, const void *b) {
Student *stuA = (Student *)a;
Student *stuB = (Student *)b;
if (stuA->total != stuB->total) {
return stuB->total - stuA->total;
} else {
return stuB->english - stuA->english;
}
}
int main() {
FILE *file;
Student students[MAX_STUDENTS];
int numStudents = 0;
// 打开文件
file = fopen("student.txt", "r");
if (file == NULL) {
printf("无法打开文件。\n");
return 1;
}
// 读取学生信息
char name[MAX_NAME_LENGTH];
int english, math, programming;
while (fscanf(file, "%s %d %d %d", name, &english, &math, &programming) == 4) {
if (numStudents >= MAX_STUDENTS) {
printf("学生人数超过 %d 人,无法继续读取。\n", MAX_STUDENTS);
break;
}
strcpy(students[numStudents].name, name);
students[numStudents].english = english;
students[numStudents].math = math;
students[numStudents].programming = programming;
students[numStudents].total = english + math + programming;
numStudents++;
}
// 关闭文件
fclose(file);
// 按总成绩排序
qsort(students, numStudents, sizeof(Student), cmp);
printf("按总成绩排序:\n");
for (int i = 0; i < numStudents; i++) {
printf("%-12s%*d%*d%*d%*d\n", students[i].name, GRADE_WIDTH, students[i].english, GRADE_WIDTH, students[i].math, GRADE_WIDTH, students[i].programming, GRADE_WIDTH, students[i].total);
}
// 按英语成绩排序
qsort(students, numStudents, sizeof(Student), cmp);
printf("\n按英语成绩排序:\n");
for (int i = 0; i < numStudents; i++) {
printf("%-12s%*d%*d%*d%*d\n", students[i].name, GRADE_WIDTH, students[i].english, GRADE_WIDTH, students[i].math, GRADE_WIDTH, students[i].programming, GRADE_WIDTH, students[i].total);
}
return 0;
}
```
该程序使用了结构体来保存每个学生的信息,使用fscanf()函数从文件中读取数据。程序使用qsort()函数进行排序,cmp()函数用于比较学生信息。最后,程序使用printf()函数打印排序后的信息。
阅读全文