第8章练习 结构体与共用体
C语言练习题1

C语言练习题1第八章结构体与共用体1练习题一、c语言基础知识1.1选择题1.以下不是c语言的特点的就是(b)。
a.语言简洁紧凑b.能够编制出功能复杂的程序c.c语言可以直接对硬件操作d.c 语言移植性好2.以下字符序列中,不容用做c语言标识符的就是(b)。
a.abc123b.no.1c._123_d._ok3.正确的c语言标识符是(a)。
a._buy_2b.2_buyc.?_buyd.buy?4.恳请挑选出可以用做c语言用户标识符的一组标识符(b)。
a.voidb.a3_b3c.ford.2adefine_123-abcdowordifcasesizeof5.以下符号中,不属于转义字符的就是(b)。
a.\\\\b.\\0xaac.\\td.\\06.不属于c语言关键字的是(d)。
a.intb.breakc.whiled.character7.就是c语言提供更多的合法关键字的就是(b)。
a.floatb.signedc.integerd.char8.以下不能定义为用户标示符的是(d)。
a.一个主程序和若干子程序共同组成b.一个或多个函数共同组成c.若干过程共同组成d.若干子程序共同组成10.c语言程序的基本单位是(c)。
a.程序行b.语句c.函数d.字符20.下列变量定义中合法的是aa.short_a=1-.le-1;b.doubleb=1+5e2.5;c.longdo=0xfdal;d.float2_and=1-e-3;9xn21.与数学式子对应的c语言表达式是(c)。
2x?1a.9*x^n/(2*x-1)b.9*x**n/(2*x-1)c.9*pow(x,n)*(1/(2*x-1))d.9*pow(n,x)/(2*x-1)第八章结构体与共用体222.若存有代数式3ab,则不正确的c语言表达式是(c)。
cda.a/c/d*b*3b.3*a*b/c/dc.3*a*b/c*dd.a*b/d/c*323.已知各变量的类型说明如下:intm=8,n,a,b;unsignedlongw=10;doublex=3.14,y=0.12;则以下符合c语言语法的表达式是(a)。
结构体与共用体相关题目练习

结构体与共用体1.说明一个结构体变量时系统分配给它的内存是A)各成员所需要内存量的总和 B)结构体中第一个成员所需内存量C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量2.C语言结构体类型变量在程序执行期间A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中C)部分成员驻留在在内存中 D)没有成员驻留在内存中3.设有以下说明语句struct stu { int a ; float b ; } stutype ;则下面的叙述不正确的是A) struct 是结构体类型的关键字 B) struct stu 是用户定义的结构体类型C) stutype 是用户定义的结构体类型名 D) a和b都是结构体成员名4.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【】。
struct stud { char num[6]; int s[4]; double ave; } a,*p;5.程序中有下面的说明和定义struct abc { int x;char y;}struct abc s1,s2;则会发生的情况是A)编译出错B)程序将顺利编译、连接、执行C)能顺利通过编译、连接、但不能执行 D)能顺利通过编译、但连接出错6.有如下定义struct person { char name[9]; int age;};struct person class[10]={ " Johu", 17,"Paul", 19,"Mary", 18,"Adam", 16};根据上述定义,能输出字母M的语句是A) prinft(" %c\n",class[3].name); B) printf(" %c\n",class[3].name[1]);C) prinft(" %c\n",class[2].name[1]); D) printf(" %c\n",class[2].name[0]);7.下面程序的输出是A)0 B)1 C)3 D)6main(){ struct cmplx { int x; int y;} cnum[2]={1,3,2,7};printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}8.下列程序的输出结果是A)5 B)6 C)7 D)8struct abc { int a, b, c; };main(){ struct abc s[2]={{1,2,3},{4,5,6}};int t;t=s[0].a+s[1].b;printf("%d \n",t);}9.有以下程序struct stu{ int num;char name[10];int age;};void fun(struct stu *p){ printf("%s\n" ,(*p).name); }main(){ struct stu students[3]={{9801,"Zhang",20} ,{9802,"Wang", 19} , {9803,"Zhao",18} };fun(students+2);}输出结果是A)Zhang B)Zhao C)Wang D)1810.设有如下定义:struct sk {int a ;float b ;}data ,*p ;若有p=&data ;,则对data中的a域的正确引用是A)(*p).data.a B)(*p).a C)p->data.a D)p.data.a11.下面程序的输出结果为int dt[4]={10 ,20 ,30 ,40} ;struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3] } ;main(){ p=aa ;printf("%d\n" , ++p->x );printf("%d\n" ,(++p)->x);printf("%d\n" , ++( *p->y));}A)10 B)50 C)51 D)6020 60 60 7020 21 21 3112.为了建立如图所示的存储结构(即每个结点含两个域, data 是数据域,next是指向结点的指针域,)请填空。
c++程序设计教程 第八章 结构体和共用体

