TCPL读书笔记(1)

今天看了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;
}

看了下习题答案比较一下这个程序还是存在很多问题,比如打印长度不够,应该采用按比例来打印直方图的办法。

你可能感兴趣的:(C++,c,C#,J#,读书)