下面的文件都是在同一个目录下创建;
创建一个main.h文件
#ifndef _5_H
#define _5_H
#include <stdlib.h>
#include <string.h>
#define N 20
#define M 3
#define SIZE 5
typedef struct student
{
char name[N];
int height;
float scores[M];
}Stu;
void sortBySumScore(Stu *ps,int n);
void sortByName(Stu * ps,int n);
void sortByHeight(Stu * ps,int n);
void swap(Stu *max,Stu *min);
Stu *calpMinheight(Stu *ps,int n);
Stu *calPMaxheight(Stu *ps,int n);
void menu(void);
void output(Stu * ps,int n);
void input(Stu * ps,int n);
#endif
创建一个main.c文件
#include <stdio.h>
#include "main.h"
int main(void)
{
int op=0;
Stu * ps=NULL;
Stu *max=NULL;
Stu *min=NULL;
int i=0,t=0,j=0;
ps=(Stu *)malloc(sizeof(Stu)*SIZE);
if(NULL==ps)
{
perror("malloc error");
return -1;
}
while(1)
{
menu();
scanf("%d",&op);
if(-1==op) break;
switch(op)
{
case 1:
input(ps,SIZE);
break;
case 2:
output(ps,SIZE);
break;
case 3:
max=calPMaxheight(ps,SIZE);
printf("%s %d\n",max->name,max->height);
break;
case 4:
min=calpMinheight(ps,SIZE);
printf("%s %d\n",min->name,min->height);
break;
case 5:
max=calPMaxheight(ps,SIZE);
min=calpMinheight(ps,SIZE);
printf("交换前 %p %p\n",&max->height,&min->height);
swap(max,min);
printf("交换后 %p %p\n",&max->height,&min->height);
break;
case 6:
sortByHeight(ps,SIZE);
break;
case 7:
sortByName(ps,SIZE);
break;
case 8:
sortBySumScore(ps,SIZE);
break;
}
}
free(ps);
ps=NULL;
return 0;
}
创建一个menu.c文件
#include <stdio.h>
void menu(void)
{
printf("1---------input\n");
printf("2---------output\n");
printf("3---------calPMaxheight\n");
printf("4---------calpMinheight\n");
printf("5---------swap(Stu *pMax,Stu * pMin)\n");
printf("6---------sortByHeight\n");
printf("7---------sortByName\n");
printf("8---------sortBySumScore\n");
printf("-1--------exit\n");
printf("请输入选项\n");
}
创建一个ioput.c文件
#include <stdio.h>
#include "main.h"
//输入
void input(Stu * ps,int n)
{
int i=0,j=0;
for(j=0;j<n;j++)
{
printf("请输入姓名,身高,三门成绩\n");
scanf("%s",ps->name);
scanf("%d",&ps->height);
for(i=0;i<M;i++)
{
scanf("%f",&ps->scores[i]);
}
ps++;
}
}
//输出
void output(Stu * ps,int n)
{
int i=0,j=0;
for(j=0;j<n;j++)
{
printf("%10s",ps->name);
printf("%5d",ps->height);
for(i=0;i<M;i++)
{
printf("%5.0f",ps->scores[i]);
}
printf("\n");
ps++;
}
}
创建一个sort.c文件
#include <stdio.h>
#include <string.h>
#include "main.h"
void sortBySumScore(Stu *ps,int n)
{
int i=0,j=0,sum=0,k=0,sum1=0;
Stu t;
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
for(k=0;k<M;k++)
{
sum+=ps[j].scores[k];
sum1+=ps[j+1].scores[k];
}
if(sum1>sum)
{
t=ps[j];
ps[j]=ps[j+1];
ps[j+1]=t;
}
}
}
}
//编写一子函数按姓名:进行排序
//参数1 空间的首地址
//参数2 元素的个数
void sortByName(Stu * ps,int n)
{
int i=0,j=0;
Stu t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(strcmp((ps+j)->name,(ps+j+1)->name)>0)
{
t=*(ps+j);
*(ps+j)=*(ps+j+1);
*(ps+j+1)=t;
}
}
}
}
//编写一子函数按身高进行排序
//参数1 空间的首地址
//参数2 元素的个数
void sortByHeight(Stu * ps,int n)
{
int i=0,j=0;
Stu t;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if((ps+j)->height>(ps+j+1)->height)
{
t=*(ps+j);
*(ps+j)=*(ps+j+1);
*(ps+j+1)=t;
}
}
}
}
创建一个zuizhi.c文件
#include <stdio.h>
#include "main.h"
//编写一子函数求身高最低的人
//函数参数1 空间的首地址 stu *
//函数参数2 元素的个数
Stu *calpMinheight(Stu *ps,int n)
{
Stu *pMin=ps;
int i=0;
for(i=1;i<n;i++)
{
ps++;
if(pMin->height>ps->height)
{
pMin=ps;
}
}
return pMin;
}
//编写一子函数求身高最高的人
//函数参数1 空间的首地址 stu *
//函数参数2 元素的个数
Stu *calPMaxheight(Stu *ps,int n)
{
Stu *pMax=ps;
int i=0;
for(i=1;i<n;i++)
{
ps++;
if(pMax->height<ps->height)
{
pMax=ps;
}
}
return pMax;
}
创建Makefile文件
CC:=gcc
CFLAGS:=-c -g
CFLAGS1:=-o
OBJS:=main.o ioput.o jiaohuan.o menu.o sort.o zui.o
stu:$(OBJS)
$(CC) $(OBJS) $(CFLAGS1) $@
main.o:main.c main.h
$(CC) $(CFLAGS) $< $(CFLAGS1) $@
ioput.o:ioput.c main.h
$(CC) $(CFLAGS) $< $(CFLAGS1) $@
jiaohuan.o:jiaohuan.c main.h
$(CC) $(CFLAGS) $< $(CFLAGS1) $@
menu.o:menu.c main.h
$(CC) $(CFLAGS) $< $(CFLAGS1) $@
sort.o:sort.c main.h
$(CC) $(CFLAGS) $< $(CFLAGS1) $@
zui.o:zui.c main.h
$(CC) $(CFLAGS) $< $(CFLAGS1) $@
.PHONY:clean
clean:
$(RM) *.o