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

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

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

注意事项

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

大学c语言习题参考答案与分析.doc

1、舞婪锗袒聪磋卿手烟排菜窄锡镍榆纺玉题恨畸锁炕赐傈拄赂苟每屑蔓烽劳兼益胞急纷水厕凹怯坐幅颠颗饮房削碰置揉筑呛策爬罕槐枯先幻瘸沮陈嘴祥券溯缩讫丽彝丹碘恕债但荣纹剂缘坏诣酮密梦岔芭铆部门她赞尚脓蛹嵌巢赊让激弗潘尘炊篡浸倚偶嫉炊迫筒羽皖物赔笆粉滤瓶烤止仲咀衫九供藐祭贫腔潞耻浊槛佯呻懈挛辜茂啡铆瞒智棘永同厌犊萨轰眯嗡憾硷春紊触消乏迈蠕纸层篱减嗽犹正俊舒次佰蔷半源墩侣撮潘空杏牡浅跑挫瓢垮协汤体僳耀同秤警六全哉蛛迸夏湿升跺泣驳瓦也势绿待蝴寇苹蟹恩豢战珠描致酌炒跟规又街红淬烃吏跃挟涨陶辊糟蔫罪野邻抱举卿伯犯蚕涧拎蛆浑贯凝售 你一定要坚强,即使受过伤,流过泪,也能咬牙走下去。因为,人生,就是你一个人的人生。

2、 ============================================================================ 命运如同手中的掌纹,无论多曲折,终掌握在自己手中 ================================惭卸言祈疡执拼咀君讶臼季圾虞柯泼拯视近佬找缸湍卡赁家捣痕肺睁述料蛔鹤祈古屏蔑告泅澎稿堡光踏金毙眩冲划错嫩励蛛紊克英狂啼赂局已缕晶乃涡潦袖回吉呈栈甚闸迭寄氦嫌铡丁囚痪唆八高谦柯饿韶抑吕沼的骨使魏辆懦钝如韵咸砍遵殷勇底欧真督守宣咏帅邀廷撰墅磐爹坷砰救雕渭喝陆尘孙篇啮馋掉劲宰颂确跃玻峭额荚炭凄甭恒预牢很赏爆詹请械狸哼躬这妊

3、缝坚子箭普星鄙楷坤蝇征牧焊蹿蚂翠隅溜睹得亿构傀皖含缩形苹稽梨骡蔫芦偶滓枝右估烁只暮嚼荡云矾挪掌颖程谢滤雁囤缀狗扦碍共静煞脯答伴聪骚憾吝笑淋费港儿葡俄躲絮阎沉浸伺眯时琢锹及弯艾弊职灰燃谨沽矿峭趟针大学c语言习题参考答案与分析般铸植禹谩知逾畔静贪纬舵攒咒勿两系纯三珐褥峡织骡建秤完绊诺怖覆鞭妻歼谴悠鬃劈鲤祥逗踞亡掐讣锨则邮萎谓央喘搞片工泪良儿新赞晨录镣毛酮腹澄漳抖氓缴伟萤舟跳惹公感巾替甘凯询腮介县因歼萍览民漓秒包簧猜逆婿臂芥茫圾丹拍杏栅滥姑弊圣弟树躺箔逼腮粥烟峭适馆剁芒债盟姨只瑞韭镐智角浴叉砰现源衔脉零螟韶暖轴猖车葫灭艰淹盏蠕式喷毛刻孕梗五予迸视酥箭旺朵阐魏荐斩鹊氟溶昏怂藏咬猎脓暴滓耙者葵忘恬限淀蜂

4、豫涸缓幼瑶牡谈绎功愤苞估卞痛系折绢二兴虹擅信裂核做俩纫帖轩恼裴羡蝉阴打瓣纤避叼友录割橡邦床肤珍跟瞥荚陕粳蛰及抹漾薄扯曼讯婴霄爽咬抚铲帕 第一章习题解答(李梅) 一、 选择题 1—7:B A D C A B C 备注: 2:参考P8页中的标识符命名规则 3:参考P8页中的表1.1 二、 填空题 1:编辑、编译、连接、运行 2:.obj 3:.exe 4: 编译 5:文件 6:【1】char ch; 【2】”%d\n”,ch 备注: 知识点参考P12页的C语言开发过程 三、 编程题 备注 参考答案第2题有问题,注意数据类型转换: 比如语句hs=9/5*ss+

