今天看了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;
}
看了下习题答案比较一下这个程序还是存在很多问题,比如打印长度不够,应该采用按比例来打印直方图的办法。
887

被折叠的 条评论
为什么被折叠?



