|
第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链表的尾部连成一个链表。 |
|
答案: |
一、选择题(10小题)
题号 1 2 3 4 5 6 7 8 9 10 答案 D C B C B D B A D D
二、填空题(3小题) 1. 成员 指向 2. abc.a p_abc->a (*p_abc).a 3. 34
三、程序分析题(5小题) 1. 9 2. name:zhong total=170.0000 name:wang total=150.00000 3. DDBBCC 4. Qian,p,95,92 5. 20098 703.000000 四、程序设计题(4小题) 1、#define N 3 struct person { char *name; float wages; float floatwages; float expenditure; float realpay; }; main() { struct person p[N]; int i=0; for(i=0;i<N;i++) { scanf("%s,%f,%f,%f",p[i].name,&p[i].wages,&p[i].floatwages,&p[i].expenditure); p[i].realpay=p[i].wages+p[i].floatwages+p[i].expenditure; } for(i=0;i<N;i++) printf("%s,%f",p[i].name,p[i].realpay); }
2、#define N 10 struct student { long number; char *name; float score[4]; }; main() { struct student stu[N]; int i,max_i=0; float max scanf("%ld,%s,%f,%f,%f",&stu[0].number,stu[0].name,&stu[0].score[0],&stu[0].score[1],&stu[0].score[2]); max=stu[0].score[3]=stu[0].score[0]+stu[0].score[1]+stu[0].score[2]; for(i=1;i<N;i++) {scanf("%ld,%s,%f,%f,%f",&stu[i].number,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); stu[i].score[3]=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; if (max<stu[i].score[3]) max=stu[i].score[3],max_i=i; } printf("max:%s,%f",stu[max_i].name,stu[max_i].score[3]); }
3、#include "stdio.h" struct student { char *name; float cc; float sql; float c; float ave;}; main() { struct student stu[4]; int i=0; for(;i<4;i++) { scanf("%s,%f,%f,%f",stu[i].name ,&stu[i].cc ,&stu[i].sql ,&stu[i].c); stu[i].ave=(stu[i].cc+stu[i].sql+stu[i].c)/3.0; } for(i=0;i<4;i++) printf("%s,%f",stu[i].name ,stu[i].ave); }
4、#include "stdio.h" #include "stdlib.h" /*定义链表数据结构 */ typedef struct node{ float data; /*这里设数据类型为float */ struct node *next; }Lnode; Lnode *a,*b; /*建立a链表 */ Lnode * newcreate(Lnode *a,int n) /*建立n个元素的a链表*/ { int i; float x; Lnode *q,*s; q=a; for(i=0;i<n;i++) { printf("请输入链表的第%d个数据:",i); scanf("%f",&x); s=(Lnode *)malloc(sizeof(Lnode)); s->data=x; q->next=s; q=q->next; } return(a); } /* 求a链表的所有数据之和 */ float sum (Lnode *a) { float total=0.0; Lnode *p; p=a->next; /*p指向a的第一个结点*/ while(p) { total=total+(p->data); p=p->next; } return total; } /*将b链接到a的后面*/ Lnode *relation(Lnode *a,Lnode *b) { Lnode *q,*p; q=a; p=a->next; while(p) { q=p; p=p->next; } q->next=b; return(a); } main() { } |
|