萌新帮助计划01---养成良好的代码习惯

前言

不知不觉中,我们的信友队又涌入了一批新成员,新面孔,为了帮助这些萌新更轻松的应对接下来的学习进程,我决定写一个 比较简单的 水贴,如果你是大佬,可以选择直接跳过。

养成良好的代码习惯

养成良好的代码习惯,可以帮助我们提高代码的可读性,避免我们的代码出现不必要的错误,帮助我们更好的完成我们的学习。

学会适当空行,提高可读性

有时候,我们会在写代码的途中,遇到一些需要写很多代码的题目,这个时候,避免将代码扎堆,就显得十分的重要。

我们可以在代码的每一个部分空一行,帮助我们区分出代码的各个部分,这样,在我们的代码出现一些问题的时候,我们就可以快速地找到问题,也便于我们的断点调试。

当然,如果你认为可读性还是不够高的话,你可以在每个部分的核心处,加上注释,帮助我们的理解。

我们在举一个反面的例子

#include <bits/stdc++.h>
#define for_(i, a, b) for (int i = (a); i <= (b); i++)
#define _for(i, a, b) for (int i = (a); i >= (b); i--)
using namespace std;
int main(){ int n, m;cin>>n>>m;
    int ans = 0; for_(i, 1, n) for_(j, 1, m) if((i+j)%2==1) ans++;
    cout<<ans<<endl;
    return 0;
}

这个代码的可读性就非常的弱,明明是非常简单的代码结构,却不能一眼看透
我们将这个代码改进一下:

#include <bits/stdc++.h>

#define for_(i, a, b) for (int i = (a); i <= (b); i++)
#define _for(i, a, b) for (int i = (a); i >= (b); i--)

using namespace std;
int main()
{
    int n, m;
    cin >> n >> m;
    // 输入

    int ans = 0;
    for_(i, 1, n)
    {
        for_(j, 1, m)
        {
            if ((i + j) % 2 == 1)//如果(i+j)是奇数的时候,累加
                ans++;
        }
    }
    
    cout << ans << endl;//输出
    return 0;
}

适当的添加注释并且空行可以帮助我们更好的完成代码,减少我们出错的概率。

定义数组及变量:

一般,我们将数组定义在主函数的外面。但是某些人习惯将数组定义在主函数里面,这可能会带来一些看起来莫名奇妙的错误。

其实,当我们将数组,变量定义在主函数里面的时候,我们的编译器会自动随机赋值,而在主函数(函数)外面定义,则会赋值为0

当然,队列,栈,vector等,显得无关紧要,可以卸载主函数外面,也可以写在函数里面,但值得注意的是vector需要进行resize,不然RE

如果你一定要将数组定义在函数内部,请进行一下赋值:

int main(){
    int a[100] = {};
    int b[100] = {0};
}

学会调试

当我们的代码出现了错误时,我们需要自己调试,不是第一时间去求助,有一次,我在帮助别人改代码的时候,看见一个非常离谱的错误,导致WA 0分。

F(x);//正确的(f(x)是一个函数)
F[x];//他写的

我当时呆住了,不是,怎么能调用个函数都能调用错吖,主要的原因其实就是代码习惯不好,学会调试的话,问题就可以很好的解决了

具体方法(供参考)

当出现CE错误的时候(大佬跳过):
可以看下面出现的错误原因。进行调整。

当出现WA的时候,我们可以进行断点测试,在你觉得可能出现错误的地方放上断点(具体如何操作我会再出一期)。

当出现RE的时候,我们主要检查函数是否返回了对应类型的返回值是否除以0是否数组越界是否出现一些STL容器的错误(如:在队列是空的时候使用front)

出现TLE时:主要优化时间复杂度,找到更简单的做法
(剩下的状态剩下省略)
当然,当你实在无法找出自己的错误的时候,可以谦虚地找到老师,请求帮助

切记不要小题大做

这里不过多的讲了,就是在写代码的时候不要将自己明明可以几行代码解决的事一定写很多很多,一定要简化代码,可以简单就简单!!!

后记

本人 大(ju)佬(ruo) 实力有限,只能整理出以上内容。

声明:

资料仅供参考,不喜勿喷!!!

点个赞吧

2 个赞

呜呜呜,我的代码竟然是反面例子(

我写代码一直是这样写的:

#include <bits/stdc++.h>
#define for_(i, a, b) for (int i = (a); i <= (b); i++)
#define _for(i, a, b) for (int i = (a); i >= (b); i--)
using namespace std;
int main(){ int n, m;cin>>n>>m;
    int ans = 0; for_(i, 1, n) for_(j, 1, m) if((i+j)%2==1) ans++;
    cout<<ans<<endl;
    return 0;
}

你不觉得这样更好看吗?

好吧,每个人的审美不同

1 个赞

我认为这种代码挤成了一团,我觉得不好看,但确实,审美不同,本贴只供参考
@王钰宸涵

1 个赞

我认为这样布局合理,有对称之美,结构紧凑

对于这个话题,不要过多讨论,自己觉得舒服就可以了
@王钰宸涵

@linan04103 o好的,对不起大佬,我刚刚加入信友队,还没有入OI,狗粉水帖了,对不起