第8章练习 结构体与共用体
- 格式:doc
- 大小:42.50 KB
- 文档页数:2
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是指向结点的指针域,)请填空。
第八单元结构体和共用体一、选择题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、下面程序的输出是。
实验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进行内存释放。
第十一章习题结构体与共用体
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 页。