5.循环和关系表达式 5.1 C++语法将整个 for循环看作一条语句. 5.2 循环只执行一次初始化 . 5.3 执行测试条件: 可以是任意表达式. C++将把运算结果转换为bool类型: 非零转换为true , 0转换为false. 这种变化不会导致不兼容问题--因 为C++会在需要整数值的地方将true/flase 分别转换 为1/0; 在需要 bool值的地方 将0 转换为false ,非零转换为true. 5.4 for循环是入口条件循 环--进入每轮循环前都会计算测试表达式的值. 5.5 编码习惯: for 和 '(' 之间加一空格; 而函数名与括号 之间不加空格. 从视觉上强化控制语句和函数调用 之间的区 别. 5.6 表达式: C++表达式是值或与操作符 的组合,每个C++表达式都有值. eg: a = 3 表达式的值为 3; 因而 允许 这样: a = b =c =0; //从右向左: c = 0的值为0, 所以变成: a = b = 0; ...... x< y 表达式的值为: true or false . cout< < x< y; 将显示 1 o r 0. 可以使用 cout.setf(i os_base::boolalpha); //旧版用:ios: :boolalpha 设置一标记, cout 将显示 tru e or false. 表达式加上分号 ' ; ' 都成语句, eg: a+b; 为合法语句,只是没用 得到的结果. 语句去掉分号不一定为表达式, eg: int a; 为语句, 去掉分号则不是表达式.< br>5.7 可以在for循环初始化部分声明变量. 为局部变 量,离开循环后变量将消失. 5.8 建议: 在声明数组 和引用数组长度时(如:for循环)使用const值, 以避免 值被修改. 5.9 省略for循环中测试表达式,将认为 是 true. 如: for(; ; ){} 测试表达是为tru e 程序不会终止. 5.10 语句块 { } . 代码 中可以用一对花括号 {} 将一段代码括起. 在里面声明的变量 的作用范围只是其所在语句块. 5.11 逗好操作符 可 以将多个表达式用 ',' 分割放在一个for循环表达式中 i = 20, j = 2 * i //逗 好操作符 确保先计算第一个表达式,以后逐个计算; 而整体表达 式的值为最后一个表达式的值. 还有 (17 ,40) 表达式的值为 40. 5.12 花絮: < br> ** for (cin> > x; x == 0; cin> > x){} //接受 输入,直到输入的是 数值: 0. *** 上式中 '==' 若误写为 '=' 关系运算 将变为 赋值 运算. 如运算符 右边的值非零,则测试表达式的值为true, 循环将不会终止. 5.13 while 循环 *** delay 一例: #incl ude< ctime> describes clo ck() function, clock_t type clock_t delay = secs * CLOCKS_PER_SEC; //defined in ctime clock_t start = clock(); //get system clock. while (clock() - sta rt < delay); // waiting for secs seconds. ***类型别名: clo ck_t 作为clock()返回类型的别名,编译器将把它转换 为long,ynsigned int 或适合系统的其它类型. 建立方式: i: 使用预处理器 . #define clock_t unsigned i nt ii: 用关键字typedef 创建 别名: 将别名声明成为所需的类型,然后在前面加 typede f. 区别: typedef不会创建新类 型,只为已有的类型建一新名称. 预处理则 使用替换的方法, 有如下的缺点: eg: #define F_P fl oat * F_P pa,pb;
编译器将其替换为: float * pa,pb; //pb 不是如你所愿地声明为 float* ,而只是 float类型 . 5.14 do while 循环, 为出口条件循环 . 5.15 文本输入. *** cin . 发送给cin 的输入被缓冲,只有按回车键后,它的输入的 内容才被发送给程序. 而且cin 将忽略空白符. *** cin.get(ch) 输入仍被缓冲,不过接 收每个字符.输入的字符将被赋值给ch. ch必须为cha r类型,不能为int cin.get(ch) 参数为引用: char & ,所以可以修改 ch, 否则参数需传入 & ch. #*# cin .get(ch) 用于字符输入时返回 istream类对象, 并转换为bool类型 true; 到达文件尾时,函数返回i stream类对象,并转换为bool类型 false. #*# int ch = cin.get() 用于字 符输入时返回 int类型的字符编码; 达到文件尾时函数返回 EOF, 多数系统中被定义为 '-1'. eg : while ((ch = cin.get()) != EOF){} whie (cin.ge t(ch)){} cin.put(ch); // ch若为 int类型 需要转换为char 类型. 6. 分支语句和逻辑操作符 6.1 花絮 * if (3 == num)... // 如果错写 为 3=num, 编译器会报错, 有些聪明的编译器会识别 i f (num=3) 的错误. * (17 < age < 3 9) 等价于 ((17 < ; age) < 39) * boo l a,b; a & & b, 若 a 为false, 则表达式 a & & b 将不 判断 b的值. * and, or, no t 在c++中为保留字; 但在C 语言中非保留字, 要使用 需加头文件: < iso646.h>
6. 2 cctype 字符函数库 对所有字符编码通用. 有函数: isalpha9char) 非char返回0 . ispunct(ch ar) 输入为标点符号 返回true. isspace(), isdigits( ) ...... 6.3 switch 语句 标签都 是整数常量表达式. 6.4 数字输入. e g: int apple[10]; c har ch;
while (ch !='Q' & & cin> > apple[i] ) //cin> > apple[i] 若输入 非数字,则返回istream类对象,并转换为bool型 fa lse. while (!(cin> > ap ple[i])) { cin.clea r(); // 如果输入非数字,cin返回 false, 并设置失效位,输入被阻断. 进入循环, 用cin.clear () 恢复输入 while (cin.get () != '\n') continue; //因为输入的 非数字还留在输入队列,所以把它们清除,它们以 '\n'结束< br>} |