鱼C论坛

 找回密码
 立即注册
查看: 2265|回复: 8

求高手指点迷津,想了很就没头绪,汗。

[复制链接]
发表于 2012-11-16 23:52:39 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 .任.ポ 于 2012-11-17 02:47 编辑
#include<stdio.h>

#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0

void main()
{
int c, i, nc, state;
int len;
int maxvalue;
int ovflow;
int wl[MAXWORD];

state = OUT;
nc = 0;
ovflow = 0;
for(i = 0; i < MAXWORD; ++i)
{
wl[i] = 0;
}
while((c = getchar()) != 'k')
{
if(c == ' ' || c == '\n' || c == '\t')
{
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 = 1;
}
else
{
len = 0;
}
while(len > 0)    //这里的len不是都只可以打印0或1吗
{
putchar('*');
--len;
}
putchar('\n');
}
if(ovflow > 0)
printf("There are %d words >= %d\n", ovflow , MAXWORD);
}
为什么代码粘贴到这自动会对齐,很新的新手高手勿喷

题目是:编写一个程序,打印输入中单词长度的直方图。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-11-17 01:01:22 | 显示全部楼层
我只能说,代码很多逻辑错误,不知道是粗心写错了,还是怎么的。。。看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-11-17 01:23:54 | 显示全部楼层
感觉楼主的逻辑完全混乱,如果楼主希望得到帮助,希望把原题贴出来,否则根本不明白题意。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-11-17 13:42:21 | 显示全部楼层
你是用VC++6.0吗? 是的话 按alt+F8 代码就会自动排序了 希望可以帮助你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-8 10:26:04 | 显示全部楼层
你把那个代码打包下放在这里问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-8 13:25:37 | 显示全部楼层
俺不知道  有  等人来打
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-8 19:58:38 | 显示全部楼层
#include<stdio.h>
#define MAXHIST 15
#define MAXWORD 11
#define IN 1
#define OUT 0
void main()
{        
        int c, i, nc, state;        
        int len;        
        int maxvalue;        
        int ovflow;        
        int wl[MAXWORD];                
        state = OUT;        
        nc = 0;        
        ovflow = 0;        
        for(i = 0; i < MAXWORD; ++i)                
        {                
                wl[i] = 0;                
        }        
        //输入遇到字母k的时候退出
        //依次扫描每个输入字符开始的时候置state为IN,
        //扫描到单词结尾的时候置state为OUT,此时nc为刚扫描完单词的长度
        while((c = getchar()) != 'k')                
        {
                //出现以下三个字母的时候说明遇到新的单词了
                if(c == ' ' || c == '\n' || c == '\t')                        
                {
                        //改变state状态兵根据nc保存必要的结果
                        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)                        
                {                        
                        //这里利用了一个简单的数学公式,最长行len总是MAXHIST
                        //原因是最长行的wl[i]==maxvalue
                        //这样按比例缩放出来的直方图好看些
                        if((len = wl[i] * MAXHIST / maxvalue) <=0)   //这条代码什么意思                                
                                len = 1;                        
                }                
                else                        
                {                        
                        len = 0;                        
                }                
                //假设前面if((len=...)<=0)中计算的len=10那么执行到这里,len的值还是10
                while(len > 0)    //这里的len不是都只可以打印0或1吗                        
                {                        
                        putchar('*');                        
                        --len;                        
                }                
                putchar('\n');        
        }        
        if(ovflow > 0)                
                printf("There are %d words >= %d\n", ovflow , MAXWORD);        
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-9 11:47:32 | 显示全部楼层
你是 高手  我才刚刚学到 指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-27 16:03:02 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 09:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表