第8章C语言的结构体与共同体

合集下载

C语言题库第8章 结构体和共同体

C语言题库第8章 结构体和共同体

第八章结构体和共同体一、单项选择1. 若有以下定义:struct link{int data;struct link *next;}a,b,c,*p,*q;且变量a和b之间已有如下图所示的链表结构,若指针p指向a,指针q指向c。

则能把c插入到a和b之间形成新的链表的语句是( C )2. 若有以下程序段:int a=1,b=2,c=3;struct dent {int n ; int *m ;} s[3] = {{101,&a},{102,&b},{103,&c}};struct dent *p=s ;则以下表达式中值为2的是( D )。

3. 下面程序的运行结果是( D )。

#iunclude<stdio.h>int main ( ) {struct complx {int x; int y ;}cnum[2]={1,3,2,7} ;printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x) ;return 0;}二、程序设计1. /*学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s 中,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序: */#include <stdio.h>#define N 16typedef struct{ char num[10];int s ;}STREC;void fun (STREC a[]){/*********Begin*********//*********End**********/}int main (){FILE *wf,*in;STREC s[N]={{ "GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};int i;fun(s);printf("The data after sorted :\n");for (i=0; i<N; i++)printf("%s %4d\n",s[i].num,s[i].s);printf("\n");/******************************/in=fopen("in001.dat","r");i=0;while(!feof(in)){fscanf(in,"%s %d",s[i].num,&s[i].s);i++;}fun(s);wf=fopen("out.dat","w");for (i=0; i<N; i++)fprintf(wf,"%s %4d\n",s[i].num,s[i].s);fclose(wf);fclose(in);/*****************************/return 0;}【参考代码】int i,j;STREC t;for(i=0;i<N;i++)for(j=0;j<N-1-i;j++)if(a[j].s<a[j+1].s){t=a[j];a[j]=a[j+1];a[j+1]=t;}2. /*某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。

C语言结构体与共同体

C语言结构体与共同体

C语言结构体与共同体C语言中结构体和共同体是两种用于组织和管理数据的重要概念。

它们可以帮助程序员更有效地管理和操作数据,提高程序的可读性和可维护性。

一、结构体(Structures)结构体是一种由不同类型的数据成员组成的数据类型,它允许程序员将不同类型的数据组织在一起并使用一个名称来引用它们。

结构体可以包含各种数据类型,例如整数、字符、数组或甚至其他结构体。

结构体的定义通过使用关键字struct来实现。

例如,下面的代码定义了一个名为Person的结构体,其中包含姓名、年龄和性别这三个成员:```cstruct Personchar name[50];int age;char gender[10];};```结构体定义可以在程序的任何地方,通常在函数外部定义,使得它在整个程序中都可见。

结构体的创建和初始化可以使用以下格式:```cstruct Person p1; // 创建名为p1的结构体变量struct Person p2 = {"John", 25, "Male"}; // 创建名为p2的结构体变量并初始化其成员```结构体成员可以通过`.`操作符来访问,例如:```cprintf("Name: %s\n", );```结构体可以作为函数的参数传递,也可以作为函数的返回值。

通过传递结构体作为参数,可以避免传递多个参数,提供了一种有效地传递多个相关数据的方法。

例如,下面的代码演示了一个函数,该函数接受一个名为p的Person结构体作为参数,并打印出其成员的值:```cvoid printPerson(struct Person p)printf("Name: %s\n", );printf("Age: %d\n", p.age);printf("Gender: %s\n", p.gender);```二、共同体(Unions)共同体是一种特殊类型的结构体,它允许不同类型的成员共享同一块内存空间。

《C语言程序设计》第八章 结构体、共同体和枚举

《C语言程序设计》第八章 结构体、共同体和枚举

