【c语言】求出每位学生的三门课程的总分,然后按总分由高到低排序,并将排序结果按学号、姓名、数学成绩、语文成绩、英语成绩、总分和名次打印输出到屏幕和文件 |
您所在的位置:网站首页 › 由小到大英语 › 【c语言】求出每位学生的三门课程的总分,然后按总分由高到低排序,并将排序结果按学号、姓名、数学成绩、语文成绩、英语成绩、总分和名次打印输出到屏幕和文件 |
Question: 输入n个学生的学号、姓名、数学成绩、语文成绩和英语成绩,求出每位学生的三门课程的总分,然后按总分由高到低排序,并将排序结果按学号、姓名、数学成绩、语文成绩、英语成绩、总分和名次打印输出到屏幕和文件 student.dat中。要求用结构体描述学生信息,输出打印时每位学生信息占一行且上下列对齐,总分相同时名次相同,例如,假设有四个成绩为280、275、275、250,则对应的名次为1、2、2、4。 Code: #include #include #include struct student { int id; // 学号 char name[20]; // 姓名 int math; // 数学成绩 int chinese; // 语文成绩 int English; // 英语成绩 }a[5]; // 输入学生的相关信息 void input(){ for(int i=0; i for(int i=0; i if((a[i].math+a[i].chinese+a[i].English) int rank; // 排名 FILE *fp; // 定义文件指针 fp = fopen("student.dat", "w"); // 将文件指针指向文件 // 判断磁盘中的文件是否存在 if(fp == NULL) { printf("磁盘中文件不存在!"); exit(0); } fprintf(fp, "学号: %d 姓名: %s 数学成绩: %d 语文成绩: %d 英语成绩: %d 总分: %d 名次: 1\n", a[0].id, a[0].name, a[0].math, a[0].chinese, a[0].English, a[0].math+a[0].chinese+a[0].English); for(int i=1; i rank=i; } fprintf(fp, "学号: %d 姓名: %s 数学成绩: %d 语文成绩: %d 英语成绩: %d 总分: %d 名次: %d\n", a[i].id, a[i].name, a[i].math, a[i].chinese, a[i].English, a[i].math+a[i].chinese+a[i].English, rank); } fclose(fp); printf("\n\n"); printf("学号: %d 姓名: %s 数学成绩: %d 语文成绩: %d 英语成绩: %d 总分: %d 名次: 1\n", a[0].id, a[0].name, a[0].math, a[0].chinese, a[0].English, a[0].math+a[0].chinese+a[0].English); for(int i=1; i rank=i; } printf("学号: %d 姓名: %s 数学成绩: %d 语文成绩: %d 英语成绩: %d 总分: %d 名次: %d\n", a[i].id, a[i].name, a[i].math, a[i].chinese, a[i].English, a[i].math+a[i].chinese+a[i].English, rank); } } int main(){ int i, j; // 两个for循环用到的i, j, 定义的排名变量rank printf("请输入学生的相关信息:\n"); input(); // 信息输入 sort(); // 成绩排名 print(); // 将成绩信息打印到屏幕和文件 return 0; }测试数据: 100 张三 99 98 97 101 李四 89 88 87 102 王五 79 78 77 103 赵六 99 98 97Result: 1、c语言的写入文件的方式(定义指针-> 指向文件 -> 判断文件存在 -> fprintf) 2、熟悉结构体定义以及调用的方式(scanf输入用地址,否则用实体) |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |