| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1498 人关注过本帖
标题:对C程序设计语言练习1-13打印单词长度直方图的答案有所不解
取消只看楼主 加入收藏
耶耶耶耶耶爷
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-7-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
对C程序设计语言练习1-13打印单词长度直方图的答案有所不解
以下是答案中的代码

程序代码:
#include <stdio.h>  
  
#define MAXHIST 15  
#define MAXWORD 12 
#define IN  1  
#define OUT 0  
  
main()  
{  
    int c, i, nc, len, state;  
    int wl[MAXWORD]; 
    int ovflow;  
    int maxvalue; 
  
    state = OUT;  
    ovflow = 0;  
    nc = 0;  
    for(i = 0; i < MAXWORD; ++i)  
        wl[i] = 0;  //初始化各数组

    while((c = getchar()) != EOF)  
    {  
        if(c == ' ' || c == '\t' || c == '\n')   
        {  
            state = OUT;  
            if(nc > 0)  
                if(nc < MAXWORD)  
                    ++wl[nc];  
                else  
                    ++ovflow;  
            nc = 0;  
        }  
        else if(state == OUT)  
        {  
            state = IN;  
            nc = 1;  
        }  
        else  
            nc++;
    }  

    maxvalue = 0;  
    for(i = 1; i < MAXWORD; ++i)  
        if(wl[i] > maxvalue)  
            maxvalue = wl[i];  
    for(i = 1; i < MAXWORD; ++i)  
    {  
        printf("%5d - %5d:", i, wl[i]);  
        if(wl[i] > 0)  
        {  
            if((len = wl[i] * MAXHIST / maxvalue) <= 0) //len为直方图中直方条的长度  
                len = 1;  
        }  
        else  
            len = 0;  
        while(len > 0)  
        {  
            putchar('*');
            --len;  
        }  
        putchar('\n');  
    }  
    if(ovflow > 0)  
        printf("There are %d words >= %d\n", ovflow, MAXWORD);  
    return 0;  
}  


其中
程序代码:
    for(i = 1; i < MAXWORD; ++i)  
    {  
        printf("%5d - %5d:", i, wl[i]);  
        if(wl[i] > 0)  
        {  
            if((len = wl[i] * MAXHIST / maxvalue) <= 0) 
                len = 1;  
        }  
        else  
            len = 0;  
        while(len > 0)  
        {  
            putchar('*');
            --len;  
        }  
        putchar('\n');  
    } 

这里不能理解

1.理解不了len的这个计算方式怎么才会使它<=0
2.判断len == 0之后,使len = 1,到while循环的时候不是只会循环一次输出一个*吗
图片附件: 游客没有浏览图片的权限,请 登录注册

小白一名,卡在这里懵逼了很久,求解!
搜索更多相关主题的帖子: OUT int state ++i putchar 
2017-07-27 12:20
耶耶耶耶耶爷
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-7-27
收藏
得分:0 
回复 楼主 耶耶耶耶耶爷
谢谢,看了回复后自己去写了一下,但没有用这个写法,这个写法还是不太能理解

回复写到一半的时候顿然明朗……
一直在纠结len的值是从哪里得来的,
突然发现是因为if条件中的赋值是会被保留的。

谢谢
2017-07-27 14:23
快速回复:对C程序设计语言练习1-13打印单词长度直方图的答案有所不解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013828 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved