明解C语言入门篇 第四章 程序的循环控制 练习题答案

练习4-1
代码清单3-9是判断所输入的整数值的符号的程序,请将其改写为可以将输入·显示这一过程循环任意次。

#include <stdio.h>

int main(void) {
    int no;

    do {
        printf("请输入一个整数:");
        scanf("%d"&no);

        if (no == 0)
            puts("该整数为0。");
        else if (no > 0)
            puts("该整数为正数。");
        else if (no < 0) // 多余的判断
            puts("该整数为负数。");

        printf("要重复一次吗?【yes...0 / No...9】:");
        scanf("%d"&no);
    } while (no == 0);

    return 0;
}

练习4-2
编写一段程序,像右面这样读取两个整数的值,然后计算出它们之间所有整数的和。

​ 请输入两个整数。
​ 整数a:37
​ 整数b:28
​ 大于等于28小于等于37的所有整数的和是325。

#include <stdio.h>

int main(void) {
    int a, b;
    int sum = 0;
    int start, end;

    puts("请输入两个整数。");
    printf("整数a:");     scanf("%d"&a);
    printf("整数b:");     scanf("%d"&b);

    if (a > b) {
        start = b;
        end = a;
    } else {
        start = a;
        end = b;
    }

    do {
        sum += start;
        start = start + 1;
    } while (start <= end);

    printf("大于等于%d小于等于%d的所有整数的和是%d。\n",
        a, b, sum);

    return 0;
}

练习4-3
对代码清单4-5中的程序进行修改,当输入的值为负数的时候不执行换行操作。

#include <stdio.h>

int main(void) {
    int n;

    printf("请输入一个正整数:");
    scanf("%d"&n);

    if (n >= 0) {               // 负数不参与
        do {
            printf("%d ", n);
            n--;
        } while (n >= 0);

        printf("\n");
    }

    return 0;
}

综习4-4
对代码清单4-6的程序进行修改,使其
·递减到1而非递减到0。
·当输入的值小于0时,不进行换行。

#include <stdio.h>

int main(void) {
    int n;

    printf("请输入一个正整数:");
    scanf("%d"&n);

    if (n >= 0) {                   // 负数不参与
        do {
            printf("%d ", n--);
        } while (n > 0);            // 0不输出 但是换行

        printf("\n");
    }

    return 0;
}

综习4-5
对代码清单4-7的程序进行如下修改。
·从1开始递增。
·输入的值小于0的时候不换行。

#include <stdio.h>

int main(void) {
    int n;

    printf("请输入一个正整数:");
    scanf("%d"&n);

    if (n >= 0) {
        int i = 1;

        while (i <= n)
            printf("%d ", i++);

        printf("\n");
    }

    return 0;
}

练习4-6
编写一段程序,像右面这样按照升序显示出小于输入值的所有正偶数。

​ 请输入一个整数:19
​ 2 4 6 8 10 12 14 16 18

#include <stdio.h>

int main(void) {
    int i = 2;
    int n;

    printf("请输入一个整数:");
    scanf("%d"&n);

    while (i <= n) {
        printf("%d ", i);
        i += 2;
    }

    printf("\n");

    return 0;
}

练习4-7
编写一段程序,像右面这样显示出小于输入的整数的所有2的乘方。

​ 请输入一个整数:19
​ 2 4 8 16

#include <stdio.h>

int main(void) {
    int i = 2;
    int n;

    printf("请输入一个整数:");
    scanf("%d"&n);

    while (i <= n) {
        printf("%d ", i);
        i *= 2;
    }

    printf("\n");

    return 0;
}

练习4-8
改写代码清单4-8的程序,当输入的值小于1时不输出换行符。

#include <stdio.h>

int main(void) {
    int n;

    printf("请输入一个整数:");
    scanf("%d"&n);

    if (n >= 1) {
        do {
            putchar('*');
            n--;
        } while (n);

        putchar('\n');
    }

    return 0;
}

练习4-9
编写一段程序,使之像右边这样交替显示+和-,总个数等于所输入的整数值。
另外,当输入0以下的整数时,则什么也不显示。

​ 正整数:13
​ ±±±±±±+

#include <stdio.h>

int main(void) {
    int n;

    printf("正整数:");
    scanf("%d"&n);

    if (n >= 0) {
        while (n >= 2) {
            printf("+-");
            n -= 2;
        }

        if (n == 1)
            putchar('+');

        putchar('\n');
    }

    return 0;
}	

练习4-10
编写一段程序,使之像右边这样连续显示*,总个数等于所输入的整数值。
另外,当输入0以下的整数时,则什么也不显示。

​ 正整数:3
​ *
​ *
​ *

#include <stdio.h>

int main(void) {
    int n;

    printf("正整数:");
    scanf("%d"&n);
    
    while (n > 0) {
        puts("*");
        --n;
    }

    return 0;
}

练习4-11
对代码清单4-10的程序进行修改,使其像右边这样在显示结果的同时显示输入的整数值。

​ 请输入一个正整数:1963
​ 1963逆向显示的结果是3691。

#include <stdio.h>

