zoukankan      html  css  js  c++  java
  • C++ Primer Plus 笔记第五章

     

    for循环的组成部分:

       1. 设置初始值。

       2. 执行测试,看看循环是否应当继续进行。

       3. 执行循环操作。

       4. 更新用于测试的值。

    表达式和语句:

       表达式:任何值和任何有效的值和操作符的组合都是表达式。每个C++表达式都有值。

       语句:所有表达式加上分号,都可以成为语句。有的没有意义。

    副作用和顺序点:

       副作用:指在计算表达式时对某些东西(存储在变量中的值)进行了修改。

       顺序点:程序执行过程中的一个点,进入下一步之前将确保对所有副作用都进行了评估。

    前缀和后缀格式:

    1 for (n = lim; n > 0; --n)
      . . .;
    2 for (n = lim; n > 0; n--)
      . . .;

       因为表达式(--n和n--)中的值均为被使用,只存在副作用。两条语句最终效果相同。

       执行效率上有略微的差别,前缀版本效率较高。

    递增/递减操作符和指针:

       前缀递增、前缀递减和解除引用操作符的优先级相同,以从右向左的方式进行结合;

       后缀递增和后缀递减的优先级高于前缀操作符 ,从左到右的方式结合;

    double arr[5] = {21.1, 32.8, 23.4, 45.2, 37.4};
    double *pt = arr;           // pt指向arr[0],to 21.1
    
    ++pt;              // pt指向arr[1],to 32.8    
    
    *++pt;             // *(++pt) 23.4
    
    ++*pt;             // ++(*pt) 24.4
    
    (*pt)++;            // 25.4 pt仍指向arr[2]
    
    *pt++;             // 后缀操作符'++'的优先级更高,所以'++'的操作符用于pt,*pt++的值为25.4,pt指向arr[3]的地址

    组合赋值操作符

       eg:   +=  /=  -=  *= :

        将结果赋给左侧操作数

    关系表达式:

       C++提供6种关系操作符来对数字、字符(ASCII码)和string类对象进行比较(不能用于C-风格字符串):

        操作符      <       <=        ==     >       >=        !=            

        含义         小于        小于或等于    等于     大于       大于或等于     不等于

    C-风格字符串比较:

       strcmp() 函数接收两个字符串地址作为参数,参数可以是指针、字符串常量或者字符数组名。

         strcmp(a,b) 头文件cstring:

          如果两个字符串相同,该函数返回零;

          如果a > b,返回一个正数;

          如果a < b,返回负数  

        char字符变量可以使用递增操作符和递减操作符,因为char类型实际上是整型。(ch++,ch--)

    比较string类字符串:

       sting类字符串,类的设计能使用关系操作符进行比较;

    While循环:

       while循环没有初始化和更新部分的for循环,只有测试条件和循环条件:

        while ( test_condition )

          body

       与for循环一样,while循环也是一种入口条件循环

    for与while:

       for与while本质相同;

       使用for循环来为循环计数,for循环允许将所有相关信息—初始值、终止值和更新计数器放在一个地方;

       在无法预知循环将执行的次数时,程序员常使用while循环

    等待一段时间:编写延时循环

       clock():返回程序开始执行后所用的系统时间,

        问题一:clock() 返回的时间不一定是秒;

        问题二:函数的返回类型下某些系统上可能是long,unsigned long或其他类型

       头文件ctime提供了这些问题的解决方法:

        解决问题一:定义符号常量:CLOCK_PER_SEC  每秒钟包含的系统时间单位数

        解决问题二:将clock_t作为clock() 返回类型别名,把变量声明为clock_t

       waiting.cpp

     1 #include <iostream>
     2 #include <ctime>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     cout << "Enter the delay time, in seconds: ";
     8     float secs;
     9     cin >> secs;            
    10     clock_t delay = secs * CLOCKS_PER_SEC;    
    11     cout << "staringa
    ";
    12     clock_t start = clock();
    13     while(clock() - start < delay)
    14      .
    15      .
    16      .
    17     cout << "done a
    ";
    18     return 0;
    19 }

       改程序以系统时间为单位(而不是秒)计算延迟时间,避免了在每轮循环中将系统时间转换为秒

    类型别名:

       C++为类型创建别名的方式有两种:

       使用预处理器: #define BYTE char            // 将BYTE声明为char类型别名

       使用typedef:    typedef char byte;  

        通用格式:typedef typeName aliasName;  // 将aliasName声明为typeName类型的别名 

             typedef char* byte_pointer;       // 将byte_pointer声明为 char指针别名

       typedef是一种更加的选择——有时候也是唯一的选择

       注意:typedef 不会创建新类型,只是为已有的类型创建别名

    do while循环:

       do while 是出口条件循环,先执行循环体,再判定测试表达式,决定是否继续执行循环;

        eg:

          do

          {

            cin >> n;

           } while( n != 7);

         程序必须先进入循环体获得输入。

    循环和文本读取:

       使用原始的cin进行输入:

       程序清单    testin1.cpp

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     char ch;
     7     int count = 0;
     8     cout << "Enter characters; enter # to quit: 
    ";
     9     cin >> ch;
    10     while( ch != '#')
    11     {
    12         cout << ch;
    13         ++count;
    14         cin >> ch;
    15     }
    16     cout << endl << count << "characters read
    ";
    17     return 0;
    18 }

         cin在读取char值时(cin >> ch),与读取其他基本类型一样,忽略空格和换行符;

         操作系统回显输入:see ken run#really fast  <Enter>;

         测试程序回显输入:seekenrun;

          发送给cin的输入被缓冲,回车后,输入内容被发送给程序

    使用cin.get(char)进行补救:

       字符读取程序要检查每个字符,包括空格、制表符和换行符。cin所属的iostream类中包含成员函数cin.get (ch) 读取输入中的下一个字符赋给变量ch;

       替换 textin1.cpp 中 cin >> ch :

       

     1 #include<iostream>
     2 using namespace std;
     3  
     4  int main()
     5 {
     6      char ch;
     7      int count = 0;
     8      cout << "Enter characters; enter # to quit: 
    ";
     9      cin.get(ch);
    10      while( ch != '#')
    11      {
    12          cout << ch;
    13          ++count;
    14          cin.get(ch);
    15      }
    16      cout << endl << count << "characters read
    ";
    17      return 0;
    18 }

        头文件 iostream 将 cin.get (ch) 函数原型的参数声明为引用类型,因此该函数可以修改其参数的值

    cin.get 函数重载:

       C++支持被称为函数重载的OOP特性——允许创建多个同名函数,参数列表不同

       cin.get ( name, ArSize ):编译器使用接受参数 char* 和 int 版本;

       cin.get (ch):编译器使用接收一个参数 char 版本 ,返回一个cin对象; cin.get(ch1) .get(ch2);

       cin.get():不接收任何参数的成员函数返回输入中的下一个字符,ch = cin.get (),将字符编码作为 int 值返回 

    文件尾条件EOF:

       while ( cin.fail () == false )             // 检测EOF

       常见的字符输入做法:

        cin.get (ch);

        while ( cin.fail() == false)  or  while ( !cin.fail() )         or   while ( cin.get( ch) )

        {

          .  .  . 

          cin.get ( ch );

        } 

       cin.get( char ) 返回值是一个cin对象,iostream类提供一个将istream对象转换为bool值的函数

      

       

       

  • 相关阅读:
    Account group in ERP and its mapping relationship with CRM partner group
    错误消息Number not in interval XXX when downloading
    错误消息Form of address 0001 not designated for organization
    Algorithm类介绍(core)
    梯度下降与随机梯度下降
    反思
    绘图: matplotlib核心剖析
    ORB
    SIFT
    Harris角点
  • 原文地址:https://www.cnblogs.com/kidycharon/p/9660407.html
Copyright © 2011-2022 走看看