Input the ten quiz grades and count Passes and faiLures
要求循环输入每个考试成绩。我们事先知道共有10个成绩,因此可以用计数器控制循环。在循环中(即嵌套在循环中),用一个双项选择结构确定考试成绩为数字1或2,并递增相应的计数器。上述伪代码语句细化如下:
while student counter is less than or equal to ten Input the next exam result if the student passed Add one to Passes else
Add One to failures
Add one to student counter
注意这里用空行分开if/else控制结构,以提高程序可读性。伪代码语句: Print a sugary Of the exam results and declde if tuition should be raised 可以细化如下:
Print the number of passes Print the number of filuies
if more than eight students Passed Priht \
图6.10显示了完整的第2步完善结果。注意这里用空行分开while结构,以提高程序可读性。
Initlalize passes to zero Init±a1ize failures to zero
lnitlallze student counter to one
while student counter is less than or equal to ten Input the next exam result if the student Passed Add one to passes else
Add one to failures
Add one to student counter Priht the number of passes Prirt the number of filures
if more than eight students passed Print”Raise tuition'?
图6.10检查考试成绩的伪代码
这个伪代码语句已经足以转换为C++程序。图6.11显示了C++程序及示例的执行结果。注意,我们利用C++的一个特性,可以在声明中进行变量初始化。循环程序可能在每次循环开头要求初始化,这种初始化通常在赋值语句中进行。
1 // Fig. 2.11: fig02_ll.cpp 3 #include
-86-
5 int main() 6 {
// initialize variables in declarations
int passes = 0, // number of passes Passes = v; // number or passes
failures = 0, // number of failures studentCounter = 1, // student counter result; // oue exam result // process 10 students; counter-controlled loop while ( studentCounter <= 10 ) {
cout << \ cin >> result;
if ( result == 1 ) // if/else nested in while passes = passes + 1; else
failures = failures + 1;
studentcounter = studentCounter + 1; }
// termination phase
cout << \ if ( passes > 8 )
cout << \ return 0; // successful termination
输出结果:
Enter result (l=pass,2=fail}: 1 Enter result (l=pass,2=fail): 2 Enter result (l=pass,2=fail): 1 Enter result (l=pass,2=fail): 1 Enter result (l=pass,2=fail): 1 Enter result (l=pass,2=fail) 1 Enter result (l=pass,2=fail): 2 Enter result {l=pass,2=fail): 1 Enter result (l=pass,2=fail): 1 Enter result )1=pass,2=fail): 2 Passed 6 Failed 4
Enter result (a=pass,2=Fail): 1 Enter result (l=pass,2=fail): 1 Enter result (l=pass,2=fail) 1 Enter result (1-pass,2=fail): 2 Enter result {l=pass,2=fail): 1
-87-
Enter result (l=pass,2=fail): 1 Enter result {1=Pass,2=fail):1 Enter result(1=pass,2=fail):1 Enter result(1=pass,2=fail):1 Enter result(1=pass,2=fail):1 Passed 9 Failed 1 Raise tuition
图6.11 检查考试成绩的C++程序及示例执行结果
6.10 赋值运算符
C++提供了几个赋值运算符可以缩写赋值表达式。例如下列语句: c = c + 3;
可以用加法赋值运算符(addition assignment operator)“+=”缩写如下: c += 3;
+=运算符将运算符右边表达式的值与运算符左边表达式的值相加,并将结果存放在运算符左边表达式的值中。下列形式的语句:
variable = variable operator expression;
其中operator为二元运算符+、-、/或%之一(或今后要介绍的其他二元运算符),均可写成如下形式:
variable operator = exprission;
这样,赋值语句c+=3将3与c相加。图2.12显示了算术赋值运算符、使用这些算术赋值运算符的示例表达式和说明。
赋值运算符 示例表达式 说明 赋值 假设int c=3,d=5,e=4,f=6,g=12;
+= e+=7 c=c+7 10赋值给e -= d-=4 d=d-4 1赋值d *= e*=5 e=e*5 20赋值给e /= f/=3 f=f/3 2赋值给f %= g%=9 g=g%9 3赋值给g
图 6.12 算术赋值运算符
6.11 自增和自减运算符
C++还提供一元自增运算符(increment operator,++)和一元自减运算符(dcrement operator),见图6.13。如果变量c递增1,则可以用自增运算符++,而不用表达式c=c+1或c+=1。如果将自
-88-
增和自减运算符放在变量前面,则称为前置自增或前置递减运算符(preincrement或predecrementope~torL如果将自增和自减运算符放在变量后面,则称为后置自增或后置自减运算撤postmcrement或postdcrement operator)。前置自增(前置自减)运算符使变量加1(减1),然后在表达式中用变量的新值。后置自增(后置自减)运算符在表达式中用变量的当前值,然后再将变量加1(减1)。
运算符 名称 示例表达式 说明
++ 前置自增 ++a 将a加1,然后在a出现的表达式中使用新值 ++ 后置自增 a++ 在a出现的表达式中使用当前值,然后将a加1 -- 前置自减 --b 将b减1,然后在b出现的表达式中使用新值 -- 后置自减 b-- 在b出现的表达式中使用当前值,然后将b减1
图 6.13 自增和自减运算符
图6.14的程序演示了++运算符的前置自增与后置自增计算之间的差别,后置自增变量c使其在输出语句中使用之后再递增,而前置自增变量c使其在输出语句中使用之前递增。
1 // Fig, 2.14:fig02 14.cpp
2 // Preincrementing and postincrementing 3 #include
5 int main() 6 {
7 int c; 8
9 C = 5;
10 cout << C << endl; // print 5
11 cout << C++ << endl; // print 5 then postincrement 12 cout << c << endl << endl; // print 13
14 c = 5;
15 cou << c << endl; // print 5
16 cout << ++c << endl; // preincrement then print 6 17 cout << c << endl; 18
19 return 0; // successful termination 20 }
输出结果: 5 5 6
5
-89-
6 6
图6.14 前置自增与后置自增计算之间的差别
程序显示使用++运算符前后的c值,自减运算符的用法类似。
图6.11的三个赋值语句: passes=passes+1; failures=failures+1 student=student+1;
可以改写成更简练的赋值运算符形式: passes+=1; failures+=1; student+=1;
使用前置自增运算符,如下所示: ++passes; ++failures; ++student;
或使用后置自增运算符,如下所示: passes++ failures++ student++
注意,单独一条语句中自增或自减变量时,前置自增与后置自增计算之间的的结果一样,前置自减与后置自减计算之间的结果也相同。只有变量出现在大表达式中时,才能体现前置自增与后置自增计算之间的差别(和前置自减与后置自减计算之间的差别)。
目前只用简单变量名作为自增和自减的操作数(稍后会介绍,这些运算符也可以用于左值)。
图6.15显示了前面所介绍的运算符优先级和结合律,从上到下,优先级依次递减。第二栏介绍每一级运算符的结合律,注意条件运算符(?:)、一元运算符自增(++)、自减(--)、正(+)、负(-)、强制类型转换以及赋值运算符(=、+=、-;、*=、/=和%=)的结合律为从右向左。图1.15中所有其他运算符的结合律为从左向右。第三栏是运算符的组名。
运算符 结合律 类型 ( ) 括号 ++ -- + - static_cast
-90-
相关推荐: