.任.ポ 发表于 2012-11-16 23:52:39

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

本帖最后由 .任.ポ 于 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;

state = OUT;
nc = 0;
ovflow = 0;
for(i = 0; i < MAXWORD; ++i)
{
wl = 0;
}
while((c = getchar()) != 'k')
{
if(c == ' ' || c == '\n' || c == '\t')
{
state = OUT;

if(nc > 0)
{
if(nc < MAXWORD)
{
++wl;
}
else
{
++ovflow;
}
}
nc = 0;
}
else if(state == OUT)
{
state = IN;
nc = 1;
}
else
++nc;
}
maxvalue = 0;
for(i = 1; i < MAXWORD; ++i)
{
if(wl > maxvalue)
maxvalue = wl;
}
for(i = 1;i < MAXWORD; ++i)
{
printf("%5d - %5d :", i, wl);
if(wl > 0)
{
if((len = wl * 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);
}
为什么代码粘贴到这自动会对齐,很新的新手高手勿喷{:5_104:}

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


笑鬼xxoo 发表于 2012-11-17 01:01:22

我只能说,代码很多逻辑错误,不知道是粗心写错了,还是怎么的。。。看不懂

飘香夜梦 发表于 2012-11-17 01:23:54

感觉楼主的逻辑完全混乱,如果楼主希望得到帮助,希望把原题贴出来,否则根本不明白题意。。。。

A_Small_Ant 发表于 2012-11-17 13:42:21

你是用VC++6.0吗? 是的话 按alt+F8 代码就会自动排序了 希望可以帮助你

xitonggongchen 发表于 2013-2-8 10:26:04

你把那个代码打包下放在这里问

海柯 发表于 2013-2-8 13:25:37

俺不知道有等人来打

仰望天上的光 发表于 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;               
        state = OUT;       
        nc = 0;       
        ovflow = 0;       
        for(i = 0; i < MAXWORD; ++i)               
        {               
                wl = 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;                               
                                }                       
                                else                               
                                {                               
                                        ++ovflow;                                       
                                }                               
                        }
                        nc = 0;                       
                }               
                else if(state == OUT)                       
                {                       
                        state = IN;                       
                        nc = 1;                       
                }               
                else                       
                        ++nc;               
        }
       
        //以下准备打印
        maxvalue = 0;       
        for(i = 1; i < MAXWORD; ++i)               
        {               
                if(wl > maxvalue)                       
                        maxvalue = wl;               
        }       
        for(i = 1;i < MAXWORD; ++i)               
        {               
                printf("%5d - %5d :", i, wl);               
                if(wl > 0)                       
                {                       
                        //这里利用了一个简单的数学公式,最长行len总是MAXHIST
                        //原因是最长行的wl==maxvalue
                        //这样按比例缩放出来的直方图好看些
                        if((len = wl * 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);       
}

牡丹花下死做鬼 发表于 2013-2-9 11:47:32

你是 高手我才刚刚学到 指针

阔怀 发表于 2015-8-27 16:03:02

看看
页: [1]
查看完整版本: 求高手指点迷津,想了很就没头绪,汗。