语句总是顺序执行的,函数的第一条语句首先执行,接着执行第二条,依此类推。
这里详细介绍while语句、for语句和if语句。
1.while语句:while语句提供了迭代执行的功能。
【例1】从1到10求和
#include <iostream>
using namespace std;
int main() {
std::cout << "Shining's Project" << std::endl;
int sum = 0;
int val = 1;
//keep executing the while until val is greater than 10
while(val <= 10)
{
sum = sum + val;
//assigns sum + val to sum
++val;
//add 1 to val
}
std::cout<<"Sum of 1 to 10 inclusive is :"<<sum<<std::endl;
return 0;
}
程序首先包含iostream头文件并定义main函数。在main函数中定义两个int型变量:sum保存求和,val表示从1到10之间的每一个值。给sum赋初值为0,val则是从1开始。
while语句的形式:
while (condition) while_body_statement;
while通过测试condition(条件)和执行相关的while_body_stateement来重复执行,直到condition为假。
条件是一个可以求值的表达式,所以可以测试其结果。如果结果值非零,那么条件为真;如果值为零,则条件为假。
如果condition为真(表达式求值非零),则执行while_body_statement。执行完后,再次测试condition。如果condition为真,则再执行while_body_statement。while语句一直交替测试condition和执行whiile_body_statement,直到condition为假。
例1中,while语句为:
//keep executing the while until val is greater than 10 while(val <= 10) { sum = sum + val; //assigns sum + val to sum ++val; //add 1 to val }
(1)
while语句的条件是小于等于操作符(<=操作符),将val的当前值和10比较,只要小于等于10,则执行while循环体、
while循环体包含两个语句。是一个包含两个语句的块:
{ sum = sum + val; //assigns sum + val to sum ++val; //add 1 to val }
块是被花括号括起来的语句序列,块可用于任何可以用一条语句的地方,块中的第一条语句可以使用复合赋值操作符(+=操作符),sum += val,这种操作符把它的右操作数加之左操作数,与例1中的sum = sum + val;是等同的。
(2)
第二条语句:
++val; //add 1 to val
这条语句使用了前自增操作符(++操作符),自增操作符就是在它的操作数上加1,++val 和 val = val + 1 是一样的。
执行while循环体后,再次执行while的条件。如果val的值(自增后)仍小于等于10,那么再次执行while的循环体。循环继续,测试条件并执行循环体,直到val的值不再小于等于10为止,即大于10。
一旦val大于10,程序就跳出while循环并执行while后面的语句,此例中该语句打印输出,其后的return语句结束main程序。
(3)C++程序的缩排和格式
C++程序的格式非常自由,花括号、缩排、注释和换行的位置通常对程序的语义没有影响。例如,表示main函数体开始的花括号可以放在与main同一行,也可以,放在下一行的开始,或放在任何地方。唯一的要求是,它是编译器所看到在main的参数列表的右括号之后的第一个非空白、非注释字符。
虽然说可以很自由地编排程序的格式,但如果编排不当,会影响程序的可读性。例如,可以将main写成单独的一长行。这样的定义尽管合法,但很难阅读。
关于什么是C或C++程序的正确格式存在无休止的争论,我们相信没有唯一正确的风格,但一致性是有价值的。我们倾向于把确定函数边界的花括号自成一行,且缩进复合的输入或输出表达式从而使操作符排列整齐,main函数中的输出语句那样。随着程序的复杂化,其他缩排规范也会变得清晰。
可能存在其他格式化程序的方式,记住这一点很重要。在选择格式化风格时,要考虑提高程序的可读性,使其更易于理解。一旦选择了某种风格,就要始终如一地使用。
2.for语句:
在while循环中,使用变量val来控制循环执行次数。每次执行while语句,都要测试val的值,然后在循环体中增加val的值。
由于需要频繁使用像val这样的变量循环控制,因而还有一种第二种控制语句,for语句。简化管理循环变量的代码,将例1改为for语句实现1~10求和:
【例2】
#include<iostream>
using namespace std;
int main()
{
std::cout<<"Use the for statement to sum from 1 to 10 :"<<std::endl;
int sum = 0;
//sum values from 1 up to 10 inclusive
for(int val = 1;val <= 10;++val)
sum += val;
//equivalent to sum = sum + val
std::cout<<"Sum of 1 to 10 inclusive is :"<<sum2<<std::endl;
return 0;
}
在for循环之前,定义sum并赋值为0。用于迭代的变量val被定义为for语句自身的一部分。
for(int val = 1;val <= 10;++val)
sum += val;
//equivalent to sum = sum + val
包含for语句头和for语句体两部分,for语句头控制for语句体的执行次数。for语句头由三部分组成:
一个初始化语句,一个条件,一个表达式。
在例2中,初始化语句为:int val = 1;
定义一个名为val的int对象并给定初始值1。初始化语句仅在进入for语句体时执行一次。
一个条件为:val <= 10;
将vald的当前的值与10作比较,每次经过循环都要测试。只要val小于或等于10,则执行for语句体。仅当for语句体执行后才执行表达式。在for循环中,表达式使用前自增操作符,val的值加1,执行完表达式后,for语句重新测试条件,如果val的新值仍小于等于10,则执行for语句体,val再次自增,继续执行直到条件不成立。
for语句体执行求和:
sum += val;
//equivalent to sum = sum + val
for语句体使用复合赋值操作符,把val的当前值加到sum,并将结果保存到sum中。
for循环的总执行流程为:
(1)创建val并初始化为1。
(2)测试val是否小于或等于10。
(3)如果val小于或等于10,则执行for循环体,把val加到sum中,如果val大于10,就推出循环,接着执行for语句体后的第一条语句。
(4)val自增
(5)重复第二步,只要条件为真,就继续执行其余步骤。
退出for循环后,变量val不再可访问,循环中之后使用val是不可能的。然而,不是所有的编译器都有这一要求。
在标准化之前的C++中,定义在for语句头的名字在for循环外时可访问的。语言定义中的这一改变,可能会使习惯于使用老式编译器的人,在使用遵循标准的新编译器时感到惊讶。
3.if语句
求1到10之间的和,其逻辑延伸是求用户提供的两个数之间的数的和,可以直接在for循环中使用这两个数,使用第一个输入值作为下界面而第二个输入值作为上界。如果用户先给定的数较大,这种策略将会失败:程序会立即退出for循环。因此,必须调整范围以便较大的数做上届,而较小的数做下界,这样做,我们需要一种方式来判定哪个数更大一些。
【例3】使用if语句来编写修订的求和程序
#include <iostream>
using namespace std;
int main() {
std::cout << "Shining's Project!" << std::endl;
std::cout<<"Enter two number:"<<std::endl;
int v1,v2;
std::cin>>v1>>v2; //read input
//use smaller number as lower bound for summation
//and larger number as upper bound
int lower,upper;
if(v1 <= v2){
lower = v1;
lower = v2;
}else{
lower = v2;
upper = v1;
}
int sum = 0;
//sum values from lower up to and including upper
for(int val = lower;val <= upper;++val)
sum += val;
//sum = sum + val;
std::cout<<"Sum of "<<lower<<"to"<<upper<<"inclusive is "<<sum<<std::endl;
return 0;
}
该程序首先向用户输入提示并定义4个int变量,然后从标准输入读入值到v1和v2中。
//use smaller number as lower bound for summation
//and larger number as upper bound
int lower,upper;
if(v1 <= v2){
lower = v1;
lower = v2;
}else{
lower = v2;
upper = v1;
}
这段代码的效果是恰当地设置upper 和 lower。if的条件测试v1是否小于或等于v2。如果是,则执行条件后面紧接着的语句块,这个语句块包含两条语句,每条语句都完成一次赋值,第一条语句将v1赋值给lower,而第二条语句将v2赋值给upper。
如果这个条件为假(也就是说,如果v1大于v2),那么执行else后面的语句。这个语句同样是一个由两个赋值语句组成的块,把v2赋值给lower而把v1赋值给upper。