《C语言大学教程(第八版)》第五章 课后习题 5.19-5.20-5.21 参考答案

前言
  如果前面四个章节,认真学习了,这三道题目,会让你更加深刻的感受到,认真读书,这四个字究竟是什么程度。特别是,5.21这道题目,把一个细节放大了,即需要注意字符的输入。
在这里插入图片描述
分析
  在5.21这道题目中,需要我们输入要绘制的图形,图形在这里是用字符来表示。在每次输入后,都需要按下回车键把内容输入,回车键即换行符“\n”本身属于字符,也就是说,每次按下回车键会对应产生一个字符为换行符“\n”,它也会被读取。所以,我们要对其进行处理,过滤掉。
  在第4章,4.7节,switch多重选择语句的示例中,有提到过相关内容。在5.21这道题目中,不太适合选用switch多重选择语句,那就要对该问题使用别的方法进行处理。
在这里插入图片描述
解决
  5.19题目:

#include <stdio.h>

void matrix(int side);

int main(void)
{
    int x;
    
    printf("%s", "Enter a integer: ");
    scanf("%d", &x);

    matrix(x);
}

void matrix(int side)
{
    for (int i = 1; i <= side; i++)
    {
        for (int i = 1; i <= side; i++)
        {
            printf("%s", "*");
        }

        puts("");
    }
}

  运行结果:
在这里插入图片描述
  5.20题目:

#include <stdio.h>

void matrix(int side, char fillCharacter);

int main(void)
{
    int x;
    
    printf("%s", "Enter a integer: ");
    scanf("%d", &x);

    matrix(x, '#');
}

void matrix(int side, char fillCharacter)
{
    for (int i = 1; i <= side; i++)
    {
        for (int i = 1; i <= side; i++)
        {
            printf("%c", "*");
        }

        puts("");
    }
}

  注意,打印时使用%c,而不是%s。%c用来打印单个字符,%s用来打印字符串。
  在第2章,2.7节,安全的C程序设计中,有讲到关于%s的使用,如下图所示。
在这里插入图片描述
在这里插入图片描述
  同样,在第4章,4.7节,switch多重选择语句,有讲到相关的内容,如下图所示。
在这里插入图片描述
在这里插入图片描述
  运行结果:
在这里插入图片描述
  5.21题目:

#include <stdio.h>

void matrix(int side, char fillCharacter);

int main(void)
{
    int x;
    char y;
    
    printf("%s", "Enter a integer: ");
    scanf("%d", &x);

    printf("%s", "Enter a char: ");
    scanf(" %c", &y);

    matrix(x, y);
}

void matrix(int side, char fillCharacter)
{
    for (int i = 1; i <= side; i++)
    {
        for (int i = 1; i <= side; i++)
        {
            printf("%c", fillCharacter);
        }

        puts("");
    }
}

  注意,在scanf中的%c前面,添加一个空格。
  当用户输入一个整数并按下回车时,会在输入缓冲区中留下一个换行符。当使用scanf读取字符时,它会读取这个换行符,而不是等待用户输入。为了解决这个问题,在scanf语句中的%c之前加一个空格,以消耗掉换行符。
  在 C 语言中,空格字符(包括空格、制表符和换行符)在 scanf 函数中的格式字符串中具有特殊的含义。当 scanf 遇到空格字符时,它会尝试从输入缓冲区中跳过任意数量的空格字符(包括换行符)直到遇到非空格字符为止。
  运行结果:
在这里插入图片描述
  至此,程序可以绘制各种形状的图形。
  需要注意的点,在第4章,4.7节,switch多重选择语句的示例中,有提到过处理“换行”、“tab”和“空格”字符相关内容。那里使用的是switch多重选择语句,同时,也提到switch多重选择语句中的case只能进行整型数据判断,显然在5.21这道题目中不适合使用,需要对此查询相应的解决办法。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值