第九章 结构体

课程名称:C语言程序设计 总分:32 答题时长:100分钟 出卷人:王赛楠

、单项选择题:(共9题,9分)
1 下面对结构数据类型的错误叙述是_______。
结构变量可以在说明结构类型后定义,也可在说明结构时定义。
结构可由若干个成员组成,各成员的数据类型可以不同。
定义一个结构类型后,编译程序要为结构的各成员分配存储空间。
结构变量的各成员可通过结构变量名和指向结构变量的指针引用。
2 设有以下说明语句

struct stu

{

int a ;

float b ;

} stutype ;

则下面的叙述不正确的是_______。

struct是结构体类型的关键字。
structs stu是用户定义的结构体类型。
stutype是用户定义的结构体类型名。
a和b都是结构体成员名。
3 若有以下说明和语句。对结构体变量person的出生年月进行赋值时,下面正确的赋值语句是(         )。

struct date

{ int year,month,day;}

struct worklist

{ char name[20];

char sex;

struct date birthday;

} person;

year=1958;
birthday.year=1958;
person.birthday.year=1958;
person.year=1958;
4 以下对结构体变量的定义错误的是_______。
5 根据下面的定义,能打印出字母z的语句是_______。

 struct student

{

  char name[10] ;

  int age ;

} ;

struct student stu[3] = { "li xiang" , 17 , "zhang san" , 18 ,"wang wu" , 18 } ;

printf( "%c\n" , stu[2].name ) ;  
printf( "%c\n" , stu[2].name[1] ) ;
printf( "%c\n" , stu[1].name[1] ) ; 
printf( "%c\n" , stu[1].name[0] ) ;
6 以下scanf函数调用语句中对结构体变量成员的不正确引用是_______。

struct pupil

{

char name[20] ;

int age ;

int sex ;

} pup[5] , *p = pup ;

scanf( "%s" , pup[0].name ) ;
scanf( "%d" , &pup[0].age ) ;
scanf( "%d" , &( p->sex ) ) ;
scanf( "%d" , ( p->age ) ) ;
7 若有以下说明和语句。下述表达式中,值为72的一个是(         )。

struct person

{ char name[10];

int age;

}class[10]={"LiMing",29,"ZhangHong",21,"WangFang",22};

 class[0]->age + class[1]->age+ class[2]->age
 class[1].name[5] 
 person[1].name[5]
clase->name[5]
8 有定义如下。如果 p=&data;则对于结构变量data的成员a的正确引用是(         )。

struct sk

{ int a;

float b;

}data ,*p;

(*)data.a 
 (*p).a
p->data.a 
p.data.a
9 若有以下说明和语句。以下引用方式不正确的是(         )。

struct student

{ int no;

char *name;

}work, *p=&work;

work.no
 (*p).no
 p->no
work->no
编程题:(共1题,8分)
1 编写一个程序,实现从键盘输入3个学生数据(每个学生的数据包括学号、姓名、2门课程成绩的),输出每个学生2门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、2门课的成绩、平均分数)。

 

要求用input函数输入3个学生数据;用average函数求每个学生总平均成绩;用max函数找出平均成绩最高分的学生数据。

程序阅读题:(共3题,15分)
1 下面程序的运行结果是_______。

#include<stdio.h>

struct stu

{

       int x ;

       int *y ;

} *p ;

int dt[4] = {10 , 20 , 30 , 40 } ;

struct stu a[4] = { 50 , &dt[0] , 60 , &dt[1] , 70 , &dt[2] , 80 , &dt[3] } ;

int main( )

{

       p = a ;

       printf( "%d," , ++p->x ) ;

       printf( "%d," , ( ++p )->x ) ;

       printf( "%d\n" , ++( *p->y ) ) ;

       return 0 ;

}

2 下面程序的运行结果是_______。

#include<stdio.h>

struct  REC

{

       int num ;

       double s ;

};

void fun1(struct  REC  x )

{

       x.num = 23 ; x.s = 88.5 ;

}

int main( )

{

    struct  REC  a = { 16 , 90.0 } ;

    fun1( a ) ;

    printf( "%d\n" , a.num ) ;

       return 0 ;

}

3 下面程序的运行结果是_______。

#include<stdio.h>

#include<string.h>

struct A

{

       int a ;

    char b[10] ;

    double c ;

 };

void f( struct A *t ) ;

int main( )

{

    struct A  a = {1001 , "zhangDa" , 1098.0 } ;

       f( &a ) ;

       printf( "%d,%s,%6.1f\n" , a.a , a.b , a.c ) ;

       return 0 ;

}

void f( struct A *t )

{

       strcpy( t->b , "ChangRong" ) ;

}