结构体与联合体习题含答案

合集下载

(完整版)结构体与联合体习题与参考答案

(完整版)结构体与联合体习题与参考答案

(完整版)结构体与联合体习题与参考答案第八章结构体与联合体选择题1、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。

struct abc s1,s2;则会发生的情况是______。

A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错2、有以下程序段struct st{ int x; int *y;}*pt;int a[]={1,2};b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是A) *pt->y B) pt->x C) ++pt->x D) (pt++)->x3、有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是______。

A) (p++)->num B) p->num C) (*p).num D) stu[3].age4、设有如下枚举类型定义enum language{Basic=3,Assembly=6,Ada=100,COBOL,Fortran};枚举量Fortran的值为______。

A) 4 B) 7 C) 102 D) 1035、以下叙述中错误的是_________。

A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名6、有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法B) NODE是一个结构体类型C) OLD是一个结构体类型D) OLD是一个结构体变量7、以下选项中不能正确把cl定义成结构体变量的是______。

结构体与链表习题附答案

结构体与链表习题附答案

结构体与链表习题附答案一、选择题1、在说明一个结构体变量时系统分配给它的存储空间是().A)该结构体中第一个成员所需的存储空间B)该结构体中最后一个成员所需的存储空间C)该结构体中占用最大存储空间的成员所需的存储空间D)该结构体中所有成员所需存储空间的总和。

2.设有以下说明语句,则以下叙述不正确的是( )struct stu{int a;float b;}stutype;A. struct 是结构体类型的关键字B. struct stu 是用户定义的结构体类型C. stutype 是用户定义的结构体类型名D. a 和b 都是结构体成员名3、以下对结构体变量stu1中成员age的合法引用是()#includestruct student{int age;int num;}stu1,*p;p=&stu1A)stu1->age B)student.age C)p->age D) p.age4、有如下定义:Struct date{int year,month,day;};Struct worklist{Char name[20];Char sex;Struct date birthday;}person;对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是( ) 。

A worklist .birthday.year=1978B birthday.year=1978C person.birthday.year=1958D person.year=19585、以下程序运行的结果是( ) 。

#include”stdio.h”main(){ struct date{ int year , month , day ;} today ;printf(“%d\n”,sizeof(struct date));}A .6 B.8 C.10 D.126、对于时间结构体struct date{ int year , month , day ;char week[5];}则执行printf(“%d\n”,sizeof(struct date))的输出结果为( ) 。

编程选择题40道:C语言结构体与联合体:数据组织与管理.Tex

编程选择题40道:C语言结构体与联合体:数据组织与管理.Tex

1.在C语言中,结构体(struct)能够存储不同类型的数据。

以下哪种说法是正确的关于结构体成员变量的访问?o A. 结构体成员变量只能在定义结构体的函数中访问。

o B. 结构体成员变量的访问必须通过指向结构体的指针。

o C. 结构体成员变量不能被直接初始化。

o D. 结构体成员变量可以通过结构体变量名直接访问。

答案:D解析:结构体成员变量可以直接通过结构体变量名访问,无需指针,选项A和B错误。

C语言支持在定义结构体时直接初始化成员变量,因此选项C也错误。

2.C语言中的联合体(union)与结构体(struct)有何不同?o A. 联合体和结构体都共享相同的内存空间。

o B. 联合体允许成员变量共享同一段内存空间,而结构体的成员变量各自占用独特内存空间。

o C. 联合体的成员变量不能有相同的类型。

o D. 联合体不能在函数间传递。

答案:B解析:联合体的特性是所有成员共享同一段内存空间,而结构体的成员各自有自己的内存空间。

3.下面的代码片段中,结构体Person定义了一个成员变量name和一个成员函数printName。

在C语言中,这段代码的语法是否正确?o B. 错误,C语言的结构体不能定义成员函数。

o C. 错误,printName函数的定义中缺少返回类型。

o D. 错误,printName函数定义需要在结构体定义外部。

答案:B解析:C语言的结构体不具备成员函数,不能在结构体内直接定义函数。

4.如果一个结构体包含多个成员,结构体的大小如何确定?o A. 结构体的大小是其所有成员大小的总和。

o B. 结构体的大小是其最长成员的大小。

o C. 结构体的大小是其所有成员大小的总和,加上成员间可能的填充大小,以满足对齐要求。

o D. 结构体的大小是所有成员中最大小别的成员乘以成员数量。

答案:C解析:结构体的大小是成员变量大小的总和加上为了内存对齐而添加的填充大小。

5.在C语言中,使用typedef struct的目的何在?o A. 为了使结构体的定义更复杂。

结构体与联合体习题含答案

