iT邦幫忙

0

【從零開始的 C 語言筆記】番外篇-註解

  • 分享至 

  • xImage
  •  

其實這個篇章放在這裡有點小晚了,一直覺得好像單獨放成一篇有點哪裡不對,本來想說因為不是必要的一個語法,但對於寫程式來說又有一定的重要性。

所以想了想還是要介紹一下,不過就當成番外篇來放吧!


程式設計的原則

要說到什麼重要什麼不重要,我們來提一下程式設計中重要的原則有什麼:

  1. 避免重複
    如果一段程式碼一直不斷重複地出現,那我們可以將它利用迴圈或副函式等方式,來簡化整體的程式,讓程式碼不再那麼冗長。

e.g. 比如說我們今天要寫一個程式,先輸入一個數字,然後我們要列印出所有小於它的質數,並重複兩次。
(1) 如果是這樣子放兩次程式碼是很冗長的。

#include <stdio.h>

int is_prime(int);

int main()
{
    int input_num = 0;
    //第一次輸入
    scanf("%d", &input_num);

    //判斷輸入的整數是否大於1,否則重新輸入
    while(input_num<2){
        scanf("%d", &input_num);
    }

    //開始處理
    for(int i=2; i<=input_num; i++){
        //回傳1就是質數,要列印出來
        if(is_prime(i)==1){
            printf("%d ", i);
        }
    }
    
    printf("\n==========\n");

    //第二次輸入
    scanf("%d", &input_num);

    //判斷輸入的整數是否大於1,否則重新輸入
    while(input_num<2){
        scanf("%d", &input_num);
    }

    //開始處理
    for(int i=2; i<=input_num; i++){
        //回傳1就是質數,要列印出來
        if(is_prime(i)==1){
            printf("%d ", i);
        }
    }
    
    return 0;
}

int is_prime(int num){
    //判斷狀態
    int k=0;
    for(int i=2; i<num; i++){
        //可被整除的話,則不是質數
        if(num%i==0){
            k=1;
            break;
        }
    }

    //k=0時,是質數
    if(k==0){
        return 1;
    }
    //k=1時,不是質數
    else{
        return 0;
    }
}

https://ithelp.ithome.com.tw/upload/images/20211208/20142565ugKy9PbwTb.png

(2) 但我們可以透過迴圈來替代重複次數,減少多餘的重複程式碼

#include <stdio.h>

int is_prime(int);

int main()
{
    int input_num = 0;
    for(int t=0; t<2; t++){
        scanf("%d", &input_num);

        //判斷輸入的整數是否大於1,否則重新輸入
        while(input_num<2){
            scanf("%d", &input_num);
        }

        //開始處理
        for(int i=2; i<=input_num; i++){
            //回傳1就是質數,要列印出來
            if(is_prime(i)==1){
                printf("%d ", i);
            }
        }

        printf("\n==========\n");
    }

    return 0;
}

int is_prime(int num){
    //判斷狀態
    int k=0;
    for(int i=2; i<num; i++){
        //可被整除的話,則不是質數
        if(num%i==0){
            k=1;
            break;
        }
    }

    //k=0時,是質數
    if(k==0){
        return 1;
    }
    //k=1時,不是質數
    else{
        return 0;
    }
}

https://ithelp.ithome.com.tw/upload/images/20211208/20142565Gtv6zN0eMp.png

  1. 可讀性
    一班來說我們會力求程式碼簡明易懂,會加上適當的註解或分段使用單一功能的函式,使得整體程式碼可以在多年後重看、甚至其他人也能快速了解,雖然寫程式的當下,大家應該都很清楚自己在做什麼,但隔了一段時間可就不一定了。
#include <stdio.h>

int is_prime(int);

int main()
{
    int input_num = 0;
    
    scanf("%d", &input_num);

    //判斷輸入的整數是否大於1,否則重新輸入
    while(input_num<2){
        scanf("%d", &input_num);
    }

    //依序使用迴圈跑小於或等於輸入整數之數,並判斷是否質數、要不要列印
    for(int i=2; i<=input_num; i++){
        //回傳1就是質數,要列印出來
        if(is_prime(i)==1){
            printf("%d ", i);
        }
    }

    return 0;
}

int is_prime(int num){
    //判斷狀態
    int k=0;
    for(int i=2; i<num; i++){
        //可被整除的話,則不是質數
        if(num%i==0){
            k=1;
            break;
        }
    }

    //k=0時,是質數回傳1
    if(k==0){
        return 1;
    }
    //k=1時,不是質數回傳0
    else{
        return 0;
    }
}
  1. 可維護性
    一般來說我們會把單獨功能,拆解出一個函式來處理,因為所有程式碼都塞在main function時,是非常雜亂不堪的,可閱讀性也會很低,所以我們會盡量讓功能的函式獨立出來,以求維護、更新時可以快速找到、修改目標,甚至也可以重複使用。

像是以下就是判斷質數的函式

int is_prime(int num){
    //判斷狀態
    int k=0;
    for(int i=2; i<num; i++){
        //可被整除的話,則不是質數
        if(num%i==0){
            k=1;
            break;
        }
    }

    //k=0時,是質數回傳1
    if(k==0){
        return 1;
    }
    //k=1時,不是質數回傳0
    else{
        return 0;
    }
}
  1. 正確性
    相信正確性是一個非常基礎的事情吧,如果連基本需求都有錯誤、做不到,這個程式可以說不需要存在了,甚至有時候一點誤差就會產生嚴重的後果,所以我們在寫程式時必須時時測試,並即時更正找到的bug。

  2. 執行效率
    在進行程式設計時,我們需要注意程式的效率,可以注意演算法中提到的時間複雜度,越是能簡化次數,程式執行的效率越佳。

int is_prime(int num){
    //判斷狀態
    int k=0;
    for(int i=2; i<=sqrt(num); i++){
        //可被整除的話,則不是質數
        if(num%i==0){
            k=1;
            break;
        }
    }

    //k=0時,是質數回傳1
    if(k==0){
        return 1;
    }
    //k=1時,不是質數回傳0
    else{
        return 0;
    }
}

註解的使用

  1. 介紹
語法 說明
//單行註解 在註解的最左側加入「//」,就可以讓程式忽略它,不產生語法錯誤。
/多行註解/ 使用包住「/* */」註解,就可以寫多行的註解了。
  1. 應用
#include <stdio.h>

int main()
{
    int input_num = 0;
    
    /* 第一部分
    輸入處理 */
    
    scanf("%d", &input_num);

    //判斷輸入的整數是否大於1,否則重新輸入
    while(input_num<2){
        scanf("%d", &input_num);
    }

    /* 第二部分
    列印星星的部分 */
    
    //行數
    for(int i=1; i<=input_num; i++){
        //單行星星數
        for(int j=0; j<i; j++){
            printf("*", i);
        }
        printf("\n");
    }

    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20211208/2014256592jaZhCpZW.png


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言