ImageVerifierCode 换一换
格式:DOC , 页数:18 ,大小:49KB ,
资源ID:4812044      下载积分:8 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(C语言程序设计(第3版)何钦铭-颜-晖-第8章--指针复习过程.doc)为本站上传会员【人****来】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

C语言程序设计(第3版)何钦铭-颜-晖-第8章--指针复习过程.doc

1、C语言程序设计(第3版)何钦铭 颜 晖 第8章 指针第8章 指针【练习8-1】如果有定义”int m, n = 5, *p = &m;”与m = n等价的语句是 B 。A m = *p; B. *p = *&n; C. m = &n; D. m = *p;解答: A:p是指向m的指针变量,所以*p等价于m。即m=m。 B:&n是n的地址,*&n是n的值,即把n的值赋给p指向的值m。即m=n。 C:&n是n的地址。即把n的地址赋给m。 D:*p是指p指向的指针所指向的值,在此无意义。 故选B。 【练习8-2】调用函数求两个数的和与差:计算输入的两个数的和与差,要求自定义一个函数sum_diff(

2、float op1,float op2, float *psum, float *pdiff),其中op1和op2是输入的两个数,*psum 和*pdiff 是计算得出的和与差。解答:#includevoid sum_diff(float op1,float op2,float *psum,float *pdiff);int main(void) float op1,op2,sum,diff; printf(Input op1 and op2: ); scanf(%f%f,&op1,&op2); sum_diff(op1,op2,&sum,&diff); printf(%f+%f=%f;%f-

3、%f=%f n,op1,op2,sum,op1,op2,diff); return 0;void sum_diff(float op1,float op2,float *psum,float *pdiff) *psum=op1+op2; *pdiff=op1-op2;【练习8-3】两个相同类型的指针变量能不能相加?为什么?解答:不能。因为指针变量是一种特殊的变量,指针变量的值存放的是所指向变量的地址,两个地址相加并不能保证结果为一个有效的地址值,因而在 C 语言中指针变量相加是非法的。【练习8-4】根据表 8.2 所示,这组数据的冒泡排序其实循环到第 6 遍(即n-2)时就已经排好序了,说明有

4、时候并不一定需要 n-1 次循环。请思考如何改进冒泡排序算法并编程实现(提示:当发现一遍循环后没有数据发生交换,说明已经排好序了)。解答:设置一个标志变量 flag,进入一轮循环前设置为 0,在循环中有发生数据交换就改写flag 值为 1。当该轮循环结束后检查 flag 值,如果变为 1 说明发生了数据交换,还没有排好序,如果为 0 说明没有发生交换,已经排好序。#includevoid bubble (int a,int n);int main(void) int n,i,a8; printf(Enter n (n=8):); scanf(%d,&n); printf(Enter a%d :

5、 ,n); for(i=0;in;i+) scanf(%d,&ai); bubble(a,n); printf(After sorted, a%d=, n); for(i=0;in;i+) printf(%3d,ai); return 0;void bubble(int a, int n) int i,j,temp,flag; for(i=1;in;i+ ) flag=0; for(j=0;jaj+1) temp=aj;aj=aj+1;aj+1=temp; flag=1; if(flag=0) break; 【练习8-5】重做例 8-9,要求使用选择排序算法。解答:#includevoid b

6、ubble(int a, int n);int main(void) int i,n,a8; printf(Enter n (n=8): ); scanf(%d,&n); printf(Enter a%d :,n); for(i=0;in;i+) scanf(%d,&ai); bubble(a,n); printf(After sorted, a%d=,n); for(i=0;in;i+) printf(%3d,ai); return 0;void bubble(int a,int n) int i,j,temp,index; for(i=0;in-1;i+) index=i; for(j=i

7、+1;jn;j+) if(ajaindex) index=j; temp=ai;ai=aindex;aindex=temp; 8.4电码加密【练习8-6】在使用scanf( )函数时,输入参数列表需要使用取地址操作符&,但当参数为字符数组名时并没有使用,为什么?如果在字符数组名前加上取地址操作符&,会发生什么?解答:因为字符数组名的值是一个特殊的固定地址,可以看作是常量指针,因此不需要再使用取地址符来获取该数组的地址。如果在字符数组名 str 前加上取地址操作符&,那么对其取地址&str 可以看做是这个数组的第一个元素的地址,由于数组地址和数组第一个元素的地址相同,所以&str 表示地址值和