{ max=stud[ i ].score;temp= i;} p=stud + temp; printf ( “\n The maximum score:\n” ); printf ( “No:%d \nname:%s\nscore:%4.1f\n”,p->num,p->name,
p->score );
}a ;
main() { a.ch[ 0 ]=13;
a.ch[ 1 ]=0;
printf (“%d\n”,a.i );
}
A. 13
B. 14
C. 208
D. 209
8.10 下面对 typedef 的叙述中不正确的是( )。 A.用 typedef 可以定义各种类型名但不能用来定义变量 B.用 typedef 可以增加新类型 C.用 typedef 只是将已存在的类型用一个新的标识符来代表 D.使用 typedef 有利于程序的通用和移植
对后一种举例如下: struct student {┇
}; struct student stud,arr[3],*p; 结构体变量的引用有三种形式:
106
第八章
结构体、共同体和枚举
1. 结构体变量名.成员名 2. (*指针变量名).成员名 3. 指针变量名->成员名 其中圆点(.)称为成员运算符,箭头(->)称为结构 指向运算符,C 语言中,圆点运算符和箭头运算符都是优先 级最高的运算符。 结构体变量的输入和输出,它必须按成员项逐个地输入 或输出,不能将结构体变量作整体地输入或输出。 共用体类型,是指将不同的成员项存放于同一段内存单 元,共用体的大小与其组成成员中字节数最大的那个成员相 同。共用体变量的定义与引用类似于结构体变量的定义与引 用。枚举类型指明这种类型的变量取值只能是指定的若干个 枚举常量之一。每个枚举常量代表一个具体的值。 用 typedef 可定义新的类型名来代替已有的类型名。其方法如下: 1. 先按定义变量的方法写出定义体; 2. 将变量名换成新类型名; 3. 在最前面加上 typedef; 4. 用新类型名去定义变量。

C语言中的结构体及共用体

C语言中的结构体及共用体

C语⾔中的结构体及共⽤体C语⾔中的结构体、共⽤体以及枚举类型⼀、结构体1、概述 为什么需要结构体? 在实际问题中,⼀组数据可能包含多种数据类型,⽐如描述⼀名学⽣时,需要⽤char类型的姓名,char或者int数据类型的学号,float类型的分数,等等, 结构体可以有效的解决这类问题。

实质 结构体本质上还是⼀种数据类型,它包含若⼲个“成员”,每个成员可以是不同数据类型的,基本数据类型或者构造数据类型。

结构体有利于程序的阅读 理解和移植,⽽且结构体的存储⽅式可以提⾼CPU对内存的访问速度。

定义结构体的⼀般形式: struct 结构名 { 成员列表 }; 成员列表由若⼲个成员组成,都是该结构体的组成部分,对于每个成员都需要进⾏类型说明,其形式为:类型说明符成员名2、定义结构体变量 (1)先声明结构体类型再定义变量名 struct student student1,student2; (2)在声明结构体类型时同时定义变量 这种形式的定义的⼀般形式为: struct 结构体名 { 成员列表 }变量名表列; (3)直接定义结构体类型变量 ⼀般形式为 struct { 成员表列 }变量名表列; //结构体名是可有可⽆的3、结构体变量的引⽤ ##注意: (1)不能将⼀个结构体变量作为⼀个整体进⾏输⼊输出。

(2)如果成员本⾝也是⼀个结构体类型,则需要使⽤成员运算符⼀级⼀级地找到最低⼀级的成员。

(3)结构体变量的成员⼀样可以像普通变量进⾏各种运算。

引⽤结构体变量中的成员的⽅式为: 结构体变量名.成员名 由上⾯形式可以直接对结构体变量中的成员进⾏赋值。

4、结构体变量的初始化 struct 结构体名 { 成员表列 }结构体变量1,结构体变量2 = {...}; 结构体变量1 = {... };5、结构体数组 概念:即数组的每个元素都是结构体类型。

struct 结构体名 { 成员表列 }数组名[]; 或者struct 结构体名数组名[] ; 初始化:数组名[] = { ...};6、指向结构体类型数据的指针 概念:结构体变量的指针就是该结构体变量所占据的内存段的起始地址。

C语言的结构体和共同体

C语言的结构体和共同体

num
{ int num;
name
char name[20]; sex
char sex;
age
int age;
float score; char addr[30]; score
};
addr

