游洪跃的C语言程序设计第9章 习题解答.docx

上传人:b****4 文档编号:12276635 上传时间:2023-04-17 格式:DOCX 页数:16 大小:22.73KB
下载 相关 举报
游洪跃的C语言程序设计第9章 习题解答.docx_第1页
第1页 / 共16页
游洪跃的C语言程序设计第9章 习题解答.docx_第2页
第2页 / 共16页
游洪跃的C语言程序设计第9章 习题解答.docx_第3页
第3页 / 共16页
游洪跃的C语言程序设计第9章 习题解答.docx_第4页
第4页 / 共16页
游洪跃的C语言程序设计第9章 习题解答.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

游洪跃的C语言程序设计第9章 习题解答.docx

《游洪跃的C语言程序设计第9章 习题解答.docx》由会员分享,可在线阅读,更多相关《游洪跃的C语言程序设计第9章 习题解答.docx(16页珍藏版)》请在冰豆网上搜索。

游洪跃的C语言程序设计第9章 习题解答.docx

游洪跃的C语言程序设计第9章习题解答

第9章习题解答

一、选择题

1.以下程序:

/*文件路径名:

ex9_1_1\main.c*/

#include/*标准输入/输出头文件*/

#include/*字符串头文件*/

intmain(intargc,char*argv[])/*主函数main()*/

{

intn=0,i;/*定义变量*/

for(i=1;i

n=n+strlen(argv[i]);/*对argv[i]的长度累加求和*/

printf("%d\n",n);/*输出n*/

return0;/*返回值0,返回操作系统*/

}

该程序生成的可执行文件名为proc.exe。

若运行时输入命令行:

proc1234567

则程序的输出结果是。

A)3B)5C)7D)11

解析:

main()函数中参数argc包含命令行选项的个数,argv包括argc个字符串。

并对首字符串外的其它字符串长度累加求和。

答案:

C

2.有以下程序:

intadd(inta,intb){returna+b;}/*函数定义*/

intmain(void)/*主函数main()*/

{

intk,(*f)(int,int),a=5b=10;

f=add;

……

}

则以下函数调用语句错误的是_。

(2006.09)

A)k=(*f)(a,b);B)k=add(a,b);C)k=*f(a,b);D)k=f(a,b);

解析:

选项C把f(a,b)整体作为指针了,注意只有f是函数指针,应该为(*f)(a,b)。

答案:

C

3.程序中若有如下说明和定义语句:

charfun(char*);/*函数声明*/

intmain(void)/*主函数main(void)*/

{

char*s="one",a[5]={0},(*f)(char*)=fun,ch;

……

}

以下选项中对函数fun的正确调用语句是_。

A)(*f)(a);B)*f(*s);C)fun(&a);D)ch=*f(s);

解析:

函数指针f指向了函数fun,fun的形参类型是字符指针。

调用语句“fun(s);fun(a);”或“(*f)(s);(*f)(a);”是正确的。

因此选项A正确,其余选项错误。

答案:

A

4.有以下结构体说明和变量定义,如下图所示,指针p,q,r分别指向此链表中的三个连续结点。

structNode

{

intdata;/*数据成员*/

structNode*next;/*指针成员,指向后继*/

}*p,*q,*r;

现将q所指结点从链表中删除,同时要保持链表的连续,以下不能完成指定操作的语句是。

A)p->next=q->next;B)p->next=p->next->next;

C)p->next=r;D)p=q->next;

解析:

要将q所指结点从链表中删除,同时要保持链表的连续,应该p->next=r,由于q->next,p->next->next都指向r,因此p->next=q->next,p->next=p->next->next都完成同样的的操作。

也就是选项A,B,C都能完成指定操作。

选项D的p=q->next,只是将指针p指向了r,不能完成指定的操作。

因此正确选项是Do

答案:

D

二、填空题

1.以下程序的输出结果是。

/*文件路径名:

ex9_2_1\main.c*/

