欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > DAY13:学习作业

DAY13:学习作业

2024/10/25 6:20:17 来源:https://blog.csdn.net/qq_57461392/article/details/142340420  浏览:    关键词:DAY13:学习作业

定义结构体数组存储5个学生的信息:姓名,年龄,性别

  1. 定义函数实现输入,要求形参使用结构体指针接收

  2. 函数实现5个学生年龄排序(注意对年龄排序时,交换的是所有信息)

  3. 定义函数实现输出,要求形参使用结构体指针接收

#include <stdio.h>
#include <malloc.h>
#include <string.h>//创建学生结构体,name:名字;age:年龄;sex:性别(w:女性;m:男性)
typedef struct Stu{char name[10];int age;char sex;
}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 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 个学生的信息(男生:m;女生:w)\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)->age){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 + 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");
}


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

#include <stdio.h>
#include <string.h>//小车结构体,name:名称;price:价格;color:颜色
typedef struct Car{char name[10];double price;char color[10];
}Car,*PCar;int main(){//初始化car1和car2Car 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("Cae2 : name : %s price : %lf color : %s\n",car2.name,car2.price,car2.color);//定义交换容器Car p;//进行交换strcpy(p.name,car1.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("Cae2 : name : %s price : %lf color : %s\n",car2.name,car2.price,car2.color);return 0;
}

思考一种数据结构与方法,创建一个单精度浮点型数组,存储N个单精度浮点型数据(即容量),写一个结构体与对应的函数,完成创建数组、放入数据、获取数组容量、获取数组内浮点数据个数四个函数,随后调用对应函数放入M(M<N)个单精度浮点数据(即1....M)

 

#include <stdio.h>
#include <malloc.h>
//宏定义数组最大长度
#define MAXSIZE 10
//Data结构体,len:数组长度;data:数组头地址
typedef struct Data{int len;float *data;
}Data,*PData;Data *creat(int i);void input(Data *data, int n);void output(Data *data, int n);int get_len(Data *data);int main(){//调用创建数组函数PData data = creat(MAXSIZE);//调用输入函数input(data,MAXSIZE);//调用求长度函数,用len接收返回值int len = get_len(data);printf("数组容量位 : %d\n",len);//记录想要输出数据个数int M;printf("你想输出几个数据:");scanf("%d",&M);//调用输出函数output(data,M);//手动释放空间,指针指空free(data->data);free(data);data = NULL;return 0;
}
//创建结构体函数,i:数组容量
Data *creat(int i) {//手动分配结构体内存PData p = (PData) malloc(sizeof(Data));//手动分配结构体内数组内存p->data = (float *)malloc(sizeof(float ) * i);//初始化数组长度p->len = 0;//判空if(NULL == p->data){printf("创建失败!\n");return NULL;}//返回结构体地址return p;
}
//输入函数,data:结构体地址,n:结构体内数组长度
void input(Data *data, int n) {//判空if(NULL == data) return;//循环记录数据printf("请输入 %d 个数据\n",n);for (int i = 0; i < n; ++i) {scanf("%f",data->data + i);//记录数组长度data->len++;}
}
//获取数组长度函数,data:结构体地址
int get_len(Data *data) {//判空if(NULL == data) return -1;//返回长度return data->len;
}
//输出函数,data:结构体地址;n:结构体内数组长度
void output(Data *data, int n) {//判空if(NULL == data) return;//循环输出数据for (int i = 0; i < n; ++i) {printf("第 %d 个数据是 : %.2f\n",i + 1,*(data->data + i));}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com