结构体与公用体.doc_第1页
结构体与公用体.doc_第2页
结构体与公用体.doc_第3页
结构体与公用体.doc_第4页
结构体与公用体.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章 结构体与公用体一、概述有个数据记录,需要记录一个学生的下列信息:学号、姓名、性别、年龄、成绩、家庭地址。numnamesexagescoreaddr10010LiFunM1887.5Beijing图11-1 一条记录的数据如何将上述信息在C语言中描述:(1)它包含6个数据项(属性):num、name、sex、age、score、addr;(2)它是一个整体(结构体),是属于一位学生的信息。声明一个结构体类型:struct studentint num;char name20;char sex; int age;float score;char addr30;结构体类型声明:struct 结构体名成员列表;一个成员声明:类型名 成员名;注意:(1)struct student 是一个类型,int、double等也是类型。(2)最后的分号不能省略。二、定义结构体类型变量的方法1、先声明结构体类型再定义变量名如程序片断:struct studentint num;char name20;char sex; int age;float score;char addr30;void main()struct student student1,student2;student1:10001ZhangXinM1990.5Shanghaistudent2:10002WangLiF2098Beijing图11-2 定义了2个sturct student结构体类型的数据student1和student2,未来可以用来存放上面格子内的数据(现在相当于得到了2行空格子)注:把struct student;看作是声明了表格的头信息(即表格由几列组成,每一列都放些什么类型的信息),把struct student student1,student2;看作是在表头下添加了2行空行,便于以后填数据。numnamesexagescoreaddrstudent1:10001ZhangXinM1990.5Shanghaistudent2:10002WangLiF2098Beijing图11-3 结构体类型声明和数据定义示意图2、在声明类型的同时定义变量如程序片断:struct studentint num;char name20;char sex; int age;float score;char addr30; student1,student2;3、直接定义结构体类型变量如程序片断:structint num;char name20;char sex; int age;float score;char addr30; student1,student2;注意:由于没有结构体类型名称,导致今后不能定义新的该结构体类型的数据。即一次性确定了表格的头信息和它的行数(这里是2行),今后无法添加新行。3、结构体变量的引用要对每个成员分别引用:结构体变量名.成员名如程序片断:struct studentint num;char name20;char sex; int age;float score;char addr30;void main()struct student student1,student2;student1.num = 10010;student2.num = student1.num+1;student1.age+;scanf(%d,&student1.num); /*从键盘输入student1的学号*/四、结构体变量的初始化例11.1 对结构体变量初始化。#include void main()struct studentlong int num;char name20;char sex; char addr20;a=10010,Li Lin,M,123 Beijing Road;printf(No.:%ldnname:%snsex:%cnaddress:%sn,a.num,,a.sex,a.addr); 运行结果:No.:10010name:Li Linsex:Maddress:123 Beijing Road五、结构体数组上面的例11.1中的结构体student只添加了一行a,能不能一次性添加很多行呢?1、定义结构体数组如程序片断:struct studentint num;char name20;char sex; int age;float score;char addr30;struct student stu3; /*定义了3行*/2、结构体数组的初始化如程序片断:struct studentint num;char name20;char sex; int age;float score;char addr30;stu3=,; /*这里是示意,表示具体的数据*/3、结构体数组应用举例例11.2 对候选人得票的统计程序。设有3个候选人,10张选票,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。#include #include struct personchar name20;int count; Leader3=Li,0,Zhang,0,Fun,0;void main()int i,j;char name20;for(i=1;i=10;i+)scanf(%s,name); /*从键盘输入选票中的名字*/for(j=0;j3;j+) /*查找谁获得了一票*/if(strcmp(name,L)=0) Leaderj.count +;printf(=n);for(i=0;i3;i+)printf(%5s:%dn,L, Leaderi.count); 运行情况:LiLiFunZhangZhangFunLiFunZhangLi= Li:4Zhang:3 Fun:3六、指向结构体类型数据的指针1、指向结构体变量的指针例11.3 指向结构体变量的指针的应用。#include #include struct studentlong num;char name20;char sex; float score;void main()struct student stu_1;struct student *p;p=&stu_1;stu_1.num = 89101;strcpy(stu_1.name,Li Lin);stu_1.sex=M;stu_1.score=89.5;printf(No.:%ldnname:%snsex:%cnscore:%fn,stu_1.num, stu_1.name, stu_1.sex, stu_1.score);printf(No.:%ldnname:%snsex:%cnscore:%fn,(*p).num, (*p).name, (*p).sex, (*p).score);程序运行结果:No.:89101name:Li Linsex:Mscore:89.500000No.:89101name:Li Linsex:Mscore:89.500000直观写法:(*p).num写成p-num(*p).name写成p-name2、指向结构体数组的指针例11.4 指向结构体数组的指针的应用。#include struct studentint num;char name20;char sex; int age;struct student stu3= 10101,Li Lin, M,18,10102,Zhang Fun,M,19,10104,Wang Min, F,20;void main()struct student *p;printf(No. Name sex agen);for(p=stu;pnum, p-name, p-sex, p-age);运行结果:No. Name sex age10101 Li Lin M 1810102 Zhang Fun M 1910104 Wang Min F 203、用结构体变量和指向结构体的指针作函数参数例11.5 有一个结构体变量stu,内含学生学号、姓名和3门课程的成绩。要求main函数中赋予值,在另一个函数print中将它们输出。#include #include #define FORMAT %dn%sn%fn%fn%fnstruct studentint num;char name20;float score3;void print(struct student);void main()struct student stu;stu.num = 12345;strcpy(,Li Li);stu.score0=67.5;stu.score1=89;stu.score2=78.6;print(stu);void print(struct student stu) /*注意:stu是按值传递的*/printf(FORMAT,stu.num,,stu.score0,stu.score1,stu.score2);printf(n);运行结果:12345Li Li67.50000089.00000078.599998例11.6 将上题改为用指向结构体变量的指针作实参。#include #include #define FORMAT %dn%sn%fn%fn%fnstruct studentint num;char name20;float score3;stu=12345,Li Li,67.5,89,78.6;void print(struct student *);void main()print(&stu);void print(struct student *p) /*注意:stu是按值传递的*/printf(FORMAT,p-num, p-name, p-score0, p-score1, p-score2);printf(n);七、用指针处理链表(介绍)八、共用体(了解)1、共用体的概念几个不同的变量共占同一段内存的结构,称为共用体。union 共用体名称成员列表变量列表;例:union dataint i;char ch;float f;a,b,c;或:union data a,b,c;2、共用体变量的引用方式如:printf(%d,a.i);3、共用体类型数据的特点例:a.i=1;a.ch=a;a.f=1.5;后面的赋值覆盖前面的值。九、枚举类型一个变量只有有限的几种值,将它的值都列出来。如:enum weekdaysun,mon,tue,wed,thu,fri,sat;enum weekday workday,week_end;workday和week_end的值只能是sun到sat之一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论