今天对数据结构有了更深入的了解,通过typedef如结构体进行联系,来减少我们的代码量,结构体不只能够存储基本类型,还能够存储结构体与共用体,这就涉及到结构体之间的嵌套了,要注意的是结构体嵌套之后的调用形式,特别是嵌套的结构体中有数组和指针的时候。共用体需要注意的是空间的大小是最大子项的空间,它的子项公用一个空间来进行存储。结构体的空间要遵循很多原则,并不是它有多少有效空间就分配给它多少空间。下面是今天的脑图:
今日作业:
main函数:
#include "head.h"
int main(int argc, const char *argv[])
{
int n;
printf("请输入有多少个学生:\n");
scanf("%d",&n);
getchar();
students *p = spaceStruct2(n);
StudentMessage(p,n);
StudentOutput(p,n);
StudentSearch(p,n);
free(p);
p = NULL;
return 0;
}
头文件:
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct{
char name[10];
int age;
float grade;
}students;
students *spaceStruct2(int n);
void StudentMessage(students *p,int n);
void StudentOutput(students *p,int n);
void StudentSearch(students *p,int n);
#endif
函数文件:
#include "head.h"
students *spaceStruct2(int n){
students *p = (students *)malloc(sizeof(students)*n);
if(p == NULL){
return NULL;
}
return p;
}
void StudentMessage(students *p,int n){
for(int i = 0; i < n; i ++){
printf("请输入第%d组数据\n",i+1);
printf("请输入名字:");
scanf("%s",(p+i)->name);
printf("请输入年龄:");
scanf("%d",&(p+i)->age);
printf("请输入该学生成绩:");
scanf("%f",&(p+i)->grade);
}
}
void StudentOutput(students *p,int n){
for(int i = 0; i < n; i ++){
printf("姓名:%s 年龄;%d 成绩%.2f\n",(p+i)->name,(p+i)->age,(p+i)->grade);
}
}
void StudentSearch(students *p,int n){
printf("请输入你要查找人的姓名:\n");
char search[10] = "\0";
scanf("%s",search);
for(int i = 0; i < n; i ++){
if(!strcmp((p+i)->name,search)){
printf("查找成功!该学生的信息如下:\n");
printf("姓名:%s 年龄;%d 成绩%.2f\n",(p+i)->name,(p+i)->age,(p+i)->grade);
return;
}
}
printf("查找失败!是否继续查找?y/n");
char a;
scanf(" %c",&a);
if(a == 'y'){
StudentSearch(p,n);
}
}
结果如下: