上午好 ,今天是: 2024年11月22日
|
|
|
|
|
|
 
单元练习
第1章 C语言程序设计基本知识
第2章 算法及其描述
第3章 数据类型及表达式
第4章 结构化程序设计
第5章 数组
第6章 函数与预处理
第7章 指针
第8章 结构体、共用体和枚举类型
第9章 位运算
第10章 文件
模拟测试
模拟测试一
模拟测试二
模拟测试三
第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链表的尾部连成一个链表。
 

Copyright©2012,All Rights Reserved
版权所有:广东南方职业学院计算机系 设计:陈裕雄