3.问题分析:
此题中虽然定义了枚举类型,然而实际过程中,感觉并没有使用到枚举,它的存在似乎没有意义,不知道是不是方法用错了。
五、第五题: 5、编写函数,该函数实现任意一个正整数是否为完全数。再编写函数输出完全数等于各因子之和的式子。最后找出2~100000之内所有完全数。所谓完全数是其各因子之和正好等于本身的数,例如输出格式如下的完全数:6=1+2+3,28=1+2+4+7+14。
#include
void panduan(int i)//自定义函数,用于判断i是不是完全数 {
int m,s=0;
int *num=new int[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;n
sum=sum+num[n];//sum最终为各因子之和 if(sum==i) {
cout<
for(n=0;n delete []num;//释放数组空间 } int main() { int i; cout<<\从2到的100000完全数如下:\\n\; for(i=2;i<100000;i++) panduan(i); return 0; } 2.实验结果: 3.问题分析: 在做这道题的过程中,起初出现了一个奇怪的现象:如果上限由100000改为10000,则程序正常运行,但对于100000,会显示出现问题: 后来检查不出问题时,发现了一直以来一个不良习惯:不编写释放数组空间的语句。试着加上这一语句之后再运行时,发现程序能够正常 进行了,因而认为应该是这句语句的作用,但并不知道具体的原因。 六、第六题:6、(必做题)编写一个实现文章(即字符串)单词统计功能的程序,要求:输入一系列英文单词字符串(即带空格的字符串),单词间用空格隔开或逗号或句号隔开。请统计该字符串中单词出现的频率,并按词典顺序输出单词及其频率。必须用结构体方法实现。 1.源程序代码: #include 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;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);//取其长度,定义为整型数l int i,j,k,m; for(i=0,j=0;i char a=*(article+i);//a定义为article第i个字符, if((a<='z'&&a>='a')||(a<='Z'&&a>='A'))//判断若已经是字母了的话就进入循环记录接下来的单词内容,否则继续i增加直到走完非字母字符到达字母 { m=0; k=i; char b=*(article+k); while((b<='z'&&b>='a')||(b<='Z'&&b>='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;i j=0; while(j strcpy(danci[s].word,in[i].a); s++; } }//至此将所有不同单词依次储存到了danci.word中,s为不同单词个数 //然后排序 for(i=0;i k=i; for(j=i+1;j if(strcmp(danci[j].word,danci[k].word)<0) k=j; if(k!=i) { frequency tmp=*(danci+i); *(danci+i)=*(danci+k); *(danci+k)=tmp; } } // cout<<\统计结果为:\\n\; for(i=0;i danci[i].n=fre(danci[i].word,in,mu); cout<<\单词: \< 2.实验结果: (1)按照题目要求的检验: