明解C语言 入门篇 第四章答案

作者: 博客园-原创精华区  更新时间:2019-11-06 23:51:00  原文链接


练习4-1

 #include <stdio.h>
 
 int main(void)
 {
     int no;
     int x;
 
     do{
    printf("请输入一个整数:");
     scanf("%d", &no);
 
     if (no == 0)
         puts("该整数为0。");
     else if (no > 0)
         puts("该整数为正数。");
     else
        puts("该整数为负数。");
 
     printf("要重复一次吗?【yes···0/No···9】:");
     scanf("%d", &x);
     } while (x == 0);
     
 
 }

练习4-2

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int a;
 5     int b;
 6     int sum = 0;
 7     int x;
 8     
 9     puts("请输入两个整数。");
10     printf("整数a:"); scanf("%d", &a);
11     printf("整数b:"); scanf("%d", &b);
12     x=a;
13     
14     do {
15         sum+=x;
16         x--;
17     } while (x!=b-1);
18 
19     printf("大于等于%d小于等于%d的所有整数的和是%d",b,a,sum);
20     
21 
22     return 0;
23 }

练习4-3

 1 /*
 2     从输入的整数开始倒数到0
 3 */
 4 
 5 #include <stdio.h>
 6 
 7 int main(void)
 8 {
 9     int no;
10 
11     printf("请输入一个正整数:");
12     scanf("%d", &no);
13 
14     while (no >= 0) {
15         printf("%d ", no);
16         no--;
17     }
18     if (no == -1) {
19         printf("\n");
20     }
21     
22     
23     return 0;
24 }

练习4-4

 1 /*
 2     从输入的整数开始倒数到0
 3 */
 4 
 5 #include <stdio.h>
 6 
 7 int main(void)
 8 {
 9     int no;
10 
11     printf("请输入一个正整数:");
12     scanf("%d", &no);
13 
14     while (no > 0)
15         printf("%d ", no--);    /* no的值在显示之后递减 */
16     if (no == 0) {
17         printf("\n");
18     }                /* 换行 */
19 
20     return 0;
21 }

练习4-5

 1 /*
 2     递增显示从0到输入的正整数为止的各个整数
 3 */
 4 
 5 #include <stdio.h>
 6 
 7 int main(void)
 8 {
 9     int i, no;
10 
11     printf("请输入一个正整数:");
12     scanf("%d", &no);
13 
14     i = 1;
15     while (i <= no)
16         printf("%d ", i++);        /* i的值在显示之后递增 */
17     if (no >= 0) {
18         printf("\n");
19     }                /* 换行 */
20 
21     return 0;
22 }

练习4-6

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int no;
 6     int i;
 7 
 8     printf("请输入一个正整数:");
 9     scanf("%d", &no);
10 
11     i = 0;
12     while (i < no) {
13         if ((i % 2)==0) {
14             printf("%d ", i);
15         }
16         i++;
17     }
18     
19 
20     return 0;
21 }

练习4-7

 1 #include <stdio.h>
 2 int main(void)
 3 {
 4     int n1, n2;
 5 
 6     printf("请输入一个整数:");
 7     scanf("%d", &n1);
 8 
 9     n2 = 2;
10     while (n2 < n1) {
11         printf("%d ", n2);
12         n2 *= 2;
13     }
14     putchar('\n');
15 
16     return 0;
17 }

练习4-8

 1 /*
 2     输入一个整数,连续显示出该整数个*
 3 */
 4 
 5 #include <stdio.h>
 6 
 7         int main(void)
 8         {
 9             int no;
10 
11             printf("正整数");
12             scanf("%d", &no);
13 
14             while (no-- > 0) {
15                 putchar('*');
16             }
17             if (no == -1)
18                 putchar('\n');
19 
20             return 0;
21         }

练习4-9

 1 #include <stdio.h>
 2 int main(void)
 3 {
 4     int no;
 5     printf("正整数:");
 6     scanf("%d", &no);
 7     int i;
 8     i = 0;
 9     while (i < no) {
10         if (no %2 )
11         {
12             printf("+");
13         }
14         else
15         {
16             printf("-");
17         }
18         no--;
19     }
20 
21     return 0;
22 }

练习4-10

 1 #include <stdio.h>
 2 
 3         int main(void)
 4         {
 5             int no;
 6             printf("正整数:");
 7             scanf("%d", &no);
 8             while (no-- > 0) {
 9                 putchar('*');
10                 putchar('\n');
11             }
12                 return 0;
13             
14         }

练习4-11

 1 /*
 2     逆向显示正整数
 3 */
 4 
 5 #include <stdio.h>
 6 
 7 int main(void)
 8 {
 9     int no;
10 
11     do {
12         printf("请输入一个正整数:");
13         scanf("%d", &no);
14         if (no <= 0)
15             puts("\a请不要输入非正整数。");
16     } while (no <= 0);
17     int  x = no;
18 
19     printf("%d逆向显示的结果是",x);
20     while (no > 0) {
21         printf("%d",no % 10);        /* 显示最后一位数 */
22         no /= 10;                    /* 右移一位 */
23     }
24     puts("。");
25 
26     return 0;
27 }

练习4-12

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int no;
 6     int x;
 7     int i;
 8     i = 0;
 9         printf("请输入一个正整数:");