结构体与联合体习题含答案

)(含答案结构体与联合体习题结构体与联合体习题2013年选择题1、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。

struct abc s1,s2;。

则会发生的情况是______B) 程序将顺序编译、连接、执行A) 编译时错D) 能顺序通过编译、但连接出错C) 能顺序通过编译、连接、但不能执行2、有以下程序段struct st{ int x; int *y;}*pt;int a[]={1,2};b[]={3,4};struct stc[2]={10,a,20,b};pt=c;的是以下选项中表达式的值为11D) (pt++)->x C) ++pt->x A)*pt->y B) pt->x、有以下说明和定义语句3struct student{ int age; char num[8];};,?403}};structstudent *p=stu;______。

以下选项中引用结构体变量成员的表达式错误的是 stu[3].age D)B)p->num C) (*p).num A) (p++)->num 4、设有如下枚举类型定义 enum language{Basic=3,Assembly=6,Ada=100,COBOL,Fortran};。

Fortran枚举量的值为______D) 103 102 B) 7 C) A) 4。

、以下叙述中错误的是_________5增加新的类型可以通过typedef A)typedef可以用将已存在的类型用一个新的名字来代表B)typedef定义新的类型名后,原有类型名仍有效C)用typedef可以为各种类型起别名,但不能为变量起别名D)用6、有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法 B) NODE是一个结构体类型C) OLD是一个结构体类型 D) OLD是一个结构体变量7、以下选项中不能正确把cl定义成结构体变量的是______。

C语言各章节单元测试题及答案——结构体与共用体

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.共用体定义为“union data{char ch;int x;}a;”下列语句正确的是。

A:a.ch=‟x‟;a=10; B:a a=‟x‟,10;C:a.x=10;a.ch=‟x‟; D:a=‟x‟;2.共用体定义为“union data{char ch;int x;}a;”下列语句不正确的是。

A:a={…x‟,10}; B:a.x=10;a.x++;C:a.ch=‟x‟;a.ch++; D:a.x=10;a.ch=‟x‟;3.对于:struct node{double x;char c;}*p;下列哪个赋值是错的。

A:p->x=2B:p.x=2.0 C.p->c=2 D.(*p).c=‟a‟4.对于以下结构定义:struct{int len;char *str;}*p;(*p)->str++中的++加在。

A:指针str上B:指针p上. C.str所指的内容上 D:表达式语法有错5.对如下定义:struct{char a1;int a2;}xx; union{char a1;int a2;int a3;}yy;如果sizeof(xx)的值为3,则sizeof(yy)的值应为:A:2 B:4 C:5 D:定义有错6.以下结构体变量定义语句中错误的是。

A.struct staffer{ long int code; float salary;} one;B.struct staffer{ long int code; float salary;} staffer one;C.typedef struct { long int code ; float salary;} STAFFER;D.struct { long int code; float salary; }one;-7.形如上题中定义的结构体变量,下列对此变量的输入形式中正确的是。

国家二级C语言(结构体和共用体、文件)机试模拟试卷3(题后含答案及解析)

国家二级C语言(结构体和共用体、文件)机试模拟试卷3(题后含答案及解析)

国家二级C语言(结构体和共用体、文件)机试模拟试卷3(题后含答案及解析)题型有:1. 选择题选择题1.若有语句typedef struet S{int g;char h;}T;,则下列叙述中正确的是( )。

A.可用S定义结构体变量B.可用T定义结构体变量C.S是struet类型的变量D.T是struet S类型的变量正确答案:B解析:本题考查typedef重新声明一种结构体类型。

那么T为结构体类型,而不是结构体变量,所以B选项正确。

知识模块:结构体和共用体2.设有语句typedef struet TT{char c;int a[4];}CIN;,则下列叙述中正确的是( )。

A.CIN是struet TT类型的变量B.TT是struet类型的变量C.可以用TT定义结构体变量D.可以用CIN定义结构体变量正确答案:D解析:本题考查typedef重新声明一种结构体类型。

其中CIN为结构体类型名,而不是结构体变量,所以D选项正确。

知识模块:结构体和共用体3.下列叙述中错误的是( )。

A.可以用typedef将已存在的类型用一个新的名字来代表B.可以通过typedef增加新的类型C.用typedef定义新的类型名后,原有类型名仍有效D.用typedef可以为各种类型起别名,但不能为变量起别名正确答案:B解析:本题考查typedef的用法。

typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。

知识模块:结构体和共用体4.有以下程序:#include<stdio.h>main( ){struet STU{char name[9];char sex;double score[2];};struet STU a={“Zhao”,’m’,85.0,90,0},b={“Qian”,’f’,95.0,92.0};b=a;prinff(“%s,%c,%2.0f,%2.0f\n”,b.name,b.sex,b.score[0],b.score[1]);}程序的运行结果是( )。