#include/*标准输入/输出头文件*/

#include/*字符串头文件*/

char*fun(char*p){returnp+strlen(p)/2;}

intmain(void)/*主函数main()*/

{

char*str="abcdefgh";/*定义字符串*/

str=fun(str);/*调用函数fun()*/

puts(str);/*输出str*/

return0;/*返回值0,返回操作系统*/

}

解析:

函数fun()返回指向参数字符串的后半部分的指针,也就是程序功能是输出字符串的后半部分,所以输出为efgh。

答案:

efgh

2.已有定义“double*p;”,请写出完整的语句,利用malloc函数使p指向一个双精度型的动态存储单元。

解析:

malloc函数的调用形式为malloc(size),函数用来分配size个字节的存储区,返回一个指向存储区首地址的基类型为void的地址。

题目要求双精度类型指针p指向一个双精度类型的动态存储单元,需利用sizeof运算符来求得数据类型所占字节数,空白处应填“p=(double*)malloc(sizeof(double))”。

答案:

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

三、编程题

*1.编写一个求带头结点的线性链表的长度的函数。

参考程序:

/*文件路径名:

ex9_3_1\main.c*/

#include/*包含库函数printf()所需要的信息*/

#include/*包含库函数system()所需要的信息*/

#include/*动态存储分配头文件*/

typedefintElemType;

typedefstructNode

{/*线性链表结点的结构描述*/

ElemTypedata;/*数据成员*/

structNode*next;/*指针成员*/

}LNode;

intLength(LNode*head);/*求线性表长度*/

voidCreateLinkList(LNode*head);/*建立线性链表*/

voidDisplayLinkList(LNode*head);/*显示线性链表*/

intmain(void)/*主函数main()*/

{

LNode*head;/*定义链表头指针*/

/*生成空线性链表*/

head=(LNode*)malloc(sizeof(LNode));/*分配存储空间*/

head->next=NULL;/*空链表头结点后继为空*/

CreateLinkList(head);/*建立线性链表*/

DisplayLinkList(head);/*显示线性链表*/

printf("长度为%d\n",Length(head));/*输出长度*/

system("PAUSE");/*调用库函数system(),输出系统提示信息*/

return0;/*返回值0,返回操作系统*/

}

intLength(LNode*head)/*求线性表长度*/

{

LNode*p=head->next;/*p第向第一个元素结点*/

intlen=0;/*线性链表长度*/

while(p!

=NULL)

{/*p指向非空结点*/

p=p->next;/*p向向下一结点*/

len++;/*元素个数自加1*/

}

returnlen;/*返回len*/

}

voidCreateLinkList(LNode*head)/*建立线性链表*/

