几个相同类型的变量可以在同一声明或多个声明中声明。我们可以一次只声明一个变量,但一次声明多个同类型变量更加简练。
稍后要介绍数据类型float,(定义实数,即带小数点的数,如3.4、0.0、—11.19)和char(定义字符型数据.变量char只能保存一个小写字母、一个大写字母、一个数字或一个特殊字符,如x、$、7、*等等)。
变量声明可以放在函数的任何位置,但变量声明必须放在程序使用变量之前。如果不用一条语句声明三个变量也可以分别声明。下列声明: int integer1;
可以放在下列语句之前: cin >> integerl; 下列声明:
int integer2;
可以放在下列语句之前: cin >> integer2; 下列声明: int sum;
可以放在下列语句之前:
sum = integer1 + integer2;
下列句:
cout<<\
在屏幕上打印字符串Enter first integer(b也称为字符串直接量(string literal)或直接量(literal)),将光标移到下一行开头。这个消息称为提示(prompt),提示用户进行特定操作。上述语句表示cout得到字符串“Enter first integer\\n\ 下列语句: cin>>integer1;
用输入流对象cin和流读取运算符>>取得键盘中的值。利用流读取运算符cin从标准输入流读取输入(通常是键盘输入)。上述语句表示cin提供integer1的值。
计算机执行上述语句时,等待用户输入变量integer1的值。用户输入整数值并按Enter键(或Return键),将数值发送给计算机。然后计算机将这个数(值)赋给变量integer1。程序中后面引用integer1时都使用这个值。
cout和cin流对象实现用户与计算机之间的交互。由于这个交互像对话一样,因此通常称为对话式计算(conversational computing)或交互式计算(interactive computing)。 下列语句:
cout<<\
在屏幕上打印”Enter second integer\字样,然后移到下一行的开头。这个语句提示用户进行操作。下列语句:
cin>>integer2;
从用户取得变量integer2的值。 赋值语句:
sum=integer1+integer2;
计算变量integer1和integer2的和,然后用赋值运算符(assignment operator)\将结果赋给变
-26-
量sum。这个语句表示sum取得integer1加integer2的值。大多数计算都是在赋值语句中进行的。“=”运算符和前面的“+”运算符称为二元运算符,两个操作数是integer1和integer2。而对于“=”运算符,两个操作数是sum和表达式integer1+integer2的值。 下列语句:
cout<<\
打印字符串\和变量sum的数值,加上称为流操纵算子的endl(end line的缩写)。endl输出 一个换行符,然后刷新输出缓冲区,即在一些系统中,输出暂时在机器中缓存,等缓冲区满时再打印到屏幕上,endl强制立即输出到屏幕上。
注意,上述语句输出多种不同类的值,流插入运算符知道如何输出每个数据。在一个语句中使用多个流插入运算符称为连接(concatenating)、链接(chaining)或连续使用流插入操作。这样,就不必用多条输出语句输出多个数据。
计算可以在输出语句中进行。可以将上述语句合二为一: cout<<\从而不需要变量sum。
右花括号告诉计算机到达了函数main的结尾。
C++的一个强大我就是用户可以生成自己的数据类型(详见第6章),然后可以告诉C++如何用>>和<<运算符输入或输出这种类型的值(称为运算符重载,见第8章)。
2.7 算术运算
算术运算符见图2.10,注意这里使用了许多代数中没有使用的符号。星号(*)表示乘法、百分号(%)表示求模(modulus)。图2.10所示的算术运算符都是二元运算符,即这些运算符取两个操作数。例如,表达式\包含二元运算符“+”和两个操作数integer1和integer2。
C++操作 算术运算符 代数表达式 C++表达式 加 + f+7 f+7 减 - p-c p-c 乘 * bm b*m 除 / x/y或x÷y x/y 求模 % r mod s r%s
图2.10 算术运算符
整除(即除数和被除数均为整数)取得整数结果。例如,表达式7/4得1,表达式17/5得3。注意,整除结果忽略分数部分,不用取整。
C++提供求模(modulus)运算符“%”即求得整除的余数。求模运算是个整数运算符,只能使用整数操作数。表达式x%y取得x除以y的余数,这样,7%4得3,17%5得2。后面几章将介绍求模运算符许多有趣的应用。如确定一个数是否为另一个数的倍数(确定一个数为奇数或偶数是这个问题的一个特例)。
C++中的算术运算表达式应以直线形式在计算机中输入。这样,a除以b应输入为\,使所有常量、变量和运算符放在一行中。编译器通常不接受下列代数符号: a - b
-27-
但有些特殊专业软件包支持复杂数学表达式更自然的表示方法。
C++表达式中括号的使用和代数表达式中相同。例如,要将a乘以b+c的和,可以用: a*(b+c)
C++中算术运算符的运算顺序是由运算符的优先级规则确定的,与代数中的相同:
1. 括号中的表达式先求值,程序员可以用括号指定运算顺序。括号具有最高优先级,对于嵌套括号,由内存向外层求值。
2. 乘法、除法、求模运算优先。如果表达式中有多个乘法、除法、求模运算,则从左向右求值。乘法、除法、求模的优先级相同。
3. 然后再进行加法和减法。如果表达式中有多个加法和减法,则从左向右求值。加法和减法的优先级相同。
运算符优先级保证C++按正确顺序采用运算符。从左向右求值指的是运算符的结合律(associativity),也有一些运算符结合律是从右向左。图2.11总结 了运算符优先级规则,引入其它C++运算符时,这个表可以扩充,详细的运算符优先级请参见附录。
运算符 运算 求值顺序
( ) 括号 最先求值,如果有嵌套括号,则先求最内层表达式的值,如果 同一层有几对括号,则从左向右求值。 *、/、或% 乘、除、求模 其次求值。如果有多个,则从左向右求值。 +或- 加、减 最后求值。如要有多个,则从左向右求值。
图 2.11 算术运算符优先级
下面用几个表达式说明运算符优先级规则。每个例子都列出代数表达式和对应的C+表达式。 下例求五个值的算术平均值: 代数: m?a?b?c?d?e
5
C++: m = (a+b+c+d+e)/5;
括号是必须的,因为作法的优先级比加法高,要把整个和(a+b+c+d+e)除以5,如果不加括号,则a+b+c+d+e/5的取值为: a+b+c+d+(e/5) 下例是直线的方程: 代数: y = mx+b C++: y = m*x+b;
不需要括号,乘法优先于加法,因此先乘后加。 下列包含模(%)、乘、除、加、减运算: 代数: z = pr%q+w/x-y
C++: z = p * r % q + w / x - y; ⑥ ① ② ④ ③ ⑤
语句下面的圆圈数字表示C++采用运算符的顺序。乘法、求模和除法首先从左向右求值(结合律为从左向右)因为它们的优先级高于加法和减法。然后进行加法和减法运算,也是从左向右求值。
-28-
并不是有多对括号的表达式都包含嵌套括号。例如下列表达式不包含嵌套括号: a * (b+c)+c*(d+e) 这些括号在同一层。
要更好地了解运算符优先级规则,考虑二次多项式的求值: y = a * x * x + b * x + c;
⑥ ① ② ④ ③ ⑤
语句下面的圆圈数字表示C++采用运算符的顺序。C++中没有指数运算符,因此我们把x2表示为x*x,稍后会介绍标准库函数pow(数)。由于pow所需要的数据类型有一些特殊情况,因此放第3章再介绍。
假设变量a、b、c、x初始化如下:a=2,b=3,c=7和x=5。图2.12演示了上述二次多项式的运算符优先级。
上述赋值语句可以加上多余的括号,使代码更清晰: y=(a*x*x)+(b*x)+c;
2.8 判断:相等与关系运算符
本节介绍简单的C++ if结构,使程序根据某些条件的真假做出判断。如果条件符合,即为真(true),则执行if结构体的语句;如果不符合,即条件为假(false),则不执行语句,稍后将举例说明。
if结构中的条件可以用相等运算符(equality operator)和关系运算符(relational operator)表示,如图2.13 关系运算符具有相同的优先级,结合律为从左向右。相等运算符的优先级也相同,但低于关系运算符的优先级,结合律也为从左向右。
标准代数相等与关系运算符 C++相等与关系运算符 C++条件举例 C++条件含义 = == x==y x等于y ≠ != x!=y x不等于y 关系运算符
> > x>y x大于y < < x ≥ >= x>=y x大于或等于y ≤ <= x<=y x小于或等于y 图 2.13 相等与关系运算符 下例用六个if语句比较用户输入的两个数。如果其中任何一个if语句的条件成立,则执行与该if相关联的输出语句。图2.14显示了这个程序和三个示例输出。 注意图2.14的程序边疆使用流读取操作输入两个整数。首先将一个值读到num1中,然后将一个值读到num2中。if语句的缩排是为了提高程序的可读性。另外,注意图2.14中每个if语句体中有一条语句。第2章将会介绍结构体中有多条语句的if 语句(将语句体放在花括号“{ }”中)。 1 // Fig.2.14:fig01_14.cpp 2 // Using if statements,relationnal -29- 3 // operators,and equality operators 4 #include 8 int num1,num2; 9 10 cout<<\ 11 <<\ 12 cin>>num1>>num2; // 读取两个整数 13 14 if (num1= =num2) 15 cout< 17 if (num1!=num2) 18 cout< 20 if (num1 21 cout< 23 if (num1>num2) 24 cout< 26 if (num1<=num2) 27 cout< 30 if (num1>=num2) 31 cout< 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 -30-
信息学奥赛培训教程C++版