2字节 20字节 1字节 2字节
4字节
30字节
…..
s等省结tr都略构uc只。体t s是类tu其型de中定nt的义应成的作员作为,用一且域个s类tru型结的ct整及构组体“体织},类形”n后型式um的定,不,“n义;分am描”配不e述[内2能0结存] 构
C语言教学幻灯片版பைடு நூலகம்八章 结构体、共用体和枚举类型
第八章 结构体、共用体和枚举类型
8.1 结构体 8.2 共用体 8.3 枚举类型 8.4 用typedef定义类型
1
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
8.1.1 结构体类型声明
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体-------自
类c型ha标r 识na符me[20]成; 员名; 类c型ha标r s识ex符; 成员名;
in…t a…ge…; ……. }变量名表flo列at;score;
char addr[30]; }stu1,stu2;
7
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
• 直接定义结构体变量
– 一般形式:
例strsutcrtuct { { int num; 类c型ha标r 识na符me[20]成; 员名; 类c型ha标r s识ex符; 成员名; int…a…ge;………. }变量名表flo列at;score; char addr[30]; }stu1,stu2;

C语言课件(王曙燕)chp8 结构体与共用体

C语言课件(王曙燕)chp8 结构体与共用体

第 八 章
结 构 体 和 共 用 体
特点:
简略形式,类型定义和变量定义合在一起 适用于该结构体类型引用不太多的情况
C C 语 言 程 序 设 计
直接定义结构体变量
一般形式:
struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
第 八 章
结 构 体 和 共 用 体
第 八 章
结 构 体 和 共 用 体
特点:
常用方法 在该定义后的任意位置仍可用该结构体类型来定义其他 变量 适用于需要大量引用该结构体类型的情况 可把通用的类型定义集中在一个单独的源文件中
C C 语 言 程 序 设 计
定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名 { 类型名 成员名; 类型名 成员名; ……………. }变量名表列;
C C 语 言 程 序 设 计
§8.3 结构体数组
数组是由相同数据类型的元素组成的,当用相同类 型的结构体作元素就可构成结构体数组。 num 虽然每个元素的内部含不同类型的成员,但从整体 name 25B stu[0] 上看,每个元素的类型是相同的。
结构体数组的定义
第 八 章
结 构 体 和 共 用 体
第 八 章
结 构 体 和 共 用 体
C C 语 言 程 序 设 计
ቤተ መጻሕፍቲ ባይዱ对结构体变量整体的引用 对结构变量整体只能做赋值类的操作
可以相互赋值,但注意相互赋值的两个结构体变量必须是 同一个结构体类型
s2=s1; s2.birthday=s1.birthday;
第 八 章
结 构 体 和 共 用 体
可作为函数的实参到形参的值传递、或函数返回值,详见 下节。

第8章 C语言的结构体和共同体

第8章 C语言的结构体和共同体
6
C语言教学 幻灯片版 第八章 结构体、共用体和枚举类型 语言教学 结构体、
8.1 结构体
• 定义结构体类型的同时定义结构体变量 – 一般形式: 一般形式:
例 struct student struct 结构体名 int num; { { char name[20]; 成员名; 类型标识符 成员名; char sex; 成员名; 类型标识符 成员名; int age; ……………. float score; 变量名表列; }变量名表列; char addr[30]; }stu1,stu2;
7
C语言教学 幻灯片版 第八章 结构体、共用体和枚举类型 语言教学 结构体、
8.1 结构体
• 直接定义结构体变量 – 一般形式: 一般形式:
例 struct struct int num; { { char name[20]; 成员名; 类型标识符 成员名; char sex; 成员名; 类型标识符 成员名; int age; ……………. float score; }变量名表列; 变量名表列; char addr[30]; }stu1,stu2; 用无名结构体直接定义 无名结构体直接定义 变量只能一次 变量只能一次
8.1 结构体
8.1.1
结构体类型声明
结构体是一种构造数据类型 结构体是一种构造数据类型 构造 用途: 不同类型的数据组合成一个整体 的数据组合成一个整体-------自 用途:把不同类型的数据组合成一个整体 自 定义数据类型 定义数据类型 合法标识符 可省:无名结构体 – 结构体类型定义 struct [结构体名 结构体名] 结构体名 { 成员名; 类型标识符 成员名; 成员名; 类型标识符 成员名; struct是关键字, ……………. 是关键字, 不能省略 成员类型可以是 }; ; 基本型或构造型

