【C++】第5章 循环和关系表达式 知识总结

来源:互联网 发布:安全知识网络竞赛答题 编辑:程序博客网 时间:2024/05/19 09:16

《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},    };