第九章 结构体

发布时间:2015-10-06 18:21:30   来源:文档文库   
字号:

一、概念题

F T T T F T T

二、判断题

1. 结构体中的成员不可以单独使用(F )。

2. 成员名可以与程序中的变量名相同,二者不代表同一对象(T )。

3. 不能将一个结构体变量作为一个整体进行输入输出(T

4. 结构体变量所占内存长度是各成员占的内存长度之和(T )。

5. 结构体中的成员不可以单独使用(F )。

9. 一个结构体变量的指针就是该变量所占内存段的起始地址(T )。

10. 用结构体变量作实参,形参也必须是同类型的结构体变量(T )。

三、单选题

1. 设变量定义如下,则对其中的结构分量num正确的引用是( )

struct student {

int num ;

char name[20];

float score;

} stud[10];

A. stud[1].num=10; B. student.stud.num=10;

C. struct.stud.num=10; D. struct student.num=10;

2. 已知职工记录描述如下,设变量w中的“生日”是“19931025日”,下列对“生日”的正确赋值方式是( )。

struct worker

{

int no;

char name[20];

char sex;

struct birth{ int day; int month; int year;}a;

};

struct worker w;

A day=25 month=10 year=1993

B w.birth.day=25; w.birth.month=10; w.birth.year=1993;

C w.day=25; w.month=10; w.year=1993;

D w.a.day=25; w.a.month=10; w.a.year=1993;

3. 对于以下的变量定义,语句( )在语法和语义上都是正确的。

struct node {

float x,y;

char s[10];

} point={1,2,”abc”},*p;

A. *p=point; B. p=&point;

C. point=p; D. p->x=point.y;

4. 设有以下语句

typedef struct S

{ int g;

char h;} T;

则下面叙述中正确的是( )。

A. S定义结构体变量 B. 可以用T定义结构体变量

C. Sstruct类型的变量 D. Tstruct S类型的变量

5. 设有如下说明

typedef struct na{ int n; char c; double x;}STD;

则以下选项中,能正确定义结构体数组并赋初值的语句是( )。

A. STD tt[2]={{1,'A',62},{2, 'B',75}};

B. STD tt[2]={{1,"A",62},2, "B",75};

C. struct tt[2]={{1, 'A'},{2, 'B'}};

D. struct tt[2]={{1,"A",62.5},{2, "B",75.0}};

6. 若要说明一个类型名STP,使得定义语句STP s等价于char *s,以下选项中正确的是( )。

A. typedef STP char *s; B. typedef *char STP;

C. typedef stp *char; D. typedef char* STP;

7. 设有如下定义:

struct ss{ char name[10];

int age;

char sex;

}std[3],*p=std;

下面各输入语句中错误的是( )。

A. scanf("%d",&(*p). age); B. scanf("%s",&std.n ame);

C. scanf("%c",&std[0].sex) D. scanf("%c",&(p-> sex));

8. 以下程序执行后输出结果是( )。

main()

{ union { unsigned int n;

unsigned char c;

}u1

ul.c=’A’;

printf("%c\n",u1.n);

}

A. 产生语法错 B. 随机值 C. A D. 65

四、程序填空题

1. 运行以下程序将打印出如下结果:

#define NULL 0

struct person

{ char *nam;

char sex;

struct person *next;};

main()

{ struct person a,b,c,d,*head,*s;

a.nam="Li ming"; a.sex='W';

b.nam="Hang kai"; b.sex='M';

c.nam="Liu fei"; c.sex='M';

d.nam="Fang ke"; d.sex= 1’w’ ;

head=&a;

a.next= 2 &b;

b.next= 3&d ;

d.next=NULL;

s=head;

do{

printf("%s4 %c \n",s->nam,s->sex);

s=s->next;

}while(s!=NULL);

}

2. 以下程序中给指针p分配三个double型动态内存单元,请填空。

# include

main ( )

{ double *p;

p=(double *) malloc(1sizeof(double));

p[0]=1.5;p[1]=2.5;p[2]=3.5;

printf("%f%f%f\n",p[0],p[1],p[2]);

}

3. 已知结构数组person中存有N个人员的姓名和年龄,以下程序的功能为输出数组中最大者的姓名和年龄。请填空:

#define N 3

struct man

{char name[20];int age;};

struct man find(struct man *p ,int n)

{struct man *q;

int i;

q=p;

for(i=0;i

{if( p->age>q->age5)q=p;

p++;

}

return q;

}

main()

{ struct man *p, *q;

struct man person[N]={zhang,27,li,18,wang,73};

p=person;

q= 6 find(p,N) ;

printf(“年龄最大者为:%s,其年龄为:%d\n”,q->name, q->age7)

}

4. 已知head指向一个带头结点的链表,链表中每个结点包含整型数据域(data)和指向链表结点的指针域(next),以下函数返回链表中所有结点数据域之和,请填空:

struct list

{ int data;

struct list *next;

};

main()

{struct list *head;

int s;

s=sum(head);

}

sum( struct list *h 5)

{struct list *p;

int s=0;

p=h->next;

while(p!=NULL)

{s= p->date 6;

p=  p->next 7;

}

return s;

}

5. 下列程序读入时间数值,将其加1秒后,输出,时间格式为hh:mm:ss,即时:分:秒。当小时等于24小时,置为0

#include

struct{int hour;int minute;int second;}time;

main()

{scanf(“%d:%d:%d”, &time.hour,&time.minute,&time.second1);

time.second++;

if(2time.second ==60){

time.minute++;

3time.second=0;

if(time.minute==60)

{time.hour++;

time.minute=0;

if(time.hour==24)time.hour=0;

}

}

printf(“%d:%d:%d\n”,time.hour,time.minute,time.second);

}

6. 下列函数用于将链表中各结点的数据依次输出。请填空:

struct student{

int data;

struct student *next;

}

void out(struct student *head)

{8struct student *p;

p=head;

if(head!=NULL)

do{

printf(“%d\n”,p->data);

9P->next;

}while(10p!=NULL);

}

五、程序阅读题

1. 以下程序执行后输出结果:2041 2044

struct STU{ char name[10];

int num; };

void f1(struct STU c)

{ struct STU b={"LiSiGuo",2042};

c=b;

}

void f2(struct STU *c)

{ struct STU b={"SunDan",2044};

*c=b;

}

main( )

{ struct STU a={"YangSan",2041},b={"WangYin",2043};

f1(a);f2(&b);

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

}

2. 以下程序执行后输出结果是:580 550

struct STU

{ char name[10];

int num;

int Score;

};

main( )

{ struct STU s[5]={{"YangSan",20041,703},{"LiSiGuo",20042,580},

{"wangYin",20043,680},{"SunDan",20044,550},

{"Penghua",20045,537}},*p[5],*t;

int i,j;

for(i=0;i<5;i++) p[i]=&s[i];

for(i=0;i<4;i++)

for(j=i+1;j<5;j++)

if(p[i]->Score>p[j]->Score)

{ t=p[i];p[i]=p[j];p[j]=t;}

printf("5d %d\n",s[1].Score,p[1]->Score);

}

3. 以下程序的运行结果是:。2002shangxian

# include

typedef struct student{

char name[10];

long sno;

float score;

}STU;

main( )

{ STU a={"zhangsan",2001,95},b={"Shangxian",2002,90},c={"Anhua",2003,95},d,*p=&d;

d=a;

if(strcmp(a.name,b.name)>0) d=b;

if(strcmp(c.name,d.name)>0) d=c;

printf("%ld%s\n",d.sno,p->name);

}

4. 以下程序执行后的输出结果是:shen

#include
struct stu
{int num;char name[10];int age;};
void py(struct stu *p)
{printf("%s\n",(*p).name);}
void main()
{struct stu student[3]={{1001,"Sun",25},
{1001,"Ling",23},
{1003,"Shen",22}};
py(student+2);
}

5. 以下程序执行后的输出结果是:

# include
void main()
{ struct T1 { char c[4], *s;} s1={"abc", "def"};
struct T2 { char *cp; struct T1 ss1;} s2={"ghi", {"jkl", "mno"}};
printf("%c, %c\n", s1.c[0], *s1.s);
printf("%s, %s\n", s1.c, s1.s);
printf("%s, %s\n", s2.cp, s2.ss1.s);
printf("%s, %s\n", ++s2.cp, ++s2.ss1.s);
}

6. 以下程序执行后的输出结果是: 4

#include

struct NODE{

int num;

struct NODE *next;

};

main( )

{ struct NODE *p,*q,*r;

int sum=0;

p=(struct NODE *)malloc(sizeof(struct NODE));

q=(struct NODE *)malloc(sizeof(struct NODE));

r=(struct NODE *)malloc(sizeof(struct NODE));

p->num=1;q->num=2;r->num=3;

p->next=q;q->next=r;r->next=NULL;

sum+=q->next->num;sum+=p->num;

printf("%d\n",sum);

}

7. 以下程序执行后输出结果:2,4,6,8,10

# include
#define LEN sizeof(struct line)
struct line
{ int num ;
struct line *next;
};
void main( )
{ int k ;
struct line *p , *head ;
head=NULL;
for(k=10; k>0; k--){
p=(struct line *) malloc (LEN) ;
p->num=k;
p->next=head;
head=p;
}
while((p=p->next)!=NULL){
printf("%d, ", p->num) ;
p=p->next;
}
}

六、程序设计题

1. 定义一个结构体变量,其中每个成员都从键盘接收数据,然后对结构中的浮点数求和,并显示运算结果。

提示:结构体类型为:

struct

{ char name[8];

int age;

char sex[2];

char depart[20];

float w1,w2,w3,w4,w5;

}a;

注意:结构体成员的引用方法。

2. 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天。注意闰年问题。

提示:计算该日是本年中的第几天,是从本年11日起。

3. 5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,要求在屏幕上显示出3门课程的平均成绩,以及最高分数的学生的数据(包括学号、姓名、3门课程成绩、平均分)。

提示:定义结构体数组类型为:

struct student

{ char num[6];

char name[8];

int score[3];

float avr;

} stu[5];

最高分数是指每个学生3门课程的平均分最高。

4. 设有一组学生的成绩数据已经放在结构数组BOY中,计算各个学生的不及格人数。

1)要求:使用结构指针变量作为函数参数编程。

struct stu

{ int num;

char *name;

char sex;

float score;

}boy[5]={{101,“li ping ”,’m’,45},

{102,“zhang ping”,’m’,62.5},

{103,“he fang”,’m’,92.5},

{104,“cheng ling”,’f’,87},

{106“wang ming”,’m’,58},};

2) 在学生Wang Ming之前添加一条记录“105, ma li, f, 20”,并打印结果。
(1) 参考书上的插入结点函数。
(2)在主函数中调用该函数。
3) 学生cheng ling已转学,请将其记录从链表中删除,并打印结果;
(1) 参考书上的删除结点函数。
(2) 在主函数中调用该函数。
(3) 考虑如果已知被删除结点位于链表末端,程序可以如何简化。

5. 编写求链表长度的函数。

提示:从链表指针头往表尾移动计算结点的个数。

6. 已有两个链表ab,每个链表的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。

提示:可以定义一个新的链表,先从链表a,再从链表b中取出结点,依次按学号升序插入到新的链表中。
7. 如果我有若干面值为0.1元,0.5元,1元的硬币,任意取出其中三枚,如果其和大于1元就打印该排列。
(1) 参考书上程序定义枚举类型数据结构。
(2) 用穷举法计算所有可能的排列情况,计算其和。
(3) 将和大于1的排列输出。


8. 声明新的类型名,用“R”来定义实数,用“Z”来定义整数,计算表达式“x/3+y”的值,分别取x=6.3y=5

本文来源:https://www.2haoxitong.net/k/doc/0b5cb70adaef5ef7bb0d3c4c.html

《第九章 结构体.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式