8、str 表示的地址值是相等的。对 scanf()的变长参数列表的话,编译器只负责参数传递,怎么解释后边的几个地址的含义,是由前边的字符串确定的。所以使用scanf(“%s”,str)和scanf(“%s”,&str)都能通过编译且正常执行。【练习8-7】 C 语言不允许用赋值表达式直接对数组赋值,为什么?解答:数组名可以看作是常量指针,因为不可以对一个常量进行赋值,所以不允许用赋值表达式直接对数组进行赋值。【练习8-8】输入一个字符串,把该字符串的前 3 个字母移到最后,输出变换后的字符串。比如输入“abcdef”,输出为“defabc”。解答:#include#include#define

9、MAXLINE 100int main(void) char lineMAXLINE,str4;int i; printf(Input the string:); gets(line); if(strlen(line)3) printf(字符串长度小于3,不符合要求!n); for(i=0;i3;i+) stri=linei; stri=0; for(i=3;linei!=0;i+) linei-3=linei; linei-3=0; strcat(line,str); printf(%s%sn,After changing: ,line); return 0;【练习8-9】使用动态内存分配的

10、方法实现例 8-9 的冒泡排序。解答:#include#includevoid bubble(int a,int n); int main(void)int n,j,*a,i,temp; printf(Enter n(n=8):);scanf(%d,&n);if(a=(int*)calloc(n,sizeof(int)=NULL) printf(Not able to allocate memory.n); exit(1);printf(Ente a%d:,n);for(i=0;in;i+) scanf(%d,a+i); bubble(a,n); printf(After sorted,a%d

