c_20200504

  • 求任意兩個數的最大公約數

    • 兩個數的最大公約數有可能是其中較小的數字,在尋找最大公約數時按從大到小的順序進行排序,循環變量i的初值從較小的數字開始,依次遞減,去尋找第一個能同時整除兩個整數的自然數,並將其輸出。
    • 注意:雖然判定條件是i>0,但在找到第一個滿足條件的i的值後,即可跳出循環,例如輸入25和15,最大公約數是5,對於後面的4、3、2、1沒有必要繼續執行,但此時判定條件仍然成立,要結束循環只能藉助break語句。
    #include <stdio.h>
    int main() {
        int a, b, t, i;
        printf("enter 2 numbers:\n");
        scanf("%d%d", &a, &b);
        if (a < b) {	//比較大小,a存儲大值,b存儲小值
            t = a;
            a = b;
            b = t;
        }
        for (i = b; i > 0; i--) {	//i的初值從較小的數字開始,依次遞減,去尋找第一個能同時整除兩個整數的自然數,並將其輸出
            if (a % i == 0 && b % i == 0){
                printf("The GDC of %d and %d is %d\n", a, b, i);
                break;	//結束循環
            }    
        }
        return 0;
    }
  • 求任意兩個數的最小公倍數

    • 輸入的兩個數字,大數a是小數b的倍數,a即爲所求最小公倍數,若a不能被b整除,則需要尋找一個能同時被兩個整數整除的自然數,在尋找最小公倍數時按從大到小的順序進行排序,循環變量i的初值從較大的數字a開始向後遞增,直到找到第一個能同時被兩個整數整除的數字,並將其輸出。

    • 注意:由於i的最大值不能確定而導致終止條件不確定,故有如下解決辦法:

      1. 將判定條件表示成循環變量滿足的基本條件,如終止條件可以設置爲i > 0;
      2. 終止條件省略不寫,利用循環體中的語句結束循環,如在找到第一個滿足條件的自然數時利用break語句跳出循環。
      #include <stdio.h>
      int main() {
          int a, b, t, i;
          printf("enter 2 numbers:\n");
          scanf("%d%d", &a, &b);
          if (a < b) {	//比較大小,a存儲大值,b存儲小值
              t = a;
              a = b;
              b = t;
          }
          for (i = a; i > 0; i++) {	//i的初值從較大的數字a開始向後遞增,直到找到第一個能同時被兩個整數整除的數字,並將其輸出,此處循環終止條件可不寫for (i = a; ; i++)
              if (i % a == 0 && i % b == 0) {
                  printf("The LCW of %d and %d is %d\n", a, b, i);
                  break;
              }
          }
          return 0;
      }
  • 求兩個數m和n的最大公約數

    • 利用格式輸入語句將輸入的兩個數分別賦給 a 和 b,然後判斷 a 和 b 的關係,如果 a 小於 b,則利用中間變量 t 將其互換。再利用輾轉相除法求出最大公約數,進而求出最小公倍數。最後用格式輸出語句將其輸出。

    • 輾轉相除法:

      • 有兩個整數a和b:
        1. a%b得餘數c;
        2. 若c = 0,則b爲兩數得最大公約數;
        3. 若c ≠ 0,則a = b, b = c,再執行1;
      • 最小公倍數 = 兩數的乘積 / 最大公約數
    #include <stdio.h>
    int main() {
        int a, b, c, m, t;
        printf("enter 2 numbers:\n");
        scanf("%d%d", &a, &b);
        if (a < b) {
            t = a; 
            a = b;
            b = t;
        }
        m = a * b;
        c = a % b;
        while (c != 0) {
            a = b;
            b = c;
            c = m % b;
        }
        printf("The GDC of %d and %d is %d\n", a, b, b);
        printf("The LCW of %d and %d is %d\n", a, b, m/b);
        return 0;
    }
  • 猴子吃桃問題

    • 猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將第一天剩下的桃子吃掉一半,有多吃了一個。以後每天早上都吃了前一天剩下的一半零一個。到第 10 天早上想再吃時,發現只剩下一個桃子了。編寫程序求猴子第一天摘了多少個桃子。
    #include <stdio.h>
    int main() {
        int day, x1, x2;
        day = 9;
        x2 = 1;
        while(day > 0) {
            x1 = (x2 + 1) * 2;
            x2 = x1;
            day--;
        }
        printf("total is %d\n", x1);
        return 0;
    }
  • 輸入10個數字,輸出其中最大的一個數字:

    #include <stdio.h>
    int main() {
        int i, max;
        int a[10];
        printf("enter 10 numbers:\n");
        for (i = 0; i < 10; i++)
        	scanf("%d", &a[i]);
        max = a[0];
        for (i = 1; i < 10; i++) {
            if (max < a[i])
                max = a[i];
        }
        printf("max = %d\n", max);
        return 0;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章