1.1 编写一个简单的C++程序
关于main函数
在C++中,一个函数定义包含返回类型、函数名、形参列表、函数体四个部分。
main函数的定义也不例外。只是有以下特殊:
1.每个程序必须有且只有一个
main函数。2.
main函数的返回类型必须为int。`main`函数的返回值用来指示状态。返回值0表明成功;非0的返回值的含义由系统指定,通常用来指出错误类型。
关于类型
值得注意的是,类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算。
比如int类型可以进行算数运算,而bool类型可以进行逻辑运算。
编译、运行程序
计算机所使用的操作系统和编译器决定了如何编译程序。比如我的电脑用的是Linux操作系统,并安装了gcc编译器和g++编译器。
不同的编译器支持的C++源文件后缀名也略有不同,有.cc、.cpp、.cxx等等。(用.cpp即可)
1.命令行界面中,用以下命令编译程序:
$ CC prog1.cc
其中cc为编译器的名字,$为系统提示符,prog1.cc为包含main函数的源文件。
对应到Ubuntu+g++/gcc,则为:
$ g++ prog1.cpp
执行完上述编译命令后,系统会生成可执行文件。Linux下可执行文件后缀为.out。默认文件名为a.out。
更常用的,我们用以下命令编译程序:
$ g++ -o prog1 prog1.cpp
-o prog1是编译器参数,指定了可执行文件的文件名。在Linux中,会生成名为prog1(不是prog1.out)的可执行文件。
2.然后用以下命令即可运行程序:
$ ./a.out
./表示a.out在当前目录下。
3.访问main函数返回值用以下命令:
$ echo $?
问题:P5-1.1节练习-练习1.2,改写程序,使其返回-1后,用
echo $?查看返回值,发现是255,Why?答:因为-1的unsigned值为255。
1.2初识输入与输出
C++没有定义任何输入输出语句,其IO机制是由标准库提供的。
标准库定义的所有名字都在命名空间std中。
iostream库包含istream和ostream两个基本类型,分别表示输入流和输出流。
一个流就是一个字符序列,其从IO设备读出或写入设备。
流:随着时间的推移,字符是顺序生成或消耗的。
-
标准输入输出对象
标准库定义了4个IO对象
1.
cin:标准输入对象。它是istream类型的对象。2.
cout:标准输出对象。它是ostream的类型的对象。3.
cerr:标准错误对象。它是ostream类型的对象。通常用来输出警告和错误信息。4.
clog:它是ostream类型的对象。用来输出程序运行时的一般性信息。
<<运算符接受两个运算对象:左侧的运算对象必须是一个ostream的对象,右侧是要打印的值。
以以下语句为例:
std::cout<<"Hello"<<endl;
第一个<<运算符将“Hello”写到cout中,其计算结果就是这个cout。
第一个<<运算符的结果(cout这个对象)是第二个<<运算符的左侧运算对象,其右侧运算符为endl,即结束当前行。
这样,每个<<运算符的左侧对象都是相同的,都是cout。
问题:endl与\n的区别是什么?
答:endl=\n+flush()=换行+刷新缓冲区。
>>运算符接受一个istream对象作为其左侧运算对象,接受一个对象作为其右侧运算对象。
以以下语句为例:
std::cin>>v1>>v2
第一个>>运算符从cin这个istream的对象读入数据,并存入v1中。
同样地,第一个>>运算符的结果是其左侧运算对象,即cin。所以cin又作为第二个>>运算符的左侧运算对象,读入数据并存入v2。
所以,每个>>运算符的左侧对象是相同的,都是这个cin。
1.3注释简介
两种注释方法
单行注释:以双斜线(//)开始,以换行符结束。这种注释可以包含任何文本,包括额外的双斜线。常用于半行或单行附注。
注释界定符:以/*开始,以*/结束。可以包含除*/以外的任意内容,包括换行符。常用于多行注释。注释界定符不能嵌套。
1.4控制流
while语句
while语句反复执行一段代码,直至给定条件为假为止。
while(condition)
statement
while语句的执行过程是交替地检测condition条件和执行关联的语句statement,直至condition为假时停止。
for语句
for语句由循环头和循环体组成。循环头由初始化语句、循环条件、表达式组成。
读取数量不定的输入数
#include<iostream>
int main(){
int sum=0,value=0;
while(std::cin>>value)
sum+=value;
std::cout<<"Sum is:"<<sum<<std::endl;
retun 0;
}
while的循环条件是std::cin>>value,因为>>运算符返回其左侧运算对象,故循环条件检测的其实是std::cin。
当使用一个istream的对象作为条件时,其效果是检测流的状态。如果流有效,那么检测成功。当遇到文件结束符时,或遇到一个无效输入时(如读入的值不是一个整数),条件为假。
Linux系统下,文件结束符输入是用Ctrl+D。
if语句
没什么特别要说的。
1.5类简介
这里讲的比较简单,没什么值得注意的。