9.18 C语言结构体练习

1.定义结构体数组存储5个学生的信息:姓名,年龄,性别
定义函数实现输入,要求形参使用结构体指针接收
函数实现5个学生年龄排序(注意对年龄排序时,交换的是所有信息)
定义函数实现输出,要求形参使用结构体指针接收

#include <myhead.h>

typedef struct Stu{
	char name[10];
	char sex;
	int age;
}Stu,*PStu;

Stu *creat(int num);
void input(Stu *stu,int n);
void sort(Stu *stu,int n);
void output(Stu *stu,int n);

int main(int argc, const char *argv[])
{
	int num;
	printf("请输入学生信息个数:");
	scanf("%d",&num);
	//调用创建结构体数组函数
	PStu stu=creat(num);
	input(stu,num);
	output(stu,num);
	//调用成绩排序函数 在调用输出函数输出
	sort(stu,num);
	output(stu,num);
	//释放内存,指针置空
	free(stu);
	stu=NULL;
	return 0;
}
//创建结构体数组函数 num 结构体数组长度 返回值 开辟的结构体数组地址
Stu *creat(int num){
	//动态分配空间
	PStu p=(Stu *)malloc(sizeof(Stu) *num);
	if(NULL==p){
		printf("创建失败\n");
		return NULL;
	}
	return p;
}
//记录信息函数 stu 结构体数组首地址 n 数组长度
void input(Stu *stu,int n){
	//判空
	if(NULL==stu) return;
	for(int i=0; i<n; i++){
		printf("请输入第%d个学生信息\n",i+1);
		scanf("%s %d %c",(stu+i->name, &(stu+i)->age, &(stu+i)->sex));
	}
}
//成绩排序函数 stu 结构体数组首地址 n 结构体数组长
void sort(Stu *stu, int n){
	//判空
	if(NULL==stu) return;
	//交换容器
	Stu change;
	//选择排序
	for(int i=0; i<n; i++){
		for(int j=i+1; j<n; j++){
			if((stu+i)->age>(stu+j)->name){
				strcpy(change.name,(stu+i)->name);
				change.age=(stu+i)->age;
				change.sex=(stu+i)->sex;

				strcpy((stu+i)->name,(stu+j)->name);
				(stu+i)->age=(stu+j)->age;
				(stu+i)->sex=(stu+j)->sex;

				strcpy((stu+i)->name,(stu+j)->name);
				(stu+i)->age=(stu+j)->age;
				(stu+i)->sex=(stu+j)->sex;

				strcpy((stu+j)->name,change.name);
				(stu+j)->age=change.age;
				(stu+j)->sex=change.sex;
			}
		}
	}
}
//输出函数,stu 结构体数组首地址 n 结构体数组长度
void output(Stu *stu,int n){
	//判空
	if(NULL==stu) return;
	//循环输出
	for(int i=0; i<n; i++){
		printf("name:%-4s  age:%-3d  sex:%-3c\n",(stu+i)->name, (stu+i)->age, (stu+i)->sex);
	}
	printf("\n");
}


2.定义小车结构体,存储名称、价钱、颜色。定义两个变量a,b,初始化,实现ab互换

typedef struct Car{
	char name[10];
	double price;
	char color[10];
}Car,*PCar;

int main(){
	Car car1={"aaa",13.5,"red"};
	Car car2={"bbb",20.1,"orange"};
	//打印初始信息
	printf("car1:name:%s price:%lf color:%s\n",car1.name, car1.price, car1.color);
	printf("car2:name:%s price:%lf color:%s\n",car2.name, car2.price, car2.color);
	//定义交换容器
	Car p;
	//进行交换
	strcpy(p.name,car.name);
	strcpy(p.color,car1.color);
	p.price=car1.price;

	strcpy(car1.name,car2.name);
	strcpy(car1.color,car2.color);
	car1.price=car2.price

	strcpy(car2.name,p.name);
	strcpy(car2.color,p.color);
	car2.price=p.price;
	//打印结果
	printf("car1:name:%s price:%lf color:%s\n",car1.name, car1.price, car1.color);
	printf("car2:name:%s price:%lf color:%s\n",car2.name, car2.price, car2.color);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值