c++循环结构

1 for循环

很多情况下都需要程序执行重复的任务,如将一首诗歌打印50遍。c++中的循环可以轻松地完成这种任务,解放了我们的重复性工作。

1.1 for循环的组成部分

for循环包括下面4个步骤:

  1. 设置初始值;
  2. 执行测试,看看循环是否应当继续进行;
  3. 执行循环操作;
  4. 更新用于测试的值;
/*
 * init-expression:初始化表达式
 * test-expression:测试表达式
 * update-expression:更新表达式
 * body:循环体
*/
for(init-expression;test-expression;update-expression)
    body

注意点:

  • 初始化表达式只执行一次
  • for循环时入口条件循环,这意味这在每轮循环之前,都将计算测试表达式的值
  • 测试表达式一般是关系表达式,当结果为true(真)时,执行循环体,反之当结果为false(假)时,跳出循环体。
  • 更新表达式一般是在循环体执行完之后再执行,更新表达式可以是任何有效的表达式

1.2 知识点扩展

  • 关系表达式的结果是bool类型。
  • 任何值或任何有效的值和运算符的组合都是表达式,表达式加分号就转变成语句。
  • c++程序在需要整数值的地方将把true和false分别转换为1和0,而在需要bool值的地方将把0转换为false,非0转换为true
#include <iostream>
int main()
{
    using namespace std;
    cout<<"Enter the starting countdown value:";
    int limit;
    cin >>limit;
    int i;
    for(i=limit;i;i--)
        cout<<"i="<<i<<"\n";
    cout<<"Done now that i="<<i<<"\n";
    return 0;
}

1.3 计算前16个阶乘

/*
    使用循环来计算并存储前16个阶乘
*/
#include <iostream>
const int ArSize = 16;  //定义一个常量
int main()
{
    long long factorials[ArSize];
    factorials[1] = factorials[0] =1LL;
    for(int i=2;i<ArSize;i++)
        factorials[i] = i * factorials[i-1];
    for(int i=0;i<ArSize;i++)
        std::cout<<i<<"!= "<<factorials[i]<<std::endl;
}

1.4 修改步长

#include <iostream>
int main()
{
    using std::cout;
    using std::cin;
    using std::endl;
    cout<<"Enter an integer:";
    int by;
    cin >> by;
    cout<<"Counting by"<<by<<"s:\n";
    for(int i=0;i<100;i=i+by)
        cout<<i<<endl;
    return 0;
}

1.5 逆序打印字符串

#include <iostream>
#include<string>
int main()
{
    using namespace std;
    cout<<"Enter a word:";
    string word;
    cin>>word;
    for (int i=word.size()-1;i>=0;i--)    //size()  获取字符串长度
        cout<<word[i];
    cout<<"\nBye.\n";
    return 0;
}

1.6 递增运算符(++)和递减运算符(--)

递增运算符和递减运算符等价于将变量加1或者减1,这两个运算符都有两种变体,前缀版本位于操作数前面,如++x;后缀版本位于操作数后面,如x++;两个版本对操作数的影响是一样的,但是影响的时间不一样。这就像对于钱包来说,清理草坪之前付钱和清理草坪之后付钱的最终结果是一样的,但支付的时间不同

#include<iostream>
int main()
{
     using std:cout;
    int a=20;
    int b=20;
    cout<<"a  ="<<a<<"    b ="<<b<<"\n";
    cout<<"a++= "<<a++<<"   ++b= "<<++b<<"\n";
    cout<<"a  ="<<a<<"    b= "<<b<<"\n";
    return 0;
}

a++ 意味着使用a的当前计算表达式,然后将a的值加1;而++b的意思是先将b的值加1,然后使用新的值来计算表达式

1.7 组合赋值运算符

+=运算符将两个操作数相加,并将结果赋值给左边的操作数

操作符作用(L为左操作数,R为右操作数)
+=将L+R赋值给L
-=将L-R赋值给L
*=将L*R赋值给L
/=将L/R赋值给L
%=将L%R赋值给L