结构体类型声明
例如,可以声明一个描述上述学生基本情况的结构体类型:
struct student
//student是结构体类型名
{ int num;
//学号
char name[20]; //姓名
unsigned int age; //年龄
char sex;
//性别,为'm'(male)或'f'(female)
2020/11/1
第8章 结构体和共用体
7
8.1 结构体
8.1.1 结构体与结构体类型的声明 C++可以允许用户定义一种新的数据类型,把属
于同一事物的若干个相关数据构成一个整体,统一 管理。这种新的数据类型可根据用户的需要具体规 定其组成形式,称为结构体类型。 结构体数据类型声明的形式如下: struct 结构体类型名 { 数据类型 成员1; 数据类型 成员2; …… …… 数据类型 成员n; };
66
78
95
87
90
……
……
令狐冲
男 1999
90 83 72 82
2 林平之
男 1999
78 92 88 78
3 岳灵珊
女 1999
89 72 98 66
4 任莹莹
女 1999
78 95 87 90
2020/11/1
今天新的内容:构造数据类型
构造数据类型:结构体和共用体 基本数据类型:整型、浮点型、双精度型、字 符型等等,都是基本类型; 构造类型:构造类型是由若干个基本类型或够 构造类型组合而成的,如数组,构造体,联合 体。 今天我们再介绍2种构造数据类型,结构体和 共用体
char name[20]; } a1, a2; 注意,用这种形式声明的结构体类型没有类型名, 不能再去定义新的变量。
2016C语言习题全集及答案:第八单元结构体和共用体

第八单元结构体和共用体一、选择题1、说明一个结构体变量时系统分配给它的内存是。
A. 各成员所需要内存量的总和B. 结构体中第一个成员所需内存量C. 成员中占内存量最大者所需的容量D. 结构中最后一个成员所需内存量2、 C 语言结构体类型变量在程序执行期间。
A. 所有成员一直驻留在内存中B. 只有一个成员驻留在内存中C. 部分成员驻留在在内存中D. 没有成员驻留在内存中3、设有以下说明语句struct stu { int a ; float b ; } stutype ;则下面的叙述不正确的是。
A. struct 是结构体类型的关键字B. struct stu 是用户定义的结构体类型C. stutype 是用户定义的结构体类型名D. a 和b 都是结构体成员名4、程序中有下面的说明和定义struct abc { int x;char y;}struct abc s1,s2;则会发生的情况是。
A. 编译出错B. 程序将顺利编译、连接、执行C. 能顺利通过编译、连接、但不能执行D. 能顺利通过编译、但连接出错5、有如下定义struct person { char name[9]; int age;};struct person class[10]={ " Johu", 17,"Paul", 19,"Mary", 18,"Adam",16};根据上述定义,能输出字母M 的语句是。
A. prinft(" %c\n",class[3].name);B. printf(" %c\n",class[3].name[1]);C. prinft(" %c\n",class[2].name[1]);D. printf(" %c\n",class[2].name[0]);6、下面程序的输出是。
C语言程序设计课件源程序及习题答案第8章结构体和共用体及其应用