int main(void) {
    int n;

    do {
        printf("请输入一个正整数:");
        scanf("%d"&n);
        if (n <= 0)
            puts("\a请不要输入非正整数。");
    } while (n <= 0);

    printf("%d逆向显示的结果是", n);

    do {
        printf("%d", n % 10);
    } while (n /= 10);

    puts("。");

    return 0;
}

综习4-12
编写一段程序,读取一个正整数,显示其位数。
※注意:代码清单4-10中while语句的循环次数和no的位数一致。

​ 请输入一个正整数:1963
​ 1963的位数是4。

#include <stdio.h>

int main(void) {
    int count = 1;
    int n;

    do {
        printf("请输入一个正整数:");
        scanf("%d"&n);
        if (n <= 0)
            puts("\a请不要输入非正整数。");
    } while (n <= 0);

    printf("%d的位数是", n);

    while (n /= 10)
        ++count;

    printf("%d。\n", count);

    return 0;
}

练习4-13
编写一段程序,求1到n的和。n的值从键盘输入。

​ n的值:5
​ 1到5的和为15。

#include <stdio.h>

int main(void) {
    int sum = 0;
    int i;
    int n;

    do {
        printf("n的值:");
        scanf("%d"&n);
        if (n <= 1)
            puts("\a请不要输入小于等于1的数。");
    } while (n <= 1);

    for (i = 1; i <= n; ++i)
        sum += i;

    printf("1到%d的和为%d。", n, sum);

    return 0;
}

练习4-14
编写一段程序,像右面这样根据输入的整数,循环显示1234567890,显示的位数和输入的整数值相同。

​ 请输入一个整数:25
​ 1234567890123456789012345

#include <stdio.h>

int main(void) {
    int n;
    int i;

    printf("请输入一个整数:");
    scanf("%d"&n);

    while (n >= 10) {
        printf("1234567890");
        n -= 10;
    }

    for (i = 1; i <= n; ++i)
        printf("%d", i);

    putchar('\n');

    return 0;
}

综习4-15
编写一段程序,像右面这样显示出身高和标准体重的对照表。显示的身高范围和间隔由输入的整数值进行控制,标准体重精确到小数点后2位。

​ 开始数值(cm):155
​ 结束数值(cm):190
​ 间隔数值(cm):5
​ 155cm 49.50kg
​ 160cm 54.00kg
​ …(以下省略)…

#include <stdio.h>

int main(void) {
    int start, end, step;
    int height;

    printf("开始数值(cm):");    scanf("%d"&start);
    printf("结束数值(cm):");    scanf("%d"&end);
    printf("间隔数值(cm):");    scanf("%d"&step);

    for (height = start; height <= end; height += step) 
        printf("%3dcm\t%6.2fkg\n", height, (height - 100) * 0.9);

    return 0;
}

练习4-16
编写一段程序,输入一个整数值,显示该整数值以下的所有奇数。

​ 整数值:15
​ 1 3 5 7 9 11 13 15

#include <stdio.h>

int main(void) {
    int n;
    int i;

    printf("整数值:");
    scanf("%d"&n);

    for (i = 1; i <= n; i += 2)
        printf("%d ", i);

    putchar('\n');

    return 0;
}

练习4-17
编写一段程序,像右边这样显示1到n的整数值的二次方。

​ n的值:3
​ 1的二次方是1
​ 2的二次方是4
​ 3的二次方是9

#include <stdio.h>

int main(void) {
    int n;
    int i;

    printf("n的值:");
    scanf("%d"&n);

    for (i = 1; i <= n; ++i)
        printf("%d的平方是%d\n", i, i * i);

    return 0;
}

练习4-18
编写一段程序,输入一个整数值,显示该整数值‘个’*号。每显示5个就进行换行。

​ 显示多少个*:12
​ *****
​ *****
​ **

#include <stdio.h>

int main(void) {
    int n;
    int i;

    printf("显示多少个*:");
    scanf("%d"&n);

    for (i = 1; i <= n; ++i) {
        putchar('*');
        if (i % 5 == 0)
            putchar('\n');
    }

    if (n % 5 != 0)
        putchar('\n');

    return 0;
}

练习4-19
编写一段程序,对代码清单4-15进行修改,在显示所输入的整数值的所有约数之后,显示约数的个数。

​ 整数值:4
​ 1
​ 2
​ 4
​ 约数有3个。

#include <stdio.h>


int main(void) {
    int count = 0;
    int n;
    int i;

    printf("整数值:");
    scanf("%d", &n);

    for (i = 1; i <= n; ++i)
        if (n % i == 0) {
            printf("%d\n", i);
            ++count;
        }

    printf("约数有%d个。\n", count);

    return 0;
}

练习4-20
编写一段程序,像右面这样为九九乘法表增加横纵标题。

| | 1 2 3 4 5 6 7 8 9
------------------------------
1 | 1 2 3 4 5 6 7 8 9
2 | 2 4 6 8 10 12 14 16 18
3 | 3 6 9 12 15 18 21 24 27
4 | 4 8 12 16 20 24 28 32 36
​ …(以下省略)…

