天天看点

第1次作业

要求0、作业要求地址:https://edu.cnblogs.com/campus/nenu/2016CS/homework/2110

一、

    要求一、git仓库地址:https://git.coding.net/tianjx687/wf.git

二、

要求二、PSP阶段表格

PSP阶段 预计所花时间(min) 实际工作所花时间(min)
计划 90  100
明确作业要求和其它相关因素,估计时间成本。
开发 1030 1130
需求分析 100 120
生成设计文档 60
设计复审 20
代码规范 70
具体设计 130
具体编码 600 630
代码复审
测试(自测、修改代码,提交修改) 30
报告 190
测试报告 40
计算工作量
事后总结

 PSP功能表格:

功能模板 具体工作 预计时间(min) 实际时间(min)
功能一
300 500
测试(自测)
功能二 50
200
功能三
230

预估耗时和实际耗时之间的差距、原因:

  差距:

          1.我基本上实际耗时都要大于预估耗时。

  原因:

         1.提前想到的内容不够全面,等到遇到了就要一个一个解决,这样导致很多时间花在上面了,以后会努力想的全面一些,避免这些麻烦。

         2.其实我刚开始想的时候认为自己已经留了充分的时间,但是在我实施的过程中自己做的有点慢,而且遇到一些问题向同学请教,所以导致实际工作时间比预期的要长。

三、解题思路

我刚开始看到有作业发布的时候先看了程序要求,然后是博客要求,看完作业里所有要求后在回过头读程序要求,分析每一个功能怎么实现。因为自己基础不好,所以分析的时候还和同学一起商量怎么实现,有的时候写到一半发现行不通,然后再去问同学才想清楚。在写功能一的时候花的时间最多,功能一遇到的问题是刚开始没看清楚题,只是写的txt文件里的单词的总数,然而重复的单词也算在total里面了,输出的顺序是乱的,主要是自己锻炼的太少了。

四、

功能二、(wf.cpp)我查到freopen就是实现重定向。把预定义的几个标准流文件(stdin)定向到由path指定的文件中。把stdin重定向到input.txt文件中

printf(">wf -f <input.txt\n");
    fp=freopen(".\\input.txt","r",stdin);
      

  检测txt文件中的单词是不是我们规定的英文单词,并且大小写英文开头都可以,把小写变成大写。

while(text[i]!='\0')
        {
           int j=0;
            char s[30];

            while((text[i]>='a'&&text[i]<='z')||(text[i]>='A'&&text[i]<='Z'))
            {
                if(text[i]>='A'&&text[i]<='Z')
                text[i]+='a'-'A';
                s[j++]=text[i++];
            }
            s[j]='\0';
            if(word_map[s]==0)
            n++;
            word_map[s]++;
            if(text[i]=='\0') break;
            else
            i++;
        }      

先输出不单词的总数,不包括重复的,然后按照字典顺序输出单词和单词的出现的次数

cout<<"total"<<"  "<<n-1<<"  words"<<endl<<endl<<endl;
    for(it=word_map.begin(),i=1;it!=word_map.end();it++,i++)
    {
        if(it->first=="")
        continue;
        cout<<left;
       cout<<setw(10)<<it->first;
       cout<<setw(10)<<it->second<<endl;
    }
    cout<<'\n';      

运行之后会出现结果,如下:

第1次作业

 功能三、(wf3.cpp)主要是输出文章中出现频率最高的三个单词。先对单词按照出现频率排序,然后按顺序输出,只输出排在前三个的单词。

void paixu()
{
      int i;
      int j;
      struct word a;
      for(i=0;i<sum;i++)
    {
        for(j=i+1;j<sum;j++)
          if(A[i].num<A[j].num)
         {
              a=A[j];
             A[j]=A[i];
             A[i]=a;
           }
      }
}
int main()
{
      int ch;
      char s[30];
      int i;
      int flag=0;
       FILE *fp;
       fp=fopen(".\\input.txt","r");
      if(fp==NULL)
 {
        printf("此文件不存在!\n");
  }
     sum=0;
     ch=0;
 
      for(i=0;i<1000;i++)
       A[i].num=0;
   while(ch!=-1)
 {
     for(i=0;i<30;i++)
     s[i]='\0';
     ch=fgetc(fp);
    if((65<=ch&&ch<=90)||(ch>=97&&ch<=122))
  {
      for(i=0;;i++)
      {
         s[i]=ch;
         ch=fgetc(fp);
         if((65<=ch&&ch<=90)||(ch>=97&&ch<=122))continue;
         else break;
       }
       chuli(s);
      }
    }
       paixu();
       printf("Total words is:%d\n",sum);
       printf("--------------------:\n");
        for(i=0;i<3;i++)
        printf("%s           :%d\n",A[i].str,A[i].num);      
第1次作业

 五、我的感想

       我感觉这次的作业我发现自己考虑问题并不全面,自己刚开始做作业的时候就写自己想到的那些,后来才逐渐遇到之前没有想到的问题,需要反复改,而且也没有实现有些功能。这次的作业让我觉得代码必须写的规范,否则不要说别人了,就连自己看自己的代码都有点费劲。我觉得自己基础不好,需要学习的地方还有很多,更应该利用现在的机会好好锻炼,多多积累,今后继续努力学习,虚心向别人请教,充实自己。