打印统计结果的图形,c++
#include<stdio.h> #define MAXHIST 15//nc 转 len 常量 #define MAXWORD 11//有效单词长度 #define IN 1//单词内 #define OUT 0//单词外 main() { int c, i, nc, state;//字符,for,单词当前长,单词内外, int len;//处理过的nc, int maxvalue;//输入的最长单词 int ovflow;//超出范围的单词个数 int wl[MAXWORD];//每种词长的个数, state = OUT; nc = 0; ovflow = 0; for(i=0; i<MAXWORD; i++) wl[i] = 0;//初始化单词长度 while((c=getchar()) != EOF) //输入单词 { if(c==' '||c=='\n'||c=='\t')//输入是空白符时 { state = OUT;//更改成在单词外 if(nc > 0 && nc < MAXWORD)//单词长度属于这个范围则统计 wl[nc]++; else ovflow++;//超出范围统计 nc = 0;//输入词长清理 } else if(state == OUT)//输入是非空字符时,且以前在单词外 { state = IN;//更改成单词内, nc = 1;//基数单词字符1个, } else nc++;//在单词内且非空字符,单词长度累加 } maxvalue = 0; for(i=1; i<MAXWORD; i++) if(wl[i]>maxvalue)//最长的单词, maxvalue = wl[i]; for(i=1;i<MAXWORD; i++) { printf("%-5d - %5d :", i, wl[i]);//单词长度, 个数, if(wl[i]>0) { if((len=wl[i]*MAXHIST/maxvalue) <= 0)//处理单词个数,的长度, len = 1; } else len = 0; while(len>0) { putchar('*');//个数直方图, len--; } putchar('\n'); } if(ovflow>0) printf("超出范围的单词数%d 不能够大于%d\n", ovflow, MAXWORD); }
输入多个单词, 每种长度输出一行,即长度, 个数, 个数的直方图。数组
统计输入每一个字符出现的频率ascii码的字符个数是128个,能够用arr[0 - 127],累加code
#include<stdio.h> #include <ctype.h>//isprint 判断是否为字符 #define MAXHIST 15//nc 转 len 常量 #define MAXCHAR 128//有效字符集 main() { int c, i;//输入字符,for int len;//处理过的个数, int maxvalue;//输入的最长单词 int cc[MAXCHAR];//每种字符的个数, for(i=0; i<MAXCHAR; i++) cc[i] = 0;//初始化字符个数 while((c=getchar()) != EOF) //输入字符 if(c < MAXCHAR)//属于字符集 cc[c]++;//累加 maxvalue = 0; for(i=1; i<MAXCHAR; i++) if(cc[i]>maxvalue)//最大的字符, maxvalue = cc[i]; for(i=1;i<MAXCHAR; i++)//0‘\0’是没法输入的 { if(isprint(i))//是否字符 printf("%-5d - %c - %5d :", i, i, cc[i]);//第几个,字符,字符频率 else printf("%-5d - %5d:", i, cc[i]);//非字符 if(cc[i]>0) { if((len=cc[i]*MAXHIST/maxvalue) <= 0)//处理字符输入的次数, len = 1; } else len = 0; while(len>0) { putchar('*');//次数直方图, len--; } putchar('\n'); } }
巧用数组,a[32]++, 这样就统计数空格的个数了,ci