1.1编写一个简单的c++程序
int main()
{
return 0;
}
一个函数的定义包含四部分:返回类型(return type),函数名(function name),一个括号包围的**形参列表(parameter list)**以及函数体(function个body)。
类型: 程序设计最基本的元素之一,一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算。
1.2初始输入输出
-----------c++语言并未定义任何输入输出语句,取而代之,包含了一个全面的标准库来提供IO机制。
-----------iostream库包含了istream和ostream两个基础类型,分别表示输入流和输出流。一个流就是一个字符序列,是从IO设备独处或写入IO设备的。术语流想要表达的是,随着时间的推移,字符是顺序生成或消耗的。
-----------标准库定义了4个IO对象。标准输入对象cin属于istream流。标准输出对象cout输入ostream流。其他两个ostream对象cerr和clog。通常用cerr来输出警告和错误消息,因此被称为标准错误。而clog用来输出程序运行时的一些错误。
#include<iostream>
using namespace std;
int main()
{
cout<<"Enter two numbers:"<<endl;
int v1=0,v2=0;
cin>>v1>>v2;
cout<<"The sum of"<<v1<<"and"<<v2
<<"is"<<v1+v2<<endl;
return 0;
}
这个程序开始时会在用户屏幕打印
Enter two numbers:
然后等待用户输入,如果用户输入
3 7
然后用户键入一个回车,则程序产生如下输出:
The sum of 3 and 7 is 10
向流输入数据
main的函数体的第一条数据执行了一条表达式。在c++中,一个表达式产生一个计算结果,它有一个或多个运算对象和一个运算符组成。这条语句中的表达式使用了<<输出运算符在标准输出上打印消息:
cout<<“Enter two numbers:”<<endl;
<< 运算接受两个对象:左侧的运算对象必须是一个ostream对象右侧的对象是要打印的值。此运算符将给定的值写到给定的ostream对象中。
cout<<“Enter two numbers:”;
cout<<endl;
第一个运算符给用户打印了一条消息。这个消息是一个字符串字面值常量,使用一对双引号包围的字符序列。在双引号之间的文本被打印到标准输出。
第二个运算符打印endl,这是一个被称为操纵符的特殊值。写入endl的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入流。
从流读入数据
先定义两个变量
int v1=0,v2=0;
我们将这两个变量定义为int型,并初始化为0。初始化就是在创建变量的同事为它赋予一个值。
cin>>v1>>v2;
它读入数据。输入运算符>>与输出运算符类似,它接受一个istream作为其左侧运算对象,接受一个对象作为其右侧运算对象。它从给定的istream读入数据,并存入给此对象。
1.3注释简介
c++有两种注释,单行注释//和界定符注释/**/。
单行注释以//开始以换行符结束。
界定符以/*开始,以后面的结束,中间可以包含包括换行符的任意内容。
-------注释界定符可以放置于任何允许放置制表符,空格符或换行符的地方。
-------注释界定符可以跨越程序中的多行。当跨越多行时最好能显示指出其内部的程序行都是属于多行注释的一部分。我们采用的风格是,注释被的每行都以一个星号开头,从而指出整个范围都是多行注释的一部分。
#include<iostream>
using namespace std;
/*
*简单主函数:
*读取两个数,求他们的和
*/
int main()
{
//提示用户输入两个数
cout<<"Enter two numbers :"<<endl;
int v1=0,v2=0;//保存我们输入数据的变量
cin>>v1>>v2;//读入输入数据
cout<<"The sum of"<<v1<<"and"<<v2
<<"is"<<v1+v2<<endl;
return 0;
}
注释界定符不能嵌套
/*
*注释对/* */不能嵌套
*“不能嵌套”会被认为是源码
*像剩余程序一样处理
*/
int main()
{
return 0;
}
///*
//*单行注释中的任何内容都会被忽略
//*包括嵌套的注释对也会一样被忽略
//*/
1.4控制流
-------------1.4.1while语句
while语句反复执行一段代码,直到给定条件为假时停止。
#include<iostream>
using namespace std
int main()
{
int sum=0,val=1;
while(val<=10)//只要val的值小于10就会持续执行
{
sum+=val;//将sum+val赋给sum
++val;//将val加1
}
cout<<"Sum of 1 to 10 inclusive is"
<<sum<<endl;
return 0;
}
编译并执行这个程序,它会打印出
Sum of 1 to 10 inclusive is 55;
while的语句形式是
while(condition)
statement
while语句执行的过程是交替地检测条件condition和执行关联的语句statement,直至condition为假时停止。所谓条件(condition)就是产生真或假的结果的表达式。只要condition为真,statement就会被执行。当执行完statement,会再此检测condition。如果condition仍为真,statement再次被执行。while语句持续地交替检测condition和执行statement,直至从内地同为假为止。
---------1.4.2 for语句
#include<iostream>
using namespace std
void main()
{
int sum=0;
//从1加到10;
for (int val=1;val<=10;++val)
sum+=val;
cout<<"Sum of 1 to 10 inclusive is"
<<sum<<endl;
}
for(int val=0;val<=10;val++)
每个for语句包含两个部分: 循环头和循环体。循环头控制循环体的执行次数,它由三部分组成:一个初始化语句(init-statement),一个循环条件(condition),以及一个表达式(expression)。
本例子中初始化语句:int val=1;
循环条件:val<=10
表达式:++val
for语句的执行总流程:
1.创建变量val,将其初始化为1.
2.检测val是否小于10.若检测成功,执行for循环体。若失败,退出循环继续执行for循环体之后的第一条语句。
3.将val的值增加1。
4.重复第二步中的条件检测,只要条件为真就继续执行剩余步骤。
--------1.4.3 读取数量不不定的输入数据
#include<iostream>
using namespace std;
void main()
{
int sum=0,value=0;
while(cin>>value)
sun+=value;
cout<<"Sum is:"<<sum<<endl;
}
如果我们输入 3 4 5 6
则程序输出 18
while的循环条件的求值就是执行表达式
cin>>value
当我们使用一个istream对象作为条件时,其效果是检测流的状态。如果流是有效的,即流为遇到错误,那么检测成功。当遇到文件结束符或遇到一个无效输入是(列如输入的不是一个整数),istream对象的状态会变为无效。处于无效状态的istream对象会是条件变为假。
因此,我们的while循环会一直星星知道遇到文件结束符(或输入错误)。
在Windows系统中文件结束符是敲 CTRL+Z。
在UNIX系统和Mac OSX系统中文件结束符是CTRL+D。
---------1.4.4 if语句
#include<iostream>
using namespace std;
void main()
{
int currval=0,val=0;//currval是我们正在统计的数;我们将读入的新值存入val
if(cin>>currval){//读入第一个数,并确保数据可以处理
int cnt=1;//保存当前正在处理的值的个数
while(cin>>val){//读取剩余的数
if(val==currval)//如果值相同
++cnt;//将cnt加1
else
{
cout<<currval<<"occurs"<<cnt<<"times"<<endl;
currval=val;
cnt=1;
}
}
cout<<currval<<"occurs"<<cnt<<"times"<<endl;//打印文件中最后一个值的个数
}
如果我们输入 42 42 42 42 42 55 55 62 100 100 100
则输入应该是:
42 occurs 5 times
55 occurs 2 times
62 occurs 1 tmes
100 occurs 3 times
if(cin>>currval) {
/**/
}
保证输入不为空。与while语句类似。if也对一个条件进行求值。第一条if语句的条件是读取一个数值存入currval中。如果读取成功,则条件为真,我们继续执行条件之后的语句块。该语句以左花括号开始,以return语句之前的右花括号结束。
if(val==vurrval)
++cnt;
else
{
cout<<currval<<"occurs"<<cnt<<"times"<<endl;
currval=val;
cnt=1;
}
这条语句使用了相等运算符来检测val是否等于currval。如果是,我们执行紧跟在条件之后的语句。这条语句将从那天增加1,表明我们再次看到了currval。
如果条件为假,即val不等于currval。则执行else之后的语句。这条语句是一个由一条输出语句和两条赋值语句组成的语句块。输出语句打印我们刚刚统计完的值的出现次数。赋值语句将cnt重置未1,将currval充值未刚刚读入的值val。
1.5 类简介
在c++中我们通过定义一个**类(class)**来定义自己的数据结构。
class Sale_item
{
}
1.5.1Sale_item类
Sale_item类的作用是表示一本书的总销售额,售出册数和平均价格,我们现在不关心这些数据如何存储,如何计算。为了使用一个类,我们不必关心它是如何实现的,只需知道类对象可以执行什么操作。
每个类时机上都星艺了一个新的类型,其类型名就是类名。因此,我们的Sale_item类定义了一个名为Sale_item的类型。与内置类型一样。我们可以定义类类型的变量。当我们写下如下语句
Sale_item item;
是想表达item是一个Sale_item类型的对象。
读写Sale_item
#include<iostream>
using namespace std;
#include"Sale_item.h"
int main()
{
Sale_item book;
cin>>book;
cout<<book<<endl;
}
这里先不说明类,只是把类这一数据类型提出来
1.5.2 初始成员函数
#include<iostream>
using namespace std;
#include"Sale_item.h"
int main()
{
Sale_item item1,iitem2;
cin>>item1>>item2;
if(item1.isbn()==item2.isbn())
{
cout<<item1+item2<<endl;
return 0;
}else
{
cerr<<"Date must refer to same ISBN"<<endl;
return -1;
}
}
什么是成员函数?
这个if语句的检测条件
item1.isbn()==item2.isbn()
调用名为isbn的成员函数。成员函数是定义为类的一部分函数,有时也被称为方法。这里不继续深入解释。