1.8 复合语句(语句块)

两个花括号来构成一条复合语句(代码块)

#include <iostream>
int main()
{
    using namespace std;
    cout<<"The Amazing Accounto will sum and average";
    cout<<"five numbers for you .\n";
    cout<<"Please enter five values:\n";
    double number;
    double sum = 0.0;
    for (int i=1; i<=5;i++)
    {                                    //block starts here
        cout<<"Value "<<i<<":";
        cin>>number;
        sum += number;
    }                                    //block ends here
    cout<<"Five exquisite choices indeed!";
    cout<<"They sum to "<<sum<<endl;
    cout<<"and average to "<<sum/5<<".\n";
    return 0;
}

如果在语句块中定义一个新的变量,则仅当程序执行该语句块中的语句时,该变量才存在。执行完该语句块后,变量将被释放。

#include <iostream>
int main()
{
    using namespace std;
    int x = 20;
    {                       //block starts
        int y = 100;
        cout<<x<<endl;    //ok
        cout<<y<<endl;    //ok
    }                      //block ends
    cout<<x<<endl;        //ok
    cout<<y<<endl;         //invalid,won't compile
    return 0;
}

如果在一个语句块中声明一个变量,而外部语句块中也有一个这种名称的变量,则在声明位置到内部语句块结束的范围之内新变量将隐藏旧变量;然后旧变量再次可见

#include <iostream>
int main()
{  
    using std::cout;
    using std::endl;
    int x = 20;                   //original x
    {                             //block starts
        cout<<x<<endl;            //use original x
        int x = 100;              //new x
        cout<<x<<endl;            //use new x
    }                             //block ends
    cout<<x<<endl;                //use original x
    return 0;
}

1.9 逗号运算符

逗号运算符是将两个表达式合并成一个表达式,常用在for循环中,如i++,--j;但逗号不一定是逗号运算符,有时只是用来分割变量,如int i,j;

#include <iostream>
#incldue <string>

int main()
{
    using namespace std;
    cout<<"Enter a word";
    string word;
    cin>>word;
    char temp;
    int i,j;
    for (j=0,i=word.size()-1;j<i;--i,++j)
    {       
        temp = word[i];
        word[i] = word[j];
        word[j] = temp;
    }
    cout<<word<<"\nDone\n"
    return 0;
}

注意点:

  • 逗号运算符具有顺序的作用,如i = 10,j=2i;执行的顺序是先把10赋值给i,然后再把2*10赋值给j。
  • 在所有运算符中,逗号运算符的优先级是最低的,如a = 10,20;它等价于(a=10),20;如果a = (10,20),则a的值为20,即逗号右侧表达式的值。

1.10 关系表达式

关系表达式的结果为布尔类型,比较结果为真,则为true;比较结果为假,则为false;

关系运算符说明
<小于
<=小于等于
==等于
>大于
>=大于等于
!=不等于

1.11 for进阶

在for循环中,三个表达式可以为空表达式,但是两个分号是必须的。

//下面for循环为死循环,会一直执行循环体
for(;;)
  body


2 while循环

while循环的组成部分:

  • while关键字
  • 测试表达式
  • 循环体
//如果测试表达式为真或者非0,则执行循环体;反之,测试表达式为假或者0,则不执行循环体
while(test-expression)
    body


3 do while

前面的for和while都是入口循环,即必须要先测试入口条件是否为真,才能决定是否要执行循环体。

而do while则出口循环,即先执行循环体,然后再测试入口条件。

//do while循环,至少要执行一次循环体
do
   body
while(test_expreesion);

//例子
#include <iostream>
int main()
{
    using namespace std;
    int n;
    cout<<"Enter number in the range 1-10 to find ";
    cout<<"my favorite number\n";
    do
    {
        cin>>n;
     
    }while(n!=7);
    cout<<"Yes,7 is my favorite.\n";
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值