重庆好老师培训学校上机模拟题第二套答案以及解析.docVIP

重庆好老师培训学校上机模拟题第二套答案以及解析.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
重庆好老师培训学校上机模拟题第二套答案以及解析

好老师C语言上机模拟题第二套 第一题、编程题:编程实现输出一下图形。 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 5 6 5 4 3 2 1 这里分析,这里由数字和空格构成,把它补齐之后就有: 第一行 5个空格 第二行 4个空格 第三行 3个空格 第四行 2个空格 第五行 1个空格 第六行 0个空格 数字 我们先看前半边 第一行 就输出 一个1 第二行 就输出 1 2 第三行 输出1 2 3 第四行输出 1 2 3 4 第五行输出 1 2 3 4 5 第六行就输出 1 2 3 4 5 6 再看后半边 第一行什么都不输出,第二行输出 一个1 第三行输出 2 1 第四行输出 321 第五行输出 4 3 2 1 第六行 54321 所以有以下输出: void main() { int i,j; for(i=1;i=6;i++) { for(j=0;j6-i;j++) printf( ); //解决空格问题 for(j=1;j=i;j++) printf( %d,j); //前半部分输出 for(j=i-1;j0;j--) printf(%d,j); //后半部分输出 printf(\n ); //输出换行 } 第二题、填空题:下面程序实现求递归求最大公约数,请完善程序填空; #includestdio.h int gcd(int m,int n) {int g; if(n==0) g=m; else g=gcd(n,m%n); return(g); } void main() {int a,b,c; scanf(%d%d,a,b); c=gcd(a,b); printf(%d,c); } 根据题目分析 题目是要求求出最大公约数,在看主函数里面,只是输入了a,b的值然后c=函数gcd的返回值,然后输出c很明显c就是a,b的最大公约数,gcd实现求出最大公约数,换句话说gcd的返回值就是最大公约数。所以第二个空就填 a,b; 再来分析如果a=24,b=16那么就是传递给m,n那么换句话说就是要求出mn的最大公约数返回,求最大公约数是采用的是辗转求余;即是说: 第一次:C=m%n=24%16==8;n赋值给m,即是说m=16;然后把c赋值给n,即是说n=8; 第二次:C=m%n=16%8==0;n赋值给m,即是说m=8;然后把c赋值给n,即是说n=0; 当n=0的时候就认为m里面放的值就是最大公约数; 在去看填空,第一个空:if()g=m;我们看这个函数的返回值是g也就是说g就是表示最大公约数,当什么时候将m赋值给g也就是说m什么时候是最大公约数,所以就是填n=0的时候所以填一个n= =0; 第二个空:如果不等于0的时候,即是说要将n赋值给m,将c=m%n的值赋值给n,换句话说递归调用的时候第二次调用就该对m传递n过去,所以第二个空填(n,m%m); 第三题、改错题:下面程序实现将一个十进制的数n转换为m(m=16)进制的数,并保存输出。程序中星号行带错,请改错。 #includestdio.h void main() {char x[]={0123456789ABCDEF}; int a[64],n,m,k=0; scanf(%d,%d,n,m); while(n!=0) * {a[k++]=n/m; //改成 a[k++]=n%m * n=n%m; //改成 n=n/m } k--; while(k=0) * {printf(%c,x[k]); //改成printf(%c,x[a[k]]); k--; } } 这里举个例子 加入n=44,m=16,即是说将44转换成16进制,要将这个转换为16进制那修改后就有这样的操作分析过程 先做while(n!=0) 第一次循环:n=44!=0成立,做 k=0.a[k++]=a[0]=44%16=12 ,n=n/m==44/16= =2; 第二次循环:n=2!=0成立,做k=1, a[k++]=a[1]=2%16=2,n=n/m==2/16= =2; 第三次循环 n=0!=0就不成立,k=2 就不做了。 然后做一个 k-- 也就是说昨晚循环 或者k--之后就

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档