C语言程序设计第二版 1.6数组练习1-13打印输入中单词长度的直方图的问题

问题描述

C语言程序设计第二版 1.6数组练习1-13打印输入中单词长度的直方图的问题

/* Note:Your choice is C IDE */
#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; //wl[]的最大值
int ovflow;//溢出单词数
int wl[MAXWORD];//单词长度计数
state =OUT;
nc=0; //一个单词字符数目
ovflow=0; //超出单词长度的单词数

  for(i=0;i<MAXWORD;++i)
      wl[i]=0;
  while((c=getchar())!=EOF)
       {
           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)
    {
    putchar('*');
    --len;                                 //为什么要--len?
    }
    putchar('n');
  }
  if(ovflow>0)
     printf("there are %d words >=%dn",ovflow,MAXWORD);

问题:1
if((len=wl[i]*MAXHIST/maxvalue)<=0)
len=1; 这段话表示什么意思?与下面的while语句有什么关系
问题:2
while(len>0)
{
putchar('*');
--len;
}这段话与上面的if((len=wl[i]*MAXHIST/maxvalue)<=0)有什么关系吗?
问题3:
为什么一定要求最大数值?且以此为标准?
for(i=1;i
if(wl[i]>maxvalue)
maxvalue=wl[i];
}

求各位帮个忙解答疑惑!!!谢谢!!!

解决方案

木有人帮帮忙吗?谢谢

解决方案二:

这个处理实际上是叫做“归一化”,原因是:当绘制直方图时,它的高度是难以确定的,如果有类单词的数量特别多(极端情况是仅有这一种单词出现),那么会导致直方图上方超出显示区域,你看不见顶。所以,通常做法是:首先,预定义一个直方图的高度,并规定达到某个数值时,绘制为此高度。通常认为,数量最多的那一列即绘为这个高度,那么其它所有的列,都根据比例进行缩放就可以了。

所以,首先必须求得maxvalue,然后当前列的值wl[i]/maxvalue即为该直方图列的实际高度(0~1),最后乘以直方图绘制的最高高度,则可以保证以较合理的图像将直方图绘制出来。所以,最终的公式就是:
len = wl[i] * MAXHIST / maxvalue;
这个if判断只是为了 保证,当数据为0时,最起码画一点东西上去~

解决方案三:

len是用来配合换行的

时间: 2023-09-26

C语言程序设计第二版 1.6数组练习1-13打印输入中单词长度的直方图的问题的相关文章

谁有 ASP. NET2.0动态网站程序设计(第二版)程不功 课后答案??发个给我呀!1083371806@qq.com

问题描述 谁有ASP.NET2.0动态网站程序设计(第二版)程不功课后答案??发个给我呀!1083371806@qq.com 解决方案 解决方案二:这本书我当初学的时候也看了,但是没怎么看答案,在看习题的时候不懂的话就百度,google,你将会知道更多

《Android 应用案例开发大全(第二版)》——6.7节获取第三方程序中可调用的窗口

6.7 获取第三方程序中可调用的窗口 Android开发权威指南(第二版) 第X问1 源代码目录:src/ch06/InvokeSinaWeibo 现在很多程序中使用的功能并未包含在程序本身,都是通过各种插件方式获得的其他程序的资源.例如,经常会使用到的"分享"功能就是调用了系统中所有可以处理某类资源的窗口来实现的,如果这样的窗口多于一个,就会显示一个选择列表. 如果想利用其他程序中的资源,首先要了解程序对外的接口.但很多程序并没有公开相应的接口,在这种情况下,就需要通过该程序的APK

C语言程序设计实践(OJ)-数组初步

2000: 数组逆序 Description 输入10个整数存入一维数组,按逆序重新存放后再输出. Input 输入包括一行.10个以空格隔开的整数. Output 逆序的10个整数,整数以空格隔开. Sample Input 1 3 5 9 7 6 8 2 4 0 Sample Output 0 4 2 8 6 7 9 5 3 1 提示:将有一个格式错误让你崩溃,试一试,实在想不到时到课程主页里看锦囊. 参考解答 1045:插入有序数组中 Description 已有一个已排好的9个元素的数组

javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)_javascript技巧

复制代码 代码如下: var EventUtil={ //跨浏览器处理程序---创建方法 addHandler:function(element,type,handler){ if(element.addEventListener){ element.addEventListneter(type,handler,false); }else if(element.attachEvent){ element.attachEvent("on"+type,handler); }else{ el

《C语言程序设计》一 2.4 数据的输出和输入

2.4 数据的输出和输入 C语言中数据的输出和输入是通过调用函数实现的.scanf()函数实现键盘输入,printf()函数实现屏幕输出,这两个函数由系统stdio.h库函数提供.调用scanf()函数和printf()函数实现输入/输出时,应根据数据的类型和输入/输出的形式,通过格式控制来实现. 2.4.1 格式输出函数printf() 1.printf()函数一般格式 printf()函数的一般格式为: printf(格式控制,输出表列); printf()函数的功能是将后面的参数按照指定的

《C语言程序设计:问题与求解方法》——2.13节运算符

2.13 运算符 在C语言源程序中,怎样才能表达我们想对以变量或常量形式出现的数据进行某种运算呢?这就要使用运算符. 用运算符把各种运算量(变量.常量.函数调用等)结合起来,构成表达式,用这种形式化.抽象化的方法来告诉编译程序,我们想要计算机对哪些数据.依照什么样的顺序.执行哪些种类的运算,请编译程序将其翻译成与某类机器有关的机器语言指令. C语言中,常用的运算符分为三大类: 1)算术运算符:见表2-5. 2)关系运算符:大于(>).大于等于(>=).小于(<).小于等于(<=).

c语言-编写一个程序,打印输入中的单词长度的直方图。垂直方图。

问题描述 编写一个程序,打印输入中的单词长度的直方图.垂直方图. 直方图是如何理解????求教这道题~~ 这道题目是书上的!有没有懂的大神.给讲解啊. 解决方案 问题是怎么解决的? 我想到的就是算好格式用printf()一行行的输入,最后拼成直方图.

《指针的编程艺术(第二版)》一3.2 指针与二维数组

3.2 指针与二维数组 指针的编程艺术(第二版) 一维数组与指针的关系前面已经介绍过.一维数组的元素值,可使用[]或一个*得到,假设有一个数组如下: int i[7] = {0, 1, 2, 3, 4, 5, 6}; int *ptr=i; 则(i+2) 或i[2] 或(ptr+2) 或ptr[2],都表示数组某一个元素的值.而二维数组(two dimension array){XE "二維陣列(two dimension)"},则需要两个,或一个与一个[ ],或两个[ ],才能得到数

c语言-请问怎么学好《C语言程序设计教程》

问题描述 请问怎么学好<C语言程序设计教程> 这本书下学期就要学了,可是看着迷迷糊糊,看不懂,有没有什么学习的捷径?什么配套的辅导书比较好?谢谢! 解决方案 简单来说,就是Reading+Coding. 阅读入门可以从谭浩强的<C程序设计>开始,国人所写比较符合我们的思维习惯,但是过于基础,许多细节问题没有讲到,所以看完那本可以接着看看<C语言深度解剖>. 另外还有两本国外的C语言经典著作<C程序设计语言><数据结构与算法分析--C语言描述>,可