一、思考题
1.简答题
(1)比较结构体与数组的异同。
(2)若有定义
写出引用结构变量dd的成员dd.day的其他两种描述形式。
2.读程序片段写输出结果
(1)程序片段
写出此程序片段的输出结果。
(2)程序片段
写出此程序片段的输出结果。
(3)程序片段
写出此程序片段的输出结果。
(4)程序片段
写出此程序片段的输出结果。
二、练习题
1.选择题
(1)若有如下说明,则叙述是正确的是( )。
A.结构体变量a与结构体成员a同名,定义是非法的
B.程序只在执行到该定义时才为结构体st分配存储单元
C.程序运行时为结构体st分配6个字节存储单元
D.类型名st可以通过extern关键字提前引用(即引用在前,说明在后)
(2)设有如下定义:
则以下对data中的a域引用的正确引用是( )。
A.(*p).data.a B.(*p).a
C.p->data.a D.p.data.a
(3)有以下结构体说明、变量定义和赋值语句
则以下scanf函数调用语句中错误引用结构体变量成员的是( )。
A.scanf("%s",s[0].name); B.scanf("%d",&s[0].age);
C.scanf("%c",&(p->sex)); D.scanf("%d",p->age);
(4)有以下结构体说明和变量定义,如图7-3所示:
图7-3
现要将q所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作的语句是( )。
A.p->next=q->next; B.p->next=p->next->next;
C.p->next=r; D.p=q
(5)若有以下说明和定义
以下叙述中错误的是( )。
A.data的每个成员起始地址都相同
B.变量data所占的内存字节数与成员c所占字节数相等
C.程序段data.a=5;printf("%f\n",data.c);输出结果为5.000000
D.data可以作为函数的实参
(6)若有以下定义和语句
则以下语句正确的是( )。
A.x=10.5; B.x.c=66;
C.y=x; D.printf("%d\n",x);
(7)若有以下定义,则变量a所占的内存字节数是( )。
A.4 B.5
C.6 D.8
(8)以下对枚举类型名的定义中正确的是( )。
A.enum a={one,two,three};
B.enum a{one=9,two=-1,three};
C.enum a={"one","two","three"};
D.enum a{"one","two","three"};
(9)以下叙述中错误的是( )。
A.可以通过typedef增加新的类型
B.可以用typedef将已存在的类型用新的名字来代表
C.用typedef定义新的类型名后,原有类型名仍有效
D.用typedef可以为各种类型起别名,但不能为变量起别名
(10)以下对结构体类型变量td的定义中,错误的是( )。
2.阅读程序题
(1)以下程序执行后的输出结果是( )。
(2)以下程序执行后的输出结果是( )。
(3)以下程序执行后的输出结果是( )。
(4)以下程序执行后的输出结果是( )。
(5)以下程序执行后的输出结果是( )。
(6)以下程序执行后的输出结果是( )。
3.编程题
(1)某单位进行选举,共10位候选人,编写一个统计每人得票数的程序,要求每个人的信息包含候选人姓名和获得总票数。
(2)期末考试结束,已知某班学生共参加3门课程考试,要求计算该班学生的总成绩,并请将每位学生信息(包括总成绩)按总成绩降序排列输出。
(3)13个学生围成一个圈子,从第一个同学开始顺序报号1、2、3。凡报到3者退出圈子。找出最后留在圈子中的人原来的序号,请用链表实现。
(4)有两个链表a和b,设结点中包含学号和姓名,要求从a链表中删去与b链表中有相同学号的那些结点,并将整理后的a链表与b链表按学号顺序合并为一个链表。
三、测试题
1.选择题
(1)设有以下说明语句
则下面的叙述不正确的是( )。
A.struct是结构体类型的关键字
B.struct stu是用户定义的结构体类型
C.stutype是用户定义的结构体类型名
D.a和b都是结构体成员名
(2)若以下定义:
且变量a和b之间已有如图7-4所示的链表结构:
图7-4 链表结构
指针p指向变量a,q指向变量c。则能够把c插入到a和b 之间并形成新的链表的语句组是( )。
A.a.next = c; c.next = b;
B.p.next = q; q.next = p.next;
C.p->next = &c; q->next = p->next;
D.(*p).next = q; (*q).next = &b;
(3)已知:
则sizeof(test)的值是( )。
A.8 B.1
C.4 D.13
(4)以下正确的描述是( )。(www.xing528.com)
A.对共用体初始化时,只能对第一个成员进行初始化,每一瞬时起作用的成员是最后一次为其赋值的成员
B.结构体可以比较,但不能将结构体类型作为函数返回值类型
C.函数定义可以嵌套
D.关键字typedef用于定义一种新的数据类型
设有如下定义:
(5)若要使P指向data中的a域,正确的赋值语句是( )。
A.p = &a;
B.p = data.a;
C.p = &data.a;
D.*p = data.a;
(6)以下对结构体类型变量的定义中,不正确的是( )。
(7)有如下程序段:
程序的输出结果是( )。
A.13 B.14
C.208 D.209
(8)设有以下语句:
则z的二进制值是( )。
A.00010100 B.00011011
C.00011100 D.00011000
(9)当说明一个结构体变量时系统分配给它的内存是( )。
A.各成员所需内存量的总和
B.结构中第一个成员所需内存量
C.成员中占内存量最大者所需的容量
D.结构中最后一个成员所需内存量
(10)在位运算中,操作数左移一位,其结果相当于( )。
A.操作数乘以2
B.操作数除以2
C.操作数除以4
D.操作数乘以4
(11)有如下程序段:
程序的输出结果是( )。
A.10 20 20 B.50 60 21
C.51 60 21 D.60 70 31
(12)有下列运算符:~,&,<<,>>, |,^,则运算的优先顺序是( )。
A.~,&, |,<<,>>,^ B.~,<<,>>,&, |,^
C.~,<<,>>,^, &,| D.~,<<,>>,&,^, |
(13)若有以下程序段:
以下选项中值为2的是( )。
A.*(p++)->next
B.*(++p)->next
C.(*p).next
D.(p++)->next
(14)以下叙述中错误的是( )。
A.函数可以返回指向结构体变量的指针
B.只要类型相同,结构体变量间可以整体赋值
C.函数的返回值类型不能是结构体类型
D.可以通过指针变量来访问结构体变量的任何成员
(15)若s是int类型变量,则以下语句的输出结果是( )。
s = 32;
s ^= 32;
printf(“%d”, s);
A.-1 B.32
C.1 D.0
(16)以下叙述中错误的是( )。
A.typedef的作用是用一个新的标识符来代表已存在的类型名
B.typedef说明的新类型名必须使用大写字母,否则会出编译错误
C.可以用typedef说明的新类型名来定义变量
D.用typedef可以说明一种新的类型名
(17)有以下程序
输出结果是( )。
A.20 B.11
C.10 D.21
(18)若有以下程序段:
输出结果是( )。
A.3 B.5
C.6 D.4
(19)若有以下的说明和定义:
则以下叙述中正确的是( )。
A.语句*p->s++;等价于(*p)->s++;
B.语句++p->a;的效果是使p增1
C.(p++)->a与p++->a都是合法的表达式,但二者不等价
D.语句++p->a;的效果是使成员a增1
(20)若有以下程序段:
以下表达式中,值为11的是( )。
A.*pt->y B.(pt++)->x
C.pt->x D.++pt->x
2.填空题
(1)下面程序的运行结果是:( )。
(2)下面程序的运行结果是:( )。
(3)下面程序的运行结果是:( )。
(4)下面程序的运行结果是:( )。
(5)下面程序的运行结果是:( )。
(6)下面程序的运行结果是:( )。
(7)下面程序的运行结果是:( )。
(8)下面程序的运行结果是:( )。
(9)函数min的功能是:在带有头结点的单向链表中,查找结点数据域最小的值,作函数值返回。请补全程序。
(10)函数initial创建一个不带头结点环形链表,第i个结点的数据域值为i,函数返回链表的头指针。请补全程序。
3.编程题
(1)staff结构体定义如下:
结构体数组st内存有某单位十位职工的姓名和年龄,试编程输出年龄最大职工的姓名和年龄。
(2)有10个学生,每个学生的信息包括学号、姓名、三门课的成绩,数据从键盘输入,并按每个学生的三门课平均成绩从高到低分别打印出这10个学生的学号、姓名及个人平均成绩。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。