zoukankan      html  css  js  c++  java
  • 202103226-1 编程作业

    这个作业属于哪个课程 软件工程-计算机四班
    这个作业要求在哪里 编程作业
    这个作业的目标 完成项目的需求
    学号 20188507

    项目连接

    C-project

    2编程要求

    1:统计文件的字符数(对应输出第一行):

    只需要统计Ascii码,汉字不需考虑
    空格,水平制表符,换行符,均算字符

    2:统计文件的单词总数(对应输出第二行),单词:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写。

    英文字母: A-Z,a-z
    字母数字符号:A-Z, a-z,0-9
    分割符:空格,非字母数字符号
    例:file123是一个单词, 123file不是一个单词。file,File和FILE是同一个单词

    3:统计文件的有效行数(对应输出第三行):任何包含非空白字符的行,都需要统计。

    4:统计文件中各单词的出现次数(对应输出接下来10行),最终只输出频率最高的10个。

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 30 30
    • Estimate • 估计这个任务需要多少时间 240 360
    Development 开发
    • Analysis • 需求分析 (包括学习新技术) 120 120
    • Design Spec • 生成设计文档 10 10
    • Design Review • 设计复审 10 10
    • Coding Standard • 代码规范 (为目前的开发制定合适的规范) 10 10
    • Design • 具体设计 20 20
    • Coding • 具体编码 180 240
    • Code Review • 代码复审 20 20
    • Test • 测试(自我测试,修改代码,提交修改) 20 20
    Reporting 报告 60 60
    • Test Repor • 测试报告 10 10
    • Size Measurement • 计算工作量 10 10
    • Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 10 10
    合计 750 930

    解题思路

    (1):读取文件,利用fopen进行打开文件,“r”进行读取
    (2):利用fgets从指定的流中读取数据,用if进行判断是否为空格或者换行符,如果不为空格,则单词数加一,如果不为空格或者换行符,则字符数加一。
    循环下去知道所有的单词都满足要求,然后输出个数
    (3):利用fscanf将输入字符串存储到结构体中,运用冒泡排序法对出现次数进行降序排序,再输出前十个出现次数最多

    代码规范

    C-project

    计算模块接口的设计与实现过程

    定义结构体

    struct
    {
        char str[99]; //单词
        
        int n;  //出现次数
        
    }
    

    定义一个指针

    int *getCharNum(char *filename,int *totalNum);
    

    进行文件读取判断

    	if( (fp=fopen(name, "rb"))== NULL ){
    		
    		perror(name);
    		
    		return NULL;
    	}
    

    文件行内容的读取与单词分割:

    while(fgets(buffer, 10000, fp)!= NULL){
    		
    		bufferLen = strlen(buffer);
    
    		
    		for( i=0; i<bufferLen; i++){
    			
    			c = buffer[i];
    		
    			if( c==' ' || c=='	'){	
    			
    			//遇到空格
    			!isLastBlank && wordNum++; //如果上个字符不是空格,那么单词数加1
    			
    			isLastBlank = 1;
    			
    		}else if(c!='
    '&&c!='
    '){
    			
    			//忽略换行符
    			
    			charNum++; //如果既不是换行符也不是空格,字符数加1
    			
    			isLastBlank = 0;
    			
    			}
    			
    		}
    		!isLastBlank && wordNum++;//如果最后一个字符不是空格,那么单词数加1
    		
    		isLastBlank = 1; //每次换行重置为1
    		
    
    		totalNum[0]++;//总行数
    		
    		totalNum[1] += charNum;//总字符数
    		
    		totalNum[2] += wordNum;//总单词数
    		
    		printf("%-7d%-7d%d
    " , totalNum[0], wordNum, charNum);
    		
    		//置零,重新统计下一行
    		charNum = 0;
    		
    		wordNum = 0;
    	}
    

    fscanf输入字符串储存到结构体中

    unsigned x,j,times=0;
    			for(x=0;x<99;x++)
        {
            fscanf(fp,"%s",a[x].str);//
            
            a[x].n++; //计算出现次数   
    		 
            for(j=0;j<x;j++)
            
                if(strcmp(a[x].str,a[j].str)==0) //如果和前面的相同
                
                {
                    if(a[j].n!=0)a[j].n++; //不为0的加一
                    
                    a[x].n=0; //置为0
                    
                }
                times++; //计算字符串个数
                
                if(fgetc(fp)==EOF)break;        
    			   
        }
        
        for(x=0;x<times-1;x++)  //冒泡法排序
        
            for(j=0;j<times-1-x;j++)
            
                if(a[j].n<a[j+1].n) //对出现次数进行降序排序
                
                {       //交换结构体
                
                    t=a[j];
                    
                    a[j]=a[j+1];
                    
                    a[j+1]=t; 
                    
                }
                
                for(x=0;x<10;x++) {//输出前十个出现次数最多
                
                    printf("%s  %d
    ",a[x].str,a[x].n);
                }
            
    

    单元测试和性能分析


    异常处理

    文件读取失败。

    心路历程与收获:

    通过这次编程,我巩固到了以前学习的一些即将遗忘的知识,也让我学习到了如何使用git和一些新知识,虽然这次编程查阅了大量资料,但是经过这次编程,我也学习到了许多新知识,为下一次编程做好准备,希望经过这次编程,能让我以后在编程上越做越好。

  • 相关阅读:
    建立一个能持续处理的C/S网络程序
    建立一个可以不停地接收客户端新的连接,但不能处理复杂的业务的C/S网络程序
    归并排序
    堆排序
    计数排序
    不要在PHP7中踩这些坑
    关于生活学习
    topthink/think-swoole 扩展包的使用 之 WebSocket
    PHP 三元运算符
    topthink/think-swoole 扩展包的使用 之 Task
  • 原文地址:https://www.cnblogs.com/hhl296738954/p/14610526.html
Copyright © 2011-2022 走看看