当前位置:文档之家› 第九章 习题及答案

第九章 习题及答案

第九章习题一、选择题1.以下选项中不能正确把cl定义成结构体变量的是( )A)typedef struct B)struct color cl{ int red; { int red;int green; int green;int blue; int blue;} COLOR; COLOR cl; };C)struct color D)struct{ int red; { int red;int green; int green;int blue; int blue;} cl; } cl;2.有以下说明和定义语句struct student{ int age; char num[8];};struct student stu[3]={{20,"200401"},{21,"200402"},{10\9,"200403"}};struct student *p=stu;以下选项中引用结构体变量成员的表达式错误的是( )A) (p++)->num B)p->num C)(*p).num D)stu[3].age3.有以下结构体说明、变量定义和赋值语句struct STD{char name[10];int age;char sex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句中错误引用结构体变量成员的是( )。

A)scanf(“%s”,s[0].name); B)scanf(“%d”,&s[0].age);C)scanf(“%c”,&(ps->sex)); D)scanf(“%d”,ps->age);4.以下叙述中错误的是()A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名5.有以下程序段()typedef struct node { int data; struct node *next; } *NODE;NODE p;以下叙述正确的是(C)A)p是指向struct node结构变量的指针的指针B)NODE p;语句出错C)p是指向struct node结构变量的指针D)p是struct node结构变量6.若有以下定义和语句union data{ int i; char c; float f;}x;int y;则以下语句正确的是( )。

A)x=10.5; B)x.c=101; C)y=x; D)printf(“%d\n”,x); 7.有以下程序main(){ union { unsigned int n;unsigned char c;}u1;ul.c=`A`;printf("%c\n",u1.n);}执行后输出结果是()A) 产生语法错B) 随机值 C) A D) 658.有以程序#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.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.sex,c.score[0],c.score[1]); }程序的运行结果是A)Qian,p,95,92 B) Qian,m,85,90C)Zhao,p,95,92 D) Zhao,m,85,909.现有以下结构体说明和变量定义,如图所示,指针p,q,r分别指向一个链表中连续的三个结点。

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; p->next=r;D) r->next=q; p->next=r; q-next=r->next;10.有以下程序段struct st{ int x; int *y;}*pt:int a[]={1,2},b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是( )A) *pt->y B) pt->x C) ++pt->x D) (pt++)->x二、填空题1.设有说明struct DATE{int year;int month; int day;};请写出一条定义语句,该语句定义d为上述结构体变量,并同时为其成员year、month、day 依次赋初值2006、10、1。

2.已有定义如下:struct node{ int data;struct node *next;} *p;以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间。

请填空。

p = (struct node *)malloc( );3.以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并做为函数值返回。

请填空:#include<stdio.h>#define N 3typedef struct{int num;char nam[10]; char sex;}SS;int fun(SS person[]){int i,n=0;for(i=0;i<N;i++)if( ==’M’ ) n++;return n;}main(){SS W[N]={{1,”AA”,’F’},{2,”BB”,’M’},{3,”CC”,’M’}}; int n;n=fun(W); printf(“n=%d\n”,n);}4.以下程序运行后的输出结果是( ) 。

struct NODE{ int k;struct NODE *link;};main(){ struct NODE m[5],*p=m,*q=m+4;int i=0;while(p!=q){p->k=++i; p++;q->k=i++; q--;}q->k=i;for(i=0;i<5;i++) printf("%d",m[i].k);printf("\n");}5.以下程序的功能是:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请从与下划线处号码对应的一组选若中选择出正确的选项。

#includestuct node{ char data; struct node *next;};(1) CreatList(char *s){ struct node *h,*p,*q);p=q=h;while(*s!='\0')p->data= (2) ;q->next=p;q= (3) ;s++;}p->next='\0';return h;}main(){ char str[]="link list";struct node *head;head=CreatList(str);...}三、编程题1. 定义一个能正常反映教师情况的结构体teacher,包含教师姓名、性别、年龄、所在部门和薪水;定义一个能存放两人数据的结构体数组tea,并用如下数据初始化:{{“Mary “, ‘W’,40, ‘Computer’ , 1234 },{“Andy“, ‘M’,55, ‘English’ , 1834}};要求:分别用结构体数组tea和指针p输出各位教师的信息,写出完整定义、初始化、输出过程。

2.定义一个结构体变量(包括年、月、日)。

计算该日在本年中是第几天,注意闰年问题。

3.构建简单的手机通讯录,手机通讯录包括信息(姓名、年龄、联系电话),要求实现新建、查询功能。

假设通信录最多容纳50名联系人信息。

4.建立一个教师链表,每个结点包括学号(no),姓名(name[8]),工资(wage),写出动态创建函数creat和输出函数print。

5.在上一题基础上,假如已经按学号升序排列,写出插入一个新教师的结点的函数Insert。

第9章习题答案一、选择题1-5 B D D A C 6-10 B C A D C二、填空题1.struct DATA d={2006,10,1};2.sizeof(struct node)3.person[i].sex4.134315.(1)struct node* (2)*s (3)p三、编程题1. 定义一个能正常反映教师情况的结构体teacher,包含教师姓名、性别、年龄、所在部门和薪水;定义一个能存放两人数据的结构体数组tea,并用如下数据初始化:{{“Mary “, ‘W’,40, ‘Computer’ , 1234 },{“Andy“, ‘M’,55, ‘English’ , 1834}};要求:分别用结构体数组tea和指针p输出各位教师的信息,写出完整定义、初始化、输出过程。

#include<stdio.h>struct teacher{ char name[8];char sex;int age;char department[20];float salary;} ;struct teacher tea[2]= {{"Mary ", 'W',40, "Computer" , 1234 }, {"Andy ", 'M',55, "English" , 1834}} ;main(){ int i;struct teacher *p;for( i=0;i<2;i++)printf("%s,\t%c,\t%d,\t%s,\t%f",tea[i].name,tea[i].sex,tea[i].age,tea[i].department,tea[i].salary);for(p=tea;p<tea+2;p++)printf("%s,\t%c,\t%d,\t%s,\t%f", p->name, p->sex, p->age, p->department, p->salary);}2. 定义一个结构体变量(包括年、月、日)。

相关主题