8章 c语言程序设计 结构体,共用体与枚举类型

8章 c语言程序设计 结构体,共用体与枚举类型

当通过指针变量引用结构体成员时,若表达式中含有++,-等运算符时,应根据运算符优先级来确定表达式含义。例: ++ p-> score 相当于++( p-> score),结果使score加1。 (++ p)-> score 则再访问成员score之前,使p加1。 例:struct abc {char a[20]; int *pt; }p; pt是结构体类型中的成员,则表达式*p->pt引用的是pt所 指存储单元; *p->pt++是再引用了pt所指存储单元后,使 指针pt加1;( *p->pt)++使pt所指向的单元的值加1;而 *p ++ ->pt在访问了pt所指存储单元后,p加1。
例:struct std_info {char name[9]; char sex[3]; float score; struct date birthday; }stud,arr[5],*p; p=& stud; (1)若要引用结构体类型变量stud 中score成员项,可写成: stud. score p-> score *(p). score arr[1] .score /*通过结构体变量引用*/ /*通过指针变量引用*/ /*通过指针变量引用*/
2.将一个结构体变量作为一个整体赋给另一具有相同类型的 结构体变量 例:struct {char name[15]; int num; }stud1,stud2={“wangfang”,01}; 执行赋值语句: stud1=stud2; 则stud2中把每个成员的值依次赋给stud1中对应的同名成员。 C不允许把一个结构体变量作为一个整体进行输入和输出。 例: scanf(“%d”,& stud1); printf(“%d”,stud1);都是错误的 结构体变量有多个不同类型的数据项,必须逐个用相应的格 式像普通变量一样输入和输出。 scanf(“%s,%d”, stud1. name ,& stud1.num); 注意name[15]是数组,数组名本身就是地址。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例strsutcrtuct { { int num; 类c型ha标r 识na符me[20]成; 员名; 类c型ha标r s识ex符; 成员名; int…a…ge;………. }变量名表flo列at;score; char addr[30]; }stu1,stu2; 用无名结构体直接定义 变量只能一次
8
num
{ int num;
name
char name[20]; sex
char sex;
age
int age;
float score; char addr[30]; score
};
addr

