一个简单的c程序

题目:查询一篇英文中出现的次数最多的10个单词

分析:虽然题目只是简单的要求找出出现频率最多的10个单词。但是在实际的编程中,遇到的问题还是很多的。首先,得解决文件的打开问题,也就是说文件是从那个地方读取出来了的,在这里,我采用的是C语言中的文件的打开函数fopen()。根据书上的例子,然后在做了一些修改,基本上可以实现打开文件的目的。其次,要解决的是打开之后,对数据的分析。在这一步,第一,将文章出现的大写都转换成小写;第二,对这些字符串进行统计,出现的次数做一个统计。第三,对这些数据进行比较,也就是比较关键的排序。在这一步,我才用的是冒泡排序法。在排序的过程中,由于有许多,细节方面的问题没有处理好,所以整个程序的运行,还存在一些问题,并且整这个程序显得比较无序和杂乱,以后的几天我会继续对此程序进行后续的完成。下面,附上源程序:

源程序:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define M 100000
#define N 10
struct word
 {
 char w[50];
 int n;
 }w[M];
 
 int main()
{
 FILE *fp;
 char infile[30],ch;
 int i,flag;
 printf("请输入文件地址:");
 scanf("%s",infile);
 if((fp=fopen(infile,"r"))==NULL)
 {printf("无法打开此文件!\n");
 exit(0);}
 while((ch=fgetc(fp))!=EOF)
 {  
    fclose(fp);
       for(i=0;i<N;i++)ko[i]=0;
       scanf("%d",&n);
       fg=0;
       i=0;
       strncpy(wd,ko,N);
    while(fg<at)
 {  
   if(isalpha(t[fg]))
   {
      wd[i]=t[fg];
  
    i++;
   }
   if(t[fg]==32&&i>0)break;
       fg++;
}
    strncpy(root.a,ko,N);
strcpy(root.a,wd);
root.i=1;
root.left=NULL;
root.right=NULL;
i=0;
strncpy(wd,ko,N);
    while(fg<at)
{  
   if(isalpha(t[fg]))
   {
      wd[i]=t[fg];
    i++;
   }
   if(t[fg]==32&&i>0)break;
        fg++;
}
    else
    {
             if(flag==1)
     {   b[i]='\0';
      for(j=0;j<k;j++)
      {
          if(strcmp(b,w[j].w)==0)
       {m=1;break;}
      }
       if(m) w[j].n++;
       else
       {w[k].n=1;strcpy(w[k].w,b);k++;}
     }
  
       if('A'<=ch && ch<='Z') ch+=32;
       if('a'<=ch && ch<='z')
    {b[i]=ch;i++;flag=1;}
  }
 }
 }
 for(i=0;i<k;i++) { printf("%s %d\n",w[i].w,w[i].n);}
 printf("\n");
 for(i=0;i<k&&i<5;i++)
 {
  t=0;
  while(w[t].n==0) t++;
  for(j=1;j<k;j++)
  {
   if(w[j].n>w[t].n) t=j;
   else
    if(w[j].n==w[t].n)
    {
     if(strcmp(w[j].w,w[t].w)<0)
      t=j;
    }
  }
  printf("%s   出现次数:%d\n",w[t].w,w[t].n);
  w[t].n=0;
 }
 return 0;
}

总结:本次的程序,由于本人对编程的生疏,导致本程序失败,问题不少,并且对基本的要求都没有完成。在以后的这周,会在空闲时间对程序进行改善,达到简化的目的。

posted @ 2014-03-02 21:33  逍遥丶小哥  阅读(156)  评论(1编辑  收藏  举报