c高级试题及答案

c高级试题及答案

c高级试题及答案C高级试题及答案1. 问题:解释C语言中的指针和引用的区别。

答案:在C语言中,指针是一个变量,它存储了另一个变量的内存地址。

指针可以被重新赋值指向不同的内存地址。

引用则是一种别名,它在声明时必须初始化,并且不能改变指向。

引用与指针的主要区别在于,引用必须在声明时初始化,并且不能重新赋值。

2. 问题:描述C语言中结构体和联合体的区别。

答案:结构体(struct)是一种构造数据类型,允许将多个不同类型的数据项组合成一个单一的数据结构。

结构体中的每个成员可以是不同的数据类型,并且每个成员占据不同的内存空间。

联合体(union)也是一种构造数据类型,它允许在相同的内存位置上存储不同的数据类型。

联合体中的所有成员共享相同的内存空间,一次只能存储一个成员的值。

3. 问题:解释C语言中的预处理器指令`#include`的作用。

答案:预处理器指令`#include`用于将指定的文件包含到当前的源文件中。

它允许程序员在不同的源文件中共享代码,并且可以包含标准库的头文件,以便使用库中定义的数据类型、函数和宏。

`#include`指令可以带双引号或尖括号,双引号用于包含用户自定义的头文件,而尖括号用于包含标准库的头文件。

4. 问题:如何使用C语言实现文件的读写操作?答案:在C语言中,可以使用标准I/O库函数来实现文件的读写操作。

`fopen`函数用于打开文件,`fprintf`函数用于向文件写入数据,`fscanf`函数用于从文件读取数据,`fclose`函数用于关闭文件。

例如,使用`fopen`函数打开文件后,可以使用`fprintf`向文件写入字符串,使用`fscanf`读取文件内容,最后使用`fclose`关闭文件。

5. 问题:解释C语言中的递归函数。

答案:递归函数是一种自我调用的函数,它在其定义中调用自己。

递归函数通常用于解决可以分解为更小、相似问题的问题。

递归函数必须有一个明确的退出条件,以防止无限递归。

结构体与联合体习题含答案)

结构体与联合体习题含答案)

2013年结构体与联合体习题选择题1、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。

struct abc s1,s2;则会发生的情况是______。

A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错2、有以下程序段struct st{ int x; int *y;}*pt;int a[]={1,2};b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是A) *pt->y B) pt->x C) ++pt->x D) (pt++)->x3、有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是______。

A) (p++)->num B) p->num C) (*p).num D) stu[3].age4、设有如下枚举类型定义enum language {Basic=3,Assembly=6,Ada=100,COBOL,Fortran};枚举量Fortran的值为______。

A) 4 B) 7 C) 102 D) 1035、以下叙述中错误的是_________。

A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名6、有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法B) NODE是一个结构体类型C) OLD是一个结构体类型D) OLD是一个结构体变量7、以下选项中不能正确把cl定义成结构体变量的是______。

习题参考答案第9章结构体与共用体.docx

习题参考答案第9章结构体与共用体.docx

第9章结构体与共用体(参考答案)二. 填空题1.if(a&OxlO==OxlO)2.s=(high&OxffffOOOO) I (low&OxOOOOffff)3.04.30 4【说明】此题考查的是结构体类型变量分配的空间,结构体变量a所需的空间是各成员之和,成员num占6个字节,成员s是数组,占16个字节,成员ave占8个字节。

结构体指针变量p 在内存所占字节数是4个字节,用于存放相同类型的地址。

5.80【说明】共用体类型STU定义的数组分配的是一块连续的存储空间,其长度为数组长度X共用体最大成员空间=5X 16.6.No:1001N ame: WangzhenBirthday: 1990/12/9*三. 编程题1、定义一个结构体变量(包括年、月、日),计算该日在本年中是第几天。

【程序分析:】以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。

【程序源代码:】#include <stdio.h>struct(int day;int month;int year;}date;int main()( intdays[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; 〃每月的天数从下标为1 开始int sumdays=O,leap;printf(u\nplease input year,month,day\n n);scanf("%d,%d,%d",&date.year,& date.month,& date.day);〃计算正常年份month月以前的天数for(int i= 1 ;i<date.month;i++)"5(^林第2章数据类型、运算符与表达式sumdays+=days[i];sumdays+=date.day; 〃再加上当月的天数if(date.year%400==0ll(date.year%4==0&&date.year%100!=0))/* 判断是不是闰年*/leap=l;elseleap=O;if(leap== 1 &&date.month>2)/*如果是闰年且月份大于2,总天数应该加一天*/ sumdays++;printf("It is the %dth day.",sumdays);}2、针对【例9.11】做修改,对任意班级学生的基本信息和成绩进行管理,学生的基本信息包括: 学号、姓名、3门课的成绩,要求编写用户函数分别实现学生基本信息输入、总成绩计算、最高分学生的查找、学生信息排序(按学生总成绩从高到低)、输出最高分学生的信息,输出所有学生的信息功能。

