第2节C++语言基础

由于篇幅所限,本书在此只介绍C++语言的大致语法和使用,以帮助读者快速读懂程序。更详细的使用请参考《信息学奥赛一本通》这本书的前面几章或者自行在网上查找资源。

一、程序的基本构成

#include<iostream>
using namespace std;
int main() { //main()是程序开始执行的地方
    cout << "Hello world"; //输出Hello world
    return 0;
}
  1. 头文件<iostream>包含了程序中如输入输出即cincout的定义。
  2. using namespace std;告诉编译器使用std命名空间。命名空间是为了作为附加信息来区分不同库中相同名称的函数、类、变量等。本质上,命名空间就是定义了一个范围。
  3. 下一行int main()是主函数,程序从这里开始执行。
  4. //是一个单行注释,用于解释说明。单行注释以//开头,在行末结束。
  5. cout << "Hello World";用于输出,在屏幕上显示消息"Hello World"
  6. return 0;终止main()函数,并向调用进程返回值0。
  7. 分号是语句结束符。也就是说每个语句必须以分号结束。
  8. {}称为块,其中的所有语句是一个语句块。

二、变量及数据类型

#include<iostream>
using namespace std;
int main() {
    float x;
    int i;
    x = 3.7;
    i = (int)x; //强制类型转换
    cout << "x=" << x << "," << i << endl; //输出x=3.7,i=3
    return 0;
}
#include<iostream>
using namespace std;
struct stuInfo {
    int ID;
    char name[20];
    char sex;
    int age;
};
int main() {
    stuInfo x = {13, "xiaoma",'m', 35};
    stuInfo* p = &x; //指针p指向x
    cout << x.ID << endl;
    cout << (*p).ID << endl; //指针访问方式一
    cout << p->ID << endl; //指针访问方式二
    return 0;
}

三、类

C++在C语言的基础上增加了面向对象编程。类是C++的核心特性,通常被称为用户定义的类型,其包含了数据表示和用于处理数据的方法。类中的数据和方法都称为类的成员。

class Box { //方法一
public: //public是类型修饰符,具体意义见"类访问修饰符"
    double length; //长度
    double width; //宽度,类的数据成员,也就是类中的变量
    double height; //高度
    double getvolume() {
        // 这里可添加计算体积的具体代码
        return length * width * height;
    }
};

四、程序的基本结构

一般一个程序可以用顺序、选择和循环三种基本结构组合而成。

  1. 顺序结构:顺序结构是最简单、最常用的结构,语句与语句之间按从上到下的顺序执行即可。
  2. 选择结构:选择结构是先根据条件做出判断,再决定执行哪一种操作的算法结构,必须包含判断框。当条件P成立(或称为真)时执行A,否则执行B,不可能两者同时执行,但A或B两个框中可以有一个是空的,即不执行任何操作。常用的是ifif...elseswitch
#include<iostream>
using namespace std;
int main() {
    int a = 20;
    if (a == 10) { //如果if条件为真,则输出下面的语句
        cout << "a的值是10" << endl;
    }
    else if (a == 20) { //如果else if条件为真,则输出下面的语句
        cout << "a的值是20" << endl;
    }
    else if (a == 30) {
        cout << "a的值是30" << endl;
    }
    else {
        cout << "没有匹配的值" << endl;
    }
    cout << "a的准确值是" << a << endl;
    return 0;
}
  1. 循环结构:在一些算法中,经常会出现从某处开始,按照一定条件,反复执行某一处理步骤的情况,这就是循环结构。常用的有whilefordo...while
#include<iostream>
using namespace std;
int main() {
    for (int a = 1; a < 10; a = a + 1) {
        cout << "a的值:" << a << endl;
    }
    int b = 1;
    while (b < 10) {
        cout << "b的值:" << b << endl;
        b++;
    }
    return 0;
}

五、函数

函数是用来实现某些特定功能而封装成的一个模块。在创建函数时,必须编写其定义。所有函数定义包括以下组成部分:

返回类型 函数名(形参列表) {
    函数主体
}
  1. 函数名:每个函数都必须有一个名称。通常,适用于变量名称的规则同样也适用于函数名称。
  2. 形参列表:保存传递给函数的值的变量列表。如果没有值传递给函数,则其形参列表为空。
  3. 函数主体:处理函数正在执行的任务的一组语句,这些语句包含在一组大括号中。
  4. 返回类型:函数可以将值发送回调用它的程序模块。返回类型是要发送回的值的数据类型。 例如:编写求半径为r的圆的面积的函数area
//这是一个求值的函数,函数中设置一个形参r,用于接收圆的半径。
//将参数类型和返回值类型定义为double。
double area(double r) //返回值类型为double
{
    double s;
    s = 3.14 * r * r;
    return s; //返回计算结果
}

在执行函数时,函数参数,局部变量(包括const局部变量),函数调用后返回的地址都在内存的栈区上创建,函数执行结束时这些存储单元自动被释放。

六、递归函数

递归,就是在运行的过程中调用自己。 构成递归需具备的条件:

  1. 子问题须与原始问题为同样的事,且更为简单;
  2. 不能无限制地调用本身,必须有个出口,化简为非递归状况处理。 例如编写代码求1+2+…+n的值,其中n20n≤20
#include<iostream>
using namespace std;
//求解1+2··+n
int sum(int x) {
    if (x == 1) return 1; //出口,这样就不能无限制地调用本身了
    return sum(x - 1)+x; //子问题sum(x - 1)与原始问题sum(x)同样的事,且更为简单
}
int main() {
    int n;
    cin >> n;
    cout << sum(n);
    return 0;
}