对结构体的应用与Makefile多文件编译

下面的文件都是在同一个目录下创建;

创建一个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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值