C语言程序设计–第10章课后习题.pdf_第1页
C语言程序设计–第10章课后习题.pdf_第2页
C语言程序设计–第10章课后习题.pdf_第3页
C语言程序设计–第10章课后习题.pdf_第4页
C语言程序设计–第10章课后习题.pdf_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C 语言程序设计语言程序设计 第第十十章课后习题章课后习题 电子电子 13-02 班班 王双喜王双喜 2014 年年 5 月月 31 日星期六日星期六 Made by xkwy. 1/11 C 语言程序设计语言程序设计 第第十十章课后习题章课后习题 电子 13-02 班 王双喜 一、选择题 1. 若有以下定义和语句,则选项中不正确的引用是(D) struct student int age; int num; ; struct student stu3 = 1001, 20, 1002, 19, 1003, 21; main() struct student *p; p = stu; A. p+-num B. p+ C. (*p).num D. p = int *y; *p; int dt4 = 10, 20, 30, 40; struct st aa4 = 50, main() p = aa; printf(%d , +p-x); printf(%d , (+p)-x); printf(%d n, +(*p-y); A. 10 20 20 B. 50 60 21 C. 51 60 21 D. 60 70 31 (解释:输出的分别是 aa0.x + 1、aa1.x、aa1.y0 + 1 = dt1 + 1) 3. 以下程序的运行结果是(C) # include # include void fun(int *s, int p23) *s = p11; main() int a23 = 1, 3, 5, 7, 9, 11, *p; p = (int *) malloc(sizeof(int); fun( printf(%dn, *p); A. 1 B. 7 C. 9 D. 11 (解释:p 指向一个手动分配的整型数据空间,函数 fun 将这个空间内填入数据 9,因此*p = 9) C 语言程序设计语言程序设计 第第十十章课后习题章课后习题 电子电子 13-02 班班 王双喜王双喜 2014 年年 5 月月 31 日星期六日星期六 Made by xkwy. 2/11 4. 设有以下语句,则以下表达式的值为 6 的是(D) struct st int n; struct st *next; ; static struct st a3 = 5, p = A. p+-n B. p-n+ C. (*p).n+ D. +p-n (解释:四个值分别是 a0.n、a0.n、a0.n、a0.n + 1;其中 A 执行后会将 p 指向 a1,B、C 执行后会将 a0.n 改为 6) 5. 设有如下说明,则以下位段结构体数据的引用中不能得到正确数值的是(A) struct packed unsigned one :1; unsigned two :2; unsigned three :3; unsigned four :4; data; A. data.one = 4 B. data.two = 3 C. data.three = 2 D. data.four = 1 (解释: data.one 的取值范围是 01; data.two 的取值范围是 03; data.three 的取值范围是 07; data.four 的取值范围是 015; ) 6. 若已经建立下面的链表结构,指针 p、q 分别指向题图 10-1-6 所示结点,则不能将 q 所指的结点插入到链表末 尾的一组语句是(C) a b NULL p c q A. q-next = NULL; p = p-next; p-next = q; B. p = p-next; q-next = p-next; p-next = q; C. p = p-next; q-next = p; p-next = q; D. p = (*p).next; (*q).next = (*p).next; (*p).next = q; (解释:正确做法应当时将 q 的 next 指针置为空,将 b 的 next 指针指向 c(这一过程由 p 实现) ,二者 无顺序。A 的步骤是;B、D 的步骤是;C 中将 c.next 指向了 b,并且还将 b.next 指向了 c,这 是错误的) 7. 以下程序的运行结果是(A) # include main() struct date short int year, month, day; today; union long a; short int b; char c; m; printf(%d %dn, sizeof(struct date) ,sizeof(m); A. 6 4 B. 8 5 C. 10 6 D. 12 7 (解释:date 中有三个 short int 变量,每个占两个字节,共计 6 个字节;m 中最长的变量是 long 型,占四个 字节) 8. 以下程序的正确运行结果为(B) # include main() union C 语言程序设计语言程序设计 第第十十章课后习题章课后习题 电子电子 13-02 班班 王双喜王双喜 2014 年年 5 月月 31 日星期六日星期六 Made by xkwy. 3/11 short int a2; long b; char c4; s; s.a0 = 0 x39; s.a1 = 0 x38; printf(%lx %cn, s.b, s.c0); A. 390038 39 B. 380039 9 C. 3938 38 D. 3839 8 (解释:按照内存的组织:执行 s.a0 = 0 x39;之后,s.b 自动变成 0 xssss0039(s 表示所在位未知),且 s.c0 也自动被置为 0 x39;执行 s.a1 = 0 x38;之后,s.b 自动变成 0 x00380039。由于 0 x39 是字符9的 ASCII,因 此会输出 9) 二、填空题 1. 以下程序用来按学生姓名查询其排名和平均成绩。查询可连续进行,直到键入 0 时结束,请在横线上填入正确 内容。 # include # include # define NUM 4 struct student int rank; char name20; float score; ; struct student stu = 3, Tom, 89.3, 4, Mary, 79.2, 1, Jack, 95.1, 2, Jim, 90.6; main() char str10; int i; do printf(Enter a name:); scanf(%s, str); if (strcmp(str, 0) = 0) break; for (i = 0; i NUM; i+) if ( strcmp(str, ) = 0 ) printf(name :%8sn, ); printf(rank :%3dn, stui.rank); printf(average :%5.1fn, stui.score); continue ; while (1); (解释:由后文可知 stu 是 struct stuent 类型;若姓名匹配,则执行打印;由程序的功能可知此处应是 对程序流程控制,若填 continue 则将所有姓名匹配的都打印,若填 break,则找到第一个就不再查找) 2. 结构体数组中存有三人的姓名和年龄, 以下程序输出三人中最年长者的姓名和年龄, 请在横线上填入正确内容。 # include static struct man char name20; int age; person = li-ming, 18, wang-hua, 19, zhang-ping, 20; main() C 语言程序设计语言程序设计 第第十十章课后习题章课后习题 电子电子 13-02 班班 王双喜王双喜 2014 年年 5 月月 31 日星期六日星期六 Made by xkwy. 4/11 struct man *p, *q; int old = 0; for ( p = person ; p age; printf(%s %dn, q-name, q-age ); (解释:此处显然是将 p 指向结构体数组的零号元素;遍历结构体数组的终点条件;指针 q 指向最年 长的结构体元素,因此输出的是 q 所指的结构体) 3. 以下函数的功能是统计链表中节点的个数, 其中 head 为指向第一个结点的指针。 请在横线上填入正确的内容。 struct link char data; struct link *next; ; int count_node(struct link *head) struct link *p; int c = 0; p = head; while ( p ) c+ ; p = p-next ; return c; (解释:当 p 所指的结构体非空时,将计数变量加一,并且将 p 指向下一个结构体,如此循环往复) 4. 以下程序用以读入两个学生的情况存入结构体数组。每个学生的情况包括:姓名、学号、性别。若是男同学, 则还登记视力正常与否(正常用 Y,不正常用 N) ;对女生则还登记身高和体重。请在横线上填入正确的内容。 # include struct char name20; int number; char sex; union char eye; struct int height; int weight; f; body; per2; main() int i; for (i = 0; i 2; i+) scanf(%s %5d %c, if (peri.sex = m) scanf(%c, else if (peri.sex = f) C 语言程序设计语言程序设计 第第十十章课后习题章课后习题 电子电子 13-02 班班 王双喜王双喜 2014 年年 5 月月 31 日星期六日星期六 Made by xkwy. 5/11 scanf(%d %d, else printf(input errorn); (解释:若是男生,则录入结构体的 body 成员的 eye 成员;若是女生则录入结构体 body 成员的 f 结构体的 height 和 weight 成员) 三、编程题 1. 定义一个结构体变量(包括年、月、日) 。计算该日在本年中是第几天?注意闰年问题。 001 /* 002 *功能:求某日期是本年的第几天 003 *作者:xkwy 004 *时间:2014-5-29 14:30:21 005 *版本:V1.0 006 */ 007 008 # include 009 # define LEAP_YEAR(y) (y)%4=0 013 int month; 014 int day; 015 ; 016 017 int main(void) 018 019 struct my_date s; 020 const int m = 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; 021 int count, i; 022 while (1) 023 024 printf(yyyymmddr); 025 scanf(%4d%2d%2d, 026 if (LEAP_YEAR(s.year) 028 else 029 count = 0; 030 while (getchar() != n); 031 for (i = 1; i num, 023 printf(n Your Input is:n); 024 printf( Number:%sn, p-num); 025 printf( Chinese:%dn, p-chinese); 026 printf( Math:%dn, p-math); 027 printf( English:%dn, p-english); 028 printf(n Averange:%.1fn, (p-chinese+p-english+p-math)/3.0); 029 030 return 0; 031 (解释:详见程序) 3. 试利用指向结构体的指针编制一程序,实现输入三个学生的学号、语文、数学和英语成绩,然后计算其平均成 绩并输出成绩表。 001 /* 002 *功能:使用结构体指针处理学生成绩 003 *作者:xkwy 004 *时间:2014-5-30 12:57:55 005 *版本:V1.1 006 */ 007 008 # include 009 010 struct stu 011 012 char num20; 013 int chinese; 014 int math; 015 int english; 016 double avr; 017 st3; 018 019 int main(void) 020 021 int i; 022 struct stu *p; 023 for (i = 0; i num); 028 scanf(%d, 029 scanf(%d, 030 scanf(%d, 031 p-avr = (p-chinese+p-math+p-english)/3.0; 032 033 034 printf(nScorce Table:n); 035 printf(numberttchinesetmathtenglishtaveragen); 036 for (i = 0; i num); 040 printf(%-dt, p-chinese); 041 printf(%-dt, p-math); 042 printf(%-dt, p-english); 043 printf(%-.2lfn, p-avr); 044 045 046 return 0; 047 (解释:先让 p 指向相应的结构体,然后指向该结构体成员。打印成绩表时使用了制表符使打印整齐) 4. 假定每个产品销售记录由产品代码 dm(字符型 4 位) 、产品名称 mc(字符型 10 位) 、单价 dj(整型) 、数量 sl(整型) 、金额 je(长整型)几部分组成。其中:金额单价数量。在 main 函数中输入若干个产品销售记录, 并存入结构数组 sell 中。请编制函数 SortDat,其功能要求:按产品名称从小到大进行排列,若产品名称相同,则 按金额从小到大进行排列,最终排列结果仍存入结构数组 sell 中。最后在 main 函数中输出结果。 001 /* 002 *功能:使用结构体对销售记录处理 003 *作者:xkwy 004 *时间:2014-5-30 09:50:37 005 *版本:V1.0 006 */ 007 008 # include 009 # include 010 # define N 10 011 012 typedef struct 013 014 char dm5; 015 char mc11; 016 int dj; 017 int sl; 018 long je; 019 PRO; 020 021 void ScortDat(PRO sell, int n) 022 023 int i, j, flag; 024 PRO temp; 025 for (i = 0; i n); 068 printf(codettnamettunit-pricetquantitytpricetn); 069 for (i = 0; i N; i+) 070 071 printf(%-16s%-16s, selli.dm, selli.mc); 072 printf(%-dtt, selli.dj); 073 printf(%-dtt, selli.sl); 074 printf(%-dn, selli.je); 075 076 (解释:使用的是选择排序法,目标是第 i 趟时把第 i 个元素的位置确定下来;用标识变量来识别是否需要交 换元素,即当后者名称小于前者或名称相同但后者价格小于前者时交换。 ) 5. 利用 malloc 函数或 calloc 函数建立一个动态整型数组, 存放由键盘输入的几个整数, 然后按从小到大的顺序输 出。 001 /* 002 *功能:使用动态内存分配录入并排序数据 003 *作者:xkwy 004 *时间:2014-5-30 13:32:48 005 *版本:V1.0 006 */ 007 008 # include 009 # include 010 011 # define N 6 012 013 int main(void) 014 015 int i, k; 016 int *p, *m, t; 017 p = (int *)calloc(N, sizeof(int); /分配内存 018 m = p; 019 if (p = NULL) /若内存分配失败,则提前终止 020 021 printf(sorry. There a critical error cannot continue to run!n); 022 return -1; 023 024 025 for (i = 0; i N; i+) 026 C 语言程序设计语言程序设计 第第十十章课后习题章课后习题 电子电子 13-02 班班 王双喜王双喜 2014 年年 5 月月 31 日星期六日星期六 Made by xkwy. 9/11 027 printf(Input Integer (%d/%d):, i+1, N); 028 if (scanf(%d, p) = 0) /若数据录入失败 029 030 printf( Error Input (%d/%d)!n, i+1, N); 031 i-; 032 033 else 034 printf( (%d/%d) has accept:%dnn, i+1, N, *p+); 035 while (getchar() != n); /清除键盘缓冲区 036 037 038 for (i = 0; i N; i+) /执行选择排序 039 for (k = i+1; k N; k+) 040 if (mk mi) 041 042 t = mk; 043 mk = mi; 044 mi = t; 045 046 047 printf(The sort number is:n); 048 for (i = 0; i num, %06d, i+1301); /自动给学号赋值 039 printf( %d/%d Input name, and age:, i+1, N); 040 scanf(%s %d, p-name, /手动输入节点数据 041 while (getchar() != n); /清除键盘缓冲区 042 043 p-next = NULL; /链表尾添加结束标记 044 045 printf(nThe chain table are shown as follow:n); 046 printf(numberttnamettagen); 047 while (m) /当本节点非空节点时 048 049 printf(%-16s%-16s, m-num, m-name); 050 printf(%dn, m-age); 051 p = m; /暂时保存本节点地址 052 m = m-next; /指向下一节点 053 free(p); /释放本节

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论