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;
}
运行结果如图所示: