第九章 结构体与共用体
C语言各章节单元测试题及答案——结构体与共用体
第9章结构体与共用体9.1典型考试题剖析9.1.1选择题【例1】若指针p已经正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是。
A) p=2*(int *)malloc(sizeof(int)); B) p=(int*)malloc(2*sizeof(int));C) p=(int *)malloc(2*2); D) p=(int*)calloc(2,sizeof(int));✧考点:动态存储分配函数。
✧分析:根据动态存储分配函数malloc和calloc的函数原型可以知道,calloc函数的调用形式为:void * calloc(unsigned n,unsigned size);表示在动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配域起始地址的指针,因此答案D是正确的。
malloc函数的调用形式为:void * malloc(unsigned int size);表示是在内存的动态存储区分配一个长度为size的连续空间,并返回一个指向分配域起始地址的指针,答案B和C中malloc的参数分别为:2*(sizeof(int))和2*2,都是整型数,因此调用形式正确。
答案A中(int *)malloc(sizeof(int))的返回值为一个地址值,将地址的值乘以2是没有意义的。
✧答案:A【例2】若有以下说明和定义:struct test{ int m1; char m2; float m3;union uu{ char u1[5]; int u2[2]; }ua;}myaa;则sizeof(struct test)的值是。
A) 12 B) 16 C) 14 D) 9✧考点:结构体类型和共用体类型所占内存的字节数。
✧分析:sizeof(struct test)的功能是求结构体类型test所占用的内存字节数。
它应该等于结构体每个成员所占的字节数之和。
m1为int型,占2字节,m2为char型,占1字节,m3为float型,占4字节,接下来是一个共用体类型uu,共用体所占的字节数应该等于成员中最长者所占的字节数,u1占5字节,u2占4字节,那么该共用体类型应该占用5字节,所以2+1+4+5=12。
第九章 结构体和共用体
– 【例9.5】用指向结构体变量的指针变量引用结构体变量
14
• (2)结构体数组的指针
– 结构体指针具有同其他类型指针一样的特征和使用方 法。结构体指针变量也可以指向结构体数组。同样结 构体指针加减运算也遵照指针计算规则。例如,结构 体指针变量加1的结果是指向结构体数组的下一个元素。 结构体指针变量的地址值的增量取决于所指向的结构 体类型变量所占存储空间的字节数。 – 【例9.6】有4名学生,每个学生的属性包括学号、姓名、 成绩,要求通过指针方法找出成绩最高者的姓名和成 绩。 – 程序设计分析:将学生信息存入数组中,通过指针依 次访问每一个学生信息,比较其分数,从而求出获得 最高分学生在数组中的位置。
– 在结构体变量定义之后对结构体变量赋值时可 以采用各成员赋值,用输入语句或赋值语句来 完成。 – 【例9.2】在定义后对结构体变量赋初值。 – 【例9.3】有两条记录,记录包括数量(num)和 价钱(price),编写一程序完成总价钱的计算。
11
9.2 结构体数组与结构体指针
9.2.1结构体数组
5
• ④结构体类型的定义只说明了该类型的构成形式,系统并 不为其分配内存空间,编译系统仅给变量分配内存空间 • ⑤结构体成员的类型也可以是另外一个结构体类型。如: 1. struct date 2. { int year; 3. int month; 4. int day; 5. }; 6. struct student 7. { 8. int num; 9. char name[20]; 10. char sex; 11. struct date birthday; 12. int score[5]; 13.}; • 结构体成员的类型如果是另外一个结构体类型,同样必须 遵守先定义后使用的原则。如上例中,先定义struct date类 6 型,再定义struct student类型。
结构体与共用体
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) 枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用逗号,隔开。
结构体和共用体
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};
C语言第9章结构体、共用体、枚举
结构体变量.成员
struct date { int year;
int month; int day;
“.”是成员运算符, 优先级最高
printf("%d,%d,%d",birth);
printf("%d,%d,%d",birth.year,
}; struct date birth;
birth.month,birth.day);
scanf("%f",&student2.score[2])7; 8
student2
结构变量的整体赋值 student3 = student2;
02 Zhang Zi Liang 88 78
student3
02 Zhang Zi Liang 88 78
湖南工业大学计算机与通信学院
例9-1学生的基本信息包括学号、姓名、3门成绩、平均分、总分。输入一 个学生的前3项基本信息,计算平均分和总分并输出。
湖南工业大学计算机与通信学院
9.1 问题的提出
又如,在学生信息管理系统中填 加个属性:是否是中共党员,如 果不是属性的值为0(int),如
果是属性的值为入党的时间 (char)。在某一时间,属性只有 一种值,而且数据类型不同,这 种情况用什么数据类型描述呢?
对于这种应用,C语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类
第9章 结构体与共用体 教学PPT
9.1 结构体类型和结构体变量
• 9.1.2 结构体变量的定义
− 上个小节只是定义了结构体类型,它相当于一个模型,其中并无具体数 据,系统也不会为它分配实际的内存空间。为了能在程序中使用结构体 类型的数据,应该定义结构体类型的变量,并在其中存放具体的数据。
1.先定义结构体类型,再定义结构体变量 2.在定义结构体类型的同时定义结构体变量 3.直接定义结构体变量
9.7 进阶案例
• 求学生平均成绩
− 学习完了结构体与共用体的相关知识,接下来通过一个计算平均成绩 的案例来加深对结构体的理解,具体需求如下:
• 一个小组中有3个学生,每个学生修4门课程(三个学生修的课程 相同)
• 在程序中输入这3个同学的4门课程成绩,程序能自动计算出这4门 课程的小组平均成绩。
− 结构体变量作为函数参数的用法与普通变量类似,都需要保证调用函 数的实参类型和被调用函数的形参类型相同。结构体变量作函数参数 时,也是值传递,被调函数中改变结构体成员变量的值,主调函数中 不受影响。
9.4 结构体类型数据 在函数间的传递
• 9.4.2 结构体数组作为函数参数
− 函数间不仅可以传递一般的结构体变量,还可以传递结构体数组。接 下来,通过一个案例来演示如何使用结构体数组作为函数参数传递数 据,如例9-9所示。
结构体是一种构造数据类型,把不同类型的数据整 合在一起,每一个数据都称为该结构体类型的成员。
9.1 结构体类型和结构体变量
• 9.1.1 结构体类型定义
− 在程序设计中,使用结构体类型时,首先要对结构体类型的组成进 行描述,结构体类型的定义方式如下:
struct 结构体类型名称 {
数据类型 成员名1; 数据类型 成员名2; … 数据类型 成员名n; };
《C语言程序设计与数据结构》课件第09章结构体与共用体
C语言程序设计与数据结构
C编译程序按照每个成员在结构体中声明的顺 序一一对应赋值,不可以跳过前面的成员直接给后 面的成员赋值,但是可以只给前面若干成员赋值, 后面没有赋值的成员由系统赋予默认值。
C语言程序设计与数据结构
3.结构体变量的引用 (1) 一般结构体变量的引用 一般结构体变量的引用是通过成员运算符“.”来实 现的,形式如下: 结构体变量名.成员名
学习重点: 结构体的概念; 结构体成员的引用。
C语言程序设计与数据结构
结构体概念的引入 (为什么需要结构体?)
C语言程序设计与数据结构
已经学习过的数据类型: 整形、实型、字符型 ,另外还有数组。 问题: 以上数据类型和数组是否完全满足编程需要? (例如:如何定义一个工人变量?)
C语言程序设计与数据结构
C语言程序设计与数据结构
上述五个数据项组成了工人的整体,这就是一 个结构体类型的数据,我们可以给这个数据命名为 worker,只要是worker类型的数据,都包括这五个 数据项。
C语言程序设计与数据结构
9.1 结构体类型的说明
C语言程序设计与数据结构
结构体类型是包含若干个相同或不同数据类型数 据项的集合,我们把这些数据项称之为结构体成员, 声明结构体类型的一般形式为: struct 结构体标识名 { 数据类型名1 结构体成员名表1; 数据类型名2 结构体成员名表2; ..... 数据类型名n 结构体成员名表n; };
C语言程序设计与数据结构
与同一类型的普通变量一样,结构体变量中的各个成 员也可以进行相应的各种运算,如: worker1.sex =„F‟; worker1. age++; worker1.salary=3000f;
第九章 结构体和共用体
• (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
第9章 结构体、共用体和枚举类型
9.1 结构体类型与结构体变量 9.2 结构体数组 9.3 向函数传递结构体型数据 9.4 链表 9.5 共用体 9.6 枚举类型 9.7 用户自定义类型
9.1 结构体类型与结构体变量
• 结构体类型的定义
–概述:
• 建立单链表的主要步骤为:
– 生成只含有头结点的空链表; – 然后读取数据信息,生成新结点,将数据存放于新结点中, 插入新结点到单链表中 – 重复第二步,直到输入结束。 根据新结点插入到链表的位置的不同,建立链表的方式, 分为在表尾插入的方法和在表头插入的方法。 •表尾插入: 例9.6 •表头插入: 例9.7
• 共用体变量的定义
–用已定义的共用体类型去定义共用体变量 –定义共用体类型的同时定义变量: –定义无名共用体类型的同时定义变量:
• 共用体变量的引用
–引用方式:共用体变量名.成员名 共用体变量名. 共用体变量名 –说明: 对于共用体变量,只能引用它的成员,而不能引用整个 共用体变量。若共用体的成员是构造类型的,则需要逐级引 用至最低级的成员。 –能通过定义指向共用体的指针变量来引用共用体变量。
在实际应用中,一组相关的数据可能是不同类型的。C语 言提供了包含不同类型成员的类型来定义这样的数据,这 种类型就是结构体类型 结构体类型。 结构体类型
– 定义形式:
struct 结构体名 类型名1 成员名1 {类型名1 成员名1; 类型名2 成员名2 类型名2 成员名2; …… 类型名n 成员名n 类型名n 成员名n; };
• 举例
例9.11 上一页
9.6 枚举类型
• 枚举类型的定义–定义来自式:enum 枚举类型名{枚举常量1,枚举常量2,……,枚举常量n}; •
c语言9结构体与共用体
c语言9结构体与共用体九、结构体与共用体(一) 选择题1、C语言结构体类型变量在程序执行期间_________。
A.所有成员一直驻留在内存中B.只有一个成员驻留在内存中C.部分成员驻留在内存中D.没有成员驻留在内存中2、下面程序的运行结果是_________。
main(){struct cmplx{ int x;int y;}cnum[2]={1,3,2,7};printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}A.0 B.1 C.3 D.63、设有如下定义:struct sk{int n;float x;}data ,*p;若要使p指向data中的n域,正确的赋值语句是_________。
A.p=&data.nB.*p=data.n;C.p=(struct sk *)&data.nD.p=(struct sk *)data.n4、以下对结构体变量stu1中成员age的非法引用是_________。
struct student{int age;int num;}stu1,*p;p=&stu1A.stu1.ageB.student.ageC.p->ageD.(*p).age5、下面对typedef的叙述中不正确的是_________。
A.用typedef可以定义各种类型名,但不能用来定义变量B.用typedef可以增加新类型C.用typedef只是将已存在的类型用一个新的标识符来代表D.使用typedef有利于程序的通用和移植6、以下scanf函数调用语句中对结构体变量成员的不正确引用是_________。
struct pupil{char name[20];int age;int sex;}pup[5],*p;p=pup;A.scanf("%s",pup[0].name);B.scanf("%d",&pup[0].age);C.scanf("%d",&(p->sex));D.scanf("%d",p->age);7、若有以下说明和定义union dt{int a;char b;double c;}data;以下叙述中错误的是_________。
第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;它的作用与前面定义的相同。
C语言程序设计实例教程第2版习题答案作者李红第9章结构体和共用体.doc
9.4课后习题9.4.1项目练习一.练习目的1.进一步巩固结构体类型和共用体类型的定义与引川2.进一步复习链表的建立过程3.进一步巩固枚举类型的定义与枚举元索的引用方法二.练习内容1.用结构体变量表示平面上的一个点(横坐标和纵坐标),输入两个点,求两点Z间的距离。
#include "stdio.h"include "math.h"struct pin{float x;float y;}a,b;main(){printfC*请输入a点的横纵坐标:“);scanf("%f%f"/&a.x,&a.y);printfC'Xn");printf("请输入b点的横纵坐标scanf(,,%f%f"/&b.x,&b.y);printf("\n n);printff"输出a、b 两点之间的距离是:%f",sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)));getch();}2.16个同学围成一-圈,从笫1个人开始按1、2、3的顺序报号,凡报到3者退出圈子。
找出最后昭在圈子中的人原来的序号。
ttinclude "stdio.h"#include "stdlib.h"#define LEN sizeof(struct game)struct game{int num;struct game *next;};struct game *creat(){ struct game *head,*p;head=p=(struct game *) malloc(LEN);p->num=l;int i=2;while(i<=16){ p・>next=(struct game *) malloc(LEN);p->next-:>nu m=i;i++;p=p->n ext; }p->next=head; return(head);} struct game *delete(struct game *head) { struct game*pl=head,*p2=head,*x; int k=l;while(pl->next!=pl) {if(k==3) {x=pl; pl=pl->next;p2・>n ext=pl; free(x); x=NULL; k=0;} else {P2=pl; pl=pl->next;}pl->next=NULL;return(pl);}void print(struct game *head){ struct game *p;p=head;while(p!=NULL) {printf("%d\t",p->num);p=p->n ext;}printfCAn");}main(){ struct game *pt,*p;pt=creat();p=delete(pt);print(p);free(p);getch();}3.建立一个链表,每个结点包含的成员为:职工号、工资。
C语言--第九章 结构体与共用体
free(pa);
h
19
3. 链表 链表概念:同一类型的结构体变量连接到一起,构成一个链, 各个结构体变量即为链表中的结点。 (1) 静态链表 所有结点都是在程序中定义的,不是临时开辟的,也不能用完后 释放,这种链表称为”静态链表”. 例如:
struct link
{
char ch;
struct link *p;
/* bk[0] bk[1] 3. 结构体指针初始化
bk[2] */
结构体类型数据的指针与其它类型数据的指针初始化相同
例如:struct stu
std,pers[3],*psd1=&std,*psd2=pers,(*p)[3]=&pers;
h
6
9.1.4 结构体类型数据的引用
1. 结构体成员的引用 若已定义了一个结构体变量和该类型的指针变量,并且该指针
p=&t; f(p); } 程序运行结果为:
C language 85
h
13
4. 结构体类型的函数 例9.5 找出成绩最高的学生记录,学生记录由学号和成绩组 成。
#include “stdio.h”
#define N 5
struct stu
{
char num[5];
float s;
};
struct stu fun(struct stu a[])
f(t); } 程序运行结果为:
C language 85
h
12
3. 传递结构体地址 形参结构体指针变量=实参结构体指针
例9.4 #include “stdio.h” struct ST
{ char str[20];int i;}; void f(struct ST *x) { printf(“%s\n%d\n”,x->str,x->i);} main() { struct ST t={“C language”,85},*p;
C语言程序设计教程第9章 结构体共用体PPT课件
2020/7/30
10
举例:
定义结构体: struct stu
{ char num[20]; char name[20]; char sex; float score;
}; 声明结构体变量: struct stu student1, student2;
2020/7/30
11
② 声明结构体类型的同时定义结构体 变量
第9章 结构体、共用体
9.1 结构体类型概述
9.2 结构体类型变量的定义和引用
9.3 结构体数组
9.4 结构体与指针
9.5 结构体与函数
9.6 链表的基本操作
9.7 共用体类型数据的定义和引用
9.9 位运算和位段
9.10 自定义类型(typedef)
9.11 常见错误及改正方法
2020/7/30
1
整体 概述
struct 结构体名 {
成员表列 }变量名表列;
如: struct stu { char num[20];
char name[20]; char sex; float score; } student1, student2
2020/7/30
12
③ 直接定义结构体类型变量
struct { 成员表列 }变量名表列; 这种定义方法没有出 现结构体名,只能定义 变量一次。
表中,通常包括学在生C语的言中学称号为结、构姓体类名型、性别、年
龄、姓成名绩、年家龄庭性地别址民等族项文目化。程度数组住只址能按电序话号组码 织多字符个数同组 类整型型的字数符据字,符显然整我型 们不字符能数用组 一长个整数型
2020/7/30
4
组来存放这一组数据。
9.1.1 结构体类型定义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九章结构体与共用体一、选择题1.在说明一个结构体变量时系统分配给它的存储空间是。
(0级)A)该结构体中第一个成员所需存储空间B)该结构体中最后一个成员所需存储空间C)该结构体中占用最大存储空间的成员所需存储空间D)该结构体中所有成员所需存储空间的总和2.若有以下说明和语句:struct worker{ int no; char ﹡name; }work, ﹡p=&work;则以下引用方式不正确的是。
(1级)A) work.no B) (﹡p).no C) p->no D)work->no3.有如下定义:struct date { int year, month, day; };struct worklist { char name[20]; char sex;struct date birthday; }person;对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。
(1级)A) year=1958 B) birthday.year=1958C) person.birthday.year=1958 D) person.year=19584.以下对结构体类型变量的定义中不正确的是。
(1级)A)#define STUDENT struct student B) struct studentSTUDENT { int num;{ int num; float age;float age; }std1; }std1;C) struct D) struct{ int num; { int num;float age; float age; } student;}std1; struct student std1;5.设有以下说明语句struct stu{ int a; float b; }stutype;则下面的叙述不正确的是。
(1级)A)struct是结构体类型的关键字B)struct stu是用户定义的结构体类型C)stutype是用户定义的结构体类型名D)a和b都是结构体成员名6.C语言结构体类型变量在程序执行期间。
(0级)A)所有成员一直驻留在内存中B)只有一个成员主留在内存中C)部分成员驻留在内存中D)没有成员驻留在内存中7.以下程序的运行结果是。
(1级)# include <stdio.h>main( ){ struct date{ int year, month, day; }today;printf(“%d\n”,sizeof(struct date)); }A) 6 B) 8 C) 10 D)128.有如下定义struct person{char name[9]; int age;};stru ct person class[10]={“Johu”, 17,“Paul”, 19“Mary”, 18,“Adam 16,};根据上述定义,能输出字母M的语句是。
(1级)A)prinft(“%c\n”,class[3].mane);B)pfintf(“%c\n”,class[3].name[1]);C)prinft(“%c\n”,class[2].name[1]);D)printf(“%^c\n”,class[2].name[0]);9.设有如下定义struct ss{ char name[10];int age;char sex;} std[3],* p=std;下面各输入语句中错误的是。
(1级)A) scanf("%d",&(*p).age);B) scanf("%s",&);C) scanf("%c",&std[0].sex);D) scanf("%c",&(p->sex))10.设有以下说明语句,则下面的叙述中不正确的是。
(1级)struct ex {int x ; float y; char z ;} example;A) struct结构体类型的关键字B) example是结构体类型名C) x,y,z都是结构体成员名D) struct ex是结构体类型11.若程序中有下面的说明和定义:struct stt{ int x;char b;}struct stt a1,a2;则会发生的情况是。
(1级)A)程序将顺利编译、连接、执行。
B)编译出错。
C)能顺利通过编译、连接,但不能执行。
D)能顺利通过编译,但连接出错。
12.已知教师记录定义为:struct student{ int no;char name[30];struct{ unsigned int year;unsigned int month;unsigned int day;}birthday;} stu;struct student *t = &stu;若要把变量t中的生日赋值为“1980年5月1日”,则正确的赋值方式为。
(1级)A) year = 1980; B) t.year = 1980;month = 5; t.month = 5;day = 1; t.day = 1;C) t.birthday.year = 1980; D) t-> birthday.year = 1980;t.birthday.month = 5; t-> birthday.month = 5;t.birthday.day = 1; t-> birthday.day = 1;13.以下结构类型可用来构造链表的是。
(1级)A)struct aa{ int a;int * b;};B)struct bb{ int a;bb * b;};C)struct cc{ int * a;cc b;};D)struct dd{ int * a;aa b;};14.以下程序的输出结果是。
(2级)amovep(int *p, int a[3][3],int n){ int i, j;for( i=0;i<n;i++)for(j=0;j<n;j++){ *p=a[i][j];p++; }}main(){ int *p,a[3][3]={{1,3,5},{2,4,6}};p=(int *)malloc(100);amovep(p,a,3);printf("%d %d \n",p[2],p[5]);free(p);}A)56 B)25 C)34 D) 程序错误15.以下程序的输出结果是。
(2级)struct HAR{ int x, y; struct HAR *p;} h[2];main(){ h[0].x=1;h[0].y=2;h[1].x=3;h[1].y=4;h[0].p=&h[1].x;h[1].p=&h[0].x;printf("%d %d \n",(h[0].p)->x,(h[1].p)->y);}A)12 B)23 C)14 D)32二、填空题1.有如下定义:(1级)struct {int x; int y; }s[2]={{1,2},{3,4}}, ﹡p=s;则:表达式++p->x 的结果是。
表达式++p->x 的结果是。
2.若有定义:(2级)struct num {int a; int b; float f; }n={1, 3, 5.0}};struct num ﹡pn=&n;则表达式pn->b/n.a﹡++pn->b的值是,表达式(﹡pn).a+pn->f的值是。
3.若要使指针p指向一个double类型的动态存储单元,请填空。
(1级)p= malloc(sizeof(double));4.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是。
(1级)Struct stud{ char num[6];int s[4];double ave;} a,*p;三、程序填空题1.结构数组中存有三人的姓名和年龄,以下程序输出三人中最年长者的姓名和年龄。
请填空。
(1级)static struct man{ char name[20]; int age; }person[ ]={ “li-ming”,18, “wang-hua”,19,”zhang-ping”,20};main( ){struct man *p,*q; int old=0; p=person; for( ; (1))if(old<p->age) {q=p; (2);}printf(“%s %d”, (3)); }2.以下程序段的功能是统计链表中结点的个数,其中first为指向第一个结点的指针(链表不带头结点)。
请填空。
(1级)struct link{char data; struct link *next; };……struct link * p, * first; int c=0; p=first;while ( (1)) { (2); p= (3); }3.已知head 指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next),数据域为整型。
以下函数求出链表中所有链结点数据域的和值,作为函数值返回。
请填空。
(2级)struct link{int data; struct link *next; };main( ){ struct link *head;...sum(head);...}sum( (1)){ struct link *p; int s=0;p=head->next;while(p) {s+= (2); p= (3); }return(s);}4.已知head指向单链表的第一个结点,以下函数完成往降序单向链表中插入一个结点,插入后链表仍有序。
请填空。
(2级)# include <stdio.h>struct student{int info; struct student *link; };struct student *insert(struct student * head, struct student * stud){ struct student * p0, * p1, * p2; p1=head; p0=stud;if(head= =NULL) {head=p0; p0->link=NULL;}else while(p0->info<p1->info)&&(p1->link!=NULL)){p2=p1; p1=p1->link; }if(p0->info>=p1->info) { if(head= =p1) { (1); head=p0; }else {p2->link=p0; (2); }}else {p1->link=p0; (3); } return(head);}四、读程序写结果题1.以下程序的运行结果是。