|
第8章 结构体、共用体和枚举类型
|
发布人: |
陈裕雄 |
|
一、单项选择题 1.设有定义语句“struct {int x;int y;} d[2]={{1,3},{2,7}};” ,则printf(“%d\n”,d[0].y/d[0].x*d[1].x);的输出结果是 ( )。 A. 0 B. 1 C. 3 D.6
2.设有定义语句”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,15
3.以下对枚举类型名的定义中正确的是 ( )。 A.enum a={one,two,three}; B.enum a {a1,a2,a3}; C.enum a={‘1’,’2’,’3’}; D.enum a{“one”,”two”,”three”};
4.若有如下定义,则printf(“%d\n”,sizeof(them));的输出是 ( )。 typedef union{long x[2];int y[4];char z[8];}MYTYPE; MYTYPE them; A.32 B. 16 C. 8 D.24
5.设有以下说明和定义: typedef union {long i;int k[5];char c;} DATE; struct date {int cat;DATE cow; double dog;}too; DATE max; 则下列语句的执行结果是( )。 printf(“%d”,sizeof(struct date)+sizeof(max)); A. 26 B.30 C. 18 D.8
6.根据下面的定义,能打印出字母M的语句是( )。 struct person {char name[9];int age;}; struct person c[10]={“John”,17,”Paul”,19,”Mary”,18,”Adam”,16}; A.printf(“%c”,c[3].name) B.printf(“%c”,c[3].name[1]); C.printf(“%c”,c[2].name[1]); D.printf(“%c”,c[2].name[0]);
7.设有如下定义,则对data中的a 成员的正确引用是 ( )。 struct sk{int a;float b;} data,*p=&data; A.(*p).data.a B.(*p).a C. p->data.a D.p.data.a
8.以下结构体类型说明和变量定义中正确的是 ( )。 A.typedef struct B.struct REC; {int n; char c;}REC; {int n; char c;}; REC t1,t2; REC t1,t2; C.typedef struct REC ; D.struct {int n=0; char c=’A’;}t1,t2; {int n;char c;}REC t1,t2;
9.现有以下结构体说明和变量定义,如下图所示,指针p、q、r分别指向一个链表中连续的三个结点A、B、C。 struct node {char data; struct node *next; } *p,*q,*r; 现要将q和r 所指结点交换前后位置,同时要保持链表的连续,以下不能完成此操作的语句是( )。 A.q->next=r->next; p->next=r;r->next=q B.p->next=r;q->next=r->next;r->next=q C.q->next=r->next;r->next=q;q->next=r D.r->next=q;p->next=r;r->next=q->next
二、填空题 1.“.”称为________运算符,“->”称为_________运算符。 2.设有定义语句“struct {int a; float b; char c; }abc, *p_abc=&abc;” 则对结构型成员a的引用方法可以是:______ 、______ 、______ 、______ 3.若有以下说明和定义语句,则变量w在内存中所占的字节数是_______ union aa{float x; float y; char c[6];}; struct st{union aa v; float w[5]; double ave;}w;
三、程序分析题 1.阅读下列程序,写出运行结果。(字符0的ASCII码为十六进制的30) main() { union {char c; char i[4];}z; z.i[0]=0x39; z.i[1]=0x36; printf(“%c\n”,z.c); }
2.阅读程序,写出程序的运行结果。 main() {struct student { char name[10]; float k1; float k2; }a[2]={{“zhong”,100,70},{“wang”,70,80}},*p=a; printf (“\nname:%s total=%f”,p->name, p->k1+p->k2); printf(“\nname:%s total=%f\n”, a[1].name,a[1].k1+a[1].k2); }
3.阅读程序,写出程序的运行结果。 main() {enum em{em1=3,em2=1,em3}; char *aa[]={“AA”,”BB”,”CC”,”DD”}; printf(“%s%s%s\n”, aa[em1],aa[em2],aa[em3]); }
4.阅读程序,写出程序的运行结果。 #include <stdio.h> #include <string.h> typedef struct { char name[9]; char sex; float score[2]; } STU; void f( STU a) { STU b={“Zhao” ,’m’,85.0,90.0} ; int i; strcpy(a.name,b.name); a.sex=b.sex; for(i=0;i<2;i++) a.score[i]=b.score[i]; } main() { STU c={“Qian”,’p’,95.0,92.0}; f(c); printf(“%s,%c,%2.0f,%2.0f\n”,c.name,c.sex,c.score[0],c.score[1]); }
5.阅读程序,写出程序的运行结果。 #include <string.h> struct STU { int num; float TotalScore; }; void f(struct STU p) { struct STU s[2]={{20088,550},{20099,537}}; p.num=s[1].num; p.TotalScore=s[1].TotalScore; } main() { struct STU s[2]={{20098,703},{20089,580}}; f(s[0]); printf(“%d %f\n”,s[0].num,s[0].TotalScore); }
四、程序设计题 1.用结构体存放下表中的数据,然后输出每人的姓名和实发工资(基本工资+浮动工资-支出)。 姓名 基本工资 浮动工资 支出 Tom 1240.00 800.00 75.00 Lucy 1360.00 900.00 50.00 Jack 1560.00 1000 80.00
2.编写程序,输入10个学生的学号、姓名、3门课程的成绩,求出总分最高的学生姓名并输出。
3.编写程序,输入下列学生成绩表中的数据,并用结构体数组存放。然后统计并输出三门课程的名称和平均分数。 student_name 面向对象程序设计(C#) SQL SERVER C语言程序设计 Lincoln 97.5 89.0 78.0 Clinton 90.0 93.0 87.5 Bush 75.0 79.5 68.5 Obama 82.5 69.5 54.0
4.设有a、b两个单链表。每个链表的结点中有一个数据和指向下一结点的指针,a、b为两链表的头指针: (1)分别建立这两个链表。 (2)将a 链表中的所有数据相加并输出其和。 (3)将b 链表接在a链表的尾部连成一个链表。 |
|
|