fanxin

 

C++的一些细节

关于C++的一些细节[四:循环,分支语句,关系表达式,关系运算符]



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>}

posted on 2006-02-19 21:35 fanxin 阅读(123) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

留言簿

文章档案

Java

matrix

weiqin

中国JSP技术网站

搜索

最新评论