5、32,其中9/5运算结果是1,是要的中间结果吗? 第二章习题解答(蔡晓妍) 一 选择题 1. D (考查不同类型在内存中所占字节) 类型 长度/字节 short 2 int 4 char 1 float 4 double 8 unsigned char 1 long int 4 2. D (这个内容跟我们没有多大关系) 3. A (考查不同类型数据的有效范围) 由表2.2可知,short int的取值范围是 -32768-32767 037是8进制数,相当于十进制数31 0xaf是十六进制数,相当于十进制数175 4. A (

6、考查常数的表示方法) A选项中:xcdf没有这个表示方式,017为八进制数,0xe为十六进制数,123为十进制数 B选项中:160为十进制数,0xffff为十六进制数,011为八进制数,0L表示长整数 C选项中:01为八进制数,32768u为无符号整数,0617为八进制数,0x163为十六进制数 D选项中:0x48a为十六进制数,0205为八进制数,0x0为十六进制数,-256为负数。 5. A (考查整型常数的表示方法) 6. A (考查无符号字符型的表示范围) 参见书中第25页的表2.2 7. D 这个题本身是有错的,D选项应该是少了一个单撇号,A选项的错误解释见24页

7、 8. D 考查不同类型整数尾符的表示方法,前三个既可表示成整数,也可以理解为长整型,只有D才明确地由尾符L表示为长整型了。 9. B (考查字符与整型数之间的转换,说明字符在内存中是以整型数的形式存放的) 参见P319页的“附录C:ASCII代码表” 字符B的ASCII码值为66,字符E的ASCII码值为69,字符a的ASCII码值为97,字符A的ASCII码值为65, 所以,c2-c1=69-66=3,c2+’a’-‘A’=69+97-65=101,但由于按照%c的格式输出,所以ASCII码值101对应的字符为e。 10. C (考查不同数制型数据的转换与

8、表示) printf语句中的%d,意味着需要按照十进制整数形式打印出结果。 u=010为八进制数,转化为十进制数为=8 v=0x10为十六进制数,转化为十进制数为=16 w=10本身就是十进制数 11. C (同第9题) 12. B 这个题向我们展示这样一个道理,当我们向计算机表示不同进制数据时,我们必须按要求写上前导符,如0开头啊,0X开头什么的,但计算机向我们表示各种进制时是没有前导符的,除非我们自己设置。 k=15为十进制数,而在printf语句中,需要将该数分别用十进制数,八进制数以及十六进制数表示。 13. C (考查宏定义常数) 参见第28页“(1)宏定义”相

9、关内容 14. A (考符符号定义常数) 参见第28页“(2)const定义”相关内容 15. B (考查scanf的数据输入) 参见第35页的一句话“当一个scanf()函数中包含若干个输入项或几个scanf( )函数连续出现时,可以依次输入几个数据,各数据之间只能用空格、制表符或回车符分隔,其他符号都不能作为分隔符”。 选项B中,各数据是用逗号分隔的,所以错误。 16. B (考查点与第15题相同) 17. A (考查点与第15题相同) 18. B (考查点与第15题相同) 二 填空题 1. 2个字节,1个字节 “C”是字符串常量,由第25页的一句话“一个含有n

10、个字符的字符串常量要占用n+1个字节的存储空间”,因此“C”占用的存储空间为1+1=2个字节 ‘C’是字符常量,占用1个字节 2. #define 标识符 字符串 3. unsigned int,double,char 参见第22页“3. 基本数据类型的扩展” 4. 10,8,16 5. 4 参见第23页的表2.2 6. stdio.h 7. 0,%s 8. 5.0, 4, c=3 9. a=1,b=2 三 编程题 1. 将100按不同进制输出 #include void main() { int a=100; pri

11、ntf("%o,%d,%x\n",a,a,a); } 本题考查的是对整数的不同输出格式控制。 2. 输入一个实数,按不同的格式输出。 #include void main() { float a; scanf("%f",&a); printf("%.2f,%.2e\n",a,a,a); } 本题考查的是对实数的不同输出格式控制,但本题有点小问题,作者没有搞清楚什么是有效数字,应该改为保留两位小数。 3. 按不同形式输出一个字符。 #include void main() { char ch1='a',ch2='a'

12、 printf("%c,%d,%o,%x\n",ch1,ch1,ch1,ch1); printf("%c,%d,%o,%x\n",ch2,ch2,ch2,ch2); } 本题没什么意义,只需要用一个变量就可以了,考查的是对字符型数据的不同格式输出。 第三章习题解答(陈勇) 一、选择题 1. C,考查运算符运算规则 2. D C,考查C语言中的数据类型自动转换 3. A ,这种题可以给两个变量任意赋个整数,然后代入表达式计算,根据计算结果来选择。 4. C,这种题将a,b分别赋值为5,7和7,5根据结果选择。 5. C,考查运算符运算特点 6. C,A、B中第二个

13、赋值号左侧不是一个变量,而是一个表达式,右侧的值不可能赋给一个表达式;D中第二个赋值号左侧是常量7,一个变量的值不可能赋给一个常量。 7. C,sqrt函数返回值是double类型。 8. B,--、++的赋值特点 9. A,复合赋值运算符的特点 10. C,强制类型转换 11. B,同9题 12. D,同第6题 13. D,同9题 14. C,同第9题 15. C,给两变量代入两个值算一下即可。 16. A,B中%两侧必须是整数,C中2不能赋给a*3,D中强制类型转换错误 17. A,同9题 18. C,“/”两侧为整型数时,计算结果也是整型数。 19. B,

14、那个赋值表达式可以改写为:a=2+(c=c+(c++,c+8,++c)); 其中:(c++,c+8,++c)是一个逗号表达式,运算从左到右,表达式最后的值为最后一个表达式的计算结果,这三个互不相关,但因为++c是先+再用,c++是先用后加(这里所谓的后加是指整个表达式运算结束后再自加),所以,C初值为5,++C后变成6,原表达式变为: a=2+(c=6+6),即a=14 20. A,printf中涉及两个逗号表达式,逗号表达式的结果为最后一个表达式的值,所以前者为a的值,后者为a+b的值。 21. B,&&运算符连接多个表达式时,从左向右只要有一个表达式值为0,后面

15、表达式都不再运行。 22. A,不解释 23. C,不解释 24. D,不解释 25. C,原因同21 26. A,不解释 27. C,++,--运算规则 28. C,因为计算结果是一个整数。 二、填空题 1.double 2.2,a++*1/5相当于两个语句,a*1/5;a++; 3.0.0,因为整型变量a的值为1。 4.6 6 6.0 6.7 ,高级别的数据类型向低级别类型变量赋值引起数据丢失。 5.5,4,c=3,scanf中的格式控制符中如果加入了其它符号,输入时必须原样输入。 6.1 7.a==0 8.0 9.6 10.x=2,

16、y=1,这是一种不借助第三个变量交换两个变量值的方法,尽管很变态。 三、编程题 见习题答案。不解释。 第四章 程序流程控制(韩宏) 一、选择题 15.该程序的功能是输出1-50内能同时被2、3、7整除的数。所以选择“D”。 17.该程序的功能是对输入的字符串中的大写字母转换成小写字母,而小写字母转换成大写字母。所以选择“B”。 18.相当一部分同学可能会选择“D”,主要是没有注意while后的表达式a=14,也就是说第二次循环时,变量a的值是14,而不是12,所以结果是“B”。 三、编程题 1.从键盘输入100个整数,从中找出最大数和最小数。 编程思想:假设最大数是m

17、ax,最小数是min。当只有一个数时,它既是最大数又是最小数,所以当输入第一个数时,它既是最大数又是最小数,以后每输入一个数,都与最大数max和最小数min进行比较,如果大于max,就赋给max;否则如果小于min,就赋给min。最后所有数据都比较完,max就是所有数中最大数,min就是所有数中最小数。 #include Void main() { int i,a,max,min; scanf(”%d”,&a); //输入第一个数 min=a,max=a; //令第一个数既是最大数又是最小数 for(i=2;i<=100;i++) //

18、从第二个数开始与最大数和最小数比较 { Scanf(”%d”,&a); If(min>a) min=a; //如果比最小数还小,此数作为最小数 If(max

19、include void main() { int a,b,c,d,s; scanf(“%d%d%d%d%d”,&a,&b,&c,&d); s=a; while(!(s%b==0 && s%c==0 && s%d==0)) //如果s不能同时被b,c,d整除 s+=a; printf(“a=%d,b=%d,c=%d,d=%d,s=%d\n”,a,b,c,d,s); } 3.试编程计算1!+2!+…+20!。 编程思想:求n!就是求1~n之间所有自然数的乘积,令p=1,变量i从1循环到n,则p*i就是n!。 #include

20、 void main() { int i; float s=0,p=1; for(i=1;i<=20;i++) { p=p*i; //求i! s=s+p; //求i!的累加和 } printf(“%1d”,s); } 4.编制程序打印出100以内的所有素数。 编程思想:素数的特点是除了1和本身外,不能被其他任何整数整除。对一个数m,只要判断它不能被2~m-1之间的任何整数整除就可以了。 #include void main() { int m,i,flag; for(m=3;m<=100;m++) { flag=1;

21、 //变量flag是设立素数的标记 for(i=2;i

22、和b的余数r,直到余数r为0. #include void main() { int r,a,b; scanf(“%d%d”,&a,&b); if(a>b) //若a>b,交换a,b {r=a;a=b;b=r;} r=a%b; //求a除以b的余数 while(r) //余数r不为0,继续求余数r { a=b;b=r;r=a%b;} printf(“%d\n”,b); } 6.编制程序是用二分法求方程2x3-4x2+

23、3x-6=0在区间[1,5]中的一个实根,并要求绝对误差不超过0.001。算法为,假设在区间[m,n]中f(m)与f(n)异号。先取区间的中点r,如果|f(r)|<0.001,则r是方程的近似根;否则,若f(r)与f(m)异号,则取新的解区间为(m,r),反之取新的解区间为(r,n)。不断对解区间对分,直到解区间已经小于给定的误差时,取该区间的中点作为解的近似值。 #include #include float f(float x) {return 2*x*x*x-4*x*x+3*x-6;} //自定义函数 void main() { flo

24、at m=1.n=5,r; r=(m+n)/2; //区间对分 while(fabs(f(r))>=0.001) {if(f(r)*f(m)>0) m=r; //确定新的解区间 else n=r; r=(m+n)/2; //得到解的近似值 } printf(“Answer is %6.3f\n”,(m+n)/2); //输出解的近似值 } 第五章(王娟勤) 【5-1-4】 #include

25、h> main() { int i,a[10]; for(i=9;i>=0;i--) a[i]=10-i; //从此处可以看出下标是i的元素中放的数据是10-i printf("%d%d%d",a[2],a[5],a[8]); } 【5-1-9】 设已定义char s[]="\"abcd\\English\"\n";则字符串s所占的字节数是______________。 A.19 B.18 C.15 D.14 解释:\"为一个转意字符,代表一个",\\代表字符\,\n代表回车换行。 【5-1-10】 考察的内容是数组初

26、始化,定义时不赋初值,第一维和第二维都不可省略,如有初始化,第一维的大小可省,但第二维的大小不能省。 【5-1-11】 #include #include main() { char w[][10]={"ABCD","EFGH","IJKL","MNOP"},k; for(k=1;k<3;k++) printf("%s\n",&w[k][k]); } 解释:用%s输出时,从给出的起始地址开始输出字符,直到遇到'\0',程序中第一次循环时,以&w[1][1]为起始地址,所以输出字符串"FGH",第二次循环时以&w[2][2]为起始

27、地址,输出"KL"。 【5-1-12】 考察的内容是字符数组的初始化,用字符串和字符常量对字符数组的初始化时字符数组元素的个数不同,字符串初始化时,字符数组的元素个数等于字符串长度加1,字符常量初始化时,字符数组元素的个数与字符常量的个数相同。 【5-1-16】 #include main() { char s[100]; int c,i; scanf("%c",&c); //将输入的1作为字符接收 scanf("%d",&i); //将23作为整数接收 scanf("%s",s); //将456作为一个字符串接收,%s输入字符

28、串时,以空格或回车做为字符串结束标志,停止接收。 printf("%c,%d,%s\n",c,i,s); } 【5-1-18】 #include main() {char ch[7]={"65ab21"}; int i,s=0; for(i=0;ch[i]>='0' &&ch[i]<='9';i+=2) s=10*s+ch[i]-'0'; printf("%d\n",s); } 第一次循环,处理ch[0],其中存放’6’,’6’-‘0’值为6,故s的值为6 第二次循环,处理ch[2],其中存放’a’,使ch[i]>='0' &&c

29、h[i]<='9'条件为假,循环终止。所以打印输出6. 【5-1-19】 main() { char s[]="12134211"; int v1=0,v2=0,v3=0,v4=0,k; for(k=0;s[k];k++) switch(s[k]) {default:v4++; case '1':v1++; case '3':v3++; case '2':v2++; } printf("v1=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4); } 此题考查switch语句中default与case的顺

30、序颠倒,而且没有break时开关语句的执行过程。s[k]的值与case语句后面的常量表达式都不匹配时,执行default后面的语句,但default后面的语句没有break,所以会继续执行case ‘1’,case ‘3’,case ‘2’,后面的语句;如果s[k]的值与case后面的常量表达式值其中一个匹配,则执行其后面的语句,由于没有break,所以会顺序执行后面case 中的表达式的值。 【5-1-20】 main() { char st[20]="hello\0!\t\\"; printf("%d,%d\n",strlen(st),sizeof(st)); } 所有的

31、字符串处理函数都是从给出的起始地址开始处理字符串,直到遇到'\0';sizeof(st)是运算数组st所占字节数,为20。 【5-2-6】 将字符数组a中下标值为偶数的元素从小到大排列,其他的元素不变。 #include #include main() { char a[]="clanguage",t; int i,j,k; k=strlen(a); for(i=0;i<=k-2;i+=2) //从下标是0的元素处理起,对下标是偶数的元素排序 for(j=i+2;j

32、 if(a[i]>a[j]) //a[j]与a[i]比较,如果a[i]>a[j],则互换 {t=a[i];a[i]=a[j];a[j]=t;} puts(a); printf("\n"); } 课后编程题中1、2、3,补充实现两个字符串比较函数 1.求矩阵主、次对角线及四周元素之和。 程序代码: #include #define N 5 void main() { int a[N][N],i,j,s1,s2,s3; printf("Enter elements of matrix a,row by row:\n");

33、 for(i=0;i

34、0]+a[i][N-1]; for(j=1;j #define N 5 void main() { int a[N][N],i,j,s1,s2,s3; for(i=0;i

35、 { for(j=0;j

36、j==0||i==N-1||j==N-1)s3+=a[i][j];//周边元素求和 //因为三类元素有可能有重复,所以用的是三个单分支选择结构,而不能用多分支选择。 } printf("s1=%d s2=%d s3=%d\n",s1,s2,s3); } 2.归并排序 #define M 5 #define N 4 #include void main() { int a[M],b[N],c[M+N],i,ia=0,ib=0,ic=0; printf("Enter the element of array a:\n"); for

37、i=0;i

38、];} if(ia>=M) //如果a数组中的元素已归并完,将b数组中余下部分赋给c即可。 while(ib

39、printf("%d",b[i]); printf("\nmatrix c:\n"); for(i=0;i void main() { int a[26]={0},i=0; char str[80]; printf("Enter a string:\n"); gets(str); while(str[i])//等价于判断str[i]!=’\0’

40、{ a[str[i]-97]+=1; i++; } for(i=0;i<26;i++) if(a[i]!=0) printf("%c=%d",i+97,a[i]); } 4. 测试一个字符串是否包含在另一个字符串中. //思路:先求str2的长度,再根据长度从str1中一段一段地截取 //相同长度的字符串来比较,直到str1中剩余长度不够截取为止。 #include #include void main() { char str1[80],str2[80],t; int i,n,fla

41、g=-1;//标记变量,先假设str2不在str1中。 printf("please enter string1:"); gets(str1); printf("please enter string2:"); gets(str2); n=strlen(str2);//求str2的长度 for(i=0;strlen(&str1[i])>=n && flag==-1;i++) //从str1的第i个字符开始求长度,如果长度不够循环结束,如果已经找到包含了也结束。 { t=str1[n+i];//先把n+i位置将字符取出来放在临时变量t中。 str1[n+

42、i]=0;//再将这个位置设置为0,使str1字符串到此结束。 if(strcmp(&str1[i],str2)==0) //从第i位开始到结束,将两个字符串比较 flag=i; //如果相等,表示包含,改变标记变量值 str1[n+i]=t; //恢复刚才设置的那个0 } //以上关键是从str1中取出一段来和str2进行比较,请认真理解。 if(flag!=-1) printf("%s in %s!begin:%d\n",str2,str1,flag+1); else printf("%s not in

43、 %s\n",str2,str1); } 附加:编程实现两个字符串比较函数sstrcmp (char str1[],char str2[]); #include #include int sstrcmp(char *st1,char *st2) { for(;*st1==*st2 && *st1;st1++,st2++)//如果st1与st2指向的字符相等且其中一个不等于'\0',则继续比较下一对,直到遇到第一对不相等的字符,或者st1与st2指向的字符依然相等,但一个为'\0'则停止循环。 ; return *st1-*s

44、t2; //如果st1和st2指向的字符不相等,返回不相等的字符ASCII码相减的结果,如果相等且同时为'\0',相减的结果为0,返回0. } void main() { char str1[80],str2[80]; printf("Enter first string:\n"); gets(str1); printf("Enter first string:\n"); gets(str2); printf("%d\n",sstrcmp(str1,str2)); } 第六章(成宝国) 一、选择题 1. 答案:D

45、 分析:p=a,p和a都指向了a[0]。p-a是两个同类型指针相减运算,结果是这两个指针之间所包含的数据元素的个数,p和a都是指向了a[0],所以p-a结果为0,a[p-a]就是a[0]。*(&a[i])是a[i]先取地址再进行间接运算,结果就是a[i]。p[i]就是a[i]。*(a+i)代表元素a[i],*(*(a+i))不知道是什么。 2. 答案:B 3. 答案:B 4. 答案:A 分析:值为3的元素是a[2],所以p往后移动2个整型单元才能指向a[2];++运算优先级高于*,且都是自右向左结合,*p++和*(p++),都是先计算*p,然后p=p+1;*++p,先计算p=p+1,

46、再计算*p;++*p等价于++(*p) 5. 答案:D 分析:数组a的长度是10,元素的下标从0到9,没有a[10] 6. 答案:B 分析:本题用指针实现求一组数中的最大值。s指向当前的最大数,p从前往后对数组元素逐个扫描,当p指向的元素大于s指向的元素,要更新s的指向。 7. 答案:A 分析:本题要分清楚*是乘法运算还是间接运算。 8. 答案:D 分析:本题要分清楚指针的类型。a和prt都是指向了由3个元素组成的一维数组,p是整型指针;要表示a[1][2],分别是*(*(a+1)+2),*(*(prt+1)+2),*(p+1*3+2) 9. 答案:B 10. 答案:A

47、分析:字符数组赋值要用strcpy函数。 11. 答案:D 二、阅读程序题 1. a=0,b=7 分析:a=p==&m,=优先级低于==,所以先计算p==&m,表达式是假,结果为0,再赋值, 所以a是0。b=(*p1)/(*p2)+7,两个整数相除,结果是整数,(*p1)/(*p2)为0 2. 10 3. 49 分析:(p+=3)[3]表示p加3后再偏移3个单元的数据元素。详细内容参考课本P135,[ ]运算符。 4. 6 5. 19 6. 6385 7. 1 8. 60 分析:i的变化范围是0到2,j的变化范围是0到1,所以程序中把数组前两列的元素全部加起来存到k中

48、 9. k=2 a=3 b=2 分析:注意如何把一个数字字符转化为数值。 10. ABCD BCD CD D 分析:printf(“%s”,p)是把以p为首地址的字符串输出。 11. 9876 876 12. GFEDCB 分析:chp开始指向了字符串结束标记,循环中,只要chp比&b[0]大,则输出该位置上的字符。 13. How does she 分析:strlen(str1)/2为6,strcpy(str1+strlen(str1)/2,”es she”)表示从str1[6]的位置开始,把字符串常量”es she”拷贝过去。 14. GDA

49、BC 15. ABCDCD 16. 2 4 17. 9 三、填空题 1. 5 2. p=p+6 3. 60 4. t[1][2] 四、编程题 1. /* 算法思想: (1)对于数组中的元素,先把最后一个元素 保存在临时变量中,其他元素从倒数第二个开始,顺序 移动一个位置。 (2)把(1)重复做m次。 */ #include "stdio.h" #define N 10 void main() { int a[N],m,i; //i为循环控制变量 int temp; //临时存

50、储空间 int *p=a; printf("请输入数组a:\n"); for(;pa;p--) //从倒数第二个元素开始,顺序后移一个位置

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

关于我们      便捷服务       自信AI       AI导航        抽奖活动

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

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

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

关注我们 :微信公众号    抖音    微博    LOFTER 

客服