结构体与共用体
结构体与共用体
![结构体与共用体](https://img.taocdn.com/s3/m/22b28b7fba0d4a7302763ae3.png)
10. 1 结构体数据
• 【注意】 • (1) 不能将一个结构体变量作为一个整体进行赋值和输出; 只能对其各
个成员分别输出。 • ( 2) 对成员变量可以像普通变量一样进行各种运算。例如: • sumage = stu1. age + stu2. age; • (3) 既可以引用成员的地址, 也可以引用结构体变量的地址。例如: • printf("score = %f",stu2. score); • (4) 若成员本身还属于一个结构体类型, 则只能对最低级的成员进行赋
给出结构变量。 • 三种方法中声明的stu1、stu2 变量都具有图10. 1 所示的结构。
上一页 下一页 返回
10. 1 结构体数据
• 这说明变量stu1、stu2 为student 类型后, 即可向这两个变量中的各 个成员赋值。在上述结构体定义中, 所有成员都是基本数据类型或数 组类型。
• 【注意】 • (1) 类型与变量是不同概念, 不要混淆。 • (2) 结构体中的成员, 可以单独使用, 其作用与地位相当于普通变量。 • (3) 成员也可以是一个结构体变量。 • (4) 成员名可以与程序中的变量名相同, 二者不代表同一对象。
• };
• 在这个结构体数据类型定义中, struct 是C 语言关键字, student 是结 构体名, 该结构体由5 个成员组成。第1 个成员为num, 字符串变量; 第2 个成员为name, 字符串变量; 第3个成员为age, 整型变量; 第4 个 成员为sex, 字符变量; 第5 个成员为score, 实型变量。
下一页 返回
10. 1 结构体数据
• 例如, 上述学生信息数据的描述可以定义结构体数据类型为
• struct student
第11章结构体与共用体
![第11章结构体与共用体](https://img.taocdn.com/s3/m/3eac71906bec0975f465e2f1.png)
1
结构体与共用体
1 2 3 4 5 6 7 定义结构体类型变量的方法 结构体变量的引用 结构体数组 指向结构体类型数据的指针 共用体 枚举类型 用typedef定义类型
2
结构体与共用体
概述
在当代信息处理中,往往需要处理相同的属性、不同的数据 类型,如:人事档案,涉及职员的描述和处理时,有职工的 姓名、性别、年龄、文化程度、工资、住址等数据,其中姓 名、性别、文化程度、住址属于字符型,而年龄则是整型, 工资是实型,这些不同的事物都属于同一个事物(职员)所有 ,本身有内在的关系。
17
指向结构体类型数据的指针
18
指向结构体类型变量的指针
指向结构体变量的指针
一个结构体变量的指针就是该变量所占据的内存段的起始 地址。 指针变量也可用来指向结构体数组中的元素。 C语言规定:可以把(*p).num改用p->num表示,即以下三种 形式等价: 结构变量.成员名 (*p).成员名 p->成员名(其中"->"称为指向运算符)
struct 结构体名 { 成员表列 } 变量名表列;
3. 直接定义结构类型变量:
struct { 成员表列 } 变量名表列;
7
结构体与共用体
定义结构体类型变量的方法
关于结构体类型的说明
类型与变量是不同的概念,不要混同。 通过struct定义的结构体类型和int,float等有着同等的地 位。 只能对变量赋值、存取或运算,而不能对一个类型赋值、 存取或运算。 在编译时,对类型是不分配空间的,只对变量分配内存空 间。 对结构体中的成员(即"域"),可以单独使用,它的作用与 地位相当于普通变量。 成员也可以是一个结构体变量。 成员名可以与程序中的变量名相同,二者不代表同一对象。
结构体与共用体
![结构体与共用体](https://img.taocdn.com/s3/m/9b15ff2a783e0912a2162a8f.png)
4、共用体类型的变量如何赋初值,含义是什么?
不能对共用体变量名赋值,也不能在定义共用体变量时初始化。但可以用一个共用体变量为 另一个变量赋值
例:union
{ int i;
char ch;
double f;
}a={1,’a’,1.5}; ()
a=1;
()
m=a;
()
例:float x; union { int i; char ch; double f; }a,b; a.i=1; a.ch=‘a’; a.f=1.5; b=a; () x=a.f; ()
二. 枚举类型的应用
• 1.枚举类型变量的定义 ◆先定义枚举类型,再定义枚举类型变量
enum week{sun,mon,tue,wed,thu,fri,
sat};
enum week weekday,workday; ◆定义枚举类型的同时定义枚举变量 enum color {red,blue,green,black}a,b,c;
共用体类型的关键字
union 联合类型名 { 数据类型 成员名1 数据类型 成员名2
...........
数据类型 成员名n };
例:
union utype {
char ch; int i; float f; };
2、如何定义共用体类型的变量
(1)先定义类型,再定义变量,例如: union data /*共用体类型定义*/ { int i;
◆直接定义枚举变量 enum {male,female}sex1,sex2;
枚举类型变量的特点
例 enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN };
(1) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
结构体与共用体zlh
![结构体与共用体zlh](https://img.taocdn.com/s3/m/6be543416d85ec3a87c24028915f804d2a168770.png)
结构体中每个成员可以是不同的 数据类型,而共用体中所有成员 必须是相同的数据类型。
结构体与共用体的区别与联系
• 使用方式:结构体中每个成员都可以单独访问和操作,而 共用体中一次只能使用其中一个成员。
结构体与共用体的区别与联系
自定义类型
结构体和共用体都是用户自定义的数据类型 ,可以根据需要组合不同的数据类型。
对于大型结构体和共用体,可以使用指针成 员来减少直接内存占用。
在跨平台编程时,要注意不同平台下的内存 对齐规则可能不同,需要进行相应的调整。
05
结构体与共用体的应用案例
案例一:使用结构体实现学生信息管理
定义学生结构体
包含学生姓名、学号、性别、年龄等字段。
创建学生信息数组
根据学生数量,创建相应大小的学生信息数组。
访问速度较慢
访问结构体的成员变量时,需要通过 指针或引用等方式进行间接访问,相 对于直接访问基本数据类型,速度较 慢。
结构体与共用体的优缺点分析
内存占用小
共用体中的所有成员变量共享同一块内存空间,因此相对于 结构体,共用体的内存占用较小。
访问速度快
访问共用体的成员变量时,可以直接通过内存地址进行访问 ,速度较快。
封装性好
结构体可以将多个变量封装在一起,形成一个自定义的数据类型,方便数据的 处理和管理。
结构体与共用体的优缺点分析
• 可扩展性强:结构体可以方便地添加或删除成员 变量,以适应不同的应用场景和需求。
结构体与共用体的优缺点分析
内存占用较大
由于结构体中每个成员变量都占用独 立的内存空间,因此相对于基本数据 类型,结构体的内存占用较大。
赋值给共用体变量
可以给共用体的任何一个成员赋值,如`data.f = 3.14;`,表示将 `data`的`f`成员赋值为3.14。
结构体和共用体
![结构体和共用体](https://img.taocdn.com/s3/m/0025bbd8f021dd36a32d7375a417866fb84ac038.png)
num
name
birthday
month
day
year
stu1.birthday.month=12;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
直接定义结构体变量 一般形式:
{ 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
struct
{ int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
形式二:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112, "Wang Lin", 'M',19, "200 Beijing Road"};
成员类型可以是 基本型或构造型
struct是关键字, 不能省略
合法标识符 可省:无名结构体
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
顺序初始化: struct student { int num; char name[20]; char sex; int age; }; struct student stu[ ]={100, "Wang Lin", 'M',20, 101, "Li Gang", 'M',19, 110, "Liu Yan", 'F',19};
第九章 结构体和共用体
![第九章 结构体和共用体](https://img.taocdn.com/s3/m/eaf8d005fc4ffe473368abab.png)
• (3)结构体数组的初始化 – 结构体数组定义好之后就可以对结构体数组进行赋 值操作,包括在定义结构体数组时赋值和在定义结 构体数组之后赋值。 • 【例9.4】输入输出学生相关信息,学生信息包括学号 (num)、姓名(name)、语文成绩(chinese)、英语成 绩(english)、数学成绩(maths)。
• ⑥不同结构体类型的成员名可以相同,结构体的成员名也可以与基 本类型的变量名相同。他们分别代表不同的对象,系统将以不同的 形式表示它们。如: 1. struct student 2. { int num; 3. char name[20]; 4. int age; 5. int score; 6. } a,b; 7. struct teacher 8. { int num; 9. char name[20]; 10. int age; 11. float salary; 12. }c,d; • ⑦“struct 结构体类型名”为结构体的类型说明符,可用于定义或说 明变量。结构体类型的定义可置于函数内,这样该类型名的作用域 仅为该函数。如果结构体类型的定义位于函数之外,则其定义为全 局的,可在整个程序中使用。
21
• 为指示相邻结点关系,可在第一个结点的指 针域内存入第二个结点的首地址,在第二个 结点的指针域内又存放第三个结点的首地址, 如此串联下去直到最后一个结点。最后一个 结点因无后续结点连接,其指针域可赋为0。 这样一种连接方式,在数据结构中称为“链 表”。图9-3为一简单链表的示意图。
22
9.3.2处理动态链表所需的函数
• (*结构体指针变量).成员名 • 或者 • 结构体指针变量->成员名
– 【例9.5】用指向结构体变量的指针变量引用结构体变量
14
C语言学习入门笔记之结构体与共用体
![C语言学习入门笔记之结构体与共用体](https://img.taocdn.com/s3/m/9bd9e8e1f605cc1755270722192e453610665b77.png)
结构体与共用体笔记定义结构体C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。
在其他一些高级语言中称为“记录”.定义后的结构体类型和系统提供的标准类型(如int, char, float, double 等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。
定义一个结构体类型的一般形式为:struct 结构体名{ 成员表列};注意:1.结构体类型的名字是由一个关键字struct和结构体名组合而成的(例如struct Student) ,结构体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。
上面的结构体声明中Student就是结构体名(结构体标记)。
2.花括号内是该结构体所包括的子项,称为结构体的成员。
“成员表列"(member list)也称为“域表”(field list),成员表列由若干个成员组成,每一个成员是结构体中的一个域。
对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。
例如:struct stu{int num;char name[20];char sex;float score;};3.一个结构体的成员可以属于另一个结构体类型(嵌套)。
例如:struct Date //声明一个结构体类型struct Date{ int month;//月int day;//日int year;//年}struct Student//声明一个结构体类型struct Student{ int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date 类型char addr[30];};结构体类型变量1.定义结构体类型变量说明结构变量有以下三种方法。
结构体与共用体
![结构体与共用体](https://img.taocdn.com/s3/m/0e06e599da38376baf1faebe.png)
9.5 链表的概念
例如,一个存放学生学号和成绩的结点应为以下结构: struct stu {
9.1.1 结构类型变量的说明
3.直接说明结构变量 这种形式的说明的一般形 式为:
struct {
成员表列 }变量名表列;
例如: struct
{ int num; char name[20]; char sex; float score;
} stud1, stud2;
9.1.1 结构类型变量的说明
9.3.2 指向结构数组的指针
指针变量可以指向一个结构数组,这时结构指针变量的值 是整个结构数组的首地址。结构指针变量也可指向结构数组 的一个元素,这时结构指针变量的值是该结构数组元素的首 地址。
9.3.3 结构指针变量作函数参数
即用指针变量作函数参数进行传送。这时由实参传向形参 的只是地址,从而减少了时间和空间的开销。
9.2 结构数组的定义
数组的元素也可以是结构类型的。因此可以构成结构型数组,结构数 组的每一个元素都是具有相同结构类型的下标结构变量。
构造结构数组的方法和构造结构变量相似,只需说明它为数组类型即 可。
例如: struct stud
{ int num; char *name; char sex; float score;
{ int num; char *name; char sex; float score; } stud1,stud2;
stud1.num=102; ="Zhang ping"; printf("input sex and score\n"); scanf("%c %f",& stud1.sex,& stud1.score); stud2= stud1; printf("Number=%d\nName=%s\n", stud2.num, ); printf("Sex=%c\nScore=%f\n", stud2.sex, stud2.score); }
第11章结构体与共用体共39页PPT资料
![第11章结构体与共用体共39页PPT资料](https://img.taocdn.com/s3/m/f3c85312312b3169a451a46e.png)
13.05.2020
10
#include<stdio.h>
#include<string.h>
struct person
{char name[20];
int count;
}leader[3]={"Li",0,"Zhang",0,"Fun",0}; void main()
{int i,j;
char leader_name[20];
➢在定义时初始化(eg11.1)
struct student { int num; char name[20]; char sex;
a.num=89031; a.sex=‘M’; name如何赋初值?
char addr[20];
}aa=;{89031,"Li Lin",'M',"123 Beijing Road"};
‘M’ 59B
18
87.5
stu[0]
“123 Beijing”
10102
“zhang fun” ‘M’ 19 99
“123 shanghai”
stu[1]
3)结构体数组的应用举例 例 11.2 对候选人得票的统计程 序。有3个候选人,每次输入一个 得票的候选人的名字,要求最后输 出各人的得票结果。
结构体类型
char sex;
short int age;
13.05.2020
float score;
struct student stu;
char addr[30];
};
1
➢ 结构体类型的形式:
struct 结构体名
C语言程序设计——结构体和共用体(完整版)
![C语言程序设计——结构体和共用体(完整版)](https://img.taocdn.com/s3/m/ce874ede84254b35eefd349d.png)
printf(“name\tage\tjob\tclass/office\n”); for(i=0;i<PN;i++) {if(body[i].job==„s‟) printf(“%s\t%d\t%3c\t%d\n”,body[i].name, body[i].age,body[i].job,body[i].units.class); else printf(“%s\t%d\t%3c\t%s\n”,body[i].name, body[i].age,body[i].job,body[i].units.office); } }
birthday num name sex age month day year addr
§12.3结构体数组
结构体数组的每一个元素都是具有相同结构类型 的结构体变量。 例:struct student {int num; char name[20]; float score; }stu[3]; 其中,定义了一个结构体数组stu,共有3个元素, 每个元素都具有struct student的结构形式。
§12.6共用体
共用体(也称为联合)也是一种构造的数据类型。 共用体是将不同类型的数据组织在一起共同占用 同一段内存的一种构造数据类型。 例如,在校学生和教师都填写以下表格: 姓名 年龄 职业 单位 其中,职业分两类:教师和学生; 而单位一栏里,学生填写班级编号(整型类型), 教师填写某系某教研室(整型类型) 。
§12.7枚举数据类型
当某些变量仅由有限个数据值组成时,通常用枚 举类型来表示。 所谓枚举是指将变量的值一一列举出来,变量的 值只限于列举出来的值的范围内。如一周只有7天, 一年只有12个月等等。
注意:枚举类型是一种基本数据类型,而不是一 种构造类型。关键字为enum。
结构体与共用体
![结构体与共用体](https://img.taocdn.com/s3/m/bfa6d1770b4e767f5bcfce48.png)
10.1 结构体类型和结构体变量
如:
struct date
/*声明一个结构体类型*/
{ int month;
int day;
int year;
};
struct student
{int num;
char name[20];
char sex;
int age;
struct date birthday;/*birthday是struct date类 型*/
10.1.1 结构体型的定义
如前所述,结构体是由不同数据类型的数据组成的。组成结 构体的每一个数据称为该结构体的成员。在程序中使用结构 体时,首先要对结构体的组成进行描述,这称为结构体型的 定义,结构体型的定义是确定该结构体型由哪几个成员项组 成,以及每个成员项具有什么数据类型。
下一页 返回
10.1 结构体类型和结构体变量
10.1 结构体类型和结构体变量
注意不要忽略最后的分号。struct student向编译系统声 明这是一个“结构体类型”,它包括num、name、sex、 age、score和addr等不同类型的数据项。应当说明 struct student是一个类型名,它和系统提供的标准类型 (如int、char、float和double等)一样具有同样的地位 和作用,都可以用来定义变量的类型,只不过结构体类型需 要由用户自己指定而已。
上一页 下一页 返回
10.1 结构体类型和结构体变量
例10-1 定义如下结构体型。 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
结构体与共用体
![结构体与共用体](https://img.taocdn.com/s3/m/aca1661ea76e58fafab0035c.png)
结构体与共用体
例如:20020945
有如下定义:struct sk
{int a;float b;} data;
int *p 则要使p指向data中的a域,正确的赋值语句是:C (A)p=&a;错误在于结构体变量的成员,必须通过定义的结构
体变量的名来引用其成员
(B)p=&data.a; data.a就是变量的值,而不是成员a地址
(C)p=&data.a;
(D)*p=data.a 同B解释
“()”优于“->”(指向)优于“++”
结构体类型还允许嵌套定义!
使用共用体类型数据时要注意:1,同一段程序可以用来存放几种不同的数据,但是在读写瞬间只能存放其中一种,而不是同时存放几种。
系统分配的空间为其中一个所需内存最大的成员的空间,不累加!!!
共用体变量的地址和他的各成员的地址都相同,即无论哪个成员起始地址都相同(参考19960946)。
typedef 原类型名新类型名
typedef v1 int v3
typedef 可以声明各种类型名,但是不能用用来定义变量。
他只为已存在的类型增加一个类型名,并不是创造新类型。
(参考20000930和20020947)。
结构体与共用体小结
![结构体与共用体小结](https://img.taocdn.com/s3/m/0767a069182e453610661ed9ad51f01dc28157da.png)
结构体与共用体小结结构体和共用体是C语言中非常重要的数据类型。
它们在存储和组织数据方面提供了更灵活的选择。
本文将从定义、声明、初始化、使用和比较等方面对结构体和共用体进行详细讨论。
一、结构体(Struct)结构体是一种能够存储不同类型数据的自定义数据类型。
它允许将不同类型的数据组合在一起,形成一个逻辑上的实体。
1.定义和声明结构体的定义使用关键字`struct`,可以像定义其他变量一样定义结构体。
例如:```cstruct Studentint id;char name[20];int age;};```在定义结构体后,可以使用该结构体类型声明变量。
例如:```cstruct Student stu1;```也可以一步完成结构体类型定义和变量声明。
例如:```cstruct Studentint id;char name[20];int age;} stu1;```2.初始化结构体变量可以使用初始化列表初始化。
例如:```cstruct Student stu1 = {1001, "John", 20};```3.使用结构体变量的成员可以通过`.`运算符访问。
例如:```cstu1.id = 1001;strcpy(, "John");stu1.age = 20;```4.比较结构体不能直接比较,但可以通过定义比较函数来比较。
例如:```creturn (stu1.id == stu2.id && strcmp(, ) == 0 && stu1.age == stu2.age);```二、共用体(Union)共用体是一种特殊的数据类型,它允许不同类型的成员共享同一块内存空间。
共用体的成员在内存中是相互重叠的,只有一个成员可以被赋值和使用。
1.定义和声明共用体的定义使用关键字`union`,可以像定义其他变量一样定义共用体。
例如:```cunion Dataint i;float f;char str[20];};```在定义共用体后,可以使用该共用体类型声明变量。
共用体和结构体的区别
![共用体和结构体的区别](https://img.taocdn.com/s3/m/9f5a590943323968011c92e0.png)
其中,struct 是结构体关键字,一定不能省略。 node 是结构体名,可以省略,成为无名结构体。 结构体成员可以使基本类型或者构造类型。 3、特点 变量用.访问,指针用 ->访问。eg. node.num = 1; node->ame = abc; 共用体 1、共用体的作用 用覆盖技术,几个变量相互覆盖,从而使几个不同变量共占一段内存 的结构。共用体的所有成员都在一段内存中存放,起始地址一样,并且同一 时刻只能使用其中的一个成员变量。
2、结构体总空间大小,等于各成员总长度,共用体空间等于最大成 员占据的空间。 3、共用体不能赋初值而结构体可以。
2、共用体的定义 共用体如下所示, 其中 union 是共用体关键字,不能省略。node 是共用体名。 3、特点 用体内存长度是内部最长的数据类型的长度。 共用体的地址和内部各成员变量的地址都是同一个地址 主要区别 1、结构体每一位成员都用来表示一种具体事务的属性,共用体成员 可以表示多种属性(同一存储空间可以存储不同类型的数据) 。
共用体和结构体的区别
在 c++中,结构体(struct)和共用体(union)是两种很相似的复合 数据类型,都可以用来存储多种数据类型,但是两者还有很大的区别。 结构体 1、结构体的作用 在网络协议、通信控制、嵌入式系统的 C/C++编程中,我们经常要传 送的不是简单的字节流,而是多种数据组合起来的一个整体,其表现形式就 是一个结构体。 2、结构体的定义 结构体:是指定义相应的数据结构及相应的变量。 结构体如下所示,
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
试卷编号:825所属语言:C语言试卷方案:结构体与共用体试卷总分:90分共有题型:5种一、填空共5题(共计10分)第1题(2.0分)题号:205结构体是不同数据类型的数据集合,作为数据类型,必须先说明结构体【1】,再说明结构体变量.答案:=======(答案1)=======类型第2题(2.0分)题号:208将函数funl 的入口地址赋给指针变量p的语句是【1】.答案:=======(答案1)=======p=funl;第3题(2.0分)题号:232设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【1】 . struct stud{ char num[6];int s[4];double ave;} a,*p;答案:=======(答案1)=======第4题(2.0分)题号:345若在程序中用到"strlen()"函数时,应在程序开头写上包含命令# include "【1】". 答案:=======(答案1)=======string.h第5题(2.0分)题号:803预处理命令行都必须以【1】号开始.答案:=======(答案1)=======#二、单项选择共20题(共计40分)第1题(2.0分)题号:464以下描述中,正确的是()。
A:预处理是指完成宏替换和文件包含中指定的文件的调用B:预处理指令只能位于C源文件的开始C:C源程序中凡是行首以#标识的控制行都是预处理指令D:预处理就是完成C编译程序对C源程序第一遍扫描,为编译词法和语法分析作准备答案:C第2题(2.0分)题号:472下列程序运行结果为:#define P 3#define S(a) P*a*amain(){int ar;ar=S(3+5);printf("\n%d",ar);}A:192B:29D:25答案:B第3题(2.0分)题号:488当定义一个结构体变量时,系统分配给它的内存是()。
A:各成员所需内存量的总和B:结构中第一个成员所需内存量C:结构中最后一个成员所需内存量D:成员中占内存量最大者所需的容量答案:A第4题(2.0分)题号:489设有如下定义: struct sk {int a; float b;} data,*p; 若要使p指向data中的a域,正确的赋值语句是()。
A:p=(struct sk*)&data.a;B:p=(struct sk*) data.a;C:p=&data.a;D:*p=data.a;答案:A第5题(2.0分)题号:490以下对枚举类型名的定义中正确的是()。
A:enum a={sum,mon,tue};B:enum a {sum=9,mon=-1,tue};C:enum a={"sum","mon","tue"};D:enum a {"sum","mon","tue"};答案:B第6题(2.0分)题号:491在下列程序段中,枚举变量c1,c2的值依次是()。
enum color {red,yellow,blue=4,green,white} c1,c2;c1=yellow;c2=white;printf("%d,%d\n",c1,c2);A:1,6B:2,5D:2,6答案:A第7题(2.0分)题号:545C程序中的宏展开是在()。
A:编译时进行的B:程序执行时进行的C:编译前预处理时进行的D:编辑时进行的答案:C第8题(2.0分)题号:546C语言中,定义结构体的保留字是()。
A:unionB:structC:enumD:typedef答案:B第9题(2.0分)题号:547结构体类型的定义允许嵌套是指()。
A:成员是已经或正在定义的结构体型B:成员可以重名C:结构体型可以派生D:定义多个结构体型答案:A第10题(2.0分)题号:548对结构体类型的变量的成员的访问,无论数据类型如何都可使用的运算符是()。
A:.B:->C:*D:&答案:A第11题(2.0分)题号:549相同结构体类型的变量之间,可以()。
A:相加B:赋值C:比较大小D:地址相同答案:B第12题(2.0分)题号:550使用共用体变量,不可以()。
A:节省存储空间B:简化程序设计C:进行动态管理D:同时访问所有成员答案:D第13题(2.0分)题号:551enum a {sum=9,mon=-1,tue};定义了()。
A:枚举变量B:3个标识符C:枚举数据类型D:整数9和-1答案:C第14题(2.0分)题号:552在定义构造数据类型时,不能()。
A:说明变量B:说明存储类型C:初始化D:末尾不写分号答案:D第15题(2.0分)题号:557若有int *p=(int *)malloc(sizeof(int));则向内存申请到内存空间存入整数123的语句为()。
A:scanf("%d",p);B:scanf("%d",&p);C:scanf("%d",*p);D:scanf("%d",**p);答案:A第16题(2.0分)题号:558若有int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则输出结果不为5的语句为()。
A:printf("%d",*(a+5));B:printf("%d",p[5]);C:printf("%d",*(p+5));D:printf("%d",*p[5]);答案:D第17题(2.0分)题号:562int (*p)[6]; 它的含义为()。
A:具有6个元素的一维数组B:定义了一个指向具有6个元素的一维数组的指针变量C:指向整型指针变量D:指向6个整数中的一个的地址答案:B第18题(2.0分)题号:563char *match(char c)是()。
A:函数定义的头部B:函数预说明C:函数调用D:指针变量说明答案:A第19题(2.0分)题号:571static struct {int a1;float a2;char a3;}a[10]={1,3.5,'A'};说明数组a是地址常量,它有10个结构体型的下标变量,采用静态存储方式,其中被初始化的下标变量是()。
A:a[1]B:a[-1]C:a[0]D:a[10]答案:C第20题(2.0分)题号:701以下叙述中不正确的是()。
A:预处理命令行都必须以#号开始B:在程序中凡是以#号开始的语句行都是预处理命令行C:C程序在执行过程中对预处理命令行进行处理D:以下是正确的宏定义 #define IBM_PC答案:C三、程序填空共1题(共计10分)第1题(10.0分)题号:73/*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:用结构体调用的方法编程。
要求输入A,B,C,D,E,F五个元素的数值,并按从大到小的顺序输出。
-------------------------------------------------------*/#include <stdio.h>#define N sizeof tbl/sizeof tbl[0] /*取得数组有多少个元素*/int A,B,C,D,E,F;struct ele{char vn;/***********SPACE***********/int 【?】;}tbl[]={{'A',&A},{'B',&B},{'C',&C},{'D',&D},{'E',&E},{'F',&F}},t;main(){int k,j,m;/***********SPACE***********/for(k=0;k<【?】;k++){printf("Enter data for %c\n",tbl[k].vn); scanf("%d",tbl[k].vp);}m=N-1;while(m>0){for(k=j=0;j<m;j++)/***********SPACE***********/if(*tbl[j].vp<【?】){t=tbl[j];tbl[j]=tbl[j+1];tbl[j+1]=t;k=j;}/***********SPACE***********/【?】;}for(k=0;k<N;k++)printf("%c(%d)",tbl[k].vn,*tbl[k].vp); printf("\n");}答案:=======(答案1)=======*vp=======(答案2)=======N=======(答案3)=======*tbl[j+1].vp=========或=========*tbl[ j + 1 ].vp=======(答案4)=======m=k四、程序改错共2题(共计20分)第1题(10.0分)题号:139/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:下题是一段有关结构体变量传递的程序.------------------------------------------------------*/#include <stdio.h>struct student{int x;char c;} a;f(struct student b){b.x=20;/**********FOUND**********/b.c=y;printf("%d,%c",b.x,b.c);}main(){a.x=3;/**********FOUND**********/a.c='a'f(a);/**********FOUND**********/printf("%d,%c",a.x,b.c);}答案:=======(答案1)=======b.c='y';=======(答案2)=======a.c='a';=======(答案3)=======printf("%d,%c",a.x,a.c);第2题(10.0分)题号:217/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:用指针作函数参数,编程序求一维数组中的最大和最小的元素值.------------------------------------------------------*/#include <stdio.h>#define N 10/***********FOUND***********/void maxmin(int arr[ ],int *pt1, *pt2, n){int i;/***********FOUND***********/*pt1=*pt2=&arr[0];for(i=1;i<n;i++){/***********FOUND***********/if(arr[i]<*pt1) *pt1=arr[i];if(arr[i]<*pt2) *pt2=arr[i];}}main( ){int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;/***********FOUND***********/*p1=&a;*p2=&b;maxmin(array,p1,p2,N);printf("max=%d,min=%d",a,b);}答案:=======(答案1)=======void maxmin(int arr[ ],int *pt1,int *pt2,int n)=========或=========maxmin(int arr[ ],int *pt1,int *pt2,int n)=========或=========void maxmin(int *arr,int *pt1,int *pt2,int n)=======(答案2)=======*pt1=*pt2=arr[0];=========或=========*pt1=*pt2=*(arr+0);=========或=========*pt2=*pt1=arr[0];=======(答案3)=======if(arr[i]>*pt1) *pt1=arr[i];=========或=========if(*(arr+i)>*pt1) *pt1=arr[i];=========或=========if(*pt1<*(arr+i)) *pt1=arr[i];=========或=========if(*pt1<arr[i]) *pt1=arr[i];=======(答案4)=======p1=&a;p2=&b;五、程序设计共1题(共计10分)第1题(10.0分)题号:226/*------------------------------------------------ 【程序设计】--------------------------------------------------功能:编写函数实现两个数据的交换,在主函数中输入任意三个数据,调用函数对这三个数据从大到小排序。