ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:19.03KB ,
资源ID:3651341      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3651341.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言习题及答案第十章.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言习题及答案第十章.docx

1、C语言习题及答案第十章10-2 定义指针变量p,q,r,让它们指向变量a,b,c,在指向d,e,f,最后指向变量x,y,z,然后输出p,q,r与*p,*q,*r. 解:int a,b,c,d,e,f,x,y,z ; int *p,*q,*r ; p=&a;q=&b;r=&c ; p=&d;q=&e;r=&f ; p=&x;q=&y;r=&z ; printf(“%l,%l,%l”,p,q,r) ; printf(“%d,%d,%d”,*p,*q,*r) ; 思考:指针也是一种数据类型吗?他可以不依赖其它数据类型而独立存在吗?10-3 应用指针,实现10个整数从打到小的排序输出。解:#inclu

2、de stdio.hvoid main() int i,j,a10,*p,t; printf(请输入10个整数:n); for(i=0;i10;i+) scanf(%d,&ai); for(i=0;i9;i+) p=&ai ; for(j=i+1;j*p) p=&aj ; t=*p;*p=ai;ai=t; printf(排序后的数组为:n); for(i=0;i10;i+) printf(%d,ai) ; 思考:指针变量的值可以由键盘输入确定吗?它与其所指类型的变量值之间的关系如何? 10-4 应用指针,求n个数的最小值和最大值。 解:#include stdio.h#define L 100

3、void main() int i,n,aL,*max,*min; printf(请确定欲输入数据的个数(100):); scanf(%d,&n); printf(下面请依次输入%d的个数n,n); for(i=0;in;i+) printf(第%d的个数: ,i+1); scanf(%d,&ai); max=min=&a0 ; for(i=0;i*max) max=&ai; if(ai*min) min=&ai; printf(最大值=%4d,最小值=%4dn,*max,*min); 思考:指针也可以指向相同类型的数组元素,此题如用指针来表示来表示数组的各元素的值,程序应如何设计? 10-5

4、 应用指针,编写下列字符串处理函数: (1) 字符串的复制函数。 (2) 字符串的连接函数。 解:#include stdio.hvoid copy_string(char *from ,char *to) for(;*from!=0;from+,to+) *to=*from ; *to=0; void link_string(char *from,char *to) for(;*to!=0;to+); for(;*from!=0;from+,to+) *to=*from ; *to=0; void main() char a16=I am a teacher.; char b40=you a

5、re a student.; printf(复制与连接之前:nstring_a=%snstring_b=%sn,a,b); copy_string(a,b); printf(复制之后:nstring_a=%snstring_b=%sn,a,b); link_string(a,b) ; printf(连接之后:nstring_a=%snstring_b=%sn,a,b); 思考:字符指针与字符数组的主要区别是什么?字符数组名代表什么?它与字符指针有何本质的区别?此程序连接之后的输出结果是什么? 10-6 应用指针,求一矩阵中行为最大,列为最小的元素。解:#include stdio.h#defi

