本章习题共11题,分上下两篇。
1.编写一个程序读取输入,读到#字符停止。然后报告读取的空格数、换行符数和所有其他字符的数量。
cpp
int main() {
system("chcp 65001");
int ch; // 存储读取的字符
int space_count = 0;
int newline_count = 0;
int other_count = 0;
printf("请输入文本(以#结束):\n");
// 循环读取字符直到遇到 #
while ((ch = getchar()) != '#') {
if (ch == 0x20) {
space_count++; // 统计空格
}
else if (ch == 0x0A) {
newline_count++; // 统计换行符
}
else {
other_count++; // 统计其他字符
}
}
// 输出统计结果
printf("\n统计结果:\n");
printf("空格数: %d\n", space_count);
printf("换行符数: %d\n", newline_count);
printf("其他字符数: %d\n", other_count);
return 0;
}

2.编写一个程序读取输入,读到#字符停止。然后报告读取的空格数、换行符数和所有其他字符的数量。
cpp
int main() {
system("chcp 65001");
int ch;
int charCnt = 0;
char chars[512] = { 0 };
while ((ch = getchar()) != '#' && charCnt < 512) {
chars[charCnt++] = ch;
}
for (int i = 0; i < charCnt; i++)
{
if (chars[i] == 0x20)
{
printf("' '-%03d ", chars[i]);
}
else if(chars[i] == 0x0A)
{
printf(" \\n-%03d ", chars[i]);
}
else if (chars[i] == 0x0D)
{
printf(" \\r-%03d ", chars[i]);
}
else if (chars[i] == 0x09)
{
printf(" \\t-%03d ", chars[i]);
}
else
printf("%3c-%03d ", chars[i], chars[i]);
if ((i + 1) % 8 == 0)
{
printf("\n");
}
}
return 0;
}

3.编写一个程序,读取整数直到用户输入0。输入结束后,程序应报告用户输入的偶数(不包括0)个数、这些偶数的平均值、输入的奇数个数及其奇数的平均值。
cpp
int main()
{
system("chcp 65001");
int num;
double even_sum = 0;
int even_count = 0;
double odd_sum = 0;
int odd_count = 0;
printf("请输入整数(输入0结束):\n");
while (scanf_s("%d", &num) == 1 && num != 0)
{
if (num % 2 == 0)
{
even_sum += num;
even_count++;
}
else
{
odd_sum += num;
odd_count++;
}
}
printf("\n统计结果:\n");
printf("偶数个数:%d\n", even_count);
printf("偶数平均值:%f\n", even_sum / even_count);
printf("奇数个数:%d\n", odd_count);
printf("奇数平均值:%f\n", odd_sum / odd_count);
return 0;
}

4.使用if else语句编写一个程序读取输入,读到#停止。用感叹号替换句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。
cpp
int main()
{
system("chcp 65001");
char ch;
int count = 0;
printf("请输入文本(以#结束):\n");
while ((ch = getchar()) != '#')
{
if (ch == '.')
{
putchar('!');
count++;
}
else if (ch == '!')
{
putchar('!'); // 输出第一个感叹号
putchar('!'); // 输出第二个感叹号
count++;
}
else
{
putchar(ch); // 其他字符原样输出
}
}
printf("\n替换了%d次。\n", count);
return 0;
}

5.使用switch重写练习4.
cpp
int main()
{
system("chcp 65001");
char ch;
int count = 0;
printf("请输入文本(以#结束):\n");
while ((ch = getchar()) != '#')
{
switch (ch)
{
case '.':
putchar('!');
count++;
break;
case '!':
putchar('!');
putchar('!');
count++;
break;
default:
putchar(ch);
break;
}
}
printf("\n替换了%d次。\n", count);
return 0;
}

6.编写程序读取输入,读到#停止,报告ei出现的次数。
注意
该程序要记录前一个字符和当前字符。用"Receive your eieio award"这样的输入来测试。
cpp
int main()
{
system("chcp 65001");
char ch;
int count = 0;
printf("请输入文本(以#结束):\n");
while ((ch = getchar()) != '#')
{
if (ch == 'e' && getchar() == 'i')
{
count++;
}
}
printf("\nei出现的次数为%d次。\n", count);
return 0;
}