11、=,n);for(i=0;in;i+) printf(%3d,*(a+i); free(a); return 0;void bubble(int a,int n) int i,j,temp; for(i=1;in;i+) for(j=0;j*(a+j+1) temp=*(a+j); *(a+j)=*(a+j+1); *(a+j+1)=temp;习题8一、选择题1.下列语句定义 x 为指向 int 类型变量 a 的指针,其中哪一个是正确的 B 。Aint a, *x = a; B. int a, *x = &a;Cint *x = &a,a; Dint a, x = a;2. 以下选项中,对基本

12、类型相同的指针变量不能进行运算的运算符是 A 。A+ B- C= D=3若有以下说明,且 0=i=0)的元素前。如果 i=元素的个数,则 x 插入到末尾。原有的元素个数存放在指针 n 所指向的变量中,插入后元素个数加 1。请填空。void insert(double a , int *n, double x, int i)int j;if _ (i=i_; j-)_aj+1_ = aj;elsei = *n;ai=_x_;(*n)+;2下列程序先消除输入字符串的前后空格,再判断是否是“回文”(即字符串正读和倒读都是一样),若是则输出 YES,否则输出 NO。请填空。#include #incl

13、ude int main(void)char s80, ch, *p, *q;int i, j, n;gets(s);p = _s_;while ( *p = ) _p+_;n = strlen(s);q = _s+n-1_;while ( *q = ) _q-_;while ( _pq_ & *p =*q)p+;_q-_;if ( pq )printf(“NOn”);elseprintf(“YESn”);return 0;3. 下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在main( )函数的fmax 和 min 变量中。请填空。void find(int *, int, in

14、t *, int *);int main(void)int max, min, a =5,3,7,9,2,0,4,1,6,8;find(_a, 10, &max, &min_);printf(“%d,%dn”, max, min);return 0;void find(int *a, int n, int *max, int *min)int i;*max=*min=0;for (i = 1; i a *max) _*max=i_;if (ai a *min) _ *min=i_;4 .写出下列程序的执行结果 0 01 22 40 02 34 6#include int main(void)i

15、nt a10, b10, *pa, *pb, i;pa = a;pb = b;for( i=0; i3; i+, pa+, pb+)*pa = i;*pb = 2*i;printf(“%dt%dn”, *pa, *pb);pa = &a0;pb = &b0;for ( i=0; i3; i+)*pa = *pa + i;*pb = *pb + i;printf(“%dt%dn”, *pa+, *pb+);return 0;三、程序设计题1. 拆分实数的整数与小数部分:要求定义一个函数 void splitfloat(float x,int *intpart,float *fracpart),其

16、中x是被拆分的实数,*intpart和*fracpart分别是将实数x拆分出来的整数部分与小数部分。编写主函数,并在其中调用函数splitfloat()。试编写相应程序。解答:#includevoid splitfloat(float x,int *intpart,float *fracpart);int main(void)float x,fracpart;int intpart; printf(Input a number:);scanf(%f,&x);splitfloat(x,&intpart,&fracpart);printf(The intpart is: %d,intpart);p

17、rintf(The fracpart is: %f,fracpart);return 0; void splitfloat(float x,int *intpart,float *fracpart)*intpart=(int)x;*fracpart=x-*intpart;2. 在数组中查找指定元素:输入1个正整数n(1n=10),然后输入n个整数存入数组a中,再输入一个整数 x,在数组 a 中查找 x,若找到则输出相应的下标,否则显示“Not found”。要求定义和调用函数 search(int list ,int n,int x),在数组 list 中查找元素 x,若找到则返回相应下标,否

18、则返回-1,参数 n 代表数组 list中元素的数量。试编写相应程序。解答:#includeint search(int list,int n,int x);int main(void) int i,n,res,x; int a10; printf(Input n:); scanf(%d,&n); for(i=0;i=0) printf(index=%dn,res); else printf(Not foundn); return 0;int search(int list,int n,int x) int i; for(i=0;in;i+) if(listi=x) return i; ret

19、urn -1;3.循环后移:有n个整数,使前面各数顺序向后移m个位置,移出的数再从开头移入。编写一个函数实现以上功能,在主函数中输入n个整数并输出调整后的n个数。试编写相应程序。解答:#includevoid move(int *x,int n,int m);int main(void) int i,m,n; int a80; printf(Enter n:); scanf(%d,&n); printf(Enter m:); scanf(%d,&m); for(i=0;in;i+) scanf(%d, &ai); move(a,n,m); printf(After move: ); for(i

20、=0;in;i+) printf(%d ,ai);return 0; void move(int *p,int n,int m) int i,j,k=0,a80; for(i=0;in;i+) if(in-m) ai+m=pi; else ak+=pi; for(i=0;in;i+) pi=ai;4.报数:有 n 个人围成一圈,按顺序从 1 到 n 编好号。从第一个人开始报数,报到 m(mn)的人退出圈子,下一个人从 1 开始报数,报到 m 的人退出圈子。如此下去,直到留下最后一个人。编写程序,输入整数 n 和 m,并按退出顺序输出退出圈子的人的编号。试编写相应程序。解答:#includein

21、t main(void) int count,i,j,m,n; int num80=0; printf(Input n:); scanf(%d,&n); printf(Input m:); scanf(%d,&m); i=j=count=0; while(countn-1) if(numi=0) j+; if(j%m=0&j) count+; numi=-1; j=0;/报数报到m后,j重归0,开始下次报数 i+;/读取下一个元素 i%=n;/一次n个跟报完数,开始下一次 (除余n是因为i是下标,从0开始,n是具体 数/从1 开始 /i为n时下次a0报数)for(i=0;in;i+)if(nu

22、mi=0)printf(Last No is: %dn,i+1);return 0;5.使用函数实现字符串复制:输入一个字符串t和一个正整数m,将字符串中从第m个字符开始的全部字符复制到字符串s中,再输出字符串s。要求自定义并调用函数void strmcpy(char *s, char *t, int m)。试编写相应程序。解答:#include#includevoid strmcpy(char *s,char *t,int m);int main(void) char s80,t80; int m; printf(Input the string:); gets(t); printf(Ent

