练习 1

来源:互联网 发布:java实现xml文件解析 编辑:程序博客网 时间:2024/05/29 09:36
/*练习 1 - 13 编写一个程序,打印输入中单词长度的水平直方图 和 垂直直方图*/#include <stdio.h>#define IN1#define OUT 0#define NUM 1024//求数组元素最值int getArrarMax(int *arr,int arrLength){int i,j,temp;for(i = 0;i < arrLength; ++i)for (j = i + 1; j < arrLength; ++j)if(arr[i] < arr[j]){temp   = arr[i];arr[i] = arr[j];arr[j] = temp;}return arr[0];}//利用双层循环打印水平直方图void horizontal(int *arr,int arrLength){int i,k;printf("\t*\n\t|\n");for(i = 0; i < arrLength;i++){printf("\t|");for(k = 0; k < arr[i]; k++)printf("|");printf("<%d>\n\t|\n",arr[i]);}printf("\t*------------------------水平直方图------------------------*\n");}//打印垂直直方图void vertical(int *arr,int arrLength){int maxValue=getArrarMax(arr, arrLength);    int i,j;printf("\t*\n");for(i = maxValue+1; i > 0;i--){printf("\t|");for(j = 0; j < arrLength; j++){if(arr[j] == i){printf("___\t");arr[j]--;}else if(arr[j] == i - 1){  //显示数目printf("(%d)\t",arr[j]);}else{printf("\t");}   }   printf("\n");}printf("\t*------------------------垂直直方图------------------------*\n");}int main(int argc, char* argv[]){int c, nw, nc, state,i;int arr[NUM];c = nw = nc = i = 0;state = OUT;memset(arr,0,NUM);//求出数组的元素个数以及单词数while((c = getchar()) != EOF){++nc;if(c == ' ' || c == '\n' || c == '\t'){nc -= 1;state  = OUT;arr[i] = nc - arr[i];//对数组填充值++i;}else if(state == OUT){state = IN;++nw;//计算单词数}}//对数组的每个元素 重新赋值每个单词的单词数for(i = nw - 1;i >0; --i){arr[i] -= arr[i-1];}horizontal(arr,nw);vertical(arr,nw);return 0;}


输出结果: