【无标题】实验5-2

#include <stdio.h>
#include <string.h>
char a[50][50],ordered[50][50];
int b[50],order_b[50];
void f1(int n){
for(int i=1;i<=n;i++)
gets(a[i]);
for(int i=1;i<=n;i++)
b[i]=(a[i][strlen(a[i])-1]-'0')+(a[i][strlen(a[i])-2]-'0')*10;
printf("%d records were input!\n",n);
return ;
}
void f2(int n){
	for(int i=1;i<=n;i++)
	order_b[i]=1;
	for(int i=2;i<=n;i++){
		for(int j=1;j<i;j++){
			if(b[i]>b[j])
			order_b[j]++;
			if(b[i]<=b[j])
			order_b[i]++;
		}
	}
for(int i=1;i<=n;i++){
	for(int j=0;;j++){
		if(a[i][j]=='\0')break;
		ordered[order_b[i]][j]=a[i][j];
	}
}
for(int i=1;i<=n;i++)
b[i]=(ordered[i][strlen(ordered[i])-1]-'0')+(ordered[i][strlen(ordered[i])-2]-'0')*10;
//重构b[i],一定程度上牺牲了程序的可重复性,但方便后面的二分 
	printf("Reorder finished!\n");
	return ;
}
void f3(int n){
	for(int i=1;i<=n;i++)
	printf("%s\n",ordered[i]);
	return ;
}
void f4(int n){
	int grade;
	scanf("%d",&grade);
	for(int i=1;i<=n;i++){
		if(b[i]==grade){
		printf("%s\n",ordered[i]);
		return ;
		}
	}
	printf("not found!\n");
	return ;
}
int main(){
	//printf("菜单:\n1.成绩输入\n2.成绩排序\n3.成绩输出\n4.成绩查找\n"); 
	int fun,n;
	for(;;){
		scanf("%d",&fun);
	if(fun==1){
		scanf("%d",&n);getchar();f1(n);
	}
	if(fun==2)f2(n);
	if(fun==3)f3(n);
	if(fun==4)f4(n);
	if(fun==0)return 0;
	}
	return 0;
} 

编写一个C程序,要求采用模块化程序设计思想,将相关功能用函数实现,并提供菜单选项。该程序具有以下功能: ①“成绩输入”,输入n个学生的姓名和C语言课程的成绩。 ②“成绩排序”,将成绩按从高到低的次序排序,姓名同时进行相应调整。成绩相同的,按照输入先后次序排列。 ③“成绩输出”,输出排序后所有学生的姓名和C语言课程的成绩。 ④“成绩查找”,输入一个C语言课程成绩值,用二分查找进行搜索。如果查找到有该成绩,则输出该成绩学生的姓名和C语言课程的成绩;否则,输出提示“not found!”。

编程要求

根据提示,在右侧编辑器补充代码,计算并输出结果。

测试说明

平台会对你编写的代码进行测试:

测试输入: 1 6 Jack 95 Mike 90 Joe 75 Andy 95 Rose 89 Sophia 77

预期输出: 6 records were input!

测试输入: 2 预期输出: Reorder finished!

测试输入: 3 预期输出: Jack 95 Andy 95 Mike 90 Rose 89 Sophia 77 Joe 75

测试输入: 4 89 预期输出: Rose 89

测试输入: 4 88 预期输出: not found!

测试输入: 0 预期输出: (程序退出)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值