#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
预期输出: (程序退出)