{

LNode*p,*rear=head;/*空线性链表的表头与表尾都指向头结点*/

ElemTypex;/*定义变量x*/

printf("输入数据元素值x,当x=0时退出:

");/*提示信息*/

scanf("%d",&x);/*输入数据元素值x*/

while(x!

=0)

{/*循环建立线生链表*/

p=(LNode*)malloc(sizeof(LNode));/*分配存储空间*/

p->data=x;/*数据元素值为x*/

p->next=NULL;/*新追加结点为尾结点,后继为空*/

rear->next=p;/*新追加的结点在最后,也就是rear的后继*/

rear=p;/*新追加的结点为新的表尾,rear指向新表尾*/

scanf("%d",&x);/*输入数据元素值x*/

}

}

voidDisplayLinkList(LNode*head)/*显示线性链表*/

{

LNode*p=head->next;/*p指向线性表的第一个结点*/

printf("线性链表:

");/*提示信息*/

while(p!

=NULL)

{/*p分别指向各元素*/

printf("%d",p->data);/*显示元素值*/

p=p->next;/*p指向下一元素*/

}

printf("\n");/*换行*/

}

**2.通过变长参数实现求n个数的积。

参考程序:

/*文件路径名:

ex9_3_2\main.c*/

#include/*标准输入/出头文件*/

#include/*包含库函数system()所需要的信息*/

#include/*变长参数头文件*/

intMulti(intn,...)/*参数n表示要求各的元素个数*/

{

intm=1,i;/*定义变量*/

va_listal;/*变长参数变量*/

va_start(al,n);/*初始化va_list声明的变量al*/

for(i=1;i<=n;i++)

m*=va_arg(al,int);/*取出变长参数*/

va_end(al);/*结束变长参数的引用*/

returnm;/*返回乘积*/

}

intmain(void)/*主函数main()*/

{

intx=12,y=12,z=18,u=8,v=9,w=16;/*定义变量*/

printf("x=%d\ny=%d\nz=%d\nu=%d\nv=%d\nw=%d\n",x,y,z,u,v,w);

/*输出变量的值*/

printf("x,y与z的积是%d.\n",Multi(3,x,y,z));/*输出Multi(3,x,y,z)的值*/

printf("u,v与w的积是%d.\n",Multi(3,u,v,w));/*输出Multi(3,u,v,w)的值*/

printf("x,y,z,u,v与w的积是%d.\n",Multi(6,x,y,z,u,v,w));/*输出Multi(6,x,y,z,u,v,w)的值*/

system("PAUSE");/*调用库函数system(),输出系统提示信息*/

return0;/*返回值0,返回操作系统*/

}

**3.用命令行参数编程实现显示文本文件内容。

参考程序:

/*文件路径名:

ex9_3_3\main.c*/

#include/*标准输入/出头文件*/

#include/*包含库函数system()所需要的信息*/

intmain(intargc,char*argv[])/*主函数main()*/

{

FILE*fp;/*定义文件指针变量*/

charc;/*定义字符变量c*/

if(argc!

=2)/*命令行参数不为3*/

printf("用法:

ShowFile文件名\n");

else

{/*命令行参数为3*/

if((fp=fopen(argv[1],"r"))==NULL)

{

printf("文件%s打不开!

\n",argv[1]);/*错误信息*/

system("PAUSE");/*调用库函数system(),输出系统提示信息*/

exit

(1);/*退出程序*/

}

c=fgetc(fp);/*从源文件中读一字符*/

while(!

feof(fp))

{

putchar(c);/*显示c*/

c=fgetc(fp);/*从源文件中读一字符*/

}

fclose(fp);/*关闭文件*/

}

system("PAUSE");/*调用库函数system(),输出系统提示信息*/

return0;/*返回值0,返回操作系统*/

}

**4.创建一个不带头结点的链表,并按输入顺序相反的次序各数据的值。

参考程序:

/*文件路径名:

ex9_3_4\main.c*/

#include/*标准输入/出头文件*/

#include/*包含库函数system()所需要的信息*/

#include/*动态存储分配头文件*/

typedefintElemType;

typedefstructNode

{/*线性链表结点的结构描述*/

ElemTypedata;/*数据成员*/

structNode*next;/*指针成员*/

}LNode;

voidCreateLinkList(LNode**ppHead);/*建立线性链表*/

voidDisplayLinkList(LNode*head);/*显示线性链表*/

intmain(void)/*主函数main()*/

{

LNode*head=NULL;/*定义链表头指针*/

CreateLinkList(&head);/*建立线性链表*/

DisplayLinkList(head);/*显示线性链表*/

system("PAUSE");/*调用库函数system(),输出系统提示信息*/

return0;/*返回值0,返回操作系统*/

}

voidCreateLinkList(LNode**ppHead)/*建立线性链表*/

{

LNode*p;/*定义指针*/

ElemTypex;/*定义变量x*/

printf("输入数据元素值x,当x=0时退出:

");/*提示信息*/

scanf("%d",&x);/*输入数据元素值x*/

while(x!

=0)

{/*循环建立线性链表*/

p=(LNode*)malloc(sizeof(LNode));/*分配存储空间*/

p->data=x;/*数据元素值为x*/

p->next=*ppHead;/*新结点插在链表的最前面*/

*ppHead=p;/*新结点为新的头结点*/

scanf("%d",&x);/*输入数据元素值x*/

}

}

voidDisplayLinkList(LNode*head)/*显示线性链表*/

{

LNode*p=head;/*p指向线性表的第一个结点*/

printf("线性链表:

");/*提示信息*/

while(p!

=NULL)

{/*p分别指向各元素*/

printf("%d",p->data);/*显示元素值*/

p=p->next;/*p指向下一元素*/

}

printf("\n");/*换行*/

}

**5.创建一个不带头结点的链表,采用递函数显示一个链表的各数据成员的值。

参考程序:

/*文件路径名:

ex9_3_5\main.c*/

#include/*标准输入/出头文件*/

#include/*包含库函数system()所需要的信息*/

#include/*动态存储分配头文件*/

typedefintElemType;

typedefstructNode

{/*线性链表结点的结构描述*/

ElemTypedata;/*数据成员*/

structNode*next;/*指针成员*/

}LNode;

voidCreateLinkList(LNode**ppHead);/*建立线性链表*/

voidDisplayLinkList(LNode*head);/*显示线性链表*/

intmain(void)/*主函数main()*/

{

LNode*head=NULL;/*定义链表头指针*/

CreateLinkList(&head);/*建立线性链表*/

DisplayLinkList(head);/*显示线性链表*/

system("PAUSE");/*调用库函数system(),输出系统提示信息*/

return0;/*返回值0,返回操作系统*/

}

voidCreateLinkList(LNode**ppHead)/*建立线性链表*/

{

LNode*p,*rear=*ppHead;/*空线性链表的表头与表尾都指向头结点*/

ElemTypex;/*定义变量x*/

printf("输入数据元素值x,当x=0时退出:

");/*提示信息*/

scanf("%d",&x);/*输入数据元素值x*/

while(x!

=0)

{/*循环建立线性链表*/

p=(LNode*)malloc(sizeof(LNode));/*分配存储空间*/

p->data=x;/*数据元素值为x*/

p->next=NULL;/*新追加结点为尾结点,后继为空*/

if(rear==NULL)

{/*空线性链表*/

*ppHead=rear=p;/*头尾指针都指向同一个结点*/

}

else

{

rear->next=p;/*新追加的结点在最后,也就是rear的后继*/

rear=p;/*新追加的结点为新的表尾,rear指向新表尾*/

}

scanf("%d",&x);/*输入数据元素值x*/

}

}

voidDisplayLinkList(LNode*head)/*显示线性链表*/

{

if(head!

=NULL)

{/*线性链表非空*/

printf("%d",head->data);/*显示元素值*/

DisplayLinkList(head->next);/*递归调用*/

}

else

{/*空线性链表*/

printf("\n");/*换行*/

}

}

**6.用不带头结点的链表存储栈,分别采用递归函数建立栈及显示一个栈的各数据成员的值。

参考程序:

/*文件路径名:

ex9_3_6\main.c*/

#include/*标准输入/出头文件*/

#include/*包含库函数system()所需要的信息*/

#include/*动态存储分配头文件*/

typedefintElemType;

typedefstructNode

{/*链栈结点的结构描述*/

ElemTypedata;/*数据成员*/

structNode*next;/*指针成员*/

}LNode;

voidCreateLinkStack(LNode**ppTop);/*建立链栈*/

voidDisplayLinkStack(LNode*top);/*显示链栈*/

intmain(void)/*主函数main()*/

{

LNode*top=NULL;/*定义栈顶指针*/

printf("输入数据元素值x,当x=0时退出:

");/*提示信息*/

CreateLinkStack(&top);/*建立链栈*/

DisplayLinkStack(top);/*显示链栈*/

system("PAUSE");/*调用库函数system(),输出系统提示信息*/

return0;/*返回值0,返回操作系统*/

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1