1. 程式人生 > >明解C語言 入門篇 第四章答案

明解C語言 入門篇 第四章答案

 

練習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');

     }

}
   

&n