c程序设计第二版谭浩强课后答案

c程序设计第二版谭浩强课后答案

c程序设计第二版谭浩强课后答案C程序设计第二版是谭浩强教授编写的一本广泛使用的计算机程序设计教材,它以C语言为基础,深入浅出地介绍了程序设计的基本概念、语法规则和编程技巧。

这本书的课后习题对于加深理解C语言的知识点非常有帮助。

以下是部分课后习题的答案,供参考:第一章程序设计和C语言概述1. 问题一:简述程序设计的基本步骤。

- 答案:程序设计的基本步骤包括需求分析、设计、编码、测试和维护。

2. 问题二:C语言的主要特点是什么?- 答案:C语言的主要特点包括简洁高效、结构化、可移植性、丰富的运算符、灵活的数据类型和内存管理能力。

第二章 C语言程序的结构1. 问题一:C语言程序的基本结构是什么?- 答案:C语言程序的基本结构包括预处理指令、函数定义和主函数。

2. 问题二:什么是函数?C语言中函数的定义规则是什么?- 答案:函数是一段具有特定功能的代码块,可以被重复调用。

C 语言中函数的定义规则包括返回类型、函数名和参数列表。

第三章数据类型、运算符和表达式1. 问题一:C语言中的基本数据类型有哪些?- 答案:C语言中的基本数据类型包括整型(int)、字符型(char)、浮点型(float和double)。

2. 问题二:算术运算符有哪些?它们的优先级是怎样的?- 答案:算术运算符包括加(+)、减(-)、乘(*)、除(/)和模(%)。

它们的优先级从高到低依次是乘除、模、加减。

第四章控制语句1. 问题一:C语言中的条件语句有哪些?- 答案:C语言中的条件语句包括if语句、if...else语句和switch语句。

2. 问题二:循环语句有哪些?它们的基本结构是什么?- 答案:C语言中的循环语句包括while循环、do...while循环和for循环。

它们的基本结构是初始化、条件判断和迭代。

第五章数组1. 问题一:什么是数组?数组的声明方式有哪些?- 答案:数组是相同数据类型元素的集合。

数组的声明方式包括在函数内部声明和全局声明。

结构体,共用体,链表相关试题

结构体,共用体,链表相关试题

十.结构体和共用体(1)下列程序中fun()函数的功能是:构成一个如图所示的带头结点的单向链表,在结点的数据域中放入了具有两个字符的字符串。

disp()函数的功能是显示输出该单链表中所有结点中的字符串。

请填空完成(06.4)disp()函数。

#includetypedef struct node /*链表结点结构*/{ char sub[3];struct node *next;}Node;Node fun(char s) /*建立链表*/{ …… }void disp(Node *h){ Node *p;p=h− >next;while( 【】){printf("%s\n",P− >sub);p= 【】; }}main( ){ Node *hd;hd=fun( ); disp(hd); printf("\n");}(2)设有以下语句:typedef struct TT{char c,int a[4];}CIN;则下面叙述中正确的是(06.9)。

A)可以用TT定义结构体变量B)TT是struct类型的变量C)可以用CIN定义结构体变量D)CIN是struct TT类型的变量(3)有以下结构体说明、变量定义和赋值语句: struct STD{char name[10];int age;char sex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句中错误引用结构体变量成员的是(06.9)。

A)scanf(%s",s[0].name); B)scanf(%d",&s[0].age); C)scanf(%c",&(ps->sex)); D)scanf(%d",ps->age);(4) 若有以下定义和语句printf("%d\n",sum);}(7)有下列程序:struct S{int n;int a[20];};void f (struct S *p){int i,j,t;for(i=0;i<p->n-1;i+ +)for(j=i+1;j<p->n;j+ +)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a [j];p->a[j]=t;}}main( ){ int i; struct S s={10,{2,3,l,6,8,7,5,4,10,9}};f(&s);for(i=0;i<s.n;i+ +) printf("%d,",s.a[i]);}程序运行后的输出结果是(07.4 )。

C++语言选择题40道:C++结构体与联合.Tex

C++语言选择题40道:C++结构体与联合.Tex