6、ne N 5void main() int i,j,aNN,*p,(*q)N,max_min,k,n,flag=0; printf(请输入数组的个元素的值:n); for(i=0;iN;i+) for(j=0;jN;j+) scanf(%d,&aij); for(i=0;iN;i+) /输出数组元素的值 printf(n); for(j=0;jN;j+) printf(%d,aij) ; for(i=0;iN;i+) k=0; p=&ai0;max_min=*p; for(j=0;p=ai+N;p+,j+); if(max_min*p)max_min=*p;k=j; q=a;n=0; for(

7、;q*(*q+k) break ; if(n=N) flag=1; printf(n满足条件的元素为第%d行第%d列的:%dn,i+1,k+1,max_min) ; if(flag!=1) printf(n没有满足条件的元素!) ; 思考:此题与习题8-13类似,请比较这两种不同方式表示的程序,它们各有何特点?10-7 应用指针,完成复数的加,减运算。解:(略,参见习题9-13。)10-8 应用指针,求n个数的最大公约数和最小公倍数。解:#include stdio.h#define N 50int gys(int x,int y) /求两个数的最大公约数 int t; if(yx) t=x;

8、x=y;y=t; while(y!=0) t=x%y; x=y; y=t; return x ;int gbs(int x,int y) /求两个数的最小公倍数 int t; t=gys(x,y); return x*y/t ;void main() int n,i,aN,*p=a; int t1=*p, t2=*p ; /用t1记最大公约数,t2记最小公倍数 printf(请确定数据的个数n(50):); scanf(%d,&n); printf(请输入%d个数据的值:n,n); for(i=0;in;i+) scanf(%d,&ai); /int t1=*p, t2=*p ; /用t1记最

9、大公约数,t2记最小公倍数 for(i=0;in-1;i+) t1=gys(t1,*(p+i+1); t2=gbs(t2,*(p+i+1) ; printf(最大公约数为%d,最小公倍数为%d:n,t1,t2); 思考:“t1=gys(t1,*(p+i+1)”语句的功能是什么?能否用数组小标元素直接处理?试比较之。10-9 有N个人围成一圈,顺序编号,从第一个人开始按1、2、3顺序报数,凡报到3的人退出圈子,然后从出圈的下一个人开始重复此过程。应用指针,输出出圈序列。解:#include stdio.h#define N 100void main() int aN,i,k,n,m,*p; pr

10、intf(请输入人数(100):); scanf(%d,&n); for(i=0;in;i+) ai=i+1 ; /为每个人编号 p=a ; i=0; /小标计数标量 k=0 ; /1,2,3报数时的计数变量 m=0 ; /退出人数的计数器的变量 while(mb成立定义为a数组中大于b数组中的分量个数大于b数组中大于a数组中的分量个数,ab、a=b类似定义。 解:#include stdio.h#define N 2void main() int a2N,t2=0,0; int i,j,*p1,*p2; for(i=0;i2;i+) printf(请输入第%d个数组的元素n,i+1); fo

11、r(j=0;jN;j+) scanf(%d,&aij); for(i=0;i2;i+) if(i=0) p1=a0,p2=a1; else p1=a1 ,p2=a0 ; for(j=0;j*(p2+j) ti+; if(t0t1) printf(第一个数组大于第二个数组n); else if(t0=t1) printf(第一个数组等于第二个数组n); else printf(第一个数组小于第二个数组n); 思考:程序中t数组起什么作用/若两个数组的元素个数不相等,应如何处理?在程序中使用了一个二维数组来表示数组a,b,如果使用两个一位数组,应该如何设计程序?10-11 应用指针编写程序,判断空

12、间中的一个点是否在一立方体内。解:#include stdio.hstruct point float x; float y; float z;int flag(float x,int lz,float y) if(xy&ys2,则输出正值,是s1s2,则输出负值。 解:#include stdio.hint i,resu ;void main() void strcmp(char *p1,char *p2); char *s1,*s2; printf(请输入字符串1:); gets(s1); printf(请输入字符串2:); gets(s2); strcmp(s1,s2); printf(

13、 %s与 %s比较的结果是%dn,s1,s2,resu);void strcmp(char *p1,char *p2) for(;*p1=*p2&(*p1!=0);p1+,p2+); if(*p1=0&*p2=0) resu=0 ; else resu=*p1-*p2 ; 思考:在主函数main()中,为何要加语句“void strcmp(char *p1 ,char *p2);”?指针增加、减少及其它运算从理论上讲一般是可行的,但在指针运算从理论运算时,应注意哪些情况的发生? 10-13 输入10个国家的名称,排序输出。 (1) 用指针数组的实现。 (2) 用指向指针的指针实现。 解:(1)

14、 /*用指针数组实现*/#include stdio.h#include string.h#include malloc.hvoid main() int i,j; char *cm10,*t=(char*)malloc(20) ; printf(请输入各个国家的名称(20个字符):n); for(i=0;i10;i+) cmi=(char *)malloc(20) ; gets(cmi); for(i=0;i9;i+) for(j=i+1;j0) strcpy(t,cmi); strcpy(cmi,cmj); strcpy(cmj,t); printf(排序后为: n); for(i=0;i

15、10;i+) printf( %sn,cmi) ; (2) /*用指向指针的指针实现*/#include stdio.h#include string.h#include malloc.h#define N 10void main() int i,j; char *cmN,*p=cm ; /p借用cm的第一个存储单元 char *t=(char *)malloc(20);/交换时的中介指针变量 printf(请输入各个国家的名称(20个字符):n); for(i=0;iN;i+) cmi=(char *)malloc(20) ; gets(cmi); for(i=0;iN-1;i+) *p=c

16、mi ; for(j=i+1;j0) strcpy(t,cmi); strcpy(cmi,cmj); strcpy(cmj,t); *p=cm0;p+ ; printf(排序后为: n); for(i=0;i0) printf(此区间无解!n) ; return 0; printf(次数 区间a断点 区间b断点 近似解c 函数值符号n); d=fabs(b-a); while(de) c=(a+b)/2.0 ; if(fun(c)0) sig=- ; else sig=+; printf(%3d %15.6f%15.6f%15.6f %cn,k,a,b,c,sig) ; if(fun(c)*fun(a)0) b=c ; else a=c ; d=fabs(b-a) ; k+ ; return c ; 思考: 在函数float init(fun,a,b,e)中,参数fun是什么类型?函数名是否也具有变量的特性?它存放着什么?

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

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