1.定义结构体数组存储5个学生的信息:姓名,年龄,性别
定义函数实现输入,要求形参使用结构体指针接收
函数实现5个学生年龄排序(注意对年龄排序时,交换的是所有信息)
定义函数实现输出,要求形参使用结构体指针接收
代码如下:
#include <myhead.h>
//定义学生结构体,其中有姓名、年龄、性别三个元素
typedef struct
{
char name[20];
int age;
char sex;
}stu,*Stu;
//定义输入函数
void input(Stu p)
{
//循环输入学生信息
for(int i=0;i<5;i++){
printf("请输入第%d个学生信息:",i+1);
scanf("%s %d %c",(p+i)->name,&(p+i)->age,&(p+i)->sex);
}
}
//定义排序函数
void sort(Stu p)
{
//定义临时变量
stu tmpt;
//循环比较并交换元素顺序
for(int i=1;i<5;i++){
for(int j=0;j<5-i;j++){
//判断数组元素年龄大小
if((p+j)->age>(p+j+1)->age){
//交换年龄大的信息给临时变量
strcpy(tmpt.name,(p+j)->name);
tmpt.age=(p+j)->age;
tmpt.sex=(p+j)->sex;
//年龄大信息与年龄小信息交换,进行由小到大排序
strcpy((p+j)->name,(p+j+1)->name);
(p+j)->age=(p+j+1)->age;
(p+j)->sex=(p+j+1)->sex;
//交换临时变量和年龄小的信息
strcpy((p+j+1)->name,tmpt.name);
(p+j+1)->age=tmpt.age;
(p+j+1)->sex=tmpt.sex;
}
}
}
}
//定义输出函数
void output(Stu p)
{
for(int i=0;i<5;i++){
printf("学生姓名:%s\t年龄:%d\t性别:%c\n",(p+i)->name,(p+i)->age,(p+i)->sex);
}
}
int main(int argc, const char *argv[])
{
//定义结构体数组
stu xs[5];
//定义结构体指针指向结构体数组
Stu p=xs;
//调用输入函数
input(p);
printf("排序前学生信息:\n");
//调用输出函数
output(p);
//调用排序函数
sort(p);
printf("排序后学生信息:\n");
output(p);
return 0;
}
结构体数组元素可以整体交换
int sort_bubla(Pstu s)
{
int i,j;
stu temp;//中间变量进行数据交换
for(i =1;i<MAX;i++)
{
for(j = 0;j<MAX-i;j++)
{
if(s[j].age>s[j+1].age)
{
temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
return 0;
}
运行结果如图所示:
2.定义小车结构体,存储名称、价钱、颜色。定义两个变量a,b,初始化,实现ab互换。
代码如下:
#include <myhead.h>
//定义一个车的结构体,有品牌、价格、颜色三个成员元素
typedef struct
{
char name[20];
float money;
char color[20];
}car;
void exchange(car *a,car *b){
//定义临时变量用于交换
car c;
//将a的信息复制给临时变量
strcpy(c.name,a->name);
c.money=a->money;
strcpy(c.color,a->color);
//a、b交换
strcpy(a->name,b->name);
a->money=b->money;
strcpy(a->color,b->color);
//将临时变量的值赋给b 完成交换
strcpy(b->name,c.name);
b->money=c.money;
strcpy(b->color,c.color);
}
int main(int argc, const char *argv[])
{
//定义并初始化两个结构体变量
car a={"宝马",80,"白"};
car b={"本田",15,"黑"};
printf("交换前:\n");
printf("a车品牌:%s\t价格:%.2f万元\t颜色:%s\n",a.name,a.money,a.color);
printf("b车品牌:%s\t价格:%.2f万元\t颜色:%s\n",b.name,b.money,b.color);
//调用交换函数
exchange(&a,&b);
printf("交换后:\n");
printf("a车品牌:%s\t价格:%.2f万元\t颜色:%s\n",a.name,a.money,a.color);
printf("b车品牌:%s\t价格:%.2f万元\t颜色:%s\n",b.name,b.money,b.color);
return 0;
}
运行结果如图所示: