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