2字节 20字节 1字节 2字节
4字节
30字节
…..
s等不结tr都能构uc只省体t s是略类tu其。型de中定nt的义应成的作员作为用,一域且个s类tr型u结的c整t构组及体体织“,类形}n型式”um定,后不,n义的分am描“配e述;[内2结0”存] 构
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
说明:
✓ 结构体类型与结构体变量概念不同
类型:不分配内存;
变量:分配内存
类型:不能赋值、存取、运算; 变量:可以
✓ 结构体可嵌套
✓ 结构体成员名与程序中变量名可相同,不会混 淆
✓ 结构体类型及变量的作用域与生存期
9
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
例 struct student
{ int num;
char name[20];
char sex;
int age;
char addr[30];
}stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
12
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
第八章 结构体、共用体和枚举类型
8.1 结构体 8.2 共用体 8.3 枚举类型 8.4 用typedef定义类型
1
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
8.1.1 结构体类型声明
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体-------自
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
2、结构体变量的输入输出 不允许对结构体变量进行整体的输入输出 如:scanf(“%s%c%d%f”,&stu1);
struct student
程序运行过程:
{
Enter num,age,score:
int num;
1001,19,98.5↙
} 14
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
8.1.5 结构体数组
– 结构体数组的定义
形式二一三::
25B
stsrtuructctstsutuddenent t
{ int num;
char name[20];
char sex;
int age;
}s;tu[2];
struct student stu[2];
如职工信息结构体类Байду номын сангаас为:
struct person
{
char name[20]; /*姓名*/
char address[40]; /*地址*/
float salary;
/*工资*/
float cost;
/*扣款*/
struct date hiredate; /*聘任日期*/
};
5
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
例 统计后选人选票
struct person { char name[20];
int count;
name Li
}leader[3]={“Li”,0,“Zhang”,0,”Wang“,0}; Zhang
main() { int i,j; char leader_name[20];
Wang
stu[0]
"Zhang" 'M'
①如果p的初值为stu,即指P向’ 第一个元11素8010,2 则p+1后
指向下一个元素的起始地址。s请tu区[1]别:"Li"
(++p)->num 和 (p++)->num
num name sex age num name sex age
stu[0] stu[1]
15
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
– 结构体数组的初始化
– 结例构体st数ru组ct 的引用
{ int num;
引用方式:cha结r 构na体me数[2组0]名; [下标].成员名
/*体重*/
char addr[50]; /*住址*/
};
例 日期, 包括年、 月、 日:
struct date {int year; /*年*/ month; /*月*/ day; /*日*/
};
4
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
结构体类型可以嵌套定义 即一个结构体类型中的某 些成员又是其他结构体类型
8.1 结构体
8.1.2 结构体变量的定义
• 先定义结构体类型,再定义结构体变量 – 一般形式:
s例trucsttru结ct 构st体ud名ent
{ { int num; 类型标c识ha符r na成m员e[2名0];; 类型标c识ha符r sex成; 员名;
………int…ag…e;.
};
float score;
char sex;
age
int age;
}stu;
struct student *p=&stu;
18
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
– 使用结构体指针变量引用成员形式
(*结构体指针名).成员名 结构体指针名->成员名
结构体变量名.成员名 指向运算符 例 iinntt优结*先合np;=级方&:向n;:1 从左向右 *p=10; n=10
char sex;
struct studeint age;
stu[1].age++;
{ in}tstun[u]m=;{{……},{……},{……}};
char name[20];
char sex;
int age; }str[3];
strcpy(stu[0].name,”ZhaoDa”);
16
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
8.1.3 结构体变量的引用
• 引用规则 – 结构体变量不能整体引用,只能引用变量成员
• 引用方式: 结构体变量名.成员名
如果结成构员体(分变量)类运型算相符同,可以将一个结 构体变量优赋先值级给:另1 一个结构体变量
结构体结嵌合套性时:从逐左级向引例右用; stu1=stu2;
例: stu1.birthday.day=23; stu1.birthday.month=8; stu1.birthday.year=2003;
类c型ha标r 识na符me[20]成; 员名; 类c型ha标r s识ex符; 成员名;
in…t a…ge…; ……. }变量名表flo列at;score;
char addr[30]; }stu1,stu2;
7
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
• 直接定义结构体变量 – 一般形式:
int age; float score;
num:1001,age:19,score:98.5
}stu;
void main()
{ printf("Enter num,age,score:");
scanf("%d,%d,%f",&stu.num,&stu.age,&stu.score);
printf("num:%d,age:%d,score:%.1f\n",stu.num,stu.age,stu.score);
struct student stu1; struct student *p=&stu1; stu1.num=101; (*p).num=101
19
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
例 输出数组中各元素中各成员的值。
struct student
{int num;
main()
struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};
11
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
– 形式二:
struct
结构体名
{
类型标识符 成员名;
类型标识符 成员名;
…………….
}结构体变量={初始数据};
10
C语言教学幻灯片版第八章 结构体、共用体和枚举类型
8.1 结构体
8.1.4 结构体变量的使用
1、 结构体变量的初始化
– 形式一:
例 struct ssttruudcetnt 结构体名 { in{t num; char类na型m标e[识20符]; 成员名; char类sex型; 标识符 成员名; int age…; …………. ch};ar addr[30]; }; struct 结构体名 结构体变量={初始数据};
相关文档
最新文档