鱼C论坛

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

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

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

  2. #define MAXHIST 15
  3. #define MAXWORD 11
  4. #define IN 1
  5. #define OUT 0

  6. void main()
  7. {
  8. int c, i, nc, state;
  9. int len;
  10. int maxvalue;
  11. int ovflow;
  12. int wl[MAXWORD];

  13. state = OUT;
  14. nc = 0;
  15. ovflow = 0;
  16. for(i = 0; i < MAXWORD; ++i)
  17. {
  18. wl[i] = 0;
  19. }
  20. while((c = getchar()) != 'k')
  21. {
  22. if(c == ' ' || c == '\n' || c == '\t')
  23. {
  24. state = OUT;

  25. if(nc > 0)
  26. {
  27. if(nc < MAXWORD)
  28. {
  29. ++wl[nc];
  30. }
  31. else
  32. {
  33. ++ovflow;
  34. }
  35. }
  36. nc = 0;
  37. }
  38. else if(state == OUT)
  39. {
  40. state = IN;
  41. nc = 1;
  42. }
  43. else
  44. ++nc;
  45. }
  46. maxvalue = 0;
  47. for(i = 1; i < MAXWORD; ++i)
  48. {
  49. if(wl[i] > maxvalue)
  50. maxvalue = wl[i];
  51. }
  52. for(i = 1;i < MAXWORD; ++i)
  53. {
  54. printf("%5d - %5d :", i, wl[i]);
  55. if(wl[i] > 0)
  56. {
  57. if((len = wl[i] * MAXHIST / maxvalue) <=0)   //这条代码什么意思
  58. len = 1;
  59. }
  60. else
  61. {
  62. len = 0;
  63. }
  64. while(len > 0)    //这里的len不是都只可以打印0或1吗
  65. {
  66. putchar('*');
  67. --len;
  68. }
  69. putchar('\n');
  70. }
  71. if(ovflow > 0)
  72. printf("There are %d words >= %d\n", ovflow , MAXWORD);
  73. }
复制代码
为什么代码粘贴到这自动会对齐,很新的新手高手勿喷

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


小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-11-17 01:01:22 | 显示全部楼层
我只能说,代码很多逻辑错误,不知道是粗心写错了,还是怎么的。。。看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-11-17 01:23:54 | 显示全部楼层
感觉楼主的逻辑完全混乱,如果楼主希望得到帮助,希望把原题贴出来,否则根本不明白题意。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-11-17 13:42:21 | 显示全部楼层
你是用VC++6.0吗? 是的话 按alt+F8 代码就会自动排序了 希望可以帮助你
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-2-8 10:26:04 | 显示全部楼层
你把那个代码打包下放在这里问
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-2-8 13:25:37 | 显示全部楼层
俺不知道  有  等人来打
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-2-8 19:58:38 | 显示全部楼层
  1. #include<stdio.h>
  2. #define MAXHIST 15
  3. #define MAXWORD 11
  4. #define IN 1
  5. #define OUT 0
  6. void main()
  7. {       
  8.         int c, i, nc, state;       
  9.         int len;       
  10.         int maxvalue;       
  11.         int ovflow;       
  12.         int wl[MAXWORD];               
  13.         state = OUT;       
  14.         nc = 0;       
  15.         ovflow = 0;       
  16.         for(i = 0; i < MAXWORD; ++i)               
  17.         {               
  18.                 wl[i] = 0;               
  19.         }       
  20.         //输入遇到字母k的时候退出
  21.         //依次扫描每个输入字符开始的时候置state为IN,
  22.         //扫描到单词结尾的时候置state为OUT,此时nc为刚扫描完单词的长度
  23.         while((c = getchar()) != 'k')               
  24.         {
  25.                 //出现以下三个字母的时候说明遇到新的单词了
  26.                 if(c == ' ' || c == '\n' || c == '\t')                       
  27.                 {
  28.                         //改变state状态兵根据nc保存必要的结果
  29.                         state = OUT;                                               
  30.                         if(nc > 0)                               
  31.                         {                               
  32.                                 if(nc < MAXWORD)                                       
  33.                                 {                                       
  34.                                         ++wl[nc];                               
  35.                                 }                       
  36.                                 else                               
  37.                                 {                               
  38.                                         ++ovflow;                                       
  39.                                 }                               
  40.                         }
  41.                         nc = 0;                       
  42.                 }               
  43.                 else if(state == OUT)                       
  44.                 {                       
  45.                         state = IN;                       
  46.                         nc = 1;                       
  47.                 }               
  48.                 else                       
  49.                         ++nc;               
  50.         }
  51.        
  52.         //以下准备打印
  53.         maxvalue = 0;       
  54.         for(i = 1; i < MAXWORD; ++i)               
  55.         {               
  56.                 if(wl[i] > maxvalue)                       
  57.                         maxvalue = wl[i];               
  58.         }       
  59.         for(i = 1;i < MAXWORD; ++i)               
  60.         {               
  61.                 printf("%5d - %5d :", i, wl[i]);               
  62.                 if(wl[i] > 0)                       
  63.                 {                       
  64.                         //这里利用了一个简单的数学公式,最长行len总是MAXHIST
  65.                         //原因是最长行的wl[i]==maxvalue
  66.                         //这样按比例缩放出来的直方图好看些
  67.                         if((len = wl[i] * MAXHIST / maxvalue) <=0)   //这条代码什么意思                               
  68.                                 len = 1;                       
  69.                 }               
  70.                 else                       
  71.                 {                       
  72.                         len = 0;                       
  73.                 }               
  74.                 //假设前面if((len=...)<=0)中计算的len=10那么执行到这里,len的值还是10
  75.                 while(len > 0)    //这里的len不是都只可以打印0或1吗                       
  76.                 {                       
  77.                         putchar('*');                       
  78.                         --len;                       
  79.                 }               
  80.                 putchar('\n');       
  81.         }       
  82.         if(ovflow > 0)               
  83.                 printf("There are %d words >= %d\n", ovflow , MAXWORD);       
  84. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-2-9 11:47:32 | 显示全部楼层
你是 高手  我才刚刚学到 指针
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-8-27 16:03:02 | 显示全部楼层
看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 02:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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