Linux(五)


在这里插入图片描述

#include <stdio.h>
//编写一子函数,对pstr中的值进行输出
/*void output(int * arr,int n);
void output(int arr[],int n); //[]表示你传过来的是个数组,该数组中的每个元素是 int
*/
//参数1: &pstr[0] pstr[0]-->char * &pstr[0]---->char **
//参数2:
//void output(char **pstr,int n);
void output(char *pstr[],int n);
void output(char *pstr[],int n)
{
	int i=0;

	for(i=0;i<n;i++)
	{
		printf("%s ",pstr[i]);
	}
	printf("\n");
}
int main(void)
{
//定义一个长度为5的数组,该数组中的每个元素是char *
	char * pstr[5]={"xian","beijing","shanghai","guangzhou","chongqing"};
	output(pstr,5); //pstr<====>&pstr[0]
	//output(&pstr[0],5); //pstr<====>&pstr[0]
	return 0;
}

在这里插入图片描述

结构体

如何定义一个结构体

struct 结构体名
{
	//该类型的属性:
	成员1;
	成员2;
	成员3;
};
//定义一个学生的数据类型
//学生的属性: 姓名 学号 身高 成绩 等等
2.如何定义一个结构体变量
struct date
{
	int year;
	int month;
	int day;
};
//定义一个结构体数据类型,该结构体体数据类型的名字叫 struct date
struct student
{
	char name[20]; //姓名 字符数组 ----->字符串
	int height; //身高
};
//定义一个结构体数据类型,该结构体数据类型的名字叫struct student

如何定义一个结构体变量

//如何定义一个整型变量
//类型名 变量名;
int i=12;
//如何定义一个结构体变量
//类型名 变量名;
struct student s1={"zhangsan",176};
#include <stdio.h>
//1.定义一个日期的结构体
struct date
{
	int year;
	int month;
	int day;
};
//定义一个日期的结构体 strut date
//1,定义一个结构体数据类型
struct student
{
	char name[20]; //姓名
	int height; //身高
	struct date birDay; //出生日期
};
//定义一个结构体数据类型,该数据类型的名字叫struct student
int main(void)
{
	//1.定义一个结构体变量
	struct student s1;
	return 0;
}

在这里插入图片描述

结构体变量如何访问成员

在这里插入图片描述

//结构体变量访问成员
变量名.成员名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
//定义一个日期的结构体 strut date
//1,定义一个结构体数据类型
struct student
{
	char name[20]; //姓名
	int height; //身高
};
//定义一个结构体数据类型,该数据类型的名字叫struct student
int main(void)
{
	//2.定义一个结构体变量 类型名 变量名
	struct student s1={"zhangsan",176};
	//3.结构体变量访问成员 变量名.成员名
	printf("请输入姓名和身高\n");
	scanf("%s",s1.name);
	scanf("%d",&s1.height);
	printf("s1: name:%s height=%d\n",s1.name,s1.height);
	//4.定义一个结构体变量
	struct student s2;
	s2=s1; //将s1中的值赋值给s2
	printf("s2: name:%s height=%d\n",s2.name,s2.height);
	return 0;
}

如何定义一个指向结构体的指针

在这里插入图片描述

#include <stdio.h>
/*
//1.定义一个结构体数据类型
struct student
{
	char name[20];
	int height;
};
//该数据类型的名字叫struct student
//2.给结构体数据类型取个别名
typedef struct student Stu; // Stu <===>struct student
*/
//1.在定义结构体数据类型的同时给它取别名
typedef struct student
{
	char name[20];
	int height;
}Stu;
//该结构体数据类型的名字叫Stu
int main(void)
{
	//2.定义一个结构体变量并赋值
	//类型名 变量名
	Stu s1={"zhangsan",178};
	printf("name:%s height=%d\n",s1.name,s1.height);
	//定义一个指向int的指针
	int * pi=NULL; //sizeof(pi)=8
	//3.定义一个指向结构体的指针
	Stu * ps=NULL; //sizeof(ps)=8
	ps=&s1; //ps指向s1 s1<===>*ps
	printf("name:%s height=%d\n",(*ps).name,(*ps).height);
	printf("name:%s height=%d\n",ps->name,ps->height);
	return 0;
}

