|
发表于 2021-5-3 17:10:53
From FishC Mobile
|
显示全部楼层
|阅读模式
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 邪念波 于 2021-5-3 19:06 编辑
#include <stdio.h>
#include <string.h>
#define N 100 /* 最大学生人数 */
#define M 20 /* 最大课程数 */
main()
{
int person,course; /* 真实人数,课程数 */
char num[N][5]; /* 存放学生学号(后五位) */
char name[N][10]; /* 存放学生姓名 */
char sub[M][20]; /* 存放科目名称 */
int score[N][M]; /* 存放学生成绩,score[i][j]为第(i+1)个学生第j门课的分数 */
float aver[N];
float total[N]; /* 存放每位学生所有科目的平均分(aver)和总分(total) */
char choice; /* 在菜单中选择的序号 */
char temp_n[10]; /* 用于查询时存放姓名和学号 */
float temp_s; /* 用于交换平均分和总分 */
int flag,i,j,k,h,t; /* 定义了一系列后续循环结构中要用到的变量 */
flag=0; /* flag=0表示系统中还没有输入已有数据 */
person=0; /* 学生人数初始化 */
/* 输入课程数 */
do
{
printf("请输入课程数(课程数量小于%d):",M);
scanf("%d",&course);
}
while(course<=0 || course>M);
/* 输入每门课的名称 */
for(j=0;j<course;j++)
{
printf("请输入第%d门课的名称:",j+1);
scanf("%s",&sub[j]);
}
/* 菜单 */
while(1) /* 当条件判断为"真"时循环 */
{
printf("\n");
printf("1. 输入学生信息\n");
printf("2. 查询学生信息\n");
printf("3. 显示学生信息\n");
printf("4. 排 序\n");
printf("0. 退 出\n");
printf("\n请输入你的选择:\n");
fflush(stdin);
scanf("%c",&choice);
switch(choice)
{
case '1': /* 输入信息模块 */
printf("\n请输入学生的总人数:");
scanf("%d",&h);
for(i=1,k=0;i<=h;i++,k++)
{
printf("请输入第%d个学生的姓名:",i);
fflush(stdin); /* 清空缓存区 */
scanf("%s",&name[k]); /* 储存学生姓名 */
printf("请输入该学生的学号后五位:");
fflush(stdin);
scanf("%s",&num[k]); /* 储存学生学号 */
printf("请输入该学生的各科成绩:\n");
total[k]=0; /* 清空上一位同学的总分 */
for(j=0;j<course;j++)
{
printf("*%s:",sub[j]); /* 输入各科成绩 */
scanf("%d",&score[k][j]);
total[k]=total[k]+score[k][j]; /* 计算总分 */
}
aver[k]=total[k]/course; /* 计算平均分 */
}
person=person+h; /* 更新总人数 */
flag=1; /* 标记已输入数据 */
break;
case '2': /* 查询信息模块 */
if(flag==0)
{
printf("您还未输入学生信息!请先选择1输入学生信息。\n");
break;
}
printf("请输入所要查询的学生学号后五位:");
scanf("%s",&temp_n);
for(i=0;i<person;i++)
{
if(strcmp(temp_n,num[i])==0)
break; /* 匹配学号与学生 */
if(i>=person)
printf("查无此人,请退出菜单重新输入。\n");
break;
}
/* 输出查询到的学生信息 */
printf("\n学号 姓名");
for(j=0;j<course;j++)
{
printf(" %-s",sub[j]);
}
printf(" 平均分 总分 ");
printf("\n-----------------------------------------------------------------------------------\n");
printf("%-10s%-10s",num[i],name[i]);
for(j=0;j<course;j++)
{
printf(" %d ",score[i][j]);
}
printf(" %.1f %.1f\n",aver[i],total[i]);
break;
case '3': /* 显示信息模块 */
if(flag==0)
{printf("\n您还未输入学生信息!请先选择1输入学生信息。\n");break;}
printf("\n学号 姓名");
for(i=0;i<course;i++)
{
printf(" %s",sub[i]);
}
for(i=0;i<person;i++)
{
printf("\n%-8s%-8s",num[i],name[i]);
for(j=0;j<course;j++)
{
printf("%d ",score[i][j]);
}
printf("%-8.1f%-8.1f\n",aver[i],total[i]);
}
case '4': /*排序模块 */
if(flag==0)
printf("\n您还未输入学生信息!请先选择1输入学生信息。\n");break;
for(i=0;i<person-1;i++)
{
k=i;
for(j=i+1;j<person;j++)
{
if(strcmp(name[j],name[k])<0)
k=j; /* 姓名数组最小的下标赋值给k用于交换 */
}
if(i==k) continue;
/* 交换姓名 */
strcpy(name[i],temp_n);
strcpy(name[k],name[i]);
strcpy(num[i],temp_n);
/* 交换分数 */
for(h=0;h<course;h++)
{
temp_s=score[k][h];
score[k][h]=score[i][h];
score[i][h]=temp_s;
}
/* 交换总分和平均分 */
temp_s=total[k];
total[k]=total[i];
total[i]=temp_s;
temp_s=aver[k];
aver[k]=aver[i];
aver[i]=temp_s;
}
}
} |
-
评分
-
查看全部评分
|