8-1课后练习参考答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验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
#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 { 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 if(index!=n-1) //如果最大年龄不是最后一个 { //把最大年龄的结构体,交换到末尾 t=person[index]; person[index]=person[n-1]; person[n-1]=t; } SortByAge(person,n-1); // 递归调用,余下的事,留给递归函数去自动完成} 七、 #include #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 { 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); // 递归调用,余下的事,留给递归函数去自动完成}