结构体与共用体
- 格式:doc
- 大小:63.00 KB
- 文档页数:13
结构体与共用体笔记定义结构体C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。
在其他一些高级语言中称为“记录”.定义后的结构体类型和系统提供的标准类型(如int, char, float, double 等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。
定义一个结构体类型的一般形式为:struct 结构体名{ 成员表列};注意:1.结构体类型的名字是由一个关键字struct和结构体名组合而成的(例如struct Student) ,结构体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。
上面的结构体声明中Student就是结构体名(结构体标记)。
2.花括号内是该结构体所包括的子项,称为结构体的成员。
“成员表列"(member list)也称为“域表”(field list),成员表列由若干个成员组成,每一个成员是结构体中的一个域。
对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。
例如:struct stu{int num;char name[20];char sex;float score;};3.一个结构体的成员可以属于另一个结构体类型(嵌套)。
例如:struct Date //声明一个结构体类型struct Date{ int month;//月int day;//日int year;//年}struct Student//声明一个结构体类型struct Student{ int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date 类型char addr[30];};结构体类型变量1.定义结构体类型变量说明结构变量有以下三种方法。
试卷编号:825所属语言:C语言试卷方案:结构体与共用体试卷总分:90分共有题型:5种一、填空共5题(共计10分)第1题(2.0分)题号:205结构体是不同数据类型的数据集合,作为数据类型,必须先说明结构体【1】,再说明结构体变量.答案:=======(答案1)=======类型第2题(2.0分)题号:208将函数funl 的入口地址赋给指针变量p的语句是【1】.答案:=======(答案1)=======p=funl;第3题(2.0分)题号:232设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【1】 . struct stud{ char num[6];int s[4];double ave;} a,*p;答案:=======(答案1)=======第4题(2.0分)题号:345若在程序中用到"strlen()"函数时,应在程序开头写上包含命令# include "【1】". 答案:=======(答案1)=======string.h第5题(2.0分)题号:803预处理命令行都必须以【1】号开始.答案:=======(答案1)=======#二、单项选择共20题(共计40分)第1题(2.0分)题号:464以下描述中,正确的是()。
A:预处理是指完成宏替换和文件包含中指定的文件的调用B:预处理指令只能位于C源文件的开始C:C源程序中凡是行首以#标识的控制行都是预处理指令D:预处理就是完成C编译程序对C源程序第一遍扫描,为编译词法和语法分析作准备答案:C第2题(2.0分)题号:472下列程序运行结果为:#define P 3#define S(a) P*a*amain(){int ar;ar=S(3+5);printf("\n%d",ar);}A:192B:29D:25答案:B第3题(2.0分)题号:488当定义一个结构体变量时,系统分配给它的内存是()。
A:各成员所需内存量的总和B:结构中第一个成员所需内存量C:结构中最后一个成员所需内存量D:成员中占内存量最大者所需的容量答案:A第4题(2.0分)题号:489设有如下定义: struct sk {int a; float b;} data,*p; 若要使p指向data中的a域,正确的赋值语句是()。
A:p=(struct sk*)&data.a;B:p=(struct sk*) data.a;C:p=&data.a;D:*p=data.a;答案:A第5题(2.0分)题号:490以下对枚举类型名的定义中正确的是()。
A:enum a={sum,mon,tue};B:enum a {sum=9,mon=-1,tue};C:enum a={"sum","mon","tue"};D:enum a {"sum","mon","tue"};答案:B第6题(2.0分)题号:491在下列程序段中,枚举变量c1,c2的值依次是()。
enum color {red,yellow,blue=4,green,white} c1,c2;c1=yellow;c2=white;printf("%d,%d\n",c1,c2);A:1,6B:2,5D:2,6答案:A第7题(2.0分)题号:545C程序中的宏展开是在()。
A:编译时进行的B:程序执行时进行的C:编译前预处理时进行的D:编辑时进行的答案:C第8题(2.0分)题号:546C语言中,定义结构体的保留字是()。
A:unionB:structC:enumD:typedef答案:B第9题(2.0分)题号:547结构体类型的定义允许嵌套是指()。
A:成员是已经或正在定义的结构体型B:成员可以重名C:结构体型可以派生D:定义多个结构体型答案:A第10题(2.0分)题号:548对结构体类型的变量的成员的访问,无论数据类型如何都可使用的运算符是()。
A:.B:->C:*D:&答案:A第11题(2.0分)题号:549相同结构体类型的变量之间,可以()。
A:相加B:赋值C:比较大小D:地址相同答案:B第12题(2.0分)题号:550使用共用体变量,不可以()。
A:节省存储空间B:简化程序设计C:进行动态管理D:同时访问所有成员答案:D第13题(2.0分)题号:551enum a {sum=9,mon=-1,tue};定义了()。
A:枚举变量B:3个标识符C:枚举数据类型D:整数9和-1答案:C第14题(2.0分)题号:552在定义构造数据类型时,不能()。
A:说明变量B:说明存储类型C:初始化D:末尾不写分号答案:D第15题(2.0分)题号:557若有int *p=(int *)malloc(sizeof(int));则向内存申请到内存空间存入整数123的语句为()。
A:scanf("%d",p);B:scanf("%d",&p);C:scanf("%d",*p);D:scanf("%d",**p);答案:A第16题(2.0分)题号:558若有int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则输出结果不为5的语句为()。
A:printf("%d",*(a+5));B:printf("%d",p[5]);C:printf("%d",*(p+5));D:printf("%d",*p[5]);答案:D第17题(2.0分)题号:562int (*p)[6]; 它的含义为()。
A:具有6个元素的一维数组B:定义了一个指向具有6个元素的一维数组的指针变量C:指向整型指针变量D:指向6个整数中的一个的地址答案:B第18题(2.0分)题号:563char *match(char c)是()。
A:函数定义的头部B:函数预说明C:函数调用D:指针变量说明答案:A第19题(2.0分)题号:571static struct {int a1;float a2;char a3;}a[10]={1,3.5,'A'};说明数组a是地址常量,它有10个结构体型的下标变量,采用静态存储方式,其中被初始化的下标变量是()。
A:a[1]B:a[-1]C:a[0]D:a[10]答案:C第20题(2.0分)题号:701以下叙述中不正确的是()。
A:预处理命令行都必须以#号开始B:在程序中凡是以#号开始的语句行都是预处理命令行C:C程序在执行过程中对预处理命令行进行处理D:以下是正确的宏定义 #define IBM_PC答案:C三、程序填空共1题(共计10分)第1题(10.0分)题号:73/*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:用结构体调用的方法编程。
要求输入A,B,C,D,E,F五个元素的数值,并按从大到小的顺序输出。
-------------------------------------------------------*/#include <stdio.h>#define N sizeof tbl/sizeof tbl[0] /*取得数组有多少个元素*/int A,B,C,D,E,F;struct ele{char vn;/***********SPACE***********/int 【?】;}tbl[]={{'A',&A},{'B',&B},{'C',&C},{'D',&D},{'E',&E},{'F',&F}},t;main(){int k,j,m;/***********SPACE***********/for(k=0;k<【?】;k++){printf("Enter data for %c\n",tbl[k].vn); scanf("%d",tbl[k].vp);}m=N-1;while(m>0){for(k=j=0;j<m;j++)/***********SPACE***********/if(*tbl[j].vp<【?】){t=tbl[j];tbl[j]=tbl[j+1];tbl[j+1]=t;k=j;}/***********SPACE***********/【?】;}for(k=0;k<N;k++)printf("%c(%d)",tbl[k].vn,*tbl[k].vp); printf("\n");}答案:=======(答案1)=======*vp=======(答案2)=======N=======(答案3)=======*tbl[j+1].vp=========或=========*tbl[ j + 1 ].vp=======(答案4)=======m=k四、程序改错共2题(共计20分)第1题(10.0分)题号:139/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:下题是一段有关结构体变量传递的程序.------------------------------------------------------*/#include <stdio.h>struct student{int x;char c;} a;f(struct student b){b.x=20;/**********FOUND**********/b.c=y;printf("%d,%c",b.x,b.c);}main(){a.x=3;/**********FOUND**********/a.c='a'f(a);/**********FOUND**********/printf("%d,%c",a.x,b.c);}答案:=======(答案1)=======b.c='y';=======(答案2)=======a.c='a';=======(答案3)=======printf("%d,%c",a.x,a.c);第2题(10.0分)题号:217/*------------------------------------------------------ 【程序改错】--------------------------------------------------------功能:用指针作函数参数,编程序求一维数组中的最大和最小的元素值.------------------------------------------------------*/#include <stdio.h>#define N 10/***********FOUND***********/void maxmin(int arr[ ],int *pt1, *pt2, n){int i;/***********FOUND***********/*pt1=*pt2=&arr[0];for(i=1;i<n;i++){/***********FOUND***********/if(arr[i]<*pt1) *pt1=arr[i];if(arr[i]<*pt2) *pt2=arr[i];}}main( ){int array[N]={10,7,19,29,4,0,7,35,-16,21},*p1,*p2,a,b;/***********FOUND***********/*p1=&a;*p2=&b;maxmin(array,p1,p2,N);printf("max=%d,min=%d",a,b);}答案:=======(答案1)=======void maxmin(int arr[ ],int *pt1,int *pt2,int n)=========或=========maxmin(int arr[ ],int *pt1,int *pt2,int n)=========或=========void maxmin(int *arr,int *pt1,int *pt2,int n)=======(答案2)=======*pt1=*pt2=arr[0];=========或=========*pt1=*pt2=*(arr+0);=========或=========*pt2=*pt1=arr[0];=======(答案3)=======if(arr[i]>*pt1) *pt1=arr[i];=========或=========if(*(arr+i)>*pt1) *pt1=arr[i];=========或=========if(*pt1<*(arr+i)) *pt1=arr[i];=========或=========if(*pt1<arr[i]) *pt1=arr[i];=======(答案4)=======p1=&a;p2=&b;五、程序设计共1题(共计10分)第1题(10.0分)题号:226/*------------------------------------------------ 【程序设计】--------------------------------------------------功能:编写函数实现两个数据的交换,在主函数中输入任意三个数据,调用函数对这三个数据从大到小排序。