C++结构体与联合试题1.结构体成员的访问哪个符号是正确的?o A. &o B. ->o C. .o D. ::答案: C解析: 结构体成员通过.操作符访问。

2.在C++中,结构体和类的主要区别是?o A. 结构体不能有方法o B. 类不能继承结构体o C. 结构体默认的访问属性是publico D. 类默认的访问属性是public答案: C解析: 结构体在C++中的默认访问属性是public,而类的默认访问属性是private。

3.联合体(union)成员的访问方式与结构体相同吗?o A. 不相同o B. 相同,但只在初始化时有效o C. 相同o D. 联合体不能访问成员答案: C解析: 联合体成员与结构体成员的访问方式相同,都是通过.或->操作符访问。

4.在C++中,联合体的成员变量共享什么?o A. 内存空间o B. 类别信息o C. 名称空间o D. 函数指针答案: A解析: 联合体的所有成员共享同一段内存空间。

5.结构体和联合体的成员初始化,以下说法正确的是?o A. 结构体成员不能初始化o B. 联合体成员只能在定义时初始化o C. 结构体和联合体成员都可以在定义时初始化o D. 结构体和联合体成员都不能在定义时初始化答案: C解析: 结构体和联合体成员都可以在定义时初始化。

6.以下哪种说法是关于结构体的?o A. 所有成员的总和决定了结构体的大小o B. 结构体成员不共享内存空间o C. 结构体成员的初始化顺序无关紧要o D. 结构体的大小等于最大成员的大小答案: A解析: 结构体的大小是其所有成员总和的大小。

7.以下代码union Data { int i; float f; } d;中,变量d.i和d.f共享多少字节?o A. 4字节o B. 8字节o C. 12字节o D. 16字节答案: A解析: union Data中的int和float类型数据在32位系统下都占用4字节,二者共享同一段内存。

苏小红c语言程序设计课后答案

苏小红c语言程序设计课后答案

苏小红c语言程序设计课后答案苏小红的《C语言程序设计》是一本广泛使用的教材,它以清晰的结构和丰富的示例,帮助学生掌握C语言的基础知识和编程技巧。

课后答案对于学生来说是一个重要的学习资源,可以帮助他们检查自己的学习成果,加深对知识点的理解。

以下是一些可能的课后答案示例,用于帮助学生复习和理解C语言程序设计的相关概念。

第一章:C语言概述1. C语言的发展历史:C语言由Dennis Ritchie在20世纪70年代初期开发,最初用于UNIX操作系统的编写。

2. C语言的特点:C语言是一种结构化语言,具有高度的灵活性和强大的功能,能够进行底层系统编程。

第二章:C语言基础1. 数据类型:C语言提供了多种数据类型,包括整型(int)、浮点型(float和double)、字符型(char)等。

2. 变量声明:变量在使用前必须声明,声明时需要指定数据类型和变量名。

第三章:运算符和表达式1. 算术运算符:包括加(+)、减(-)、乘(*)、除(/)等。

2. 赋值运算符:如`=`,`+=`,`-=`等,用于给变量赋值或进行运算后赋值。

第四章:控制结构1. 条件语句:如`if`,`else if`,`else`,用于根据不同的条件执行不同的代码块。

2. 循环语句:包括`for`循环、`while`循环和`do-while`循环,用于重复执行代码块。

第五章:数组1. 一维数组:存储相同类型的元素,可以通过下标访问数组元素。

2. 多维数组:如二维数组,可以看作是数组的数组。

第六章:函数1. 函数定义:使用`return`类型和函数名来定义函数。

2. 函数调用:通过函数名和必要的参数来调用函数。

第七章:指针1. 指针变量:存储另一个变量的内存地址。

2. 指针运算:包括地址运算和指针的增减。

第八章:结构体和联合体1. 结构体:可以包含不同类型的数据成员。

2. 联合体:所有成员共享相同的内存位置。

第九章:预处理指令1. 宏定义:使用`#define`来定义常量或代码片段。

9 结构体与共用体 答案

9 结构体与共用体 答案

9 结构体与共用体一、选择填空9.1 答案:C分析:在本题的说明中定义了一个名为wc的结构,它由两个成员组成:整型变量a和指针变量b。

在定义的同时说明了一个指向这一结构类型的指针变量p。

数组x0和x1都是含有两个整型元素的一维数组,并赋有初值。

x为一结构型数组,共有两个元素,每一个元素都具有struct wc型的结构(含有两个成员),并赋有初值。

执行p=x;语句后,p指向这一结构数组的首地址。

