结构体与共用体
第10章 结构体与共用体
第10章结构体与共用体考核知识点●结构体与共用体类型数据的定义方法和引用方法●用指针和结构体构成链表,单向链表的建立、输出、插入与删除重要考点●对结构体的声明及定义●访问结构体的成员的方法●熟悉对链表的操作10.1 用typedef说明一种新类型名C语言规定可以用typedef说明一种新的类型名,说明新类型名的语句一般形式为:typedef 类型名称标识符;其中,“类型名”一定是在此语句之前已有定义的类型标识符。
“标识符”是一个用户定义标识符,用来标识新的类型名。
typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并没有产生新的数据类型,因此,原有的类型名依然有效。
提示:声明一个新的类型名的具体步骤如下:⑴先按定义变量的方法写出定义的主体(如float a;).⑵将变量名换成新类型名(如将a换成FLO)。
⑶在最左面加上关键字typedef(如typedef FLO).⑷然后可以用新类型名去定义其他的变量(如FLO b;).10.2 结构体类型在实际工作中,当我们需要把一些不同类型,但相互之间又存在着联系的信息组合应用时,就要用到结构体。
结构体是一种看似复杂却非常灵活的构造数据类型。
在通常情况下,一个结构体类型由若干个称为成员(或称为域)的部分组成。
不同的结构体类型可根据需要由不同的成员组成。
但对于某个具体的结构体类型,其成员的数量必须固定,这一点与数组相同;但结构体中各个成员的类型可以不同,这是结构体与数组的重要区别。
例如,我们常用的“时间”可以由以下3个部分描述:小时(hour)、分(minute)、秒(second)。
它们都可以用整型数表示,可以把这3个成员组成一个整体,并给它取名为time,这就是一个简单的结构体。
声明一个结构体类型的一般形式为:struct 结构体名{成员表列};struct是C语言中的关键字,是结构体类型的标志。
“结构体名”用做结构体类型的标志,它又称“结构体标记”(structure)。
结构体和共用体
结构体和共用体数据:(1) 基本类型:整形字符型实型(2) 构造类型:数组结构体共用体理解:就是将不同类型的数据组成一个有机的整体。
一,声明结构体类型的一般形式:Struct 结构体名{成员表列;};二,定义结构体类型变量的方法:(1)先声明结构体类型在定义变量名:Struct student{成员表列;}Struct student student1,student2;(2)在声明类型的同时定义变量:Struct 结构体名{成员表列;}变量名表列;//student1,student2;(3)直接定义结构体变量:Struct {成员表列;注:即不出现结构体名;}变量名表列;注:成员也可以说一个结构体变量;例:Struct date{Int day;Int month;Int year;}Struct student {Int num;Char name[20];Char sex;Struct date birthday;//birthday是struct date类型}student1,student2;三,结构体变量的引用:形式:结构体变量名.成员名例:对变量的是赋值:student1.num=10020;如果成员本身又是一个结构体类型,则要用如干戈成员运算符从高向低级找例:student1.birthday.month;四,结构体的初始化Struct student{Int num;Char name[20];Char sex;Float score;} a={ 10101,”hashida”,’m’,89.0};结构体数组:简单理解就是结构体变量是一个数组;Struct student{} stu[3]={{ },{ },{ } } ;指向结构体类型数据的指针例:main (){struct student{long num;char name[20];char sex;float score;} ;Struct student stu;Struct student *p;P=&stu;Stu.num=10102;strcpy(,"tongyanming");Stu.sex=’m’;Stu.score=90.0;Printf(“%ld,%s%c%f”,stu.num,,stu.sex,stu.score); Printf(“%ld%s%c%f”,(*p).num,(*p).name,(*p).sex,(*p).score); printf("%ld %s %c %f\n",p->num,p->name,p->sex,p->score); Getch();}共用体定义形式:Union 共用体名{成员表列;}变量名表列;定义共用体变量的方法:(1)union date{int I;char ch;float f;}a,b,c;(2)(2) union date{int I;char ch;float f;};Union a ,b,c;注:共用体变量所占的内存长度是最长的成员长度引用 a.i,b.f;共用体变量不能初始化;。
第12章结构体和共用体
【例】
有3个学生的信息,放在结构体数组中,要求用指针变量输出 全部学生的信息。
#include <stdio.h> struct student {int num;
char name[20]; char sex; int age; •图}9;-8
struct student stu[3]={{10101,"Li Lin",'M', 18}, {10102,"Zhang Fun",'M', 19}, {10104,"Wang Min",'F',20}};
12.2.7结构体所占内存的字节数
• struct 类型用内存字节数 = ? 【例12.2】 • 是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小 sizeof(变量或表达式) sizeof(类型)
printf("%d\n", sizeof(struct sample)); printf("%d\n", sizeof(SAMPLE));
p.year = 2000; p.month = 5; p.day = 22; }
结构体变量 作函数参数
【例12.4】
Before function call:1999/04/23 After function call:1999/04/23
struct date {
int year; int month; int day; }; void func(struct date *p) {
【例12.1】 若要从键 盘输入结 构体变量 stu1的内 容,那么 程序如何 修改?
两个地址有何不同?
结构体与共用体
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
结构体中每个成员可以是不同的 数据类型,而共用体中所有成员 必须是相同的数据类型。
结构体与共用体的区别与联系
• 使用方式:结构体中每个成员都可以单独访问和操作,而 共用体中一次只能使用其中一个成员。
结构体与共用体的区别与联系
自定义类型
结构体和共用体都是用户自定义的数据类型 ,可以根据需要组合不同的数据类型。
对于大型结构体和共用体,可以使用指针成 员来减少直接内存占用。
在跨平台编程时,要注意不同平台下的内存 对齐规则可能不同,需要进行相应的调整。
05
结构体与共用体的应用案例
案例一:使用结构体实现学生信息管理
定义学生结构体
包含学生姓名、学号、性别、年龄等字段。
创建学生信息数组
根据学生数量,创建相应大小的学生信息数组。
访问速度较慢
访问结构体的成员变量时,需要通过 指针或引用等方式进行间接访问,相 对于直接访问基本数据类型,速度较 慢。
结构体与共用体的优缺点分析
内存占用小
共用体中的所有成员变量共享同一块内存空间,因此相对于 结构体,共用体的内存占用较小。
访问速度快
访问共用体的成员变量时,可以直接通过内存地址进行访问 ,速度较快。
封装性好
结构体可以将多个变量封装在一起,形成一个自定义的数据类型,方便数据的 处理和管理。
结构体与共用体的优缺点分析
• 可扩展性强:结构体可以方便地添加或删除成员 变量,以适应不同的应用场景和需求。
结构体与共用体的优缺点分析
内存占用较大
由于结构体中每个成员变量都占用独 立的内存空间,因此相对于基本数据 类型,结构体的内存占用较大。
赋值给共用体变量
可以给共用体的任何一个成员赋值,如`data.f = 3.14;`,表示将 `data`的`f`成员赋值为3.14。
结构体、共用体和枚举型
优缺点比较
优点
节省内存空间;可以方便地处理多种数据类型。
缺点
由于所有成员共享同一块内存空间,因此每次只能使用其中一个成员;使用不 当可能导致数据丢失或混乱。
优缺点比较
优点
增加了代码的可读性和可维护性;提供了类型检查,减少了 错误的可能性。
缺点
相对于整数类型,枚举型的处理速度较慢;占用内存空间相 对较大。
枚举型
枚举型通常用于定义一组命名的 整数值,这些值可以增加代码的 可读性和可维护性。例如,可以 使用枚举型来定义一周中的天数 或一个月中的月份。
优缺点比较
优点
可以方便地组合和管理多个不同类型 的数据;提供了数据的封装和隐藏, 增加了代码的安全性;可以方便地传 递和返回多个值。
缺点
相对于基本数据类型,结构体的处理 速度较慢;占用内存空间相对较大。
共用体在节省内存空间中的应用
节省存储空间
共用体允许在相同的内存位置存储不同的数据类型,通过共享内 存空间来节省存储空间。
实现多态性
共用体可以在不同的上下文中表示不同的数据类型,从而实现一 种多态性的效果。
处理异构数据
当需要处理不同类型的数据时,可以使用共用体来统一表示这些 数据,简化数据处理的过程。
实现多态性
通过共用体,可以在相同 的内存空间中存储不同类 型的数据,从而实现多态 性。
方便数据处理
在某些情况下,使用共用 体可以更方便地处理数据。
共用体的声明与定义
声明
定义
初始化
访问成员
注意事项
在C语言中,可以使用 `union`关键字来声明一 个共用体。例如: `union Data { int i; float f; char str[20]; };`
C语言程序设计——结构体和共用体(完整版)
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。
结构体与共用体小结
结构体与共用体小结结构体和共用体是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];};```在定义共用体后,可以使用该共用体类型声明变量。
第9讲 结构体和共用体
第九讲结构体和共用体9.1 概述迄今为止,我们已经介绍了基本类型(或称简单类型)的变量(如整型、实型、字符型变量等),也介绍了一种构造类型数据——数组,数组中的各元素是属于同一个类型的。
但是只有这些数据型是不够的。
有时需要将不同类型的数据组合成一个有机的整体,以便于引用。
这些组合在一个整体中的数据是互相联系的。
例如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项。
这些项都与某一学生相联系,如图。
应当把它们组织成一个组合项,在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。
C语言提供了这样一种数据结构,它称为结构体(structure)。
它相当于其它高级语言中的“记录”。
定义的类型如下:struct student{int num;char name[20];char sex;int age;float score;char addr[30];};上面定义了一个结构体类型,struct student(struct是关键字,不能省略),表示这是一个“结构体类型”。
它包括num,name,age,score,addr 等不同类型的数据项。
应当注意:struct student是程序设计者自己定义的类型名。
它和系统已定义了的标准类型(如int、char、float、double 等)一样可以用来作为定义变量的类型。
定义一个结构体类型的一般形式为:struct 结构体名{成员表列};花括弧内是该结构体中的各个成员(或称分量),由它们组成一个结构体。
例如,上例中的num,name,sex等都是成员。
对各成员都应进行类型说明,即类型标识符成员名也可以把“成员表列”称为“域表”。
每一个成员称为结构体中的一个域。
成员名命名规则与变量名命名规则相同。
“结构体”这个词是根据英文单词structure译出的。
许多C语言书把structure直译为“结构”。
9.2 结构体的定义、引用和初始化一、定义结构体类型变量的方法1、先定义结构体类型再定义变量名如:struct student{int num;char name[20];char sex;int age;float score;char addr[30];};struct student student1,student2;//表示定义两个struct student 类型的变量student1和student2.2、在定义类型的同时定义变量例如:struct student{ int num;char name[2];char sex;int age;float score;char addr[30];} student1,student2;它的作用与前面定义的相同。
结构体与共用体小结
结构体与共用体小结结构体与共用体小结一,结构体得概念与定义1,结构体得定义struct结构体名{数据类型成员名1;数据类型成员名1;、。
};这里数据类型可以就是复合类型,例如又就是一个结构体类型,即嵌套;2,结构体变量得定义struct 结构体名变量名1,变量名2,,,变量名n;或:struct结构体名{数据类型成员名1;数据类型成员名1;。
、}结构体变量1,结构体变量2;或:struct{数据类型成员名1;数据类型成员名1;。
、}结构体变量1,结构体变量2;三种方式,第三种方式得话,每次要定义这个类型得结构体变量都要重复得写这一段代码;其实定义了结构体后,struct 结构体名就就是一种新得类型,上述语句就像声明变量一样;3,结构体变量得引用只能对结构体变量中得各个成员分别输出,不能对一个结构体变量作为一个整体输出;嵌套得结构体类型得引用:结构体变量名。
结构体类型成员名、内嵌结构体得成员名;4,结构体变量得初始化struct 结构体名变量名= {初始化数据};或者在定义得时候就初始化: struct结构体名{数据类型成员名1;数据类型成员名1;。
、、}变量名= {初始化数据};二,结构体数组1,结构体数组得定义举例struct stu{int stu_nu;char name[20];floatscore;};struct stu student[5];或者:struct stu{int stu_nu;char name[20];float score;}student[5];或者:struct{int stu_nu;char name[20];float score;}student[5];跟定义结构体变量得三种形式就是一样得,只不过这里每次定义得结构体变量就是一个数组;每一个student[i]都就是struct stu类型得;2,结构体数组得初始化与引用略;三,结构体与指针1,指向结构体得指针得定义,同上,也就是三种形式;struct employeesemployee1,*p1;或者:struct employees、。
共用体和结构体的区别
其中,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、结构体的定义 结构体:是指定义相应的数据结构及相应的变量。 结构体如下所示,
结构体与共用体-枚举
枚举常量是枚举类型的成员,每个枚举常量都有一个整数值与之对应,默认从0 开始,也可以显式指定。
枚举变量
枚举变量的声明
使用枚举类型名称声明枚举变量,例如`enum Color color;`。
枚举变量的赋值
枚举变量只能赋值为枚举常量列表中定义的整数 值或对应的枚举常量名称。
枚举变量的使用
嵌套共用体
嵌套共用体是一个共用体内部包含另一个共 用体或结构体的情况。
共用体变量
声明
共用体变量的声明方式与结构体 变量类似,需要使用共用体类型 名来定义变量。
访问
访问共用体变量的成员需要使用 成员访问运算符(.),且每次只 能访问一个成员。
01
02
定义
共用体变量是用来存储共用体类 型数据的变量。
03
结构体与共用体-枚举
目录
• 结构体概述 • 共用体概述 • 枚举概述 • 结构体、共用体与枚举的关系 • 结构体、共用体与枚举的应用实例 • 总结与展望
01
结构体概述
定义与特点
01
结构体是一种用户自定义的数据类型,允许将不同类型的数据 组合成一个有机的整体。
02
结构体中的数据可以是基本数据类型,也可以是其他结构体类
未来发展趋势预测
01 02
结构化数据处理
随着大数据时代的到来,处理结构化数据变得越来越重要。结构体作为 一种表示结构化数据的数据类型,将在数据处理和分析领域发挥越来越 重要的作用。
内存优化
共用体可以在相同的内存位置存储不同的数据类型,从而节省内存空间。 在内存资源紧张的情况下,共用体的使用将变得更加重要。
04
当需要提高代码的可读性和可维护性时,可以使用枚举类型来代替一 些硬编码的常量值。
- 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设有以下结构类型说明和变量定义,且sizeof(int)=2,则变量a在内存所占字节数是【1】. struct stud{ char num[6];int s[4];double ave;} a,*p;答案:=======(答案1)=======22第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:29C:27D: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,5C:1,4D: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/*------------------------------------------------【程序设计】--------------------------------------------------功能:编写函数实现两个数据的交换,在主函数中输入任意三个数据,调用函数对这三个数据从大到小排序。