1从键盘或文件读入20位学生三门课的成绩(每名学生成绩信息均包括姓名,学号,分数)。
②编写查询函数,实现输入学生学号,输出该学生三门课的成绩的功能。
③编写排序函数,采用冒泡法,将学生总成绩成绩按照从高到低进行排序,排序由排序函数实现,在主函数中调用实现排序,并在主函数中输出排序后的成绩单(要求用指针实现参数传递)。
④编写插入函数,实现再输入一个学生三门课的成绩,将此学生总成绩按照排序规律插入原学生成绩数组。
⑤将排好序的成绩单进行反序存放,即原来是总成绩从高到低,现在改为从低到高排列。
#include <stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<malloc.h>
struct a
{
int num;
char name[20];
int yingyu;
int tiyu;
int zhian;
int sum;}a[21];
void Input(struct a* arr);
void Input(struct a* arr)
{
printf("请输入新的成绩:\n");
scanf("%d %s %d %d %d",&a[21].num,&a[21].name,&a[21].yingyu,&a[21].tiyu,&a[21].zhian);
a[21].sum=a[21].yingyu+a[21].tiyu+a[21].zhian;
for (int i = 0; i <20; i++)
{
if (a[21].sum<=a[i].sum&&a[21].sum>a[i+1].sum)
{
struct a tmp = a[21];
for (int j = 20; j>=i+1; j--) a[j+1]=a[j];
a[i+1]=tmp;break;
}
}
for(int i=0;i<21;i++)
{
printf("%d %s %.2d %.2d %.2d",a[i].num,a[i].name,a[i].yingyu,a[i].tiyu,a[i].zhian);
printf("\n");
}
}
void sorth(struct a* arr);
void sorth(struct a* arr)
{
for (int i = 0; i <20; i++)
{
for (int j = 0; j + 1 < 20 - i; j++)
{
if (a[j].sum > a[j + 1].sum)
{
struct a tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
}
void write(struct a* arr);
void write(struct a* arr)
{
FILE *fp;
fp=fopen("write.txt", "wt+"); //打开文件
for (int i = 0; i<20; i++) //将N条信息存储进去
{
fprintf(fp,"%d %s %.2d %.2d %.2d\n",a[i].num,a[i].name,a[i].yingyu,a[i].tiyu,a[i].zhian);
}
fclose(fp); //关闭文件
}
void sortl(struct a* arr);
void sortl(struct a* arr)
{
for (int i = 0; i <20; i++)
{
for (int j = 0; j + 1 < 20 - i; j++)
{
if (a[j].sum < a[j + 1].sum)
{
struct a tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
}
int chaxun(int num);
int chaxun(int num)
{
int i,f=0;
for(i=0;i<20;i++)
{
if (num==a[i].num)
{
printf("%d %s %.2d %.2d %.2d",a[i].num,a[i].name,a[i].yingyu,a[i].tiyu,a[i].zhian);
f=1;
break;
}
}
if (f==0) printf("没找到捏");
}
int main()
{
int i,j;
FILE* fp=fopen("实验五.txt","r");
if(fp==NULL)
{
printf("无文件");
return -1;
}
for(i=0;i<20;i++)
{
fscanf(fp,"%d %s %d %d %d %d",&a[i].num,&a[i].name,&a[i].yingyu,&a[i].tiyu,&a[i].zhian,&a[i].sum);
}
fclose(fp);
for(i=0;i<20;i++)
{
printf("%d %s %.2d %.2d %.2d %.2d",a[i].num,a[i].name,a[i].yingyu,a[i].tiyu,a[i].zhian,&a[i].sum);
printf("\n");
}
int cmd;
printf("请输入:\n1:学号查询成绩\n2:排序\n3:顺序插入\n4:反序排列\n");
scanf("%d",&cmd);
switch(cmd)
{
case 1:
int num;
printf("请输入学号:\n");
scanf("%d",&num);
chaxun(num);
break;
case 2:
for(i=0;i<20;i++) a[i].sum=a[i].yingyu+a[i].tiyu+a[i].zhian;
sortl(a);
for(i=0;i<20;i++)
{
printf("%d %s %.2d %.2d %.2d",a[i].num,a[i].name,a[i].yingyu,a[i].tiyu,a[i].zhian);
printf("\n");
}
break;
case 3:
for(i=0;i<20;i++) a[i].sum=a[i].yingyu+a[i].tiyu+a[i].zhian;
sortl(a);
Input(a);
break;
case 4:
for(i=0;i<20;i++) a[i].sum=a[i].yingyu+a[i].tiyu+a[i].zhian;
sorth(a);
write(a);
break;
}
return 0;
}
第一篇博客,c语言初学者,难免有bug
txt这么写
2307001 张一 92 94 95 0
2307002 张二 65 68 97 0
2307003 张三 88 54 76 0
2307004 张四 66 54 33 0
2307005 张五 55 99 100 0
2307006 张六 60 61 59 0
2307007 张七 58 77 99 0
2307008 张八 99 97 98 0
2307009 张九 100 100 100 0
2307010 张十 88 84 83 0
2307011 李一 88 77 63 0
2307012 李二 81 79 70 0
2307013 李三 72 85 97 0
2307014 李四 92 65 88 0
2307015 李五 68 54 61 0
2307016 李六 88 84 83 0
2307017 李七 66 69 87 0
2307018 李八 88 88 81 0
2307019 李九 72 65 61 0
2307020 李十 64 83 75 0 //0是总分的初始化 要想名字不乱码,txt要用ANSI字符编码