学生信息包括:学号,姓名,语文、数学、英语成绩,从键盘输入15个学生信息,将之按照总分排序最高的前5个学生信息保存到sum_max.txt中,将均分最低的排序前10个学生信息保存在avg_min.t

#include<stdio.h>
#include<stdlib.h>
#define N 15  
#define max 5
struct Score
{
	float yu;
	float shu;
	float wai;
};
struct Student
{
	char xh[12];
	char name[10];
	struct Score c;
};
void Pai(struct Student *s);
int main()
{
	struct Student s[N];
	int i;
	for(i=0;i<N;i++)
	{
		printf("请输入第%d位学生的学号姓名和三门课成绩:",i+1);
		scanf("%s %s %f %f %f",s[i].xh ,s[i].name ,&s[i].c.yu ,&s[i].c.shu ,&s[i].c.wai );
	}
	Pai(s);
	/*
	测试是否输出成功,表示到这里为止都是正确的,方便后面检查错误缩小范围
	for(i=0;i<N;i++)
	{
		printf("%s, %s ,%.1f ,%.1f, %.1f\n",s[i].xh ,s[i].name ,s[i].c.yu ,s[i].c.shu ,s[i].c.wai );
	}
	*/
	FILE *fp1,*fp2;
	fp1=fopen("sum_max.txt","w");
	fp2=fopen("avg_min.txt","w");
	if(fp1==NULL||fp2==NULL)
	{
		printf("文件打开失败!!");
		exit(0);
	}
	for(i=0;i<max;i++)
	{
		fprintf(fp1,"%s, %s ,%.1f ,%.1f, %.1f\n",s[i].xh ,s[i].name ,s[i].c.yu ,s[i].c.shu ,s[i].c.wai);
	}
	for(i=max;i<N;i++)
	{
		fprintf(fp2,"%s, %s ,%.1f ,%.1f, %.1f\n",s[i].xh ,s[i].name ,s[i].c.yu ,s[i].c.shu ,s[i].c.wai);
	}
	fclose(fp1);
	fclose(fp2);
	return 0;
}
void Pai(struct Student *s)
{
	struct Student temp;
	int i,j;
	float av=0;
	for(i=0;i<N;i++)
	{
		for(j=0;j<N-i-1;j++)
		{
			if((s[j].c .yu +s[j].c.shu+s[j].c .wai)/3<(s[j+1].c .yu +s[j+1].c .shu+s[j+1].c .wai)/3)
			{
				temp=s[j];
				s[j]=s[j+1];
				s[j+1]=temp;
			}
		}
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是JAVA代码实现: ```java import java.util.Scanner; import java.util.Arrays; public class Student { int id; String name; int chineseGrade; int mathGrade; int englishGrade; int totalGrade; public Student(int id, String name, int chineseGrade, int mathGrade, int englishGrade) { this.id = id; this.name = name; this.chineseGrade = chineseGrade; this.mathGrade = mathGrade; this.englishGrade = englishGrade; this.totalGrade = chineseGrade + mathGrade + englishGrade; } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Student[] students = new Student[15]; // 录入学生信息 for (int i = 0; i < students.length; i++) { System.out.println("请输入第" + (i+1) + "个学生信息:"); System.out.print("学号:"); int id = scanner.nextInt(); System.out.print("姓名:"); String name = scanner.next(); System.out.print("语文成绩:"); int chineseGrade = scanner.nextInt(); System.out.print("数学成绩:"); int mathGrade = scanner.nextInt(); System.out.print("英语成绩:"); int englishGrade = scanner.nextInt(); students[i] = new Student(id, name, chineseGrade, mathGrade, englishGrade); } // 按总分从高到低排序 Arrays.sort(students, (a, b) -> b.totalGrade - a.totalGrade); // 输出学生信息 System.out.println("按总分从高到低排序学生信息如下:"); for (int i = 0; i < students.length; i++) { System.out.println("学号:" + students[i].id + " 姓名:" + students[i].name + " 语文成绩:" + students[i].chineseGrade + " 数学成绩:" + students[i].mathGrade + " 英语成绩:" + students[i].englishGrade + " 总分:" + students[i].totalGrade); } } } ``` 运行代码,会依次让你输入15学生学号姓名语文成绩数学成绩英语成绩,然后按照总分从高到低输出学生信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值