C Primer Plus 第6版 编程练习——第7章(上)

本章习题共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;
}
相关推荐
菜鸟的升级路32 分钟前
C语言栈刷题:LeetCode 20 有效的括号完整解题笔记
c语言·笔记·leetcode
冻柠檬飞冰走茶33 分钟前
PTA基础编程题目集 7-13 日K蜡烛图(C语言实现)
c语言·开发语言·数据结构·算法
SilentSlot3 小时前
【C/C++】手写 DPDK 协议栈(十二):TCP 并发与自实现 epoll 的就绪事件分发
c语言·c++·tcp/ip
SilentSlot3 小时前
【C/C++】手写 DPDK 协议栈(六):TCP 三次握手、状态机与数据回显
c语言·c++·tcp/ip
j7~3 小时前
【C语言】《C语言自定义类型(结构体+联合体+枚举类型)》--详解
c语言·开发语言·深度学习·结构体·位段·联合体·枚举类型
躺柒20 小时前
读半导体简史08大型机
linux·服务器·c语言·数据库·unix·ibm
十月的皮皮21 小时前
STM32从零到量产开发:四路继电器工业控制模块开发— 继电器模块bsp_di.h与 bsp_di.c文件
c语言·stm32·stm32cubemx·hal库
wuyk5551 天前
67.嵌入式C语言进阶:结构体指针实战指南——STM32外设、传感器数据访问的高效技巧
c语言·开发语言·stm32·单片机
我不管我就要叫小猪1 天前
C/C++----命名空间
c语言·开发语言·c++
白白白小纯1 天前
算法篇—返回倒数第k个节点
c语言·数据结构·算法·leetcode