10         scanf("%d", &no);
11         x = no;
12         while (no>0)
13         {
14             no/=10;
15             i++;
16 
17         }
18         printf("%d的位数是%d", x,i);
19     return 0;
20 }

练习4-13

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int n;
 6     int i;
 7     int sum;
 8     sum = 0;
 9     printf("n的值:");
10     scanf("%d", &n);
11     for (i = 0; i <= n; i++) {
12         sum += i;
13     }
14     printf("1到%d的和为%d", i-1, sum);
15     
16 }

练习4-14

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int no;
 6     int i;
 7     printf("请输入一个整数:");
 8     scanf("%d", &no);
 9     for (i = 1; i <=no; i++) {
10         printf("%d",i%10);
11 
12     }
13     
14 }

练习4-15

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int begin;
 6     int final;
 7     int interval;
 8     int i;
 9     printf("开始数值(cm):");
10         scanf("%d", &begin);
11         printf("结束数值(cm):");
12         scanf("%d", &final);
13         printf("间隔数值(cm):");
14         scanf("%d", &interval);
15         int x;
16         x = begin;
17 
18         for (i = 0; i <=(final - x) / interval; i++) {
19             printf("%dcm\t%.2fkg", begin, (begin - 100) * 0.9);
20             putchar('\n');
21             begin += interval;
22         }
23 }

练习4-16

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int no;
 6     int i;
 7     printf("整数值:");
 8     scanf("%d", &no);
 9     putchar('\n');
10     for (i = 1; i <=no; i += 2) {
11         printf("%d ", i);
12     }
13 }

练习4-17

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int n;
 6     printf("n的值是:");
 7         scanf("%d",&n);
 8         int i;
 9         for (i = 1; i <= n; i++) {
10             printf("%d的二次方是%d",i,i*i);
11             putchar('\n');
12 
13         }
14 }

练习4-18

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int n;
 6     printf("显示多少个*:");
 7         scanf("%d",&n);
 8         int i;
 9         for (i = 1; i <= n; i++) {
10             putchar('*');
11             if (i % 5 == 0) {
12                 putchar('\n');
13             }
14 
15         }
16 }

练习4-19

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int i, n;
 6     int m;
 7     m = 0;
 8 
 9     printf("整数值:");
10     scanf("%d", &n);
11 
12     for (i = 1; i <= n; i++)
13         if (n % i == 0) {
14             printf("%d ", i);
15             putchar('\n');
16             m++;
17         }
18     printf("约数有%d个。", m);
19     return 0;
20 }

练习4-20

#include <stdio.h>

int main(void)
{
    int i, j;
    printf(" |");
    for (i = 1; i < 10; i++) {
        printf("%3d", i);
    }
    putchar('\n');
    for (i = 1; i < 30; i++) {
        putchar('-');
    }
    putchar('\n');


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


    }
}

练习4-21

#include <stdio.h>

int main(void)
{
    int height;
    int i, j;
    printf("生成一个正方形\n");
    printf("正方形有几层:");
    scanf("%d", &height);
    for (i = 0; i < height; i++) {

        for (j = 0; j < height; j++) {
            putchar('*');

        }
        putchar('\n');
    }
}

练习4-22

#include <stdio.h>

int main(void)
{
    int a,b;
    int i, j;
    int height;
    int length;
    printf("让我们画一个长方形\n");
    printf("一边:");
    scanf("%d", &a);
    printf("另一边:");
    scanf("%d", &b);
    length = (a > b) ? a : b;
    height = (a < b) ? a : b;
    for (i = 0; i < height; i++) {

        for (j = 0; j < length; j++) {
            putchar('*');

        }
        putchar('\n');
    }
}

练习4-23

/*
    显示直角在左上方的等腰直角三角形
*/

#include <stdio.h>

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

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

    for (i = len; i >= 0; i--) {        /* i 行(i = 1, 2, --- , len) */
        for (j = 1; j <= i; j++)        /* 每行显示i 个'*' */
            putchar('*');
        putchar('\n');                    /* 换行 */
    }

    return 0;
}
/*
    显示直角在右上方的等腰直角三角形
*/

#include <stdio.h>

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

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

    for (i = len; i >=0; i--) {        /* i 行(i = 1, 2, --- , len) */
        for (j = 1; j <= len - i; j++)    /* 每行显示len-i 个' ' */
            putchar(' ');
        for (j = 1; j <= i; j++)        /* 每行显示i 个'*' */
            putchar('*');
        putchar('\n');                    /* 换行 */
    }

    return 0;
}

练习4-24

#include <stdio.h>

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

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

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

    return 0;
}

练习4-25

#include <stdio.h>

int main(void)
{
    int i;
    int j;
    int len;
    puts("让我们来画一个向下的金字塔");
    printf("金字塔有几层:");
    scanf("%d", &len);
    for (i = 1; i <= len; i++) {
        for (j = 0; j < i - 1; j++)
        {
            putchar(' ');
        }
        for (j = 0; j < (len - i) * 2 + 1; j++) {
            printf("%d", i%10);
        }    
        for (j=0; j <i-1; j++)
        {
            putchar(' ');
        }
        putchar('\n');

     }

}