【从零开始的 C 语言笔记】番外篇-注解

其实这个篇章放在这里有点小晚了,一直觉得好像单独放成一篇有点哪里不对,本来想说因为不是必要的一个语法,但对於写程序来说又有一定的重要性。

所以想了想还是要介绍一下,不过就当成番外篇来放吧!


程序设计的原则

要说到什麽重要什麽不重要,我们来提一下程序设计中重要的原则有什麽:

  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


<<:  为了转生而点技能-JavaScript,day17(原型-prototype、自订原型、新增method

>>:  HTML笔记(04)-HTML里的formatting

EP04 - 开始使用 Terraform 配置 aws 基础设施

Terraform Terraform 是什麽 Terraform 是由 HashiCorp 建立的...

Day 14 Flask 传入参数

在网页中不可能只是按照设定好的 URL 去取得网页页面,在许多时候都需要带入不同的参数去取得不同的资...

[深度学习回顾] How Deep Would You Learn?

前言 不知不觉,铁人赛的赛程已经来进行了一半,每天发文使得生活过得非常充实。也感谢这里的许多高手发表...

[Golang] Modules

Within a small application, we can just use the ma...

[Day14] Flutter with GetX animated_text_kit

animated_text_kit 文字特殊效果的第三方,可以参考文档的样式作选择 使用起来类似是F...