> 技术文档 > C Primer Plus 第6版 编程练习——第11章(下)

C Primer Plus 第6版 编程练习——第11章(下)

12.编写一个程序,读取输入,直至读到 BOF,报告读入的单词数、大写字母数、小写字母数、标点符号数和数字字符数。使用ctype.h头文件中的函数。
 

#include int main(){ system(\"chcp 65001\"); char ch; int word_count = 0; int upper_count = 0; int lower_count = 0; int punct_count = 0; int digit_count = 0; char prch = 0; while ((ch = getchar()) != EOF) { if (isalpha(ch)) { if (isupper(ch)) { upper_count++; } else { lower_count++; } } else if (isdigit(ch)) { digit_count++; } else if (ispunct(ch)) { punct_count++; if (isalpha(prch)) { word_count++; } } else if (ch == \' \') { if (isalpha(prch)) { word_count++; } } prch = ch; } printf(\"单词数:%d\\n大写字母数:%d\\n小写字母数:%d\\n标点符号数:%d\\n数字字符数:%d\\n\", word_count, upper_count, lower_count, punct_count, digit_count); return 0;}

13.编写一个程序,反序显示命令行参数的单词。例如,命令行参数是 see you later,该程序应打印later you see.

int main(int argc, char* argv[]){ for (int i = argc - 1; i > 0; i--) { printf(\"%s \", argv[i]); } return 0;}

14.编写一个通过命令行运行的程序计算幂。第1个命令行参数是double 类型的数,作为幂的底数,第2个参数是整数,作为幂的指数。
 

int main(int argc, char* argv[]){ if (argc != 3) { printf(\"Usage: %s base exponent\\n\", argv[0]); return 1; } double base = atof(argv[1]); int exponent = atoi(argv[2]); double result = 1.0; for (int i = 0; i < exponent; i++) { result *= base; } printf(\"%g^%d = %g\\n\", base, exponent, result); return 0;}

15.使用字符分类函数实现atoi()函数。如果输入的字符串不是纯数字,该函数返回0。
 

int my_atoi(char* str){ int result = 0; while (*str) { if (!isdigit(*str)) { return 0; } result = result * 10 + (*str - \'0\'); str++; } return result;}int main(){ char str[] = \"123\"; char str2[] = \"123s\"; printf(\"%d\\n\", my_atoi(str)); printf(\"%d\\n\", my_atoi(str2)); return 0;}

16.编写一个程序读取输入,直至读到文件结尾,然后把字符串打印出来。该程序识别和实现下面的命令行参数:粉动灯
-P 按原样打印
-u 把输入全部转换成大写
-l 把输入全部转换成小写
 

int main(int argc, char* argv[]){ system(\"chcp 65001\"); int flag = 0; char str[100]; for (int i = 1; i < argc; i++) { if (strcmp(argv[i], \"-P\") == 0) { flag = 1; } else if (strcmp(argv[i], \"-u\") == 0) { flag = 2; } else if (strcmp(argv[i], \"-l\") == 0) { flag = 3; } else { printf(\"Usage: %s [-P] [-u] [-l]\\n[-P] 按原样打印\\n[-u] 把输入全部转换成大写\\n[-l] 把输入全部转换成小写\\n\", argv[0]); return 1; } while (fgets(str, sizeof(str), stdin)) { switch (flag) { case 1: printf(\"%s\", str); break; case 2: for (int i = 0; str[i]; i++) {  str[i] = toupper(str[i]); } printf(\"%s\", str); break; case 3: for (int i = 0; str[i]; i++) {  str[i] = tolower(str[i]); } printf(\"%s\", str); break; } } } return 0;}

-P

-u

-l