23、er m:); scanf(%d,&m); if(strlen(t)m) printf(Error Input); return 0; else strmcpy(s,t,m); puts(s); return 0;void strmcpy(char *s,char *t,int m) t=t+m-1; while(*t!=0) *s=*t; s+; t+; *s=0;6.删除字符:输入一个字符串,再输入一个字符 ch,将字符串中所有的 ch 字符删除后输出该字符串。要求定义和调用函数 delchar(s,c),该函数将字符串 s 中出现的所有 c 字符删除。试编写相应程序。解答:#includ

24、evoid delchar(char *s,char c);int main(void) char c; char s80; printf(Input the string:); gets(s); printf(Input a ch:); scanf(%c,&c); delchar(s,c); printf(result: ); puts(s); return 0;void delchar(char *s,char c) int i,j; i=j=0; while(si!=0) if(si!=c) sj=si; j+; i+; sj=0;7. 字符串排序:输入 5 个字符串,按由小到大的顺序输

25、出。试编写相应程序。解答:#include#includeint main(void) int n,i,j,index; char sx8080,stemp80; printf(Enter n:); scanf(%d,&n); printf(Input %d strings:,n); for(i=0;in;i+) scanf(%s,sxi);/每行的基地址 for(i=0;in-1;i+) index=i; for(j=i+1;jn;j+) if(strcmp(sxj,sxindex)0) index=j; strcpy(stemp,sxi); strcpy(sxi,sxindex); str

26、cpy(sxindex,stemp); printf(after sorted: n); for(i=0;i5;i+) printf(%st,sxi); return 0;8. 判断回文:判断输入的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。试编写相应程序。解答:#include int mirror(char *p);int main(void) char s80; printf(Input the string:); gets(s); if(mirror(s)=1) printf(Yes!n); else printf(No

27、!n); return 0;int mirror(char *p) char *q; q=p; while(*q!=0) q+; q-; while(pq) if(*p!=*q) return 0; p+; q-; return 1; 或#include int mirror(char *p);int main(void) char s80; printf(Input the string:); gets(s); if(mirror(s)=1) printf(Yes!n);else printf(No!n); return 0;int mirror(char *p)char *q;q=p;wh

28、ile(*q!=0)q+;while(p=q)if(*p=*(q-1) return 1; p+; q-; elsereturn 0;9. 分类统计字符个数: 输入一行文字,统计其中的大写字母、小写字母、空格、数字以及其他字符各有多少。试编写相应程序。解答:#includeint main(void) char s80,*p; int blank,digit,lower,other,upper; printf(Input the string:); gets(s); upper=lower=blank=digit=other=0; for(p=s;*p!=0;p+) if(*p=A&*p=a&

29、*p=0&*p=9) digit+; else if(*p= ) blank+; else other+; printf(upper: %dnlower: %dnblank: %dndigit: %dnother: %dn,upper,lower,blank,digit,other); return 0;10.(选做)输出学生成绩(动态分布):输入学生人数后输入每个学生的成绩,最后输出学生的平均成绩、最高成绩和最低成绩。要求使用动态内存分配来实现。试编写相应程序。解答:#include#includeint main(void) int n,i; float *p,sum,max,min,av

30、g; printf(Input studentsnumber n: ); scanf(%d,&n); if(p=(float *)calloc(n,sizeof(float)=NULL) printf(Not able to allocate memory. n); exit(1); sum=0.0; max=-1; min=1000; printf(Input %d studentsscores: , n); for(i=0;i*(p+i) min=*(p+i); if(max*(p+i) max=*(p+i); avg=sum/n; printf(The avg is %f,max is %f,min is %fn,avg,max,min); free(p); return 0;

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服