现在有三名学生的信息 学号 姓名C语言成绩高数英语 14220103张三 86 87 90 14220110 王十67 78 79 14220101 李一56 80 67 请编程完成如下功能: 1) 从键盘输入三名学生信息 2) 将三名学生的信息在屏幕上显示。 3) 将以上学生信息存入文件D:1Istulnfo.dat二进制文件中。 4)编写函数sortonNo,功能为利用冒泡排序法,将第一题中的信息按学号升序排序。 5) 编写函数sortonC,功能是利用选择排序法将第一题中的信息按C语言成绩降序排序。 6)从D:Istulnfo.dat文件中读出下标为2的学生信息,在屏幕上进行显示。 要求main函数控制台,只负责变量的定义,调用函数input进行输入,output进行输出,save函数将数据存入D:1Istulnfo.dat二进制 文件,sortonNo函数利用冒泡排序法,将信息按学号升序排序,sortonC函数利用选择排序法将信息按C语言成绩降序排序,read2函数从D:Istulnfo.dat文件中读出下标为2的学生信息,在屏幕上进行显示。
时间: 2023-06-17 12:08:37 浏览: 226
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义学生结构体
struct Student {
char id[11]; //学号
char name[21]; //姓名
int c_score; //C语言成绩
int math_score; //高数成绩
int eng_score; //英语成绩
};
//从键盘输入学生信息
void input(struct Student *stu) {
printf("请输入学生信息:\n");
for(int i=0; i<3; i++) {
printf("请输入第%d名学生的学号:", i+1);
scanf("%s", stu[i].id);
printf("请输入第%d名学生的姓名:", i+1);
scanf("%s", stu[i].name);
printf("请输入第%d名学生的C语言成绩:", i+1);
scanf("%d", &stu[i].c_score);
printf("请输入第%d名学生的高数成绩:", i+1);
scanf("%d", &stu[i].math_score);
printf("请输入第%d名学生的英语成绩:", i+1);
scanf("%d", &stu[i].eng_score);
}
}
//在屏幕上显示学生信息
void output(struct Student *stu) {
printf("学号\t姓名\tC语言\t高数\t英语\n");
for(int i=0; i<3; i++) {
printf("%s\t%s\t%d\t%d\t%d\n", stu[i].id, stu[i].name, stu[i].c_score, stu[i].math_score, stu[i].eng_score);
}
}
//将学生信息存入文件
void save(struct Student *stu) {
FILE *fp;
fp = fopen("D:\\1Istulnfo.dat", "wb");
if(fp == NULL) {
printf("文件打开失败!\n");
exit(1);
}
fwrite(stu, sizeof(struct Student), 3, fp);
fclose(fp);
}
//冒泡排序函数,按学号升序排序
void sortonNo(struct Student *stu) {
for(int i=0; i<3; i++) {
for(int j=0; j<2-i; j++) {
if(strcmp(stu[j].id, stu[j+1].id) > 0) {
struct Student temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}
}
//选择排序函数,按C语言成绩降序排序
void sortonC(struct Student *stu) {
for(int i=0; i<3; i++) {
int max_index = i;
for(int j=i+1; j<3; j++) {
if(stu[j].c_score > stu[max_index].c_score) {
max_index = j;
}
}
if(max_index != i) {
struct Student temp = stu[i];
stu[i] = stu[max_index];
stu[max_index] = temp;
}
}
}
//从文件中读出下标为2的学生信息并显示
void read2() {
FILE *fp;
fp = fopen("D:\\1Istulnfo.dat", "rb");
if(fp == NULL) {
printf("文件打开失败!\n");
exit(1);
}
fseek(fp, sizeof(struct Student)*2, SEEK_SET); //定位到下标为2的学生信息
struct Student stu;
fread(&stu, sizeof(struct Student), 1, fp);
printf("\n下标为2的学生信息:\n");
printf("学号\t姓名\tC语言\t高数\t英语\n");
printf("%s\t%s\t%d\t%d\t%d\n", stu.id, stu.name, stu.c_score, stu.math_score, stu.eng_score);
fclose(fp);
}
int main() {
struct Student stu[3];
input(stu);
output(stu);
save(stu);
sortonNo(stu);
printf("\n按学号升序排序后的学生信息:\n");
output(stu);
sortonC(stu);
printf("\n按C语言成绩降序排序后的学生信息:\n");
output(stu);
read2();
return 0;
}
```
阅读全文