资源描述
主 要 功 能
可按学号、按科目计算最高分、最低分、平均分及总最高分、最低分、平均分
并可按照提示进行查询,查询时序号错误可提示重新输入。
程 序 代 码
#define km 4 //宏定义科目个数//
#include<stdio.h>
#include<string.h>
void fun(float arry[103][km+3],int n) //函数一计算每个同学、各科、总体的最高分、最低分及平均分//
{
int i,j;
for(i=0;i<n;i++) //计算每个同学的最高分、最低分及平均分//
{
arry[i][km]=arry[i][km+1]=arry[i][0];
arry[i][km+2]=0;
for(j=0;j<km;j++)
{
arry[i][km]=(arry[i][j]>arry[i][km])?arry[i][j]:arry[i][km];
arry[i][km+1]=(arry[i][j]<arry[i][km+1])?arry[i][j]:arry[i][km+1];
arry[i][km+2]+=arry[i][j]/km;
}
}
for(j=0;j<km+3;j++) //计算各科、总体的最高分、最低分及平均分//
{
arry[n][j]=arry[xs+1][j]=arry[0][j];
arry[n+2][j]=0;
for(i=0;i<n;i++)
{
arry[n][j]=(arry[i][j]>arry[n][j])?arry[i][j]:arry[n][j];
arry[n+1][j]=(arry[i][j]<arry[n+1][j])?arry[i][j]:arry[n+1][j];
arry[n+2][j]+=arry[i][j]/n;
}
}
}
int cx(char str1[xs][15],char str2[15],int n) //函数二查询学号对应的行,学好错误重新输入//
{
int a,i,b=1;
loop:for(i=0;i<xs;i++)
if(strcmp(str1[i],str2)==0)a=i,b=0;
if(b==1){printf("学号不存在! 请重新输入: ");scanf("%s",str2);goto loop;}
return(a);
}
void main() //主函数//
{
float cj[103][km+3];
int i,j, tc=0,xs;
char aj,xh[100][15],xh_[15];
printf("★☆★☆★☆★☆★☆★☆★→C程序设计〓综合实验←★☆★☆★☆★☆★☆★☆★\n");
printf(" ------班\n");
printf(" ◇* * *\n");
printf("---------------------------------------------------------------------------\n");
do
{printf("请输入学生个数<1-100>\n");
scanf("%d",&xs);}
while(xs<1||xs>100);
printf("请输入学号:\n");
for(i=0;i<xs;i++)
scanf("%s",xh[i]);
printf("请依次输入每个学生的各科成绩:\n"); //输入成绩//
for(i=0;i<xs;i++)
for(j=0;j<km;j++)
scanf("%f",&cj[i][j]);
printf(" 科目 数学 英语 专业 政治\n"); //输出成绩//
for(i=0;i<xs;i++)
{
printf("%15s",xh[i]);
for(j=0;j<km;j++)
printf("%8.2f",cj[i][j]);
printf("\n");
}
fun(cj,xs); //调用函数一//
while(tc==0)
{
tc=0;
printf("个人成绩信息查询请按0\n单科成绩信息查询请按1\n总最高、最低、平均分查询请按2\n退出查询请按3\n");
printf("---------------------------------------------------------------------------\n");
lp:scanf("%c",&aj);
if(aj!='0'&&aj!='1'&&aj!='2'&&aj!='3')goto lp;
switch(aj)
{
case'3':tc=1;printf("您已退出查询!");break; //退出查询//
case'0': // 个人成绩信息查询//
printf("请输入学号和查询项目,用空格隔开\n");
printf("个人最高分———————0\n个人最低分———————1\n个人平均分———————2\n");
scanf("%s%d",xh_,&j); //输入学号和查询项目//
printf("学号%s 查询项目%6d 查询结果%8.2f\n",xh_,j,cj[cx(xh,xh_),xs][j+km]);
break;
case'1': // 单科成绩信息查询//
printf("请输入科目代码和查询项目代码,用空格隔开\n");
printf("数学——————0 \n");
printf("英语——————1 单科最高分———————0\n");
printf("专业——————2 单科最低分———————1\n");
printf("政治——————3 单科平均分———————2\n");
scanf("%d%d",&j,&i); //输入科目代码和查询项目代码//
printf("查询科目%6d 查询项目%6d 查询结果%8.2f\n",j,i,cj[i+xs][j]);
break;
case'2': // 总最高、最低、平均分查询//
printf("请输入查询项目代码:\n");
printf("最高分———————0\n最低分———————1\n平均分———————2\n");
scanf("%d",&i);
printf("查询项目%6d 查询结果%8.2f\n",i,cj[i+xs][i+km]); printf("-------------------------------------------------------------------------\n");
break;
}
}
}
流 程 图
函数一(求最高分、最低分、平均分)
void fun(float array[xs+3][km+3],int n)
一、计算各行(学号)的最高分、最低分、平均分
定义 i,j
i=0
最大、最小值赋初值array[i][km]=array[i][km+1]=array[i][0];
平均值赋初值array[i][km+2]=0;
外循环
j=0
求最大值array[i][km]=(array[i][j]>array[i][km])?array[i][j]:array[i][km];
内
循
环
求最小值array[i][km+1]=(array[i][j]<array[i][km+1])?array[i][j]:array[i][km+1];
求平均值array[i][km+2]+=array[i][j]/km;
直到j>=km+3
直到i>=n
二、计算各列(科目)及总体的最高分、最低分、平均分
j=0
最大、最小值赋初值arry[n][j]=arry[n+1][j]=arry[0][j];
平均值赋初值arry[n+2][j]=0;
外循环
i=0
求最大值arry[n][j]=(arry[i][j]>arry[n][j])?arry[i][j]:arry[n][j];
内
循
环
求最小值arry[n+1][j]=(arry[i][j]<arry[n+1][j])?arry[i][j]:arry[n+1][j];
求平均值arry[n+2][j]+=arry[i][j]/n;
直到i>=n
直到j>=km+3
函数二(查询学号对应的行)
int cx(char str1[xs][15],char str2[15])
int a,i, b=1;
strcmp(str1[i],str2)==0?
i=0
外
循
环
Y
内
循
环
b=1?
a=i,b=0
Y
printf("学号不存在! 请重新输入: ");scanf("%s",str2);
直到i>=xs
直到b=0
return(a)
主函数
float cj[103][km+3]; int i,j, tc=0,xs; char aj,xh[100][15],xh_[15];
printf("请输入学号:\n");
do
输入学生个数 {printf("请输入学生个数<1-100>\n");
scanf("%d",&xs);}
while(xs<1||xs>100);
输入学号 i=0
scanf("%s",xh[i])
循
环
直到i>=xs
输入成绩 i=0
j=0
外
循
环
scanf("%f",&cj[i][j])
内
循
环
直到j>=km
直到i>=xs
输出成绩 printf("科目 数学 英语 专业 政治\n");
i=0
输出学号 printf("%15s",xh[i])
外
循
环
直到i>=xs
j=0
printf("%8.2f",cj[i][j]);
内循环
直到j>=km
printf("\n");
直到i>=xs
调用函数一 fun(cj);
循环开始 当tc(退出)≠0时结束 tc=0
printf("个人成绩信息查询请按 0 单科成绩信息查询请按 1\n
总最高、最低、平均分查询请按 2\n退出查询请按 3\n");
scanf("%c",&aj)
直
到
tc
!=0
switch(aj)
case'0'
case'1'
case'2'
case'3'
printf("请输入学号和查询项目");
printf("最高分— 0\n个人最低分—— 1\n个人平均分— 2\n");
printf("请输入科目代码和查询项目\n");
printf("
数学—0英语—— 1 专业—2政治—— 3 单科最高分——0
单科最低分——1
单科平均分 2\n");
printf("请输入查询项\n")
printf("
最高分—— 0最低分—— 1平均分——2
\n ");
tc=1;
printf("您已退出查询!")
scanf("%s%d",xh_,&j);
scanf("%d%d",&j,&i)
scanf("%d",&i);
printf("学号%s 查询项目%6d
查询结果%8.2f\n"xh_,j,cj[cx(xh,xh_)]
[j+km]);
printf("查询科目%6d 查询项目%6d 查询结果%8.2f\n",j,i,cj[i+xs][j]);
printf("查询项目%6d 查询结果%8.2f\n",i,cj[i+xs][i+km]);
break;
break;
break;
break;
直到tc!=0
展开阅读全文