1.每个c++程序都包含一个或多个函数(function),其中必须包含一个main(主)函数,作用为供操作系统调用从而运行此程序。而每个函数都包括四个部分:返回类型(return type),函数名(function name),形参列表(parameter list)与函数体(function body)。如下代码段:
int main()//函数类型与函数名,括号内为形参列表
{//函数体以"{"左花括号开始
return 0;//执行函数的结束
}//函数体以"}"右花括号结束
在大多数系统中,main的返回值被用来指示状态。返回值为0表明成功而非0的含义由系统定义,常用来指出错误类型。
将编译器与其他程序创建和分析工具包装在一起,更适用于开发大型程序。
大多数编译器要求程序源码存储在一个或多个文件中。程序文件通常被称为源文件(source file),通常源文件以一个后缀结尾。后缀由一个半角句点(.)后接一个或多个字符组成,后缀可以告诉系统这是一个C++程序。最常见的包括:.cc、.cxx、.cpp、.cp、.c。
大部分编译器会提供一个命令行界面,如果我们的main程序在文件p1.cc中,我们可以输入以下命令实现编译:
$ CC p1.cc
C++语言未定义任何输入输出(IO)语句,但由一个包含全面的标准库(standard libary)提供IO机制和其他设施。
包含两个基础类型istream(输入流)和ostream(输出流)。流(stream)意为随着时间的推移,字符是顺序生成或消耗的。
Ⅰ.标准输入:cin;
Ⅱ.标准输出:cout;
Ⅲ.标准错误:ceer,输出警告和错误消息
Ⅳ.clog,输出程序运行时的一般性信息。
概述:以下是一个输入两个数求和的函数
#include//使用iostream库
int main()
{
std::cout << "Please enter two numbers: " << std::endl;//O操作输出提示性语句
int a = 0 , b = 0;//初始化两个整形变量
std::cin >> a >> b;//I操作输入a和b两个变量
std::cout << "The sum of " << a << " and " << b
<< " is " << a + b << std::endl; //O操作输出a和b的和
return 0;
}
Please enter two numbers:
3 4
The sum of 3 and 4 is 7
注:我们可以运行以上程序并输入两个数敲击回车并查看打印结果
析:
Ⅰ.头文件:首行即是,存在于使用标准库设施的程序,出现在所有函数之外,一般放在源文件的开始位置。
Ⅱ.输入/输出运算符:接受两个运算对象。输入运算符(>>)将左侧定为接受istream对象,右侧接受一个对象作为运算对象,上例中输入运算符左边为cin,为istream对象,右边则依次是a和b,作为输入的运算对象;相同的,输出运算符(<<)将左侧作为ostream对象的接受,右边的运算对象为要打印的值,上例中输出运算符左边为cout,为ostream对象,右边则依次是"The sum of ",a等作为输出的运算对象。
其中,上例中第一个cout,输出的是"Please enter two numbers: ",向用户打印一个提示性消息,这个消息是一个字符串字面值常量(string literal),双引号之间的文本被打印到标准输出。
Ⅲ.操纵符:endl,效果:结束当前行并将与设备相关联的缓冲区的内容刷到设备中,从而保证到现在为止程序产生的所有输出都真正写入输出流,而不是仅停留在内存中等待输入流。
注释往往用来用来概述算法或解释晦涩难懂的代码,而编译器则会忽略注释,所以注释不会对程序的行为和性能产生任何影响。
1.单行:单行注释以双斜线开始(//)以换行符结束,双斜线以后的内容编译器忽略,双斜线与换行符内部可包含额外文本,包括多余的双斜线;
2.多行:多行注释块以/*和*/为界定符,注释以/*开始,以*/结束。与单行相似的,界定符内部可以放多余的文本编译器会忽略,而此类型的注释跨越行性是可以但非必须的,注释多行时,内部的多行文本都属于此注释块的注释。另外的,我们在使用多行注释块时最好能显式指出代码属于该注释块,因此我们可以在注释块内的每一行开始处加*.
//单行注释中嵌套单行注释测试//第二个单行注释后的内容是否能输出
/*
多行注释中嵌套多行注释的测试
*多行注释中的第二行/*
*多行注释中*/的第三行
*/
//单行注释中嵌套多行注释的测试/*注释块中的文本是否能输出*/
/*
*多行注释嵌套单行注释的测试
* 第二行//
* 第三行
*/
显然,由上述代码可以得出:单行注释嵌套单行注释,单行注释嵌套多行注释以及多行注释嵌套单行注释时编译器均可正常忽略,而当多行注释嵌套渡航注释时编译器未能完全忽略,此时编译器会报错。
while (condition)
statement;
交替检测while语句的condition条件和关联语句statement,直到condition为假时停止。其中,condition为while语句判断条件产生真假的表达式,condition为真时执行statement,继而继续检测condition;condition为假时停止执行statement。一旦停止执行statemen跳出while循环,继续执行while语句之后的语句,然后执行return语句完成main程序。
例题:求1~10这10个数的和
#include
int main()
{
int sum = 0, a = 1;
while(a <= 10){
sum += a;
std::cout << sum << " ";//这句用于输出每个sum值,也可注释掉直接输出总和sum
++a;
}
std::cout << sum << std::endl;
return 0;
55
思路:1.定义一个初始变量和sum=0,a=1为初始化十个数字的值;2.while的condition条件为a大于等于1小于等于10的整数,只要a满足条件即可执行sum+=a,实现a加入sum的操作;3.我们让a从1自增到10,使用的是前缀递增运算符(++),即++a<==>a=a+1;3.while的statement语句则是复合赋值运算符(+=),对于本例来说本质是一个加法与赋值法的结合,sum+=a<==>sum=sum+a。相似的,我们可以想到,前缀递减运算符(--)和复合赋值运算符的其他种类如(-=,*=,/=,%=)。
简化递增变量模式的代码
求-100到100的整数和
#include
int main(){
int sum = 0;
for(int a = -100 ; a <= 100 ; ++a){
sum += a;
}
std::cout << sum << std::endl;
return 0;
0
上述代码仅仅实现了已知数量的数值求和(如1~10的10个数以及-100~100的200个数求和),但很多时候我们需要解决未知个数的数值运算,所以,我们在本章探讨关于未知个数的数值求和。与已知个数的区别在于不断读取数据直至没有新的输入为止:
#include
int main(){
int sum = 0 , value = 0;//求和值初始化为0,输入值初始化为0
while(std::cin >> value)//输入值,条件为非空
sum += value;//操作为求和
std::cout << " The sum is: " << sum << std::endl;
return 0;
}
1 23 456 7890 12345 678901^Z
The sum is: 699616
其中,我们用Ctrl+Z键作为文件结束符(end-of-file)实现数据输入结束。
if语句可以用来支持条件执行,举个例子,我们可以统计输入的每个值连续出现的次数。
#include
int main(){
int currval = 0, val = 0;//前者为正在处理的数据,后者为读入的新值
if(std::cin >> currval){//读取第一个数,确保可以运行
int cnt = 1;//保存正在处理的当前值的个数
while(std::cin >> val){//读取剩余数
if(val == currval){//相同则加1
cnt += 1;//++cnt;
}
else{//不同则输出次数
std::cout << currval << " occurs " << cnt << " times " << std::endl;
currval = val;//将currval置为新的val
cnt = 1;//重置cnt计数
}
}//内层while结束循环
std::cout << currval << " occurs " << cnt << " times " << std::endl;
}//外层for循环结束
return 0;
}
3 3 3 2 2 9 9 9 9 45 45 3 3 3 3 1 1 1 0 0^Z
3 occurs 3 times
2 occurs 2 times
9 occurs 4 times
45 occurs 2 times
3 occurs 4 times
1 occurs 3 times
0 occurs 2 times
1.在C++中,我们通过唯一的C++特性——类(class)来定义自己的数据结构实现数据的存储与各方面的应用。
2.定义类需要做的事情
Ⅰ.类名是什么
Ⅱ.在哪里定义的
Ⅲ.支持什么操作
我们拿《C++Primer第五版》中的图书销售举例,代码如下:
#include
#include "Sales_item.h"
int main(){
Sales_item total;//保存和的变量
if(std::cin >> total){//读入第一条数据
Sales_item trans;//保存下一条记录的数据
while(std::cin >> trans){//读入剩下的数据变量
if(total.isbn() == trans.isbn())
total += trans;//更新图书销售额
else{//打印前一本书的结果
std::cout <<< total << std::endl;
}
}
std::cout << total << std::endl;
}
else{//无输入报错
std::cerr << "No Data?!" << std::endl;
return -1;//Fail
}
return 0;
}