有如下结构体模型:
//声明一个结构体类型 struct _itTeacher { char name[32]; char tile[32]; int age; char addr[128]; };
struct _itAdvTeacher { char *name; char *tile; int age; char *addr; char *p1; //系统预留成员域 char **p2;//系统预留成员域 }; |
要求定义一个结构体数组(6个元素),要求从键盘输入数据,并按照名称大小进行排序;打印输出。 1、 打印结构体数组,需要单独封装成函数;10 2、 排序结构体数组,需要单独封装成函数(按照名称进行排序);50 3、 main函数中编写业务测试模型;40 要求成员域为buf法(使用struct _itTeacher定义)和指针方法(struct _itAdvTeacher),两种方法分别实现。 |
方法一代码如下:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct _itTeacher
{
char name[32];
char tile[32];
int age;
char addr[128];
};
void printfTeacher(struct _itTeacher* iteacher, int ncount)
{
int i = 0;
for (; i < ncount; i++)
{
printf("老师名字:%s\n", iteacher[i].name);
printf("老师类型:%s\n", iteacher[i].tile);
printf("老师年龄:%d\n", iteacher[i].age);
printf("老师住址:%s\n", iteacher[i].addr);
}
}
void sortTeacher(struct _itTeacher* iteacher, int ncount)
{
int i = 0;
int j = 0;
struct _itTeacher iteacherTmp;
for (; i < ncount; i++)
{
for (j = i + 1; j < ncount; j++)
{
if (strcmp(iteacher[i].name, iteacher[j].name) < 0)
{
iteacherTmp = iteacher[i];
iteacher[i] = iteacher[j];
iteacher[j] = iteacherTmp;
}
}
}
}
int main()
{
struct _itTeacher iteacher[6];
int i = 0;
for (; i < 6; i++)
{
printf("请输入老师名字:");
scanf("%s", iteacher[i].name);
printf("请输入老师类型:");
scanf("%s", iteacher[i].tile);
printf("请输入老师年龄:");
scanf("%d", &iteacher[i].age);
printf("请输入老师住址:");
scanf("%s", iteacher[i].addr);
}
printf("\n\n----------------排序前");
printfTeacher(iteacher, 6);
sortTeacher(iteacher, 6);
printf("\n\n\n----------------排序后");
printfTeacher(iteacher, 6);
system("pause");
return 1;
}
方法二代码如下:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
struct _itAdvTeacher
{
char* name;
char* tile;
int age;
char* addr;
char** student;
};
void printfTeacher_2(struct _itAdvTeacher* iteacher, int ncount)
{
int i = 0;
int j = 0;
for (; i < ncount; i++)
{
printf("\n老师名字:%s", iteacher[i].name);
printf("\n老师类型:%s", iteacher[i].tile);
printf("\n老师年龄:%d", iteacher[i].age);
printf("\n老师住址:%s", iteacher[i].addr);
for (j = 0; j < 2; j++)
{
printf("\n所教学生%d:%s", j + 1, iteacher[i].student[j]);
}
}
}
void sortTeacher_2(struct _itAdvTeacher* iteacher, int ncount)
{
int i = 0;
int j = 0;
struct _itAdvTeacher iteacherTmp;
for (; i < ncount; i++)
{
for (j = i + 1; j < ncount; j++)
{
if (strcmp(iteacher[i].name, iteacher[j].name) < 0)
{
iteacherTmp = iteacher[i];
iteacher[i] = iteacher[j];
iteacher[j] = iteacherTmp;
}
}
}
}
void freeAdvTeacher(struct _itAdvTeacher* advteacher, int count)
{
int i = 0;
int j = 0;
if (!advteacher)
{
return;
}
for (; i < count; i++)
{
if (advteacher[i].name)
{
free(advteacher[i].name);
advteacher[i].name = NULL;
}
if (advteacher[i].tile)
{
free(advteacher[i].tile);
advteacher[i].tile = NULL;
}
if (advteacher[i].addr)
{
free(advteacher[i].addr);
advteacher[i].addr = NULL;
}
if (advteacher[i].name)
{
for (j = 0; j < 2; j++)
{
if (advteacher[i].name[j])
{
free(advteacher[i].name[j]);
advteacher[i].name[j] = NULL;
}
}
free(advteacher[i].name);
advteacher[i].name = NULL;
}
}
free(advteacher);
}
struct _itAdvTeacher* creatTArray(int count)
{
struct _itAdvTeacher* advteacher = NULL;
int i = 0;
int j = 0;
advteacher = (struct _itAdvTeacher*)malloc(count * sizeof(struct _itAdvTeacher));
memset(advteacher, 0, sizeof(struct _itAdvTeacher));
for (; i < count; i++)
{
advteacher[i].name = (char*)malloc(32 * sizeof(char));
printf("请输入教师名字:");
scanf("%s", advteacher[i].name);
advteacher[i].tile = (char*)malloc(32 * sizeof(char));
printf("请输入教师类型:");
scanf("%s", advteacher[i].tile);
printf("请输入教师年龄:");
scanf("%d", &advteacher[i].age);
advteacher[i].addr = (char*)malloc(128 * sizeof(char));
printf("请输入教师住址:");
scanf("%s", advteacher[i].addr);
advteacher[i].student = (char**)malloc(2 * sizeof(char*));
for (j = 0; j < 2; j++)
{
advteacher[i].student[j] = (char*)malloc(32 * sizeof(char));
printf("请输入学生%d:", j + 1);
scanf("%s", advteacher[i].student[j]);
}
}
return advteacher;
}
int main()
{
struct _itAdvTeacher* advteacher = creatTArray(3);
if (!advteacher)
{
return -1;
}
printf("\n\n----------------排序前\n");
printfTeacher_2(advteacher, 3);
sortTeacher_2(advteacher, 3);
printf("\n\n\n----------------排序后\n");
printfTeacher_2(advteacher, 3);
freeAdvTeacher(advteacher, 3);
advteacher = NULL;
system("pause");
return 0;
}