C++控制语句

8 篇文章 0 订阅

语句总是顺序执行的,函数的第一条语句首先执行,接着执行第二条,依此类推。

这里详细介绍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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shining0596

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值