由于p指向了x数组的首地址,也就是x[0]的地址,所以答案A中的*p->b等价于*(x[0].b),其值为11(注意:运算符->优先于*);答案B中的p->a即是x[0].a,其值为100;答案C中的++p->a是找到p->a(其值为100),再将此值自增1,取增加1以后的值,故为101;答案D是先将指针p增1,指向x数组的第二个元素x[1],即(p++)->a在此等价于x[1].a,其值为300。

9.2 答案:D分析:本题中的初始数据的构成情况与上题相同。

如前所述,答案A的值为11;答案B的值与上题的答案D相同,为300;答案C是先取内容,后自增1,等价于*p->b, p++,故其值也为11;而答案D是p先自增1,指向x[1],后取值,等价于++p, *p->b,所以其值为31。

9.3 答案:D分析:关键字typedef是利用已定义的类型标识符来定义新的类型标识符。

它并不产生新的数据类型。

其一般形式为:typedef 类型名标识符;题中的long int就是一个已存在的类型名,而新定义的类型名BIGGY就代表着long int 这个类型标识符。

9.4 答案:D分析:由于本题中定义了一个名为st的结构,它由两个成员组成:一个是整型变量n;一个是指向自身结构的指针变量next。

接着又定义了具有这一类型的一维数组a和指针变量p。

a数组含有3个元素并赋有初值。

p指向a数组的第一个元素。

结构体和联合体例题

结构体和联合体例题

第11章结构体与联合体例题例11-1.以下叙述中错误的是()。

2007.9A)用typedef可以增加新类型√B)typedef只是将已存在的类型用一个新的名字来代表C)用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D)用typedef为类型说明一个新名,通常可以增加程序的可读性例11-2 设有以下说明:typedef struct ST{lont a;int b;char c[2];}NEW;则下面叙述中正确的是()。

2005.4A) 以下说明形式非法B)ST是一个结构体类型C)NEW是一个结构体类型√D)NEW是一个结构体变量例11-3.有以下程序段:typedef struct node{int data;struct node *next;} *NODE;NOE p;以下叙述中正确的是()。

2007.4A)p是指向struct node结构变量的指针的指针B)NODE p;语句出错C) p是指向struct node结构变量的指针√D)p是struct node结构变量例11-4.设有说明:struct DATA{int year;int month;int day;};请写出一条定义语句,该语句定义d为上述结构体变量,并同时为其成员year、month、day依次赋值为2006、10、1:。

(2007.4)例11-5.以下程序运行后的输出结果是()(2005.9)#include<stdio.h>struct STU{int num;float TotalScore;};void f(struct STU p){struct STU s[2]={{20044,550},{20045,537}};p.num=s[1].num;p.TotalScore=s[1].TotalScore;}main(){struct STU s[2]={20041,703},{20042,580}};f(s[0]);printf("%d %3.0f\n",s[0].num,s[0].TotalScore);}程序运行后的输出结果是()。

C语言-第06讲-结构-答案.docx

C语言-第06讲-结构-答案.docx

第6讲结构体和共同体6.6强化练习6.6.1选择题[6-1] A)各成员所需内存量的总和[6-2JC) 一个共用体变量中不能同时存放其所有成员[6-3] C) stutype是用户定义的结构类型名[6-4] A)所有成员一直驻留在内存中[6-5] C) a不可以作为函数参数[6-6] D) ++[6-7] D) 7简析:按16位机[6-8] A) 4[6-9] D) int *fund( s )char *s[10][];{•••}[6-10] C) 10[6-11] C) p=f( i+l,&( i+2), *p, p);[6-12] D) s.birth.year= 1984;s.birth.month= 11;s. birth, day =11;[6-13] D) struct{ int num;float age;}student;struct student std 1;[6-14] D) 11简析:按16位机[6-15] B) ( *p ).a[6-16] D) printff "%c\n M, class[2].name[0]);[6-17] D) p=&stu.age[6-18] D) scan# "%d", p->age );[6-19] D) *ptr->il[6-20] B) p=( struct sk* )&data.n;[6-21 ] D) *p.age[6-22] D) *(++p)->m[6-23] C) (*p).sex[6-24] D) ++p・>n[6-25] D) (*++p).num[6-26] B) student.age[6-27] D) ++ptr->il[6-28] D) (int*)简析:动态分配存储空间函数,在头文件stdlib.h 中,void *malloc( size_t, size );分配size字节的内存。

结构体与共用体-专项练习题

结构体与共用体-专项练习题

