最简单的C++程序

例1.1:输出一行字符

1
2
3
4
5
6
7
#include <iostream>        //包含头文件 iostream
using namespace std; //使用C++的命名空间std
int main()
{
cout<<"this is a C++ program.";
return 0
}

运行结果: this is a C++ program.

分析:

先看程序第三行,其中用main代表”主函数”的名字。每一个C++程序都必须有一个main主函数。main前面的int的作用是声明函数的数据类型为整形(标准C++规定main函数的数据类型必须为整形int)程序第六行的作用是向操作系统返回一个0值来表示程序执行成功,如果程序执行不成功,则会自动向操作系统返回一个非零值,一般为-1.

函数体是由大括号{}括起来的,例1.1中主函数内有一个以cout开头的语句。cout是由c和out两个单词组成,顾名思义,它是C++中用于输出的语句,我们可以把cout<<组成的语句简称为cout语句,<<是插入运算符,与cout配合使用,在例1.1中它的作用是把它右侧的字符串插入到C++的输出队列cout中(输出队列也称输出流),C++系统将输出流cout的内容输出到系统指定的设备(一般为显示器)中,注意,C++所有语句最后都应当有一个分号;

此程序的第一行#include <iostream>,属于C++的预处理指令,它以#开头,与C++的语句相区别,行末没有分号,#include <iostream>是一个包含指令,作用是将文件 iostream 的内容包含到该指令所在的程序文件中,代替该指令。文件 iostream 的作用是向程序提供输入或输出是所需要的一些信息。 iostream 是由i-o-stream三个词组成,代表输入输出流的意思,由于这类文件通常放在程序单元的开头,所以称为”头文件“(header file)。在程序进行编译时,先对所有预处理命令进行处理,将头文件的具体内容代替#include指令,然后再对整个程序单元进行编译。

