第七章课下解程题.docVIP

  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文档。上传文档
查看更多
第七章课下解程题

第六章 数组 6.1 用筛选法求100之内的素数 解:所谓“筛法”指的是“埃拉托色尼筛法”。埃拉托色尼是古希腊的著名数学家。他采取的方法是,在一张纸上写上1到1000的全部整数,然后逐个判断它们是否素数,找出一个非素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。 具体做法如下: (1)先将1挖掉(因为1不是素数) (2)用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。 (3)用3去除它后面各数,把3的倍数挖掉。 (4)分别用4、5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如在1~50之间的素数,要一直进行到除数为47为止。事实上,可以简化,如果需要找1~n范围内的素数表,只需进行到除数为(取其整数)即可。例如对1~50,只需进行到将7作为除数即可。 上面的算法可表示为: (1)挖去1 (2)用下一个未被挖去的数p去除p后面各数,把p的倍数挖掉; (3)检查p是否小于的整数部分(如果n=1000,则检查p31?),如果是,则返回(2)继续执行,否则就结束; (4)剩下的数就是素数。 用计算机解此题,可以定义一个数组a,a[1]~a[n]分别代表1~n这n 个数。如果检查出数组a的某一元素的值是非素数,就使它变为0,最后剩下不为0的就是素数。 程序如下: #includestdio.h #includemath.h int main() { int i,j,n,a[101]; for(i=1;i=100;i++) //a[0]不用,只用a[1]到a[100] a[i]=i; //使a[1]到a[100]的值为1到100 a[1]=0; //先“挖掉”a[1] for(i=2;isqrt(100);i++) for(j=i+1;j=100;j++) {if(a[i]!=0a[j]!=0) if(a[j]%a[i]==0) a[j]=0; //把非素数“挖掉” } printf(\n); for(i=1,n=0;i=100;i++) {if(a[i]!=0) //选出值不为0的数组元素,即素数 {printf(%5d,a[i]); n++;} //累计本行已输出的数据个数 if(n==10) {printf(\n); n=0; } } printf(\n); return 0; } 6.2用选择法对10个整数排序(从小到大) 解:选择排序的思路:设有10个元素a[1]~a[10],将a[1]与a[2]~a[10]比较,若a[1]比a[2]~a[10]都小,则不进行交换,即无任何操作。若a[2]~a[10]中有一个以上比a[1]小,则将其中最小的一个(假如为a[i])与a[1]交换,此时a[1]中存放了10个中最小的数。第二轮将a[2]与a[3]~a[10]比较,将剩下9个数中的最小者a[i]与a[2]对换,此时a[2]中存放的是10个中第二小的数。依此类推,共进行9轮比较,a[1]~a[10]就已按由小到大的顺序存放了。 程序如下: #includestdio.h int main() { int i,j,min,temp,a[11]; printf(enter data:\n); for(i=1;i=10;i++) { printf(a[%d]=,i); scanf(%d,a[i]); } printf(\n); printf(the orginal numbers:\n); for(i=1;i=10;i++) printf(%5d,a[i]); printf(\n); for(i=1;i=9;i++) //以下8行是对10个数排序 { min=i; for(j=i+1;j=10;j++) if(a[min]a[j]) min=j; temp=a[i];a[i]=a[min];a[min]=temp; //将a[i+1]~[10]中最小者与a[i]对换 } printf(\nthe sorted numbers:\n); for(i=1;i=10;i++) printf(%5d,a[i]); printf(\n); return 0; } 6.4 有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。 解:假设数组a有n个元素,而且已按升序排列,在插入一个数时按下面的方法处理: (1)如果插

文档评论(0)

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

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

1亿VIP精品文档

相关文档