抄写例题
例题9.1
#include<stdio.h> struct student //定义结构体名字为student { long int num; //student结构包括长整形num,数组长度为20的name和addr, 单个字节sex. char name[20]; char sex; char addr[20]; }a={10101,"Li Lin",'M',"123 BeiJing Read"}; //对结构体各个变量赋初始值 int main() { printf("NO:%d\nname:%s\nsex:%c\naddress:%s\n",a.num,a.name,a.sex,a.addr); ///在主函数输出结构体中各个变量 }
NO:10101
name:Li Lin
sex:M
address:123 BeiJing Read
--------------------------------
Process exited after 0.1988 seconds with return value 52
请按任意键继续. . .
总结:结构关键包括定义结构里面的变量,为结构赋初值,输出时可以按照需要进行输出。
例题9.2
#include<stdio.h> struct Student //定义结构体Student { int num; //结构体包括整形num,数组长度为20的name,单精度score char name[20]; float score; } student1,student2; //结构体包括两个结构 int main() { scanf("%d%s%f",&student1.num,student1.name,&student1.score); scanf("%d%s%f",&student2.num,student2.name,&student2.score); //输入student1和student2的各个值 printf("the higher score is:\n"); if(student1.score>student2.score) printf("%d %s %6.2f\n",student1.num,student1.name,student1.score); //如果student1得值大于student2,的值则输出student1各个值 else if(student1.score<student2.score) printf("%d %s %6.2f\n",student2.num,student2.name,student2.score); //反之输出student2的各个值 else { printf("%d %s %6.2f\n",student1.num,student1.name,student1.score); printf("%d %s %6.2f\n",student2.num,student2.name,student2.score); //如果等于则全部输出 } return 0; }
110 警察 89
112 医生 88
the higher score is:
110 警察 89.00
--------------------------------
Process exited after 24.69 seconds with return value 0
请按任意键继续. . .
总结:输入结构要注意的关于字符数组,在定义输入是不能带赋值符,因为本身代表的是地址,所以要是带有会显得画蛇添足。
例题9.3
#include<stdio.h> #include<string.h> //因为调用strcmp函数所以定义头文件 struct Person { char name[20]; int count; }leader[3]={{"皮皮虾",0},{"雷伊",0},{"盖亚",0}}; //定义结构体Person并对投票人头赋初始票数0 int main() { int i,j; char leader_name[20]; for(i=1;i<=10;i++) { scanf("%s",leader_name); //定义leader_name并使用for循环来进行输入10个量 for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) //再次使用for循环进行投票并输入数为成员名则计票 leader[j].count++; } printf("\nresult:\n"); for(i=0;i<3;i++) //最后使用for循环输出票最多结构体leader[i] printf("%5s:%d\n",leader[i].name,leader[i].count); return 0; }
皮皮虾
皮皮虾
盖亚
雷伊
雷伊
雷伊
雷伊
盖亚
盖亚
皮皮虾
result:
皮皮虾:3
雷伊:4
盖亚:3
--------------------------------
Process exited after 45.46 seconds with return value 0
请按任意键继续. . .
总结:投票系统是运用函数进行比较区分输入的人名,来进行计票,从中体现了结构的方便,功能强大。
例题9.4
#include<stdio.h> struct Student { int num; char name[20]; float score; }; //定义结构体Student int main() { struct Student stu[5]={{110,"警察",11},{112,"医生",22},{119,"火警",33},{111,"不知道",44},{999,"红十字",55}}; struct Student temp; //生成结构体temp和数组并对结构体数组各个量赋值 int i,j,k; printf("the order is:\n"); for(i=0;i<4;i++) {k=i; for(j=i+1;j<5;j++) if(stu[j].score>stu[k].score) k=j; temp=stu[k]; stu[k]=stu[i]; stu[i]=temp; //使用两次for循环使头一个学生成绩跟下一个学生进行比较,并进行互换 } for(i=0;i<5;i++) printf("%6d %8s %6.2f\n",stu[i].num,stu[i].name,stu[i].score); //最后使用for循环由大到小输出结构各个量 }
the order is:
999 红十字 55.00
111 不知道 44.00
119 火警 33.00
112 医生 22.00
110 警察 11.00
--------------------------------
Process exited after 0.1743 seconds with return value 23
请按任意键继续. . .
总结:此程序k与j交换非常巧妙,从中可以衍生很多方法,可以指名交换结构里具体的变量,既可以笼统又可以具体。
例题9.5
#include<stdio.h> #include<string.h> int main() { struct student{ long num; char name[20]; char sex; float score; }; //定义结构体student内容 struct student stu_1; struct student *p; //定义结构体stu_1和指针p,并让指针p指向stu_1 p=&stu_1; stu_1.num=10086; strcpy(stu_1.name,"yi dong"); //使用strcpy复制yi dong给stu_1.name stu_1.sex='m'; stu_1.score=45; printf("num=%d\n name:%s\n sex:%c\n score:%d\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score); printf("\n"); printf("num=%d\n name:%s\n sex:%c\n score:%d\n",(*p).num,(*p).name,(*p).sex,(*p).score); //最后直接输出结构体各个量和用指针来输出 }
num=10086
name:yi dong
sex:m
score:0
num=10086
name:yi dong
sex:m
score:0
--------------------------------
Process exited after 0.217 seconds with return value 40
请按任意键继续. . .
总结:运用指针输出结构体变量总共有两种方法,再加上普通输出结构体变量的方法,可以根据不同情况来进行输出。
例题9.6
#include<stdio.h> struct Student{ int num; char name[20]; char sex; int age; }; //定义结构体Student struct Student stu[3]={{110,"火警",'M',110},{111,"医生",'W',111},{112,"警茶",'l',112} }; //对结构体数组赋值 int main() { struct Student *p; //定义结构体指针 for(p=stu;p<stu+3;p++) //使用for循环指针指向变量来输出各个值 printf("%5d %-20s %2c %4d\n",p->num,p->name,p->sex,p->age); }
110 火警 M 110
111 医生 W 111
112 警茶 l 112
--------------------------------
Process exited after 0.1359 seconds with return value 4206752
请按任意键继续. . .
总结:结构的指针跟普通的指针几乎是一样的,都是指向首地址的变量,而对于结构体要先定义结构体的指针,以保与其他结构区分开来。