此程序的第二行using namespace std;的意思是”使用命名空间std“。C++标准库中的类和函数是在命名空间std中声明的,因此程序中如果需要用到C++标准库(此时需要用#include指令),就需要用using namespace std;做声明,表示用到命名空间std中的内容。

作为C++初学者,例如本程序头部前两行不必深究,只需要知道,如果有程序有输入或输出时,必须使用#include<iostream>来提供必要的信息,同时也要使用using namespace std;使程序能够使用这些信息,否则程序编译时将出错。请读者在在联系写C++程序是也在程序中包含此两行。

例1.2:求a,b之和

1
2
3
4
5
6
7
8
9
10
#include <iostream>           //预处理指令
using namespace std; //使用命名空间std
int main() //声明主函数main
{ //函数主体开始
int a,b,sum; //声明变量
cin>>a>>b; //输入变量a,b的值
sum=a+b; //赋值语句
cout<<"a+b="<<sum<<endl; //输出语句
return 0; //若程序正常结束,则返回0
} //函数结束

分析:

本程序的作用是求两个整数a和b之和sum。程序中所有的//后面的内容都为注释,从它开始到本行末尾都为注释内容,注释是写给人看的而非机器,在程序编译时会忽略这些内容,注释可以加在程序中任何行的右侧,为便于程序的读者甚至是自己理解,常会在程序中添加许多注释来提高程序的可读性,在有的程序中,注释行可能占据篇幅的三分之一。

第五行是声明,定义变量a,b,sum为整形(int)变量。第六行是输入语句cincin是c和in两单词的结合,与cout类似,cin是C++系统定义的输入流对象>>是“提取运算符”,与cin配合使用,其作用是从输入设备(如键盘)提取数据送到输入流cin中。我们可以把cin>>组成的语句简称为cin语句。程序第七行在执行程序中的cin语句时,从键盘输入的第一个值赋给变量a,输入的第二个值赋给变量b,第七行将a+b的值赋给变量sum,第八行先输出字符串“a+b=”,然后输出变量sum的值。cout语句中的endl(end line)是C++输出时的控制符,作用是换行。因此在输出变量sum的值之后换行。

运行结果:

在运行中从键盘输入以下信息(输入信息都为斜体表示以为区分输入和输出)

123 456

则输出为

a+b=579

例1.3:给两个数x和y,求两个数中的大者

本例中包含两个函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>        //预处理指令
using namespace std;
int max(int x,int y) //定义max函数,函数值为整形,形式参数x,y为整形
{ //max函数开始
int z //声明变量z为整形
if(x > y) z = x; //if语句,如果x大于y,则将x的值赋给z
else z = y; //否则,将y的值赋给z
return(z); //将z的值返回,通过max带回调用处
} //本函数结束


int main() //声明主函数main
{ //主函数开始
int a,b,m; //声明变量
cin>>a>>b; //输入变量a,b的值
m = max(a,b); //调用max函数,将得到的值赋给m
cout<<”max”<<m<<'\n' //输出大于m的值
return 0; //若程序正常,则返回0
} //主函数结束

分析:

本程序包含两个函数:主函数main和被调用的函数max。程序中第3-9行是max函数,他的作用是将x和y中较大者的值赋给变量z,return语句将z值返回给主函数main。返回值通过函数名max带回到main函数的调用处。主函数中cin语句的作用是输入a,b的值。mian函数中第5行为调用max函数,在调用时将实际参数a和b的值分别传送给max函数中的形式参数x和y。经过执行max函数得到一个返回值(即max函数中变量z的值),把这个值赋给变量m。然后通过cuot语句输出m的值

运行结果:

18 25

max=25

注意: 输入的两个数据之间用一个或多个空格间隔,不能以逗号或其他符号间隔,如输入

18, 25

或者

18;25

都是错误的,他不能正确输入第二个变量的值,使第二个变量有不可预见的值。

在上面的程序中,max函数出现在main函数之前,因此在main函数中调用max函数时,编译系统能识别max是已定义的函数名。若把两个函数的顺序调换,编译系统无法知道max函数是什么,因此按出错处理。

为了解决这个问题,在main函数中需要对被调用的函数做出声明,对上面的程序进行改写。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std; //预处理指令
int main() //声明主函数
{
int max(int x,int y); //对max函数进行声明
int a,b,m; //声明变量
cin>>a>>b; //输入变量a,b的值
m = max(a,b); //调用max函数,将得到的值赋给m
cout<<”max”<<m<<'\n' //输出大于m的值
return 0; //若程序正常,则返回0
}

int max(int x,int y) //定义max函数,函数值为整形,形式参数x,y为整形
{ //max函数开始
int z //声明变量z为整形
if(x > y) z = x; //if语句,如果x大于y,则将x的值赋给z
else z = y; //否则,将y的值赋给z
return(z); //将z的值返回,通过max带回调用处
} //本函数结束

分析:

程序第5行是对max函数进行声明,是为了让C++编译系统知道:max是一个函数,函数值是整形,函数有两个参数,都是整形。这样,在编译到第8行时,编译系统会知道max是已声明的函数,系统会系统就会根据函数声明时给定的信息对函数调用的合法性进行检查,如果二者不匹配(例如参数的个数或参数的类型与声明时所指定的不符),编译就会出错。


C++程序的构成和书写形式

从上面几个例子中已经基本可以看出C++程序的结构和书写结构,现在归纳如下:

  1. 一个C++程序可以由一个程序单位或多个程序单位构成。每一个程序单位作为一个文件。在程序编译时,编译系统分别对各个文件进行编译因此一个文件是一个编译单位

  2. 在一个程序中,可以包括以下三个部分:

    1. 预处理指令: #include指令

    2. 全局声明部分: 在这部分中包括对用户自己定义的数据类型的声明和程序中所用到的变量的定义

    3. 函数: 函数是实现操作的部分,因此函数是程序中最基础也是必须有的部分,每个人程序可以有一个或者多个函数,但是只能并必须有一个main函数

  3. 一个函数由两部分组成

    1. 函数首部: 也就是函数的第一行、包括函数名、函数类型、函数属性、函数参数(形参)名、参数类型

      例如例1.3中的max函数首部为

      int max (int x , int y)
      函数类型 函数名 函数参数类型 函数参数名 , 函数参数类型 函数参数名

      一个函数名后面必须有一对括号,函数的参数可以缺省,如int main()

    2. 函数体: 即函数首部下面大括号中的内容,如果一个函数中有多个大括号,最外层的一对{}是函数体的范围

           函数体一般包括:

            · 局部声明部分:

包括对本函数中所有用到的类型、函数的声明及变量的定义。如例1.3中的int a,b,m;以及对所调用的函数声明int max(int x,int y);

对数据的声明既可以放在函数之外,作用在全局。也可以放在函数内,作用在函数内。

            · 执行部分:

由若干个执行语句组成,用来进行有关的操作,以实现函数的功能。

当然,在有的时候可以没有声明部分,也可以没有执行部分,例如

int a ( ) { }

是一个空函数,什么也不做,也是合法的

  1. 语句包括两类。一类是声明语句,如int a,b ,用来向编译系统通知某些信息,比如类型、函数、和变量的声明或定义,但是不起任何实际的作用,是非执行语句。另一类是执行语句,用来实现用户指定的操作,C++对每一种语句赋予一种特定的功能。语句是实现操作的基本操作,显然,没有语句的函数是没有意义的。C++语句必须以分号;结尾,如a+b=c;分号是语句的一个组成部分,没有分号就不是语句。

  2. 一个C++程序总是从main函数开始执行,不论main函数在什么地方。

  3. 类(class)是C++新增加的重要的数据类型,是C++对C的最重要发展。有了类,就可以实现变相对象程序设计方法中的封装、信息隐蔽、继承、派生、多态等功能。在一个类中可以包括数据成员,和成员函数,它们可以被指定为私有(private)或者公共(public)属性,私有的数据成员和成员函数只能被本类的成员函数所调用。

  4. C++一行内可以书写多个语句,一个语句也可以写在多行上,一般情况下提倡一句一行,可以使程序清晰、有序

  5. 一个好的程序应有适当的注释,注释分两种:行内注释和跨行注释,行内注释只需使用//即可,//后的内容皆为注释,跨行注释语法格式为

1
2
3
/*
要注释的内容
*/

此语法格式沿用于C,在C++中同样适用。


结束语

以上,是笔者整理的自我认为本章内重要的内容,内容多数来自《C++程序设计(第三版)》中的第一章内容,希望可以帮助到正在阅读本片文章的你,最后,感谢你的阅读,祝你生活愉快,学习顺利