实现功能:
1.用二维数组Sorce【6】【4】保存学生的数学、英语、C和总成绩;
2.用一维数组存放姓名并和二维下标一一对应
3.输入各科成绩,自动求出总分并存入数组
4.输出各门功课的分数及总分,最高分,最低分和平均值
5.分数最高和分数最低学生的姓名及各科成绩
实现要求:
使用Makefile、函数指针、数组指针、指针数组传参
</pre><p></p><p></p><p><span style="font-size:18px;">一.通用的头文件</span></p><pre name="code" class="cpp"><span style="font-size:18px;">#ifndef _SETMSG_H
#define _SEGMSG_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STUS 6 //学生总数
#define CLASS 4 //总科目数
#define M 0 //数学标记
#define E 1 //英语标记
#define C 2 //C语言标记
#define S 3 //总分标记
void SetMsg(float (*Sor)[CLASS],char *Sname[STUS]);
void EverClass(float (*Sor)[CLASS],char *Sname[STUS]);
void FirstOne(float (*Sor)[CLASS],char *Sname[STUS]);
#endif
</span>
二、主函数C文件Main.c
<span style="font-size:18px;">#include "Main.h"
int main()
{
float Sorce[STUS][CLASS] = {{0,0,0,0}};
char *Sname[STUS];
void (* Common)(float (*)[CLASS],char **); //函数指针
Common = SetMsg; //函数指针指向SetMsg函数
Common(Sorce,Sname); //调用SetMsg函数
Common = EverClass; //函数指针指向EverClass函数
</span><pre name="code" class="html"><span style="font-size:18px;"> Common(Sorce,Sname); //调用EverClass函数
</span>
Common = FirstOne; //函数指针指向FirstOne函数Common(Sorce,Sname); //调用FirstOne函数
return 0;
}
三、实现输入成绩自动求和并存入数组的函数 SetMsg
<span style="font-size:18px;">#include "Main.h"
void SetMsg(float (*sor)[CLASS],char *Sname[STUS])
{
int i;
float sum;
char *Name[STUS] = {"Stu1","Stu2","Stu3","Stu4","Stu5","Stu6"};
// printf("Please Input Students Name!\n");
for(i=0;i<STUS;i++)
{
//printf("Student Name %d:\t",i+1);
//scanf("%s",Name);
*(Sname+i) = *(Name+i);
}
for(i=0;i<STUS;i++)
{
printf("Please input %s Sorce :\n",*(Sname+i));
printf("Math :\t");
scanf("%f",(*(sor+i)+M));
printf("English :\t");
scanf("%f",(*(sor+i)+E));
printf("C :\t");
scanf("%f",(*(sor+i)+C));
*(*(sor+i)+S) = *(*(sor+i)+M) + *(*(sor+i)+E) + *(*(sor+i)+C);
}
}
</span>
四、.输出各门功课的分数及总分,最高分,最低分和平均值函数 DoMsg.c
<span style="font-size:18px;">#include "Main.h"
void DoMsg(float (*Sor)[CLASS],float *Sum,float *Max,float *Min,int s )
{
int i;
*Sum = *Max = *Min = 0;
for(i=0;i<STUS;i++)
{
if( *(*(Sor+i)+s) < *Min)
*Min = *(*(Sor+i)+s);
else if ( *(*(Sor+i)+s) > *Min)
*Max = *(*(Sor+i)+s);
*Sum += *(*(Sor+i)+s);
}
}
void EverClass(float (*Sor)[CLASS],char *Sname[STUS])
{
float Sum=0;
float Max=0;
float Min=0;
float Ave=0;
int i=0;
for( i=0 ; i<CLASS-1 ; i++ )
{
switch(i)
{
case 0:printf("This About Math:\n");break;
case 1:printf("This About English:\n");break;
case 2:printf("This About C:\n");break;
}
DoMsg(Sor,&Sum,&Max,&Min,i);
printf("Account : %6.2f\nMax : %6.2f\nMin : %6.2f\nAve : %6.2f\n",
Sum,Max,Min,Sum/STUS);
}
}
</span>
五、.分数最高和分数最低学生的姓名及各科成绩SleMsg.c
<span style="font-size:18px;">#include "Main.h"
void FirstOne(float (*Sor)[CLASS],char *Sname[STUS])
{
int first=0,last=0;
int i=0;
for(;i<STUS;i++)
{
if( *(*(Sor+i)+S) > *(*(Sor+first)+S) )
first = i;
if( *(*(Sor+i)+S) < last)
last = i;
}
printf("The First One Is %s :\t",*(Sname+first));
printf("Math : %6.2f\tEnglish : %6.2f\tC : %6.2f\tSum : %6.2f \n",
*(*(Sor + first)+M),*(*(Sor + first)+E),*(*(Sor +first)+C),*(*(Sor+first)+S));
printf("The Last One Is %s :\t",*(Sname+first));
printf("Math : %6.2f\tEnglish : %6.2f\tC : %6.2f\tSum : %6.2f \n",
*(*(Sor + last)+M),*(*(Sor + last)+E),*(*(Sor + last)+C),*(*(Sor+last)+S));
}
</span>
六、Makefile文件
a.o:Main.c
gcc -c Main.c -o a.o
b.o:SetMsg.c
gcc -c SetMsg.c -o b.o
c.o:DoMsg.c
gcc -c DoMsg.c -o c.o
d.o:SleMsg.c
gcc -c SleMsg.c -o d.o
run:a.o b.o c.o d.o
gcc a.o b.o c.o d.o -o run
clean:
rm -rf *.o run