求高手指点迷津,想了很就没头绪,汗。
本帖最后由 .任.ポ 于 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:}
题目是:编写一个程序,打印输入中单词长度的直方图。
我只能说,代码很多逻辑错误,不知道是粗心写错了,还是怎么的。。。看不懂 感觉楼主的逻辑完全混乱,如果楼主希望得到帮助,希望把原题贴出来,否则根本不明白题意。。。。 你是用VC++6.0吗? 是的话 按alt+F8 代码就会自动排序了 希望可以帮助你 你把那个代码打包下放在这里问 俺不知道有等人来打 #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);
} 你是 高手我才刚刚学到 指针 看看
页:
[1]