- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C实验报告概要
五、第五题:5、编写函数,该函数实现任意一个正整数是否为完全数。再编写函数输出完全数等于各因子之和的式子。最后找出2~100000之内所有完全数。所谓完全数是其各因子之和正好等于本身的数,例如输出格式如下的完全数:6=1+2+3,28=1+2+4+7+14。#includeiostreamusingnamespace std;void panduan(int i)//自定义函数,用于判断i是不是完全数{int m,s=0;int *num=newint[i];//动态分配数组空间,虽然仍然大于实际需要值,但数组大小基本上得到了控制for(m=1;m=i/2;m++){if(i%m==0){num[s]=m;s++;//s最终为因子个数}}int sum=0;int n;for(n=0;ns;n++)sum=sum+num[n];//sum最终为各因子之和if(sum==i){couti=;for(n=0;ns-1;n++)coutnum[n]+;coutnum[s-1]endl;}delete []num;//释放数组空间}int main(){int i;cout从2到的100000完全数如下:\n;for(i=2;i100000;i++) panduan(i);return 0;}2.实验结果:3.问题分析:在做这道题的过程中,起初出现了一个奇怪的现象:如果上限由100000改为10000,则程序正常运行,但对于100000,会显示出现问题:后来检查不出问题时,发现了一直以来一个不良习惯:不编写释放数组空间的语句。试着加上这一语句之后再运行时,发现程序能够正常进行了,因而认为应该是这句语句的作用,但并不知道具体的原因。六、第六题:6、(必做题)编写一个实现文章(即字符串)单词统计功能的程序,要求:输入一系列英文单词字符串(即带空格的字符串),单词间用空格隔开或逗号或句号隔开。请统计该字符串中单词出现的频率,并按词典顺序输出单词及其频率。必须用结构体方法实现。 1.源程序代码:#includeiostream#includecstringusingnamespace std;struct frequency{char word[20];int n;}danci[100];//定义结构体变量danci,它由单词及其频率两个量组成struct w{char a[20];}in[100];//定义了个元素的字符串组,用于储存输入的句子中的每个单词int fre(char nu[],w in[],int mu)//统计每个单词的频率函数{int i,pl=0;for(i=0;imu;i++){if(strcmp(nu,in[i].a)==0)pl++;}return pl;}void main(){char article[501];cout输入句子:\n;cin.get(article,500);int l=strlen(article);//取其长度,定义为整型数lint i,j,k,m;for(i=0,j=0;il;i++)//开始循环,从i=0循环到i=l,循环内部也会对i进行增加,因而主循环的i是处理了一些节点:离开单词部分到进入单词部分之间的字符{char a=*(article+i);//a定义为article第i个字符,if((a=za=a)||(a=Za=A))//判断若已经是字母了的话就进入循环记录接下来的单词内容,否则继续i增加直到走完非字母字符到达字母{m=0;k=i;char b=*(article+k);while((b=zb=a)||(b=Zb=A))//当它是字母就循环,若已经不是字母了,就跳出循环{in[j].a[m]=b;k++;m++;b=*(article+k);};//一直加直到遇到非字母字符时停止in[j].a[m]=\0;//这个单词转录完了之后,将最后一个字符写为‘\0以防乱码j++;//下一个单词的写入i=k-1;//由于在小循环中k最后一次循环多加了一个,所以在这里扣除,赋给i,i就不再执行单词的中间字母部分,只需对非字母部分判断直到遇到下一个单词的开头字母}}//至此,已记录所有单词到in[].a中。int mu=j;//记录下单词数目,共有单词mu个(注意到最后j加了)//然后将每一个不同的单词储存在danci[].word里int s=0;for(i=0;imu;i++){j=0;while(jistrcmp(in[i].a,in[j].a)!=0)j++;if(j==i){strcpy(danci[s].word,in[i].a);s++;}}//至此将所有不同单词依次储存到了danci.word中,s为不同单词个数//然后排序for(i=0;is;i++){k=i;for
文档评论(0)