1-01 C++起步 —— 最简单的程序

来源:互联网 发布:西安博达软件怎么样 编辑:程序博客网 时间:2024/05/09 17:29

如果要从键盘上输入两个复数, 计算它们的和并输出到屏幕。假设C语言中有复数COMPLEX数据类型, 那么程序写起来就简单了:

#include <iostream>
using namespace std;

int main() {
    COMPLEX a, b, c;
    cout << "a = ? "; cin >> a; // 输入第一个复数
    cout << "b = ? "; cin >> b; // 输入第二个复数
    c = a + b; // 求和
    cout << "c = " << c << endl; // 输出结果
    return 0;
}

然而事实上C语言中并没有复数COMPLEX数据类型, 所以这程序只是画饼充饥。但在C++里, 我们最终可以实现它。

现在刚刚起步, 为了完成这个功能, 我们可能写出下面的代码:

#include <iostream>
using namespace std;

int main() {
    double ar, ai, br, bi, cr, ci;
    cout << "a = ? "; cin >> ar >> ai; // 输入第一个复数
    cout << "b = ? "; cin >> br >> bi; // 输入第二个复数
    cr = ar + br; ci = ai + bi; // 求和
    cout << "c = (" << cr << ", " << ci << ")/n"; // 输出结果
    return 0;
}

假设第一个复数是 3+4i, 第二个复数 2-5i, 运行程序时输入如下数据, 即可得到计算结果:

a = ? 3 4
b = ? 2 -5
c = (5, -1)

在这个程序里, 用六个零散的变量ar, ai, br, bi, cr, ci分别表示三个复数的实部和虚部, 它们之间并无紧密的逻辑联系, 在下一篇文章1-02里将用结构(struct)来组织数据, 得到一个更好的版本。


经常有人问: 主函数main为什么要返回一个零值呢?
C/C++程序启动后, 自动调用main函数; 当main函数执行完毕, 整个程序也就随之结束。显然, 主函数结束以后, 它返回的值也就反馈给操作系统了 —— 所以它也被称为出口代码。这里有个约定, 程序的出口代码为0, 表示正常结束, 否则表示异常结束。

建议大家不要把main函数定义成无值类型的函数, 例如:

void main() {
   ......
}

这不是好的写法 —— 因为出口代码不明确。

又有人要问: 程序只执行主函数, 那其它函数还有什么用处?
简单地说, 如果其它函数被main函数直接或间接调用到了, 那么它们就会执行, 否则就不会执行。因此, 一般情况下, 主函数里主要是对其它函数的调用, 它包括了整个程序的动作轮廓。

那么主函数与其它函数的区别是什么?
主函数的参数, 即从操作系统获取的信息, 是通过命令行发出的信息, 它是若干个由空格隔开的字符串。它的形式参数有两个, 一个是字符串的个数, 另一个是字符串的数组。由于现在使用的是Windows操作系统, 所以命令行参数的使用越来越少了。主函数的返回值是出口代码, 向操作系统反馈结束的状态——正常, 或异常。下面是主函数的原型:

int main(int argc, char *argv[]);

主函数以外的其它函数, 根据各自的功能编写。它们都从形式参数表中获取调用函数传送过来的信息, 经过计算和处理后得到的结果, 作为函数的返回值反馈给调用函数。下面是计算阶乘的函数, 它从形式参数中获取n的值, 经过计算得到了阶乘值, 反馈给调用函数:

01
02

03

04
05
06
07
08
09
10
11

12
13
14
15
16
17
18
19
20
21
22
23

#include <iostream>
using namespace std;

double Fac(int n);

int main() {
    int x;
    double y;
    cout << "x = ? "; cin >> x;
    y = Fac(x);
    cout << x << "! = " << y << endl;
    return 0;
}

double Fac(int n) {
    int k;
    double p = 1;
    if (n<0) {
        cerr << "参数错误!/n";
        exit(1);
    }
    else {
        for (k = 1; k <= n; k ++) p *= k;
    }
    return p;
}

假设用户输入5, 则程序的执行结果如下:

n = ? 5
5! = 120

程序执行的过程是: 程序启动后首先执行主函数, 第7行的输出语句在屏幕上显示: "n = ? ", 输入语句等待用户的输入。若用户输入: "5"并回车, 则数据5存入变量x。第8行调用函数Fac, 将x的值5传递给Fac函数的形式参数n, 经过第19行的循环, 反复做乘法计算, 变量p的值最后变成120, 到第21行由return语句将计算结果送回到主函数。回到第8行, Fac函数的函数值120被存入变量y, 到第9行在屏幕上输出结果: "5! = 120"。

最后要说明的一点是: 主函数可以调用其它函数, 其它函数之间可以互相调用, 但其它函数不能调用主函数!

原创粉丝点击