用变量a给出指针相关定义
一道典型题目
结构体
结构体 struct
描述一些 原先 基本数据类型不好描述的 这种复杂数据类型
比如 struct 汽车
{
//1.姓名 //chat name[20]
//2.班级 //int classNo
//3.性别 //char sex; //f m
//4.成绩 //float score;
//5.年龄 //int age;
}
语法:
struct 结构体类型名
{
数据成员列表;
};
//定义了一个 "数据类型" --- 用户自定义的数据类型
注意:
1.结构体 --- 用来实现 自定义数据类型
2.用结构体
a.先构造出 数据类型
b.用数据类型 定义变量
数组
指针
访问结构体:
. //结构体成员运算符
结构体变量名.成员变量名
s.name // . 的
学生与老师
//定义结构体类型
//定义变量
结构体变量初始化
结构体变量赋值 --结构体不能整体 赋值 {"tom",20,89.5,100};
struct student s;
s = {"tom",20,89.5,100}; //
int a = 10; //初始化
int a; //赋值
a = 10;
-> //用于结构体类型的指针变量的
//结构体访问成员的方式2
//
struct student *s = &s1;
s->name
结构体类型的变量.成员变量名
结构体类型的指针->成员变量名
1 #include<stdio.h>
2
3 struct teacher
4 {
5 char name[20];
6 int num;
7 int salary;
8 };
9
10 int main(void)
11 {
12 struct teacher o ={"bigfly",7,7000};
13
14 printf("name = %s\n",o.name);
15 printf("num = %d\n",o.num);
16 printf("salary = %d\n",o.salary);
17
18 printf("--%7s-|--%7s-|--%7s--\n","name","num","salary");
19 printf("--%7s-|--%7d-|--%7d--\n",o.name,o.num,o.salary);
20
21 return 0;
22
23 }
~
~
~
结构体对齐原则
结构体构建学生系统
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<string.h>
4
5 struct student
6 {
7 char name[20];
8 int sno;
9 float score;
10 };
11
12 void inputSinfo(struct student *p,int len)
13 {
14 for (int i = 0; i < len; i++)
15 {
16 printf("name:\n");
17 scanf("%s",(p+i)->name);
18 printf("sno:\n");
19 scanf("%d",&(p+i)->sno);
20 printf("score:\n");
21 scanf("%f",&(p+i)->score);
22 }
23
24 }
25
26 void outSinfo(struct student *p,int len)
27 {
28 printf("--%7s-|--%7s-|--%7s--\n","name","sno","score");
29 for (int i = 0; i <len ; i++)
30 {
31 printf("%7s",p->name);
32 printf(" %7d",p->sno);
33 printf(" %7.2f\n",p->score);
34 p++;
35 }
36 }
37 void max(struct student *p,int len)
38 {
39 float max = p->score;
40 int i=0;int j =0;
41 for (i = 0; i < len; i++)
42 {
43 if ((p+i)->score>max)
44 {
45 max = p->score;
46 j=i;
47 }
48 }
49 printf("max:%s sno(%d) score(%.2f)\n",p->name,p->sno,p->score);
50 }
51 int compareScore(const void *a,const void *b)
52 {
53 const struct student *p1 =a;
54 const struct student *p2 =b;
55 return p1->score - p2->score;
56 }
57 int compareName(const void *a,const void *b)
58 {
59 const struct student *p1 =a;
60 const struct student *p2 =b;
61 return p1->name - p2->name;
62 }
63 int compareSno(const void *a,const void *b)
64 {
65 const struct student *p1 =a;
66 const struct student *p2 =b;
67 return p1->sno - p2->sno;
68 }
69
70 int printMenu(void)
71 {
72 printf("|-student information-|\n");
73 printf("1 选择输入的学生人数\n");
74 printf("2 输入信息\n");
75 printf("3 查看学生信息\n");
76 printf("4 查看成绩最高的的学生信息\n");
77 printf("5 按成绩进行排序\n");
78 printf("6 按学号进行排序\n");
79 printf("7 按姓名进行排序\n");
80 printf("0 退出\n");
81 printf(">");
82 }
83 int main(void)
84 {
85 int n;
86 int len = 0;
87 struct student *s;
88
89 while (1)
90 {
91 printMenu();
92 scanf("%d",&n);
93 switch(n)
94 {
95 case 0:
96 printf("exit----\n");
97 return 0;
98 case 1:
99 printf(">");
100 scanf("%d",&len);
101 s = malloc(len*sizeof(struct student));
102 break;
103 case 2:
104 inputSinfo(s,len);
105 break;
106 case 3:
107 outSinfo(s,len);
108 break;
109 case 4:
110 max(s,len);
111 break;
112 case 5:
113 outSinfo(s,len);
114 qsort(s,len,sizeof(struct student),compareScore);
115 outSinfo(s,len);
116 break;
117 case 6:
118 outSinfo(s,len);
119 qsort(s,len,sizeof(struct student),compareSno);
120 outSinfo(s,len);
121 break;
122 case 7:
123 outSinfo(s,len);
124 qsort(s,len,sizeof(struct student),compareName);
125 outSinfo(s,len);
126 break;
127 }
128 }
129
130 return 0;
131 }