新学期伊始,软件工程的老师就对我们要求了第一个个人的程序设计,刚开始真是一头雾水的感觉,对于编程本来就不是擅长的我这次真的是不知道怎么办了。刚开始只有对于这个程序的初步的想法,知道每一步应该怎么做,后来逐渐看书学习,并问编程比较厉害的同学就了解了一些数组,排序,读入文件等一系列的方法便开始编这个程序。刚开始程序初步完型,突然发现识别不了英文中的大写字母,几经修改后知道了自己错在哪里。还有一些输出的完善,都是在之后的修改中实现的。本次个人程序设计也学习到了新的几个函数strcpy函数的意思是字符串赋值语句 strcmp:比较两个字符串strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符' '为止,然后返回计数器值。
具体步骤:一·定义各个变量名
二·将文件中的单词存放到二维数组中
三·冒泡排序并将以后出现相同的单词设为空串,次数加一
四·输出:将频率最高的10个单词依次输出
主要代码
#include <stdio.h>
#include<string.h>
int main()
{
FILE *fp;
fp=fopen("d://a.txt ","r");//打开d盘的文本文件
char s[1000][26],ch[10000];
char real[100][26],t[26];
char tem[26];
int i=0,j=0,k=0,sum=0,q=0,r=0;
int n,m,p=0,count[1000]={0};
int temp,l;
//定义数组定义各个变量名
while((ch[k]=fgetc(fp))!=EOF)
{if(ch[k]>='A'&&ch[k]<='Z')//大写字母变为小写
ch[k]=ch[k]+32;
if(ch[k]>='a'&&ch[k]<='z'||ch[k]=='-')
{
s[i][j]=ch[k];
j++;
}//将文件中的单词存放到二维数组中
else { s[i][j]=' '; i++; j=0; sum++;
}
k++;
}
for(m=0;m<sum;m++)
{
l=strlen(s[m]);
for(n=0;n<l;n++)
if(s[m][n]=='-')
{
s[m][n]=' ';
strcat(s[m],s[m+1]);
s[m+1][0]=' ';
}
}
for(m=sum;m>0;m--)
{
for(n=0;n<m;n++)
if(strcmp(s[n],s[n+1])>0)
{
strcpy(t,s[n]);
strcpy(s[n],s[n+1]);
strcpy(s[n+1],t);
}
}//以后出现相同的字符串置零
for(m=0;m<sum;m++)
{
for(n=m+1;n<sum;n++)
if(strcmp(s[m],s[n])==0)
s[n][0]=' ';
}
for(m=0;m<sum;m++)
{
if(s[m][0]!=' ')
{
for(n=m+1;;n++)
{
if(s[n][0]==' ')
count[r]++;
else if
(s[n][0]!=' ')
break;
}
r++;
}
if(s[m][0]!=' ')
{strcpy(real[p],s[m]);
p++;
q++;
}
}//冒泡排序并将以后出现相同的单词设为空串,次数加一
for(i=q-1;i>0;i--)
{
for(j=0;j<i;j++)
{
if(count[j]<count[j+1])
{
temp=count[j];
count[j]=count[j+1];
count[j+1]=temp;
strcpy(tem,real[j]);
strcpy(real[j],real[j+1]);
strcpy(real[j+1],tem);
} } }printf("频率最高的十个单词依次为: ");
if(q<10) for(i=0;i<q;i++)
{
printf(" %s",real[i]);
printf(" ");
printf(" %d ",count[i]+1);
}
else
for(i=0;i<10;i++)
{
printf(" %s",real[i]);
printf(" ");
printf(" %d ",count[i]+1);
}
fclose(fp);
return 0;
} //输出:将频率最高的10个单词依次输出
以上为这次个人程序设计的主要流程,个人觉得自己还是处在编程的开始阶段,以后还需要更多的努力,不足之处希望大神们批评指正。