《C++ Primer Plus》第5章知识点总结
for循环
for(initialization; test-expression; update-expression)
body
语句:age = 100;
表达式:age = 100
对于 for( int i=0 ;i<5 ;i++),这种语句c语言不行,c++可以
C:for (expression; expression; expression)
statement
C++:for (for-init-statement condition; expression)
statement
逗号运算符花絮
(1)先确保计算第一个表达式,然后计算第二个表达式,比如 i=20 , j=2*i 这个表达式是安全的
(2)逗号表达式的值是第二部分的值。例如,上述表达式的值为40,因为 j=2*i 的值为40
(3)在所有运算符中,逗号运算符的优先级是最低的。例如 cata=17,240;被解释为(cata=17),240;也就是说,将cata设置为17,240不起作用。然而由于括号的优先级最高,下面的表达式将 cata 设置为240——逗号右侧的表达式值
cats=(17,240);
(1)等于运算符:==
musicians==4,该表达式的值为true或false
(2)赋值运算符:=
musicians=4,该表达式的将4赋给musicians
检测相等或排列顺序
strcmp():测试C-风格字符串是否相等(根据字母的排列顺序来检测)(C风格就是char a[50]这样的字符串)
(1)若str1和str2相等,则下面的表达式为true
strcmp(str1,str2)==0
(2)如果str1和str2不相等,则下面的表达式为true
strcmp(str1,str2)!=0
strcmp(str1,str2)
(3)如果str1在str2的前面,则下面的表达式为true
strcmp(str1,str2)<0
(4)如果str1在str2的后面,则下面的表达式为true
strcmp(str1,str2)>0
那么比较string类型的字符串在c++更简单,不用strcmp,直接用关系运算符
比如:word=="mate" 这样
while循环
while(test-condition)
body
等待一段时间:编写延时循环
long wait=0;
while(wait<10000)
wait++;
头文件ctime,首先,定义了一个符号符号常量——CLOCKS_PER_SEC,该常量等于每秒钟包含的系统时间单位数。因此,将系统时间除以这个值,可以得到秒数,或者将秒数乘以CLOCK_PER_SEC,可以得到以系统时间单位为单位的时间。其次,ctime将clock_t作为clock()返回类型的别名,这意味着可以将变量声明为colck_t类型,编译器把它转换为long、unsigned int或适合系统的其他类型。下面是一个例子展示如何使用clock()和头文件ctime
#include <iostream>
#include <ctime>
int main()
{
using namespace std;
cout<<"Enter the delay time,in seconds: ";
float secs;
cin>>secs;
clock_t delay=secs*CLOCKS_PER_SEC;
cout<<"starting\n";
clock_t start=clock();
while(clock()-start<delay)
;
cout<<"done \n";
return 0;
}
(1)#define BYTE char
这表示,预处理器将在编译程序时用char替代所有的BYTE,从而使BYTE称为char的别名
(2)typedef char byte;
下面时通用格式:typedef typeName aliasName
do while循环
do
body
while(test - expression);
循环和文本输入
(1)使用原始的cin进行输入
如果程序要使用循环来读取来自键盘的文本输入,则必须由办法知道何时停止读取。一种办法是选择某个特殊字符——有时被称为哨兵字符,将其作为停止标志。下面是一个例子:输入字符,当读取到#时停止输入
#include <iostream>
int main()
{
using namespace std;
char ch;
int count=0;
cout<<"Enter characters; enter # to quit: \n";
cin>>ch;
while(ch!='#')
{
cout<<ch;
++count;
cin>>ch;
}
cout<<endl<<count<<" characters read\n";
return 0;
}
如果读取的第一个字符不是#,则程序进入该循环,显示字符,增加计数,然后读取下一个字符。循环体中的最后一步是极为重要的,没有这一步,循环将反复处理第一个输入字符,一直进行下去。有了这一步后,程序就可以处理到下一个字符。
但是存在一个问题,就是本代码如果输入的字符有空格,那么在输出时会省略空格。原因在cin。读取char值时,与读取其他基本类型一样,cin将忽略空格和换行符。下面是另一种模式可以补救这一点
(2)使用cin.get(char)进行补救通常,逐个字符读取输入的程序需要检查每个字符,包括空格、制表符和换行符。成员函数cin.get(ch)读取输入中的下一个字符(即使它时空格),并将其赋给变量ch。下面是一个上面代码修改之后的例子
#include <iostream>
int main()
{
using namespace std;
char ch;
int count=0;
cout<<"Enter characters; enter # to quit: \n";
cin.get(ch);
while(ch!='#')
{
cout<<ch;
++count;
cin.get(ch);
}
cout<<endl<<count<<" characters read\n";
return 0;
}
(3)使用哪一个cin.get()cin.get()可以有多个版本,因为C++支持被称为函数重载的OOP特性。函数重载允许创建多个同名函数,条件是他们的参数列表不同,下面时两个例子
①cin.get():指的是不接受任何参数的版本
②cin.get(name,ArSize):数组名name(字符串(char*类型)的地址)和ArSize(int类型的整数)(机主,数组名是其第一个元素的地址,因此字符数组名的类型为char*)
二维数组
int maxtemps[4][5];//声明一个二维数组
int maxtemps[4][5]=//声明一个二维数组并进行初始化
{
{96,100,87,101,105},
{96,98,91,107,104},
{97,101,93,108,107},
{98,103,95,109,108},
};