第四节 编程细节
细节决定成败,态度决定一切。
在我们程序编写的过程中,有一些细节我们需要注意,这对你以后的代码质量都会有很大的影响。下面,我会介绍一些常见的细节。
合理的缩进
虽然编译器会忽略代码中一切空格和换行,但是一段乱奇葩早的缩进的代码真的是能逼死强迫症的。
常见的缩进方式是使用Tab键,默认4个空格。相同等级的语句不缩进,次级语句需要缩进,比如:1
2
3for(int i=1;i<=100;i++)
sum+=i;
printf("%d\n",sum);
在上面的代码中,我们看到循环体是累加计算,属于循环语句的次级语句,所以应当缩进。而输出是和循环同一等级的,所以要和for循环对齐。
除此之外,大括号的缩进也很重要,这一点在下面会介绍。
统一的大括号
大括号也是决定一个程序是否整齐的关键,我们常用以下两种方法:1
2
3
4
5
6
7
8
9
10int main()
{
int sum=0;
for(int i=1;i<=100;i++)
{
sum+=i;
}
printf("%d\n",sum);
return 0;
}
1 | public class Main() { |
不同类型数据之间的计算
这种情况经常出现在ACM的题目中,就比如hdu2002和hdu2009。如果是把int型数据赋值给double是没有问题的,但是如果是double数据给int,就会出现精度的损失,造成计算的失误。
hdu2002中的分数4/3。如果直接在程序里这么写,程序会当成4整除3来计算,应当写成4.0/3.0。
hdu2009题如果想要写成m=sqrt(m)的话,就要保证m的类型是double类型,否则在赋值时会损失精度。
程序的模块化
模块化思想很重要,像C++和Java都是面向对象的编程语言,集成化程度很高。但是并不意味着我们写C就不要模块化。模块化的程序可读性高,便于修改。
比如hdu2005,判断是否是闰年的题目。我在判断是否是闰年时,写了一个函数,功能是:如果是闰年返回1,否则返回0。
当然不仅限于如此,假设某程序需要按照一个公式进行计算,但是后来我们突然想要改变计算过程,如果你把公式写在函数里,那么只需要修改函数就行了,避免了对主函数的修改。
关于数组
关于数组有两点需要注意。
首先是对下标的确定。我们知道,数组的下标和元素的序号是刚好相差1的。那么我们可以抛弃数组的第一个元素,只使用数组的第二个往后的元素,这样可以统一下标和元素序号,比如:
1 | int a[101]; |
再者,在申请数组大小的时候,我们可以多申请几个。有时候也可能要同时申请多组,这时候,推荐大家使用宏定义,比如:
1 |
|