题目:编写一个程序,从标准输入读取一些字符,并根据字符的分类计算各类字符的百分比。 要求:不能使用一系列的if语句,字符判断可以使用ctype.h头文件中定义的函数。 代码 #include <stdio.h>#include <stdlib.h>#include <ctype.h> /*各种判断字符类型的函数均在此头文件中*//***定义一个函数,用于处理不可打印的字符 */int is_not_print( int value ){return !isprint( value );} /***定义一个转换表用于判断字符的类型 */ int (*test_fun[])( int value ) ={iscntrl,isblank,isdigit,islower,isupper,ispunct,is_not_print }; /***定义一个宏计算字符的类型**用于定义一个数组存储各种类型字符的个数**这个宏必须在testfun转换表定义之后定义 */#define NTYPES (sizeof(test_fun)/sizeof(test_fun[0])) int count[NTYPES]; /*在这里声明的另一个意义是初始化为0*/int sum;/***定义一个指针数组用于提示用户各种类型 */ char *label[] = {" 控制符"," 空白符"," 数字"," 小写字母"," 大写字母"," 标点符号"," 不可打印字符"}; int main(){int ch; int sw; /*转换表的遍历*/while( (ch = getchar()) != '/n' ){sum++;for( sw = 0; sw < NTYPES; sw++ ){if( test_fun[sw]( ch ) ){count[sw] += 1; }}}/***打印出结果 */if ( sum == 0 ){puts( "无任何字符出入!");} else{for( sw = 0; sw < NTYPES; sw++ ){printf( "%3.2f%的%s/n", (float)count[sw]*100/sum, label[sw] );}}return EXIT_SUCCESS; } 这个练习时使用转换表的简单的例子。