1
Y 调用函数fnGetKey() iKey=fnGetKey();
N iKey==LEFT||iKey==RIGHT
Y 输出left&right
iKey==UPPER||iKey==DOWN N
Y
输出up&down
iKey==ESC N
Y 结束
小结:
1.C最初引入共用体的目的,一是节省存储空间,另外是可以 将一种类型的数据不通过显式类型转换而作为另一种类型数据 使用,如问题8.9的解决方法。
试一试 问题8.5:
修改问题8.2,要求在函数中实现计算、 比较平均分并且显示平均分数较高的学 生信息的功能。
问题8.6:
修改问题8.4,在函数中将N个学生的数据输 入并统计总分和求出最高分的学生并显示。
主函数流程图
想一想
在问题8.3的代码中,如果要求对输入 数据对输入的年、月、日进行合法性校 验,比如年是在1989-2019年之间, 月是在1-12之间,日是1-30之间, 怎么解决?如果进一步要求根据月份而 确定每月的天数,又该怎么办呢
一般的引用形式为:
数组名[下标].成员名
问题8.4:试一试
一个学习小组有N名学生,学生的信息 包含学号、姓名、语文、数学、英语三 门课的成绩,从键盘上输入N名学生的 信息,要求统计总成绩并显示总分最高 的学生信息。
解题步骤
1. 以学生的信息数据项为成员,定义结 构体类型和相应的结构体数组
2. 循环输入每个学生的信息,统计总成 绩,存储在结构体数组中
练一练
尝试编写学生管理系统,定义学生信息 的结构体类型,分别用函数实现数据输 入、数据输出、计算每个人的平均分, 进行排序和成绩插入等操作。
C语言程序设计实验结构体与共用体

实验8:结构体与共用体一、实验目的1.掌握结构体类型变量的定义和使用;2.掌握共用体的概念与使用。
二、实验内容编写程序,实现如下功能:1.定义结构体变量,用它表示考生的学号、姓名(用英文表示)以及语文、数学、外语成绩。
输入两个考生的信息和各门课成绩并比较(按总分进行高低排序;当总分相同时,依次按语、数、外的顺序排序)。
2.设有一个教师与学生通用的表格,数据项包括:姓名、年龄、职业和单位,其中“职业”一项可分为“教师”和“学生”两类;对“单位”一项,教师填入“系部名称”(用字符类型表示),学生填入“班级编号”(用整型量表示)。
编程输入人员数据,再以表格输出。
三、实验结果记录第1题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.总分不同2.总分相同的情况2.1总分完全相同2.2总分相同但语文成绩不同2.3总分相同、语文成绩相同但数学成绩不同第2题上机调试后的最终代码及上机调试结果(截图):程序代码运行结果1.正确输入2.错误输入四、实验小结:经过此次实验,我熟悉掌握了结构体的定义和使用,同时也掌握了共用体的使用。
对于程序1,基本思路是通过结构体定义变量,采用if-else语句嵌套,当总分相同且语文数学成绩均相同时就不必再进行一轮的if语句判断,因为此时两考生的英语成绩一定相同。
对于程序2,在结构体中定义了共用体,可对不同职业进行不同单位的划分。
基本思路是用malloc函数进行动态内存分配,确定要输入的样本数量,再进行数据的输入,在单位数据的输入时需要判断输入对象是学生还是老师,此时要用strcmp函数进行比较判断,输入结束后打印表格,用转义字符\t让表格更加美观,最后通过free进行内存释放。
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]是数组,数组名本身就是地址。
0第八章结构体与共用体

枚举类型【例8_7】
如果一个变量只有几种可能的值,则可声明一个枚 举类型:
enum 枚举类型名{ 枚举元素1, 枚举元素2, ……};
例:
enum WEEKDAY{sun, mon, tue, wed, thu, fri, sat}; WEEKDAY day ; day = mon ;
2020/8/3
第八章 结构体和共用体
31
枚举元素是(不重复的)整型常量,缺省时,按顺序为 每个元素指定常量值。sun为 0,mon为1
可显式为枚举元素指定常量值 enum META_COLOR { RED = 4, GREEN = 2, BLUE = 1 };
2020/8/3
第八章 结构体和共用体
32
6.7 结构类型、枚举类型与类型别名
链表
2020/8/3
第八章 结构体和共用体
4
本章主要内容
▪ 共用体(union)
▪ 联合类型的概念和定义 ▪ 联合类型变量的声明和使用
▪ 枚举(enum)
▪ 枚举类型的概念和定义 ▪ 枚举类型变量的声明和使用
2020/8/3
第八章 结构体和共用体
5
8.1 结构类型的概念、定义与使用方法
有时需要将不同类型的数据组合成一个 有机的整体,以便于引用。
};
枚举值可做判断
if (day>tue) ……
不能把整数直接赋给枚举变量
day = 2 ; day = (WEEKDAY) 2 ;
// 错误 // 正确
2020/8/3
第八章 结构体和共用体
33
8.7使用typedef定义类型别名
一般形式:
typedef 旧类型名 新类型名;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十一章习题结构体与共用体
1.以下C语言共用体类型数据的描述中,不正确的是( )
A) 共用体变量占的内存大小等于所需内存最大的成员所占的内存
B) 共用体类型可以出现在结构体类型定义中
C) 在定义共用体变量的同时允许对第一个成员的值进行初始化
D) 同一共用体中各成员的首地址不相同
2.下列对结构体类型变量定义不正确的是( )
A)struct teacher B) struct
{ int num; { int num;
int age; }teach1; int age; }teach1,teach2;
C) struct D) struct teacher
{ int num; { int num;
int age; }teacher; int age; };
struct teacher teach1; struct teacher teach1;
3.若有定义:
struct teacher
{ int num;
char name[10];
char sex;
int age;
float score;}teacher1;
则变量teacher1所占用的内存字节数是( )
A) 5 B)14 C) 19 D) 20
4.以下程序的运行结果是( )
#include <stdio.h>
union Utype
{ int i; float y; }u[2];
void main()
{ printf("sizeof(u):%d\n",sizeof(u)); }
A)2 B) 4 C) 6 D) 8
5.设有以下定义语句:
struct student
{ int num; char name[10]; float score; }wang,zhang;
则变量wang所占的内存字节数是( )
A) 14 B) 16 C)18 D) 20
6.设有如下定义语句:
union u_type
{ int i; double x; float f; };
struct str_type
{ char str[100]; union u_type u[2]; };
则语句“printf("%d",sizeof(struct str_type));”的输出结果是( )
A)100 B) 116 C) 120 D) 200
第 1 页共2 页
7.下面程序的输出结果为( )
#include <stdio.h>
void main ()
{ enum Weekday {sun=7, mon=1, tue, wed, thu, fri, sat};
enum Weekday day=sat;
printf (“%d\n”, day); }
A) 7 B) 6 C) 5 D) 4
8.对枚举类型进行定义,不正确的是( )
A) enum b{1,2,3}; B)enum a{A,B,C}; C)enum c{D=3,E,F}; D) enum d{X=0,Y=5,Z=9};
9.假定已有如下变量说明和枚举定义:
char ch;
int j, k;
enum day{sun, mon, tue, wed, thu, fri, sat};
int a[sat];
判断下列语句是否符合语法规则,结果是( )
char a; /*语句1*/
j+k=j; /*语句2*/
if(a[mon]>0) j++; /*语句3*/
A)语句2错误,其他正确 B)语句1正确,其他错误
C)语句3正确,其他错误 D) 语句1错误,其他正确
10.若有以下说明和定义
typedef int *INTEGER
INTEGER p,*q;
以下叙述正确的是( )
A) p是int型变量B) p是基类型为int的指针变量
C) q是基类型为int的指针变量D) 程序中可用INTEGER代替int类型名
11.设有如下定义:
typedef int *INTEGER;
INTEGER p,*q;
则( )是正确的叙述
A)p是int型变量 B)q是基类型为int的指针变量
C)p是基类型为int的指针变量 D) 程序中可用INTERGER代替int类型名
12.若有以下类型说明,叙述正确的是( )
typedef struct
{ int num;
char *name;
int score;
}STU, *PSTU;
A) STU 是变量名 B) PSTU是变量名
C) PSTU是指向结构体类型的STU的指针类型名 D) 类型说明语句有错误
第 2 页共2 页。