1.1 改进程序书写风格

如果一个程序具有良好的书写风格,不仅能在视觉上给人以美感,也会给程序的调试和检查带来方便。初看程序,往往可以从程序的书写风格判断出编程者的思路是否清晰。但是,怎样的程序书写风格才算“好”呢?对于这个问题,仁者见仁,智者见智,不过这并不意味着程序的书写风格无章可循。我们通过下面的例子来说明这个问题。

【1.1.1 Financial Management】

Larry今年毕业,找到了工作,也赚了很多钱,但Larry总感觉钱不够用。于是,Larry准备用财务报表来解决他的财务问题:他要计算自己能用多少钱。现在可以通过Larry的银行账号看到他的财务状况。请你帮Larry写一个程序,根据他过去12个月每个月的收入计算要达到收支平衡,每个月平均能用多少钱。

输入

输入12行,每一行是一个月的收入,收入的数字是正数,精确到分,没有美元符号。

输出

输出一个数字,该数字是这12个月收入的平均值。精确到分,前面加美元符号,后面加行结束符。在输出中没有空格或其他字符。

试题来源:ACM Mid-Atlantic 2001

在线测试:POJ 1004,ZOJ 1048,UVA 2362

试题解析

本题采用了非常简单的“输入—处理—输出”模式:

1)通过结构为for(i=0;i<12;i++)的循环输入12个月的收入a[0..11];

2)累计总收入;计算月平均收入

3)输出月平均收入avg。

参考程序


#include<iostream>                    //预编译命令
using namespace std;                  //使用 C++标准程序库中的所有标识符
int main( )                           //主函数
{                                     //主函数开始
    double avg, sum=0.0, a[12]={0};   //定义双精度实数变量avg、sum和实数数组a的初始值
    int i;                            //声明整型循环变量i
    for(i=0; i<12; i++){              //依次读入每个月的收入,并累计年收入
            cin>>a[i];
            sum+=a[i];
        }
    avg=sum/12;                       //计算月平均收入
    printf("$%.2f",avg);              //输出月平均收入
    return 0;
}

我们可从上述程序范例中得到4点启示。

1)严格按照题目要求的格式来设计输入和输出。本题要求输入的月收入是精确到分的正数,因此程序中用提取操作符“>>”,将键盘输入的月收入存储到双精度实数类型的数组元素a[i]中。同样,程序中采用printf("$%.2f",avg)语句使得输出的月平均收入精确到分,且前有美元符号,后有行结束符。当程序运行于在线测试系统时,决定成败的首要因素是程序的输入和输出格式是否符合题意。如果没有按照题目要求的格式进行输入和输出,即使算法正确,结果也是“Wrong Answer”。

2)同一结构程序段内的所有语句(包括说明语句)与本结构程序段的首行左对齐。

3)程序行按逻辑深度呈锯齿状排列。例如,循环体缩进几个字符、用缩进表示选择结构等。这种锯齿形的编排格式能够清晰地反映程序结构,改善易读性。

4)在程序段前或开始位置加上描述程序段功能的注释;对于变量及其变化也应该加上注释,因为理解变量是理解程序的关键。这样做,不仅是为了便于调试程序和日后阅读,更重要的是能够培养团队合作的精神。在将来的工作中,一个研发团队内会有多人一起合作编程、互相协助,这就更需要将注释写得清清楚楚,以便让其他人能理解程序。