8-1课后练习参考答案

  • 格式:doc
  • 大小:95.50 KB
  • 文档页数:5

实验8-1 结构体
【实验目的】
1.掌握结构体类型的定义
2.掌握结构体变量的定义。

3.掌握结构体数据的操作。

【课后练习】
一、选择题
(1)已知学生记录描述如下,设置变量s中的“生日”应是“1984年11月11日”,下列
对“生日”的正确赋值方式是________。

A. year = 1984; month = 11; day = 11;
B. birth.year = 1984; birth.month = 11; birth.day = 11;
C. s.year = 1984; s.month = 11; s.day = 11;
D. s.birth.year = 1984; s.birth.month = 11; s.birth.day = 11;
(2)设有以下说明语句,则下面的叙述不正确的是:________
A. struct是结构体类型的关键字
B. struct stu是用户定义的结构体类型
C. stutype是用户定义的结构体类型名
D. a和b都是结构体成员名
(3)根据下面的定义,能打印出字母M的语句是________。

A. printf(“%c\n”, class[3].name);
B. printf(“%c\n”, class[3].name[1]);
C. printf(“%c\n”, class[2].name[1]);
D. printf(“%c\n”, class[2].name[0]);
(4)当说明一个结构体变量时系统分配给它的内存是________。

A. 各成员所需内存量的总和。

B. 结构中第一个成员所需内存量。

C. 成员中占内存量最大者所需的容量。

D. 结构中最后一个成员所需内存量。

二、填空题
(1)定义结构体类型的关键字是__struct______
(2)有这样一个结构体定义和变量声明:
Struct abc
{char x;
int y[2];
char z[20];
}value={…Y‟,10,20,”just a test. ”};
用printf语句输出结构体变量value的各个成员值:
Printf(“%c %d %d %s”,value.y[0],value.y[1],z);
将字符串”hello”存入结构体value的字符数组中
Strcpy(value.z,”hello”);
三、以下程序的运行结果是___10, x_____。

四、以下程序的运行结果是__2,3______。

五、设有三人的姓名和年龄存在结构数组中,以下程序输出三人中年龄居中者的姓名和年
龄,请在________中填入正确内容。

3个填空答案分别为:
max=person[i].age;
min=person[i].age;
&&
六、
#include <stdio.h>
#include "string.h"
#define N 3
struct man
{char name[20];
int age;
}person[]={"li-ming",18,"wanghua",19,"zhang-ping",20};
void SortByAge(struct man *person,int n);
int main()
{ int i;
SortByAge(person,N);
printf("%12s%12s\n","姓名","年龄");
for(i=0;i<N;i++)
{ printf("%12s%12d\n",person[i].name,person[i].age);
}
}
//利用递归函数,实现结构体中的按照年龄排序
void SortByAge(struct man *person,int n)
{ int index=n-1; //保存最大年龄的结构体的序号,先假定为最后一个struct man t;
if(n==1)return; //递归结束条件:如果只有一个人,无须排序,直接返回for(int i=n-2;i>=0;i--)
if(person[index].age<person[i].age)index=i;
if(index!=n-1) //如果最大年龄不是最后一个
{ //把最大年龄的结构体,交换到末尾
t=person[index];
person[index]=person[n-1];
person[n-1]=t;
}
SortByAge(person,n-1); // 递归调用,余下的事,留给递归函数去自动完成}
七、
#include <stdio.h>
#include "string.h"
#define N 3
struct man
{char name[20];
int age;
}person[]={"li-ming",18,"wanghua",19,"zhang-ping",20};
void SortByName(struct man *person,int n);
int main()
{ int i;
SortByName(person,N);
printf("%12s%12s\n","姓名","年龄");
for(i=0;i<N;i++)
{ printf("%12s%12d\n",person[i].name,person[i].age);
}
}
//利用递归函数,实现结构体中的按照姓名值排序
void SortByName(struct man *person,int n)
{ int index=n-1; //保存最大姓名值的结构体的序号,先假定为最后一个struct man t;
if(n==1)return; //递归结束条件:如果只有一个人,无须排序,直接返回
for(int i=n-2;i>=0;i--)
if(strcmp(person[index].name,person[i].name)<0)index=i;
if(index!=n-1) //如果最大姓名值不是最后一个
{ //把最大姓名值的结构体,交换到末尾
t=person[index];
person[index]=person[n-1];
person[n-1]=t;
}
SortByName(person,n-1); // 递归调用,余下的事,留给递归函数去自动完成}。