添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 需要1個變數儲存輸入的數字,稱此變數為inputNum好了
  • 需要1個變數紀錄到目前為止所有inputNum的總和,稱此變數為sum,其初始值為0
  • 以迴圈執行5次,每次輸入數字到inputNum,並把總和放到sum,迴圈執行的次數以變數i來代表
  • 平均數為sum/5
  • #include <stdio.h>
    int main {
        int i; // 紀錄迴圈執行次數
        int inputNum; // 儲存目前輸入的數值
        int sum = 0; // 儲存到目前為止的總和
        for (i = 1; i <= 5; i++) { // 此迴圈執行5次
            printf("Please Input Number %d: ",i); // 提示使用者輸入第i個數字
            scanf("%d", &inputNum); // 讀入整數到inputNum
            sum = sum + inputNum; // 加總到sum變數
        printf("Sum is %d, average is %lf\n", sum, (double)sum / 5); // 輸出結果
    

    寫一函數輸入參數int n,傳回1+2+3...+n的總合。解析:

  • 要想辦法拜訪1,2,3...n的每一個數字一次
  • 可用for(i=1; i <= n; i++)的形式達成上述目標
  • 拜訪到這些數字時,就把它們加起來
  • int sum(int n) {
        int i; // 紀錄目前要處理的數字
        int sum = 0; // 紀錄到目前為止的總和
        for (i = 1; i <= n; i++) {
            sum = sum + i;
        return sum;
    

    寫一函數輸入參數int n,傳回1+3+5...+n的總合。解析:

  • 要想辦法拜訪1,3,5...n的每一個數字一次,也就是從1開始每次加2
  • 可用for(i=1; i <= n; i+=2)的形式達成上述目標
  • 拜訪到這些數字時,就把它們加起來
  • int sum(int n) {
        int i; // 紀錄目前要處理的數字
        int sum = 0;
        for (i = 1; i <= n; i += 2) { // i+=2讓i往後面走2個
            sum = sum + i;
        return sum;
    

    寫一函數於螢幕上畫出九九乘法表。解析:

  • 總共有i=1..9列j=1..9行,對第i列第j行元素來說,其數值為i*j
  • void nine() {
        int i, j; // i表示第i列(橫向),j表示第j行(縱向)
        for (i = 1; i <= 9; i++) {
            for (j = 1; j <= 9; j++) {
                printf("%3d", i * j);
            printf("\n");
    

    使用printf撰寫一函數輸入參數int size,並在螢幕上印出正方形,size=3的樣子如下

  • 螢幕上的游標只能由上而下,由左而右,無法回頭。
  • 此圖形共有size列,每列有size個*,因此可用兩層迴圈來做。
  • 要讓一個敘述執行size次,可用for(i = 1; i <= size; i++)的形式來達成
  • * print out rectangle * @param size length of the rectangle void print_rectangle(int size) { int i, j; // 第i列,第j行 for (i = 1; i <= size; i++) { // 印出第i列 for (j = 1; j <= size; j++) { // 第i列有size個* printf("*"); printf("\n");

    使用printf撰寫一函數輸入int size,並在螢幕上印出斜一邊的三角形,size=3的樣子如下

  • 螢幕上的游標只能由上而下,由左而右,無法回頭。
  • 此圖形共有1到size列,第i列有i個*,因此可用兩層迴圈來做。
  • void print_right_triangle(int size) {
        int i, j; // 第i列,第j行
        for (i = 1; i <= size; i++) { // 印出第i列
            for (j = 1; j <= i; j++) { // 第i列有i個*
                printf("*");
            printf("\n");
    

    使用printf撰寫一函數輸入int size,並在螢幕上印出等腰的三角形,size=3的樣子如下

    *****
  • 總共有1..size列,對第i列而言,有size-i個空格,以及2*i-1個*
  • void print_equilateral_triangle(int size) {
        int i, j;
        for (i = 1; i <= size; i++) { // 印出第i列
            for (j = 1; j <= size-i; j++) { // 第i列 有size-i個空格
                printf(" ");
            for (j = 1; j <= 2 * i - 1; j++) { // 以及2*i-1個*
                printf("*");
            printf("\n");
    

    上述問題的另一個想法是

  • 總共有1..size列,對第i列而言,總共有size+i-1個符號,其中1..size-i是空白,size-i+1..size+i-1是*
  • void print_equilateral_triangle(int size) {
        int i, j;
        for (i = 1; i <= size; i++) { // 印出第i列
            for (j = 1; j < size + i; j++) { // 每一列有size+i-1個符號
                if (j <= size - i) {  // 在size-i左邊(含)的符號是空白
                    printf(" ");
                } else {                 // 其他的是*
                    printf("*");
            printf("\n");
    

    使用printf撰寫一函數輸入int size,並在螢幕上印出等腰的三角形,size=3的樣子如下

    *****
  • 這個形狀的上半部和前面一題是一模一樣的,下半部則是倒過來了,所謂倒過來的意思是,上半部是依1..n的順序列出,下半部則是依n-1..1的順序列出,因此可以寫成兩個雙重迴圈,且這兩個迴圈的內迴圈完全一樣,只是外面的改為i由n-1..1
  • void print_diamond(int size) {
        int i, j;
        for (i = 1; i <= size; i++) { // 先印出上面的size列
            for (j = 1; j < size + i; j++) {
                if (j <= size - i) {
                    printf(" ");
                } else {
                    printf("*");
            printf("\n");
        for (i = size - 1; i >= 1; i--) { // 在印出下面的size-1列
            for (j = 1; j < size + i; j++) { // 這部分和上半部是一樣的
                if (j <= size - i) {
                    printf(" ");
                } else {
                    printf("*");
            printf("\n");
    

    寫一函數求兩個整數的最大公因數,解析:

  • 此函數需要兩個參數x,y
  • 當y不能整除x時,將x設成為y,y設為x%y, 重複此步驟直到x%y為0
  • 此時y就是這兩個數的最大公因數
  • int gcd(int x, int y) {
        int tmp;
        // 如果x < y 則下面的迴圈執行第一次時就會交換x,y了
        while (x % y != 0) {
            tmp = y;
            y = x % y;
            x = tmp;
        return y;
    

    寫一函數求費氏數,解析:

  • F(n)=n, if n<=1;
  • F(n)=F(n-1)+F(n-2), otherwise
  • 可定義兩變數fn_1,fn_2表示最近兩個找出的費氏數
  • 下一個費氏數依定義為fn_1 + fn_2
  • 找到最新的費氏數後,最近的兩個費氏數就變成了fn_1+fn_2以及fn_1
  • 以變數i紀錄目前要求的是哪一個費氏數
  • 以變數tmp作為更新最新兩個費氏數所需的記憶體空間
  • int fab(int n) { int fn_1 = 1, fn_2 = 0; // 紀錄最近找到的兩個費氏數 int i, tmp; // i表示目前要找F(i) if (n <= 1) return n; for (i = 2; i <= n; i++) { tmp = fn_1; // 先把fn_1紀錄在tmp fn_1 += fn_2; // 最新的費氏數是前面兩個相加 fn_2 = tmp; // 第二新的就是原先的fn_1