软件学院专业课集训营资料-结构体与共用体专项练习题1.设有以下说明语句:struct ex{ int x;float y;char z;} example;则下面的叙述中不正确...的是A. struct是结构体类型的关键字B. example是结构体类型名C. x,y,z都是结构体成员名D. struct ex是结构体类型名2.设有以下说明语句typedef struct data{ int n;char ch[8];} PER;则下面叙述中正确的是A. struct data是结构体变量名B. PER是结构体类型名C. typedef struct 是结构体类型D. struct 是结构体类型名3.在程序VC6.0下,若有如下定义:struct data{ int i;char ch;double f;} b;则结构体变量b占用内存的字节数是A. 13B. 3C. 8D. 114.以下程序在VC6.0下的运行结果是#include <stdio.h>main(){ struct date{ int year,month,day; }today;printf("%d\n",sizeof(struct date)); }A. 6B. 8C. 10D. 125.设有如下定义:struct sk{ int a;float b;} data,*p;若有p=&data,则对data中的成员a的正确引用是A. (*p).data.aB.(*p).aC. p->data.aD. p.data.a6.以下对结构体变量stu1中成员age的非法..引用的是struct student{ int age;int num;}stu1,*p=&stu1;A. stu1.ageB. student.ageC. p->ageD.(*p).age7.有以下说明和语句:struct worker{ int no;char *name;} work,*p=&work;则以下引用方式不正确...的是A.work.no B. (*p).no C. p->no D. work->no 8.已知有如下定义:struct a{ char x;double y;} data,*t;,若有t=&data,则对data中的成员的正确引用是A. (*t).data.xB. (*t).xC. t->data.xD. t.data.x9.设有如下定义:struck sk{ int a;float b;} data;int *p;若要使p指向data中的a域,正确的赋值语句是A. p=&a;B. p=data.a;C. p=&data.a;D. *p=data.a;10.下列程序的输出结果是#include <stdio.h>struct 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);}A. 5B. 6C. 7D. 811.下面程序的运行结果是#include <stdio.h>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. 0B. 1C. 3D. 612.若有以下说明和语句,则下面表达式中的值为1002的是struct student{ int num;int age;};struct student stu[3]={{1001,20},{1002,19},{1003,21}};struct student *p;p=stu;A.(p++)->ageB.(++p)->numC.(*p).numD.(*++p).age13.根据下面的定义,能打印出字母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[0]);B. printf("%c\n",class[3].name[1]);C. printf("%c\n",class[2].name[1]);D. printf("%c\n",class[2].name[0]);14.若有以下程序段:#include <stdio.h>struct dent{ int n;int *m;};int a=1,b=2,c=3;struct dent s[3]={{101,&a},{102,&b},{103,&c}};main(){ struct dent *p;p=s; ……}则以下表达式值为2是A. (p++)->mB. *(p++)->mC. (*p).mD. *(++p)->m15.C语言结构体类型变量在程序执行期间A. 所有成员一直驻留在内存中B. 只有一个成员驻留在内存中C. 部分成员驻留在内存中D. 没有成员驻留在内存中16.C语言共用体类型变量在程序运行期间A. 所有成员一直驻留在内存中B. 只有一个成员驻留在内存中C. 部分成员驻留在内存中D. 没有成员驻留在内存中17.在说明一个联合体变量时,系统分配给它的存储空间是A. 该联合体中第一个成员需存储空间B. 该联合体中最后一个成员所需存储空间C. 该联合体中占用最大存储空间的成员所需存储空间D. 该联合体中所有成员所需存储空间的总和18.以下程序在VC6.0下的运行结果是#include <stdio.h>main(){ union{ long a;int b;char c;} m;printf("%d\n",sizeof(m)); }A. 2B. 4C. 6D. 819.以下程序的输出结果是#include <stdio.h>union myun{ struct{ int x,y,z; } u;int k;} a;main(){ a.u.x=4;a.u.y=5;a.u.z=6;a.k=0;printf("%d\n", a.u.x);}A. 4B. 5C. 6D. 020.结构体变量成员的引用方式是使用运算符21.结构体指针变量成员的引用方式是使用运算符。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2013年结构体与联合体习题选择题1、若程序中有以下的说明和定义:struct abc{ int x;char y; } 花括号后少了分号。

struct abc s1,s2;则会发生的情况是______。

A) 编译时错B) 程序将顺序编译、连接、执行C) 能顺序通过编译、连接、但不能执行D) 能顺序通过编译、但连接出错2、有以下程序段struct st{ int x; int *y;}*pt;int a[]={1,2};b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是A) *pt->y B) pt->x C) ++pt->x D)(pt++)->x3、有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是______。

A) (p++)->num B) p->num C) (*p).num D) stu[3].age4、设有如下枚举类型定义enum language {Basic=3,Assembly=6,Ada=100,COBOL,Fortran};枚举量Fortran的值为______。