动态分配空间 malloc,free

在这里插入图片描述

#include <stdlib.h>
void *malloc(size_t size);
void free(void *ptr);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在堆区分配5个存Stu的空间

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
//1.定义一个结构体数据类型,并取别名
typedef struct student
{
	char name[20];
	int height;
}Stu;
//2.编写一子函数,对ps指向的空间输入数据
//参数1:空间的首地址 Stu * ps
//参数2:元素的个数 int size
void input(Stu * ps,int size)
{
	int i=0;
	for(i=0;i<size;i++)
	{
		printf("请输入姓名和身高\n");
		scanf("%s%d",ps->name,&ps->height);
		ps++;
	}
}
//3.编写一子函数,对ps和指向的空间输出数据
//参数1:空间的首地址 Stu * ps
//参数2:元素的个数 int size
void output(Stu * ps,int size)
{
	int i=0;
	for(i=0;i<size;i++)
	{
		printf("name:%20sheight:%d\n",ps->name,ps->height);
		ps++;
	}
}
int main(void)
{
	//1.在堆区分配5个存结构体的空间
	Stu * ps=NULL;
	ps=(Stu *)malloc(sizeof(Stu)*5);
	input(ps,5);
	output(ps,5);
	//2.释放
	free(ps);
	ps=NULL;
	return 0;
}
#include <stdio.h>
#include <stdlib.h>
//1.定义一个结构体数据类型,并取别名
typedef struct student
{
	char name[20];
	int height;
}Stu;
void menu(void)
{
	printf("1-----input\n");
	printf("2-----output\n");
	printf("3-----calpMax\n"); //求身高最高的人的首地址
	printf("4-----calpMin\n"); //求身高最低的人的首地址
	printf("5-----swap(pMax,pMin)\n"); //交换两个人的位置
	printf("6-----sortByHeight\n");
	printf("7-----sortByName\n");
	printf("-1----exit\n");
}
//2.编写一子函数,对ps指向的空间输入数据
//参数1:空间的首地址 Stu * ps
//参数2:元素的个数 int size
void input(Stu * ps,int size)
{
	int i=0;
	for(i=0;i<size;i++)
	{
		printf("请输入姓名和身高\n");
		scanf("%s%d",ps->name,&ps->height);
		ps++;
	}
}
//3.编写一子函数,对ps和指向的空间输出数据
//参数1:空间的首地址 Stu * ps
//参数2:元素的个数 int size
void output(Stu * ps,int size)
{
	int i=0;
	for(i=0;i<size;i++)
	{
		printf("name:%-20s height:%d\n",ps->name,ps->height);
		ps++;
	}
}
int main(void)
{
	int op=0;
	//1.在堆区分配5个存结构体的空间
	Stu * ps=NULL;
	ps=(Stu *)malloc(sizeof(Stu)*5);
	while(1)
	{
			menu();
			printf("请输入选项\n");
			scanf("%d",&op);
			if(-1==op) break;
			switch(op)
			{
				case 1:
				input(ps,5);
				break;
				case 2:
				output(ps,5);
				break;
			}
	}
	//2.释放
	free(ps);
	ps=NULL;
	return 0;
}

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
//1.定义一个结构体数据类型,并取别名
typedef struct student
{
	char name[20];
	int height;
	//float scores[5];
}Stu;
void menu(void);
void menu(void)
{
	printf("1-----input\n");
	printf("2-----output\n");
	printf("3-----calpMax\n"); //求身高最高的人的首地址
	printf("4-----calpMin\n"); //求身高最低的人的首地址
	printf("5-----swap(pMax,pMin)\n"); //交换两个人的位置
	printf("6-----sortByHeight\n");
	printf("7-----sortByName\n");
	printf("-1----exit\n");
}
//2.编写一子函数,对ps指向的空间输入数据
//参数1:空间的首地址 Stu * ps
//参数2:元素的个数 int size
void input(Stu * ps,int size);
void input(Stu * ps,int size)
{
	int i=0;
	for(i=0;i<size;i++)
	{
		printf("请输入姓名和身高\n");
		scanf("%s%d",ps->name,&ps->height);
		ps++;
	}
}
//3.编写一子函数,对ps和指向的空间输出数据
//参数1:空间的首地址 Stu * ps
//参数2:元素的个数 int size
void output(Stu * ps,int size);
void output(Stu * ps,int size)
{
	int i=0;
	for(i=0;i<size;i++)
	{
		printf("name:%-20s height:%d\n",ps->name,ps->height);
		ps++;
	}
}
//编写一子函数,获得ps指向的空间中身高最高的那个人的首地址
//参数1:空间的首地址 Stu * ps
//参数2:元素的个数 int size
//返回值:身高最高的那个人的首地址 Stu *
Stu * calpMax(Stu *ps,int size);
Stu * calpMax(Stu *ps,int size)
{
	//1.定义一个指针变量,用它来保存最大值的地址
	Stu * pMax=NULL;
	//2.假设第一个为最大
	pMax=ps;
	//3.用pMax->height和后面的每一个height进行比较,循环size-1次
	int i=0;
	for(i=0;i<size-1;i++)
	{
		ps++;
		if(pMax->height<ps->height)
		{
			pMax=ps;
		}
	}
//4.返回pMax;
return pMax;
}
//编写一子函数,获得ps指向的空间中身高最矮的那个人的首地址
//参数1:空间的首地址 Stu * ps
//参数2:元素的个数 int size
//返回值:身高最矮的那个人的首地址 Stu *
Stu * calpMin(Stu *ps,int size);
Stu * calpMin(Stu *ps,int size)
{
	//1.定义一个指针变量,用它来保存最大值的地址
	Stu * pMin=NULL;
	//2.假设第一个为最矮
	pMin=ps;
	//3.用pMax->height和后面的每一个height进行比较,循环size-1次
	int i=0;
	for(i=0;i<size-1;i++)
	{
		ps++;
		if(pMin->height>ps->height)
		{
			pMin=ps;
		}
	}
	//4.返回pMin;
	return pMin;
}
//编写一子函数,交换两个人的位置
//参数1:第一个人的首地址 参数2:第二个人的首地址
//返回值:void
void swap(Stu * pMax,Stu * pMin);
void swap(Stu * pMax,Stu * pMin)
{
	Stu tmp;
	tmp=*pMax;
	*pMax=*pMin;
	*pMin=tmp;
}
//编写一子函数,按照身高进行排序
//参数1:空间的首地址 Stu * ps
//参数2:元素的个数 int size
//返回值:void
void sortByHeight(Stu * ps,int size);
void sortByHeight(Stu * ps,int size)
{
	int i=0;
	int j=0;
	for(i=0;i<size-1;i++)
	{
		for(j=0;j<size-1-i;j++)
		{
		//if(strcmp((ps+j)->name,(ps+j+1)->name)>0)
			if((ps+j)->height > (ps+j+1)->height)
			{
				//交换ps+j ps+j+1 这两个人的位置
				swap(ps+j,ps+j+1);
			}	
		}
	}
	printf("sort over\n");
}
int main(void)
{
	int op=0;
	//1.在堆区分配5个存结构体的空间
	Stu * ps=NULL;
	ps=(Stu *)malloc(sizeof(Stu)*5);
	Stu * pMax=NULL;
	Stu * pMin=NULL;
	while(1)
	{
		menu();
		printf("请输入选项\n");
		scanf("%d",&op);
		if(-1==op) break;
		switch(op)
		{
			case 1:
				input(ps,5);
				break;
			case 2:
				output(ps,5);
				break;
			case 3:
				pMax=calpMax(ps,5);
				printf("身高最高是 %s %d\n",pMax->name,pMax->height);
				break;
			case 4:
				pMin=calpMin(ps,5);
				printf("身高最矮是 %s %d\n",pMin->name,pMin->height);
				break;
			case 5:
				swap(pMax,pMin);
				break;
			case 6:
				sortByHeight(ps,5);
				break;
		}
	}
	//2.释放
	free(ps);
	ps=NULL;
	return 0;
}
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值