考试练习:给定N个学生的基本信息,按照总分从高到低进行排序,并将排序后的结果写入文件test.txt。

5.给定N个学生的基本信息,每个学生基本信息包括学号(由10个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和2门课程的成绩([0.100]区间内的整数),按照总分从高到低进行排序,并将排序后的结果写入文件test.txt。【12分】
 

首先明确要做的步骤

//1.给定信息,输入信息
//2.成绩总分计算
//3.从高到底排列
//4.结果写入文件

也就是说输入成绩后要算总分,然后给结构体冒泡排序,最后再把结果写入文件

代码实现如下:

#include <stdio.h>
#include <string.h>

//1.给定信息,输入信息
//2.成绩总分计算
//3.从高到底排列
//4.结果写入文件
/*测试用例:ni 2022 1 1
hi 2023 2 2
ji 2024 2 1*/
typedef struct Student {
	char stu[10];
	char id[10];
	int grade1;
	int grade2;
} S;


int main() {
	int i,n;
//    n=2;
	scanf("%d",&n);
	S sta[n];
	for(i=0; i<n; i++) {
		scanf("%s %s %d %d",&sta[i].stu,&sta[i].id,&sta[i].grade1,&sta[i].grade2);
	}

	int j;
	S temp;
	int sum[n];
	for(i=0; i<n; i++) {
		sum[i]=sta[i].grade1+sta[i].grade2;
	}
//	for(i=0;i<n;i++){
//		printf("%d\n",sum[i]);
//	}
	for(i=0; i<n-1; i++) {
		for(j=0; j<n-1-i; j++) {
			if(sum[i]<sum[i+1]) {
				temp=sta[j];
				sta[j]=sta[j+1];
				sta[j+1]=temp;
			}//交换出现问题,不是结构体整体 .//没问题,输出问题,我是sb
		}
	}
	FILE *fp=fopen("text.txt","w+");//写入,没有文件就新建文件
	for(i=0; i<n; i++) {
		fprintf(fp,"%s %s %d %d\n",sta[i].stu,sta[i].id,sta[i].grade1,sta[i].grade2);
	}
	fclose(fp);
	return 0;
}

 建立文件,得出结果为:

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值