#include<stdio.h>
#include<string.h>
#define N 5
void input(int num[],char name[][20],double score[][4]);
void average(double score[][4]);
void search(int n,int num[],char name[][20],double score[][4]);
void sort(int num[],char name[][20],double score[][4]);
void excellent(int num[],char (*name)[20],double (*p)[4]);
int main()
{
int n;///存放需要查找的数
int num[N];//存放N个学生的学号信息
char name[N][20];//存放N个学生的姓名信息
double score[N][4];//存放N个学生的三门课成绩和平均分
int choice;
printf("Input each students's information\n");
input(num,name,score);
/*显示主菜单*/
while(1)
{
printf("===============the Score Processing System============================\n");
printf("1,print each student's average\n");
printf("2,order the students by student's average decreasingly\n");
printf("3,search the student \n");
printf("4,print each student who is higher average score than 80 ");
printf("======================================================================\n");
printf("Please choose (1~4):\n");
scanf("%d", &choice);
switch(choice)
{
case 1:
average(score);break;
case 2:
sort(num,name,score);break;
case 3:
printf("请输入您查找的编号:");
scanf("%d",&n);
search(n,num,name,score);break;
case 4:
printf("以下同学的平均分超出80分:\n");
excellent(num, name, score);break;
default:
printf("Chioce Error,Please select again(1~4).");break;
}
}
return 0;
}
void input(int num[],char name[][20],double score[][4])
{
int i, j;
for(j = 0;j <= N-1;j++)
{
printf("请输入名字:\t");
scanf("%s",&name[j]); //给每个编号的人写名字
printf("\n");
printf("请输入编号:\t"); //编号
scanf("%d",&num[j]);
printf("\n");
for(i = 0;i < N-2 ;i++)
{
printf("请输入第%d门成绩:\t",i+1);
scanf("%lf",&score[j][i]);
}
printf("\n");
}
}
void average(double score[][4])
{
for(int i = 0; i <= 4; i++)
{
double he = 0;
for(int j = 0; j <= 2; j++)
{
he = he + score[i][j];//求和
}
double aver = he/3;//求出平均数
score[i][3] = aver;
printf("第%d位学生的平均分为%lf\n",i+1,score[i][3]);
}
}
void sort(int num[],char name[][20],double score[][4])
{
double t;
char c[20];
int n;
int i,j,k,p;
for(i=0;i<N-1;i++)
{
k=i;
for(j=i+1;j<N;j++)
if(score[k][3]<score[j][3])
k=j;
n=num[k];num[k]=num[i];num[i]=n;
strcpy(c,name[k]);
strcpy(name[k],name[i]);
strcpy(name[i],c);
for(p=0;p<4;p++)
{
t=score[k][p];score[k][p]=score[i][p];score[i][p]=t;
}
}
for(i=0;i<N;i++)
{
printf("学号:%d\t",num[i]);
printf("姓名:%s\t",name[i]);
printf("分数:");
for(j=0;j<N-1;j++)
printf("%lf\t",score[i][j]);
printf("\n");
}
}
void search(int n,int num[],char name[][20],double score[][4])
{
int flag = 1;//初始化标志变量,找到flag=0,否则flag=1
int top=0, bot=N-1, mid;
while(flag&&bot>=top)
{
mid = (top+bot)/2;
if(num[mid]==n)
{
flag=0;//找到数,退出循环
}
else if(num[mid]>n)
bot = mid-1;
else
top = mid+1;
}
if(!flag)
{
printf("学号\t姓名\t课程1\t课程2\t课程3\t平均分\n");
printf("%d\t%s\t%.2lf\t%\.2lf\t%.2lf\t%.2lf\n ",num[mid],name[mid],score[mid][0],score[mid][1],score[mid][2],score[mid][3]);
}
else
printf("未找到该名学生。\n");
}
void excellent(int num[],char (*name)[20],double (*p)[4])
{
int flag = 0, i, j;
for( i=0; i<N; i++)
{
if( *(*(p+i)+3) > 80 )//判断是否大于80分
{
printf("学号:%d\t",*(num+i));
printf("姓名:%s\t",*(name+i));
printf("分数:\t");
for(j=0; j<N-1; j++)
printf("%lf\t", *(*(p+i)+j));
printf("\n");
flag = 1;//标记
}
}
if(!flag)printf("无超过80分的学生");
}
录入学生的所有数据(学号,姓名,三门课程成绩),选择性输出 包括(所有学生平均分,根据学号查询学生数据,查看排名,输出80分以上的全部学生数据)四个选项
最新推荐文章于 2023-01-27 14:42:19 发布
本文介绍如何使用C语言编程实现学生数据录入,包括学号、姓名及三门课程成绩,并提供了四种功能:计算所有学生平均分、按学号查询学生详细信息、查看成绩排名以及列出所有80分以上的学生数据。通过此系统,可以方便地进行学生成绩管理和分析。
2733

被折叠的 条评论
为什么被折叠?



