C++ Primer 笔记三

第五章 循环和关系表达式

第五章的主要内容:

①for循环 ②表达式和语句 ③递增和递减操作符:++和-- ④组合赋值操作符 ⑤复合语句(语句块)⑥逗号操作符 ⑦关系操作符 ⑧while循环 ⑨typedef工具 ⑩get()字符输入方法 ⑾文件尾条件 ⑿嵌套循环和二维数组

for循环:其中的判断表达式都能转换成bool型,如判断表达式为i,若i=1为真,若i=0为假,而所有的表达式也都可以转化成bool类型的true或者false类型;c++表达式都是值与操作符的组合,每个c++表达式都有值。

maid=(cooks=4)+3;//在c++中可以这样做,但是不提倡这样做,这样只是为了让x=y=z=0;这样的语句存在

long a=100;cout<<a>1; //a>1这个表达式为真成数值1,他将显示一个数字1。要成为表达式就必须能确定其值。

cout.setf(ios.base::boolalpha); //将输出结果转化成bool类型,同时用true和false表示,而不是1和0

cout<<a<3; //设置以后就不显示数字0了,而是显示一个false

定义一个const值来表达数组中的元素个数是好的习惯。在声明数组和引用数组长度时,可以使用const值。

在string类的size()获得字符串中的字符数,如:string word ;cin>>word;int kk=word.size();

a++//表示先使用当前的,使用完后就加一。 ++a//表示先加一后,在使用其值。 

组合赋值操作符:有+=   -=    *=    /=     %=

复合语句(也叫语句块):单独的一对大括号就是一个语句块,在一个语句块内定义的变量到语句块外面就释放了

逗号操作符:逗号操作符的优先级是最低的。如:i=20,j=i*2;//两个语句是有先后顺序,翻过来是不行的

for(long i=0,j=10;i<j;i++,j--)//逗号操作符一般用于for循环语句中。这个循环可以将字符串中的字符反过来。   

关系表达式:<   >    <=     >=     ==     !=;

//for第二个关系表达式如果为赋值表达式则其表达式的值是true

c-风格字符串的比较:我们要用到cstring类库中strcmp()可以比较两个字符串的大小,是否相等。如果两个字符串相同则该函数返回的值为零;如果第一个字符串按字母顺序排在第二个字符串之前,则返回一个负数;如果第一个字符串按字母顺序排在第二个字符之后,则返回一个正数。char aa[20];if(aa==”nihao”)//错误,这是比较两个字符串地址。正确的比较是:if(strcmp(aa,“nihao”)==0)

string类字符串的比较:string类的比较字符串方法是比较简单的。

string str1;str1 == “nihao”;//这里比较的是两个字符串,并非比较的是内存地址。

5.3while循环

while(1);{…}//分号是一个结束语句,while是没有循环体,是一个死循环,编译时什么也不动

用whlie循环来计时:在ctime头文件中clock()可以解决计时问题。ctime提供了以个符号常量clocks_per_sec,该常量等于每秒钟包含的系统时间单位数。将系统时间除以这个值将得到秒数,将秒数除以这个变量可以得到以系统时间为单位的时间。clock_t是clock()函数返回类型的别名, 我们可以将变量声明为clock_t类型,他表示long、unsignde int或系统其他类型

类型别名:c风格的预处理命令#define 和 c++的typedef都可以来创建类型别名。

#define ch char*;//在编译时所有的ch都被替换成char*,这样ch kk;中的kk就是以个char型指针。这里用char*代替ch,但是如果定义 ch a,b;则会被解析成 char *a,b;但是typedef就不会出现这个问题,它能解决更复杂的情况。

typedef char* ch;//我们也可以这样,有时我们只能这样,这是c++风格 这里我们用char*来代替ch

do whlie循环:这种循环不如前两种,但他有他的特别用法,如让用户输入一 个数后在做判断,这个循环至少循环一次。

5.5循环文本输入

cin>>ch;// 使用原始的输入能将键盘输入的下一个字符输入到变量中,但他能将空格、换行符和制表符忽略。

cin.get(ch);//读取下一个字符,不管该字符是什么,并将其存储在ch中。其通过返回转换为false的bool值确定已达到eof

ch=cin.get();//成员函数调用cin.get()返回下一个输入字符,包括空格、换行符合制表符通过返回eof值来指出已达到eof

eof检测文件尾:eof是在文件iostream中定义的

5.6嵌套循环和二维数组

long kk[2][3]= //我们可以将其看成包含2个元素的数组,而每个元素有包含了3个long型整数的数组。

{{13,12,11},//初始化时每一行内用逗号,每一行之间用逗号,同一维数组一样要将其在最后加分号。

{15,16,18}};//可以把他们写在一行内,但作为一种风格,分行写成表格的形式,清晰也便于查找,结尾用分号

char*  kk[2]={“nihao”,//定义并初始化指针数组。初始化和普通数组一样,只不过这里的值是字符串

”haizai ba !”}; //第一个字符串的地址,而调用kk[0]时就等于调用了第一个字符串

第六章 分支语句和逻辑操作符

if语句:条件操作符合错误防范,if(3==kk)//我们这样做如果==写成=,编译器就会报错。而if(kk=3)将恒成立

6.2逻辑表达式

or操作符||:i++ <6||i>6 //如果i=10,则在比较i>6时,i会变成11,运算顺序从左向右。

and操作符&&:if(1<kk<5)//这个判断永远为1,等价于if((1<kk)<5)//1<kk的值不是0就是1,它永远小于5。

not操作符!:操作符的优先级高于所有的关系操作符和算术操作符,对表达式求反,必须用括号括起来 

逻辑and操作符的优先级高于逻辑or操作符。x!=0&&1/x>10;//如果x=0,第一个条件为假,后面的就不在判断了,避免了除零

C语言中逻辑操作符的另一种表示方式:就是用not、or、and来代替! || &&。在c语言中要加上头文件iso646.h,它们不是c语言的保留字,在c++中不能使用,它们都是C++的保留字。

6.3字符函数库cctype

该函数库中的函数能够判断,输入的字符是大写,小写,数字,空格,符号等,比用逻辑操作符判断起来简单多了。  

6.4 ?:操作符:它是c++唯一一个需要两个操作符的操作符,在程序员中广受欢迎。

6.5 switch语句:当选择不是一个范围时,超过3个以上选项,一般就用switch语句,都不符合就用default:i++;break;

case ‘c’://如果case后面没有break;那么将执行下一个case,直到碰到break。case标签都必须是一个单独值,非范围

case ‘c’:hanshu();break;//这样输入大写小写都行,这也是一种解决大小写一样的一种方法

6.6break和continue

break是用在switch语句或任何循环中,他能够跳出switch或循环后面的语句出执行

continue语句用于循环中,让程序跳过循环体当前一轮循环后面的代码,并开始下一轮循环;

goto语句:一般情况下不要用goto语句,容易造成错误,一般在多层嵌套循环内层,直接跳出,用goto比用多个break简单。

posted @ 2014-08-26 11:03  tt_tt--->  阅读(104)  评论(0编辑  收藏  举报