今天看了TCPL的第1章,对我来说习题的难度还是比较大,总结下经验
1.C中如果想输出\\ 应该为\\\\
2.练习1.13想了能有一个小时才搞定…………
#include<stdio.h> #define MAX 10//记录单词长度最大为9 #define IN 1 #define OUT 0 int main(void) { int c,i,j; int ct = 0;//计数器 int list[MAX];//存放单词长度 int state = OUT;//当前位置 int max = 0;//记录垂直打印时的最大行数 for(i = 0;i < MAX;++i) list[i] = 0; while((c = getchar()) != EOF)//统计字符长度 { if(c == ' '||c == '\t'||c == '\n'){ state = OUT; if(ct > 0) if(ct >= 10) ++list[9]; else ++list[ct-1]; ct = 0; }else if(state == OUT){ state = IN; ct = 1;//单词第1个字符 }else ++ct; } //打印水平直方图用*表示个数 for(i = 0;i < MAX;++i){ if(i < (MAX - 1)){ printf("%d:",i + 1); for(j = 0;j < list[i]; ++j)//j记录*号的个数 printf("*"); printf("\n"); } else{ printf(">10:"); for(j = 0;j < list[9];++j) printf("*"); printf("\n"); } } //打印垂直直方图用*表示个数 for(i = 0;i < MAX;++i)//找到数量最多的个数 if(max < list[i]) max = list[i]; for(i = 0;i < MAX;++i){ if(i < (MAX-1)) printf("%d ",i + 1); else printf(">10\n"); }//打印标题 for(j = 0;j < max;++j){//j为打印需要的行数 for(i = 0;i < MAX;++i) if(list[i] > j) printf("* "); else printf(" "); printf("\n"); } return 0; }
看了下习题答案比较一下这个程序还是存在很多问题,比如打印长度不够,应该采用按比例来打印直方图的办法。