A) 4 B) 7 C) 102 D) 1035、以下叙述中错误的是_________。

A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名6、有以下程序段typedef struct NODE{ int num; struct NODE *next;} OLD;以下叙述中正确的是A)以上的说明形式非法B) NODE是一个结构体类型C) OLD是一个结构体类型D) OLD是一个结构体变量7、以下选项中不能正确把cl定义成结构体变量的是______。

1.typedef struct{int red;int green;int blue;} COLOR;COLOR cl;2.struct color cl{ int red;int green;int blue;};3.struct color{ int red;int green;int blue;}cl;4.struct{int red;int green;int blue;}c1;A) 1 B) 2C) 3 D) 48、设有以下语句typedef struct S{ int g; char h;} T;则下面叙述中正确的是______。

A)可用S定义结构体变量B)可以用T定义结构体变量C) S是struct类型的变量D) T是struct S类型的变量9、设有如下说明typedef struct ST{long a;int b;char c[2];} NEW;则下面叙述中正确的是_____。

A)以上的说明形式非法B) ST是一个结构体类型C) NEW是一个结构体类型D) NEW是一个结构体变量10、以下对结构体类型变量td的定义中,错误的是______。

A) typedef struct aa B) struct aa { int n; { int n;float m; float m;}AA; };AA td; struct aa td;C) struct D) struct{ int n; { int n;float m; float m;}aa; }td;struct aa td;11、根据下面的定义,能打印出字母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]);12、设有以下语句:struct st {int n; struct st *next;};static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p;p=&a[0];则表达式的值是6。

A) p++ ->n B) p->n++ C) (*p).n++ D) ++p->n13、下面程序的输出结果为} *p;int dt[4]={10,20,30,40};main(){ p=aa;printf("%d\n", ++( *p->y));}A) 10 B) 50 C) 51 D) 6020 60 60 7020 21 21 31 14、若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是__________。

A) s->next=NULL; p=p->next; p->next=s;B) p=p->next; s->next=p->next; p->next=s;C) p=p->next; s->next=p; p->next=s;D) p=(*p).next; (*s).next=(*p).next; (*p).next=s;15、下面程序的输出是main(){ enum team {my,your=4,his,her=his+10};printf("%d %d %d %d\n",my,your,his,her);}A) 0 1 2 3 B) 0 4 0 10 C) 0 4 5 15 D) 1 4 5 1516、下面程序的输出是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) 617、设有如下定义: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.a18、有以下程序: *#include<stdio.h>union pw{ int i; char ch[2]; } a;main(){ a.ch[0]=13; a.ch[1]=0; printf("%d\n",a.i); }程序的输出结果是。

(注意: ch[0]在低字节,ch[1]在高字节。

)A) 13 B) 14 C) 208 D) 20919、已知字符0的ASCII码为十六进制的30,下面程序的输出是___________。

main(){ union { unsigned char c;unsigned int i[4];} z;z.i[0]=0x39;z.i[1]=0x36;printf("%c\n",z.c);}A) 6 B) 9 C) 0 D) 320、字符'0'的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是_____________。

#include<stdio.h>main( ){ union { int i[2]; long k; char c[4]; }r,*s=&r;s->i[0]=0x39;s->i[1]=0x38;printf("%c\n",s->c[0]) ; }A) 39 B) 9 C) 38 D) 8填空题1、以下函数creat用来建立一个带头结点的单向链表,新产生的结点总是插在链表的末尾。

单向链表的头指针作为函数值返回.请填空:#include<stdio.h>struct list { char data; struct list * next; };struct list * creat(){ struct list * h,* p,* q;char ch;h=(struct list *) malloc(sizeof(struct list));p=q=h;ch=getchar();while(ch!='?'){ p=(struct list *)malloc(sizeof(struct list));p->data=ch;p->next=p;q=p;ch=getchar();}p->next='\0';return(h);}2、有以下说明定义和语句,可用a.day引用结构体成员day, 请写出引用结构体成员 a.day的其它两种形式(*b).day、b->day 。

struct{int day;char mouth;int year;}a,*b; b=&a;3、现有如图所示的存储结构,每个结点含两个域,data是指向字符串的指针hea域,next是指向结点的指针域。

请填空完成此结构的类型定义和说明。

struct link{ char *data ; struct link *next;} *head;4、若有以下说明和定义语句,则变量w在内存中所占的字节数是40。

union aa{ float x, y;char c[6];};struct st { union aa v; float w[5]; double ave; } w;//325、设有以下结构类型说明和变量定义,则变量a在内存所占字节数是32__ 。

相关文档
最新文档