C语言6结构体练习题6
- 格式:doc
- 大小:22.50 KB
- 文档页数:2
结构体与共用体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语言习题结构体和杂类(答案)第十章结构体和杂类一.选择题1.如下说明语句,则下面叙述不正确的是(C)。
tructtu{inta;floatb;}tutype;A.truct是结构体类型的关键字B.tructtu是用户定义结构体类型C.tutype是用户定义的结构体类型名(变量名)D.a和b都是结构体成员名2.在16位PC机中,若有定义:tructdata{inti;charch;doublef;}b;则结构变量b占用内存的字节数是(D)。
A.1B.2C.8D.11A.1和2B.2和3C.7和2D.7和84.以下程序的输出结果是(D)。
unionmyun{truct{int某,y,z;}u;intk;}a;main(){a.u.某=4;a.u.y=5;a.u.z=6;a.k=0;printf(\A.4B.5C.6D.05.当定义一个共用体变量时,系统分配给它的内存是(C)。
A.各成员所需内存量的总和B.结构中第一个成员所需内存量C.成员中占内存量最大的容量D.结构中最后一个成员所需内存量6.若有以下程序段:uniondata{inti;charc;floatf;}a;intn;则以下语句正确的是(C)。
A.a=5;B.a={2,’a’,1.2}C.printf(“%d”,a);D.n=a;7.设truct{inta;charb;}Q,某p=&Q;错误的表达式是(d)。
A.Q.aB.(某p).bC.p->aD.某p.b9.以下对C语言中共用体类型数据的叙述正确的是(c)。
A.可以对共用体变量直接赋值B.一个共用体变量中可以同时存放其所有成员C.一个共用体变量中不能同时存放其所有成员D.共用体类型定义中不能出现结构体类型的成员10.下面对typedef的叙述中不正确的是(b)。
A.用typedef可以定义多种类型名,但不能用来定义变量B.用typedef可以增加新类型C.用typedef只是将已存在的类型用一个新的标识符来代表D.使用typedef有利于程序的通用和移植二.判断题1.共用体类型的变量的字节数等于各成员字节数之和。
C语言练习题(带详解答案)一单项选择题1.(A)是构成C语言程序的基本单位。
A、函数B、过程C、子程序D、子例程2.C语言程序从C开始执行。
A)程序中第一条可执行语句B)程序中第一个函数C)程序中的main函数D)包含文件中的第一个函数3、以下说法中正确的是(C)。
A、C语言程序总是从第一个定义的函数开始执行B、在C语言程序中,要调用的函数必须在main()函数中定义C、C语言程序总是从main()函数开始执行D、C语言程序中的main()函数必须放在程序的开始部分4.下列关于C语言的说法错误的是(B)A)C程序的工作过程是编辑、编译、连接、运行B)C语言不区分大小写。
C)C程序的三种基本结构是顺序、选择、循环D)C程序从main函数开始执行5.下列正确的标识符是(C)。
A.-a1B.a[i]C.a2_iD.intt5~8题为相同类型题考点:标识符的命名规则(1)只能由字母、数字、下划线构成(2)数字不能作为标识符的开头(3)关键字不能作为标识符选项A中的-,选项B中[与]不满足(1);选项D中的int为关键字,不满足(3)6.下列C语言用户标识符中合法的是(B)。
A)3a某B)某C)caeD)-e2E)union选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的-不满足(1);7.下列四组选项中,正确的C语言标识符是(C)。
A)%某B)a+bC)a123D)123选项A中的%,选项B中+不满足(1);选项D中的标识符以数字开头不满足(2)8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。
A、print_3ddb8aBcB、I\\amone_halftart$it3paiC、tr_1CpppowwhileD、P某qMy->bookline#Hi.age选项B中的\\,$,选项D中>,#,.,-不满足(1);选项C中的while为关键字,不满足(3)9.C语言中的简单数据类型包括(D)。
一、单选题1、设有定义:struct complex{int real, unreal;} data1={1,8},data2;则以下赋值语句中错误的是()。
A.data2.real=data1.unreal;B.data2=(2,6);C.data2=data1;D.data2.real=data1.real;正确答案:B2、设有定义:struct{char mark[12];int num1;double num2;} t1,t2;若变量均已正确赋初值,则以下语句中错误的是()。
A.t2.num1=t1.num1;B.t2.num2=t1.num2;C.t1=t2;D.t2.mark=t1.mark;正确答案:D3、有以下定义语句:struct student{int num;char name[9];};则不能正确定义结构体数组并赋初始值的是( )。
A.struct stu[]={{1,"zhangsan"},{2,"li si"}};B.struct student stu[2]={{1,"zhangsan"},{2,"li si"}};C.struct student stu[2]={1, "zhangsan",2,"li si"};D.struct student stu[]={{1,"zhangsan"},{2,"li si"}}; 正确答案:A4、有以下程序:#include<stdio.h>struct S{ int a,b;}data[2]={10,100,20,200};int main(){struct S p=data[1];printf("%d\n",++(p.a));return 0;}程序运行后的输出结果是()。
C语⾔程序设计结构体与共⽤体⼀、选择题1、定义结构类型时,下列叙述正确的是()A、系统会按成员⼤⼩分配每个空间B、系统会按最⼤成员⼤⼩分配空间C、系统不会分配空间D、以上说法均不正确2、已知结构类型变量x的初始化值为{“20”,30,40,35.5},请问合适的结构定义是()A、 Struct s{int no;int x,y,z};B、 Struct s{char no[2];int x,y,z};C、 Struct s{int no;float x,y,z};D、Struct s{char no[2];float x,y,z};3、若程序中有定义struct abc{int x;char y;};abc s1,s2;则会发⽣的情况是()A、编译时会有错误B、链接时会有错误C、运⾏时会有错误D、程序没有错误4、已知学⽣记录描述为struct student{int no;char name[20];char set;struct{int year;int month;int day;}birth;};struct student s;设变量s中的“⽣⽇”应是“1984年11⽉11⽇”,下列对⽣⽇的正确赋值⽅式是( ). A)year=1984; B)birth.year=1984;month=11; birth.month=11;day=11; birth.day=11;C)s.year=1984; D)s.birth.year=1984;5、当说明⼀个结构体变量时系统分配给它的内存是( ).A)各成员所需内存量的总和 B)结构中第⼀个成员所需内存量C)成员中占内存量最⼤者所需的容量 D)结构中最后⼀个成员所需内存量6、以下对结构体类型变量的定义中不正确的是( ).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;}std1; }student;struct student std1;7、设有以下说明语句struct stu{int a;float b;}stutype;则下⾯的叙述不正确的是( ).A)struct是结构体类型的关键字B)struct stu是⽤户定义的结构体类型C)stutype是⽤户定义的结构体类型名D)a和b都是结构体成员名8、C语⾔结构体类型变量在程序执⾏期间( )..A)所有成员⼀直驻留在内存中B)只有⼀个成员驻留在内存中C)部分成员驻留在内存中D)没有成员驻留在内存中9、在16位IBM-PC机上使⽤C语⾔,若有如下定义:struct data{int i;char ch;则结构变量b占⽤内存的字节数是( ).A)1 B)2 C)3 D)410、以下程序的运⾏结果是( ).#include “stdio.h”main(){struct data{int year,month,day;}today;printf(“%d\n”,sizeof(struct data));}A)6 B)8 C)10 D)1211、若有以下定义和语句;struct student{int age;int num ;};struct student stu [3]={{1001,20 },{1002,19},{1003,21}};main(){struct student *p;p=stu;…..}则以下不正确的引⽤是( )。
数据结构试题及答案c语言版一、选择题(每题2分,共20分)1. 在C语言中,以下哪个选项是正确的链表定义?A. struct Node { int data; struct Node *next; };B. struct Node { int data; Node *next; };C. struct Node { int data; struct Node *next; } *Node;D. struct Node { int data; Node *next; };答案:A2. 下列关于栈的描述中,错误的是?A. 栈是一种后进先出(LIFO)的数据结构。
B. 栈的插入操作称为push。
C. 栈的删除操作称为pop。
D. 栈可以存储任意数量的数据。
答案:D3. 在C语言中,以下哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A4. 下列关于队列的描述中,正确的是?A. 队列是一种先进先出(FIFO)的数据结构。
B. 队列只能从队尾进行插入操作。
C. 队列的插入操作称为pop。
D. 队列的删除操作称为push。
答案:A5. 在C语言中,以下哪个函数用于创建一个动态数组?A. mallocB. callocC. reallocD. all of the above答案:D6. 下列关于二叉树的描述中,错误的是?A. 二叉树的每个节点最多有两个子节点。
B. 二叉树的子节点被称为左子树和右子树。
C. 二叉树的遍历方式包括前序、中序、后序。
D. 二叉树的每个节点只能有一个子节点。
答案:D7. 在C语言中,以下哪个函数用于释放动态分配的内存?A. freeB. mallocC. callocD. realloc答案:A8. 下列关于图的描述中,错误的是?A. 图是由顶点和边组成的数据结构。
B. 图的边可以是有向的,也可以是无向的。
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。
习题一一、单选题1.在一个带有附加表头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行( B )。
A. HL=p; p->next=HL;B. p->next=HL->next; HL->next=p;C. p->next=HL; p=HL;D. p->next=HL; HL=p;2.若顺序存储的循环队列的QueueMaxSize=n,则该队列最多可存储( B )个元素.A. nB.n-1C. n+1D.不确定3.下述哪一条是顺序存储方式的优点?(A )A.存储密度大 B.插入和删除运算方便C. 获取符合某种条件的元素方便D.查找运算速度快4.设有一个二维数组A[m][n],假设A[0][0]存放位置在600(10),A[3][3]存放位置在678(10),每个元素占一个空间,问A[2][3](10)存放在什么位置?(脚注(10)表示用10进制表示,m>3)DA.658 B.648 C.633 D.6535.下列关于二叉树遍历的叙述中,正确的是( AD ) 。
A. 若一个树叶是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序遍历最后一个结点B.若一个点是某二叉树的前序遍历最后一个结点,则它必是该二叉树的中序遍历的最后一个结点 C.若一个结点是某二叉树的中序遍历的最后一个结点,则它必是该二叉树的前序最后一个结点D.若一个树叶是某二叉树的前序最后一个结点,则它必是该二叉树的中序遍历最后一个结点6.k层二叉树的结点总数最多为( A ).A.2k-1 B.2K+1 C.2K-1 D. 2k-17.对线性表进行二分法查找,其前提条件是( B ).A.线性表以链接方式存储,并且按关键码值排好序B.线性表以顺序方式存储,并且按关键码值的检索频率排好序C.线性表以顺序方式存储,并且按关键码值排好序D.线性表以链接方式存储,并且按关键码值的检索频率排好序8.对n个记录进行堆排序,所需要的辅助存储空为Cn) B. O(n) C. O(1) D. O(n2)A. O(1og29.对于线性表(7,34,77,25,64,49,20,14)进行散列存储时,若选用H(K)=K %7作为散列函数,则散列地址为0的元素有( D )个,A.1 B.2 C.3 D.410.下列关于数据结构的叙述中,正确的是( D ).A.数组是不同类型值的集合B.递归算法的程序结构比迭代算法的程序结构更为精炼C.树是一种线性结构D.用一维数组存储一棵完全二叉树是有效的存储方法二、填空题1.数据的逻辑结构被分为_集合结构、__线性结构、_树结构和_图结构四种。
第10章综合测试[能力要求](1)计算机基础知识:掌握图的概念以及图的基本操作。
(2)分析问题:针对具体的问题,要能够运用图去进行分析,逐步找到解决问题的方法。
(3)具有概念化和抽象化能力:针对具体的应用和实际的问题,能够运用图对问题进行抽象,提取它的逻辑结构和存储结构。
(4)发现问题和表述问题:在具体的工程中,能够发现工程中涉及到图的问题,并能够明确表述。
(5)建模:在具体的工程中,能够使用图进行建模,设计合理的数据结构和相应的算法。
(6)解决方法和建议:在具体工程应用中,发现了关于图的问题,要能够解决问题,并提出合理的建议。
(7)定义功能,概念和结构:使用图这种逻辑结构处理一些具体问题,实现系统的功能。
(8)设计过程的分段与方法:采取不同的阶段去设计(概念设计、详细设计)一个具体的图的应用项目。
(9)软件实现过程:了解系统中各个模块中的关于图的设计;讨论算法(数据结构、控制流程、数据流程);使用编程语言实施底层设计(编程)。
10.1综合测试题1一、判断题说明:共10题,每题1分,满分10分()1① 有一批数据,经常用来进行插入和删除处理,这样的数据用顺序表存储最合适。
()2① 栈用于实现子程序调用。
()3① 队列可用于表达式的求值。
()4① 队列在队头插入,队尾删除。
()5② 若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。
()6② 完全二叉树的某结点若无左孩子,则它必是叶结点。
()7② 将一棵树转换成二叉树后,根结点没有左子树。
()8② 任一二叉排序树的平均查找时间都小于用顺序查找法查找同样结点的线性表的平均查找时间。
()9② 中序遍历一棵二叉排序树的结点就可得到排好序的结点序列。
()10③ 如果待排序的数据是有一定顺序的,那么冒泡和简单选择排序法中,简单选择最好。
二、填空题说明:共10空,每空1分,满分10分。
1① 栈的特点是 ,队列的特点是 。
2③ 深度为k 的完全二叉树的至少有 个节点, 至多有 节点。
9.3.1 选择题选择题2.有以下程序输出结果是( )。
#include<stdio.h>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.ZhangB.ZhaoC.WangD.184.设有如下定义:struct sk{int a;float b;} data,*p;若有p=&data;则对data中的a 域的正确引用是( )。
A6.根据下面的定义,能打出字母M的语句是( )。
struct person{char name[9];int age;}struct person class[10]={ 〞John〞,17, 〞Paul〞,19, 〞Mary〞,18, 〞Adam〞,16};A.printf(〞%c\n〞,class[3].name);B.printf(〞%c\n〞,class[3].name[1]);C.printf(〞%c\n〞,class[2].name[1]);D.printf(〞%c\n〞,class[2].name[0];7. 下列程序的执行结果为( )。
#include<stdio.h>struct s1{char *s;int i;struct s1 *sip;}main(){static struct s1 a[]={{"abcd",1,a+1},{"efgh",2,a+2},{"ijkl",3,a}};struct s1 *p=a;int i=0;printf("%s%s%s",a[0].s,p->s,a[2].sip->s);printf("%d%d",i+2,--a[i].i);printf("%c\n",++a[i].s[3]); //VC下运行,出现错误}A.abcd abcd abcd 2 0 eB.abcd efgh ijkl 2 0 eC.abcd abcd ijkl 2 0 eD.abcd abcd abcd 2 1 e8. 下面程序的输出结果为( )。
结构体编程题类型:1、结构体:查找统计 (3/4)2、结构体:查找排序 (1/1)3、结构体:链表 (0/1)方法:1、结构体数组和链表试题的类型,常见的有查找指定条件的值、求最大〔小〕值、排序等。
方法与一般数组的相同。
注意事项:1、.结构体〔数组〕和链表变量不同于一般变量〔数组〕的地方就只在于“名字有点长”。
〔用成员运算符或->运算符〕。
一、结构体:查找统计.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回.例如:输入的分数范围是60和69,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据.主函数中将把60放在low中把69放在high中.#include<stdio.h>#define N 16typedef struct{char num[10];int s;}STREC;int fun(STREC *a,STREC *b,int l,int h){int i,j,n;for(i=0,j=0,n=0;i<N;i++){if(a[i].s>=l && a[i].s<=h){b[j]=a[i];j++;n++;}}return n;}main(){STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};STREC h[N];int i,n,low,high,t;printf("Enter 2 integer number low & high : ");scanf("%d%d",&low,&high);if(high<low){t=high;high=low;low=t;}n=fun (s,h,low,high);printf ("The student's data between %d--%d:\n",low,high);for (i=0;i<n;i++)printf ("%s %4d\n",h[i].num,h[i].s);printf ("\n");}1.2.已知学生的记录由学号和学习的成绩构成,N名学生的数据已存人a结构体数组中。
第六章结构体
1.下面对结构变量的叙述中错误的是
A.相同类型的结构变量间可以相互赋值
B.通过结构变量,可以任意引用它的成员
C.结构变量中某个成员与这个成员类型相同的简单变量间可相互赋值D.结构变量与简单变量间可以赋值
*2.有枚举型定义如下:
enum s {x1, x2=5, x3, x4=10} l;
则枚举变量x可取的枚举元素x2、x3所对应的整数常量值是
A.1,2 B.2,3 C.5,2 D.5,6
*3.以下各选项企图说明一种新的类型名,其中正确的是
A.typedef v1 int; B.typedef v2=int;
C.typedef int v3; D.typedef v4: int;
*4.设有下列结构型变量w的定义,则表达式”sizeof(w)”的值是 struct { long num;
char name[15];
union {float x ; short z; } yz;
}w;
A.19 B.20 C.23 D.25
*5.若有结构类型定义如下:
struct bd
{
int x;
float y;
}r,*p=&r;
那么,对r中的成员x的正确引用是
A.(*p).r.x B.(*p).x C.p->r.x D.p.r.x
6.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是struct stud
{ char num[6];
int s[4];
double ave;
} a;
A.22 B.18 C.14 D.28
7.设有以下说明语句
struct ex
{ int x ;
float y;
char z ;} example;
则下面的叙述中不正确的是
A.struct ex是结构体类型B.example是结构体类型名
C.x,y,z都是结构体成员名D.struct是结构体类型的关键字
*8.在Turbo C中有如下定义:
union dat
{ int i;
char ch;
float f;
}x;
x在内存中占的字节数为
A.4 B.7 C.8 D.6
*9.有如下结构类型定义以及有关的语句:
struct ms
{ int x;
int *p;
}s1,s2;
s1.x=10;
s2.x=s1.x+10;
s1.p=&s2.x;
s2.p=&s1.x;
*s1.p+=*s2.p;
试问,执行以上语句后,s1.x和s2.x的值应该是
A.10,30 B.10,20 C.20,20 D.20,10
10.下列关于结构类型与结构变量的说法中,错误的是
A.结构类型与结构变量是两个不同的概念,其区别如同int类型与int型变量的区别一样。
B.“结构”可将不同数据类型、但相互关联的一组数据,组合成一个有机整体使用。
C.“结构类型名”和“数据项”的命名规则,与变量名相同。
D.结构类型中的成员名,不可以与程序中的变量同名。
11.能够逐个访问结构体成员的成员运算符是
A.“.”B.“,”C.“:”D.“;”。