Linux C 指针数组 数组指针 函数指针 的使用实例

来源:互联网 发布:riverside歌曲知乎 编辑:程序博客网 时间:2024/05/16 10:45


实现功能:

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.cgcc -c Main.c -o a.ob.o:SetMsg.cgcc -c SetMsg.c -o b.oc.o:DoMsg.cgcc -c DoMsg.c -o c.od.o:SleMsg.cgcc -c SleMsg.c -o d.orun:a.o b.o c.o d.ogcc a.o b.o c.o d.o -o runclean:rm -rf *.o run




0 0
原创粉丝点击