📄 01章 编程简介.txt
字号:
常见编程错误1.7
不要把相等运算符==与赋值运算符=混淆起来。相等运算符表示等于,而赋值运算符表示取、取值或赋值。有人把相等运算符读作双等于。稍后会介绍,把相等运算符==与赋值运算符混淆起来可能不会造成明显的语法错误,但可能造成相当明显的逻辑错误。
下例用六个if语句比较用户输入的两个数。如果其中任何一个if语句的条件成立,则执行与该if相关联的输出语句。图1.14显示了这个程序和三个示例输出。
注意图1.14的程序边疆使用流读取操作输入两个整数。首先将一个值读到num1中,然后将一个值读到num2中。if语句的缩排是为了提高程序的可读性。另外,注意图1.14中每个if语句体中有一条语句。第2章将会介绍结构体中有多条语句的if 语句(将语句体放在花括号“{ }”中)。
1 // Fig.1.14:fig01_14.cpp
2 // Using if statements,relationnal
3 // operators,and equality operators
4 #include<iosream.h>
5
6 int main()
7 {
8 int num1,num2;
9
10 cout<<"Enter two integers,and I will tell you\n"
11 <<"the relationships they satisfy: ";
12 cin>>num1>>num2; // 读取两个整数
13
14 if(num1==num2)
15 cout<<num1<<" is equal to"<<num2<<endl;
16
17 if(num1!=num2)
18 cout<<num1<<" is not equal to "num2<<endl;
19
20 if(num1<num2)
21 cout<<num1<<" is less than "<<num2<<endl;
22
23 if(num1>num2)
24 cout<<num1<<" is greater than "<<num2<<endl;
25
26 if(num1<=num2)
27 cout<<num1<<" is less than or equal to "
28 <<num2<<endl;
29
30 if(num1>=num2)
31 cout<<num1<<" is greater than or equal to "
32 <<num2<<endl;
33
34 return 0; // 返回一个程序正常结束的标识
35 }
输出结果:
Enter two integers,and I will tll you
The relationships they satisfy: 3 7
3 is not equal 7
3 is less than 7
3 is less than or equal to 7
Enter two integers,and I will tell you
the relationships they satisfy:22 12
22 is not equal 12
22 is gretaer than 12
22 is greater than or equal to 12
Enter two integers,and I will tell you
the relationships they satisfy:7 7
7 is equal to 7
7 is less than or equal to 7
7 is greater than or equal to 7
图1.14 使用相等和关系运算符
编程技巧1.16
if语句中的缩排可以提高程序的可读性,突出结构体
编程技巧1.17
程序中一行只放一条语句
常见编程错误1.8
if语句的打件后面的右括号之后紧跟着分号通常是个逻辑错误(但不是语法错误)。分号使if结构体变成空的,不管打件是否为真,这个if结构都不进行任何操作。更糟糕的是,原先if结构体变成if结构后面的语句,不管条件如何总是执行,通常会使程序产生错误结果。
注意图1.14中空格的用法。在C++语言中,空白字符(如制表符、换行符和空格)通常都被编译器忽略。因此,语句中可以根据程序员的爱好加上换行符和空格,但不能用换行符和空格分隔标识符。
觉编程错误1.9
把main写成ma in是语法错误。
编程技巧1.18
长语句可以分成多行。如果一条语句要分成多行,可以在分隔列表的逗号或长表达式的运算符后面断行。如果语句要分成两行或多行,后续行可以编排。
图1.15显示了本章介绍的运算符优先级,运算符优先顺序从上向下递减。注意赋值运算符之后的所有运算符结合律均为从左向右。加法是左结合的,因此表达式x+y+z求值为(x+y)+z。赋值运算符是从右向左结合的,因此表达式x=y=0求值为x=(y=0),首先将0赋给y,然后将结果0赋给x。
运算符 结合律 类型
( ) 从左向右 括号
* / % 从左向右 乘
+ - 从左向右 加
<< >> 从左向右 流插入/读取
< <= > >= 从左向右 关系
== != 从左向右 等于
= 从右向左 赋值
图 1.15 运算符优先级和结合律
编程技巧1.19
编写包含多个运算符的表达式时要参考运算符优先级,确保表达式中的运算符按所要求的运算。如果无法确定复杂表达式中的求值顺序,可以用括号强制顺序,就像代数式中一样。注意,有些运算符(如赋值运算符)是从右向左结合的,而不是从左向右。
前面介绍了C++的许多特性,包括在屏幕上打印数据,从键盘输入数据、进行计算和作出判断。第2章利用这些知识介绍结构化编和 ,将会学到更多的编程技巧,介绍如何指定和改变语句执行顺序(称为控制流)。
1.20 新型头文件与名字空间
本节是为使用支持ANSI/ISO草案标准的编译器用户提供的。草案标准指定了许多旧式C++头文件的新名,包括iostream.h,大多数新式头文件不再用扩展名.h。图1.16改写图1.2,演示新型头文件和两种使用标准库头文件的方法。
第3行:
#include<iostream>
演示新型头文件 名语法。
第5行:
using namespace std;
指定用std名字空间(namespace),这是C++中的新特性。名字空间可以帮助程序员开发新的软件组件而不会与现有软件组件产生命名冲突。开发类库的一个问题是类和函数名可能已经使用。名字空间能为每个新软件组件保持惟一的名称。
1 // Fig. 1.16:fig01_16.cpp
2 // Using new-style header files
3 #include<iostream.h>
4
5 using namespace std;
6
7 int main()
8 {
9 cout<<"Welcom to C++!\n";
10 std::cout<<"Welwcom to C++!\n";
11
12 return 0;
13 }
输出结果:
Welcom to C++!
Welcom to C++!
图 1.16 使用新型头文件
C++草案标准中的每个头文件用名字空间std保证今后C++标准库操作的每个特性是惟一的,不会与其它程序员开发的软件组件混淆起来,程序员不能用名字空间定义新的类库。上述语句只是表示我们使用C++标准库中的软件组件,要定义自己的类库,则可以将我们的所有类和函数放在名字空间deitel中,使我们的类库与所有其它公司的类库和C++标准类库区别开来。
程序中出现"using namespace std"语句之后,就可以像第9行那样用cout对象将数值输出到标准输出流中。如果使用两个或几个类库,其中有的特
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -