C程序设计语言 (第二版) 练习1-13
练习 1-13 编写一个程序,打印输入中单词长度的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些。
注意:代码在win32控制台运行,在不同的IDE环境下,有部分可能需要变更。
IDE工具:Visual Studio 2010
代码块:
1. 水平方向
#include <stdio.h>
#include <stdlib.h>
int main(){
char c;
int wordLength = 0;
int sign = 0;
while((c = getchar()) != EOF){
if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){
sign = 1;
++wordLength;
putchar(c);
}
else if(sign == 1){
for(int i = 0; i < 10 - wordLength; i++){
printf(" ");
}
printf("%-2d", wordLength);
for(int i = 0; i < wordLength; i++){
printf("*");
}
printf("\n");
wordLength = 0;
sign = 0;
}
}
system("pause");
return 0;
}
显示结果如下:
2. 垂直方向
#include <stdio.h>
#include <stdlib.h>
int main(){
char c;
int wordLength = 0;
int sign = 0;
int word[20];
for(int i = 0; i < 20; i++){
word[i] = 0;
}
int num = 0;
while((c = getchar()) != EOF){
if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){
sign = 1;
++wordLength;
putchar(c);
}
else if(sign == 1){
word[num++] = wordLength;
wordLength = 0;
sign = 0;
printf("\n");
}
}
int maxLen = 0;
for(int i = 0; i < num; i++){
if(word[i] > maxLen){
maxLen = word[i];
}
}
int col = maxLen;
for(int i = 0; i < maxLen; i++){
for(int j = 0; j < num; j++){
if(word[j] >= col){
printf(" * ");
}
else{
printf(" ");
}
}
col--;
printf("\n");
}
for(int i = 0; i < num; i++){
printf(" %d ", word[i]);
}
printf("\n");
system("pause");
return 0;
}