下午好 ,今天是: 2024年11月25日
|
|
|
|
|
|
 
单元练习
第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链表的尾部连成一个链表。
答案:
一、选择题(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()
{
}
 

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