#include <stdio.h>

int main(void) {
    int i, j;

    printf("  |");
    for (i = 1; i <= 9; ++i)
        printf("%3d", i);
    putchar('\n');

    for (j = 0; j < 10; ++j)
        printf("---");
    putchar('\n');

    for (i = 1; i <= 9; ++i) {
        printf("%d |", i);
        for (j = 1; j <= 9; ++j)
            printf("%3d", i * j);
        putchar('\n');
    }

    return 0;
}

练习4-21
编写一段程序,像右边这样显示以所输入整数为生成一个正方形边长的正方形。

​ 正方形有几层:3
​ ***
​ ***
​ ***

#include <stdio.h>

int main(void) {
    int i, j;
    int n;

    printf("正方形有几层:");
    scanf("%d", &n);

    for (i = 0; i < n; ++i) {
        for (j = 0; j < n; ++j)
            putchar('*');
        putchar('\n');
    }
    
    return 0;
}

练习4-22
对代码清单4-17 中的程序进行修改,显示出一个横向较长的长方形。
※读取两个边的边长,以较小的数作为行数,以较大的数作为列数。

​ 让我们来画一个长方形。
​ 一边:7
​ 另一边:3
​ *******
​ *******
​ *******

#include <stdio.h>

int main(void) {
    int a, b;
    int i, j;

    puts("生成一个长方形:");

    printf("一边:");
    scanf("%d", &a);

    printf("另一边:");
    scanf("%d", &b);

    if (a > b) {
        int t = a;
        a = b;
        b = t;
    }

    for (i = 0; i < a; ++i) {
        for (j = 0; j < b; ++j)
            putchar('*');
        putchar('\n');
    }

    return 0;
}

练习4-23
对代码清单4-18和代码清单4-19中的程序进行修改,分别显示出直角在左上方和右上方的等腰直角三角形(生成两个程序)。

#include <stdio.h>

int main(void) {
    int i, j;
    int n;

    puts("生成直角在左上角的等腰直角三角形。");
    printf("短边:");
    scanf("%d", &n);

    for (i = n; i > 0; --i) {
        for (j = 0; j < i; ++j)
            putchar('*');
        putchar('\n');
    }

    return 0;
}
#include <stdio.h>

int main(void) {
    int i, j;
    int n;

    puts("生成直角右上角的等腰直角三角形。");
    printf("短边:");
    scanf("%d", &n);

    for (i = n; i > 0; --i) {
        for (j = n - i; j > 0; --j)
            putchar(' ');
        for (j = 0; j < i; ++j)
            putchar('*');
        putchar('\n');
    }

    return 0;
}

练习4-24
编写一段程序,输入一个整数,像右面这样显示出输入整数层的金字塔形状。
提示:第i行显示(i-1)*2+1个*。

​ 让我们来画一个金字塔。
​ 金字塔有几层:3
​ *
​ ***
​ *****

#include <stdio.h>

int main(void) {
    int i, j;
    int n;

    puts("让我们来画一个金字塔。");
    printf("金字塔有几层:");
    scanf("%d", &n);

    for (i = 1; i <= n; ++i) {
        for (j = n - i; j > 0; --j)
            putchar(' ');
        for (j = 2 * i - 1; j > 0; --j)
            putchar('*');

        putchar('\n');
    }

    return 0;
}

练习4-25
编写一段程序,像右边这样显示输入整数层的向下的金字塔形状。第i行显示i%10的结果。

​ 让我们来画一个向下的金字塔。
​ 金字塔有几层:3
​ 11111
​ 222
​ 3

#include <stdio.h>

int main(void) {
    int i, j;
    int n;

    puts("让我们来画一个向下的金字塔。");
    printf("金字塔有几层:");
    scanf("%d", &n);

    for (i = 1; i <= n; ++i) {
        for (j = 1; j < i; ++j)
            putchar(' ');
        for (j = 2 * (n - i) + 1; j > 0; --j)
            printf("%d", i % 10);

        putchar('\n');
    }

    return 0;
}
  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
明解C语言入门篇第四章主要介绍了金字塔的练习。其中练习4-24是输入一个整数,然后根据输入的整数层数,画出一个金字塔形状。代码使用了嵌套循环,外层循环控制金字塔的层数,内层循环控制每一层的输出。具体实现是通过在内层循环中打印空格,然后在另一个内层循环中打印星号来实现金字塔形状的输出。 练习4-25是画一个向下的金字塔,也是根据输入的整数层数来绘制金字塔形状。不同于练习4-24,这个金字塔是倒置的,即顶部是最宽的一层,底部是最窄的一层。代码使用了嵌套循环,外层循环控制金字塔的层数,内层循环控制每一层的输出。具体实现是通过在内层循环中打印空格,然后在另一个内层循环中打印数字来实现金字塔形状的输出。 练习4-6是输入一个整数,然后输出从2到输入整数之间的所有偶数。代码使用了while循环,通过判断每个数是否能被2整除来确定是否为偶数,并将偶数打印出来。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [明解C语言入门篇第四章](https://blog.csdn.net/a237664181a/article/details/88848022)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值