C语言分支与循环学习(二)

今天主要学习了for、while、do-while三种循环结构的使用和break和continue控制语句的区别,下面将我今天所写代码分享给大家
1. for循环

打印1到10的数字

int main()
{
    int a = 1;
    for (a = 1; !(a > 10); ++a) //for循环接三个表达式,分别是初始化、条件判断和迭代
        printf("%d\n", a);
    return 0;
}

for循环(三部分):初始化(a=1)、条件判断(!(a>10))和迭代(++a)。

2. while循环基础
打印1~10
int main()
{
    int a = 1;
    while (a <= 10)
    {
        printf("%d\n", a);
        a++;
    }
    return 0;
}


while循环在条件为真时持续执行。循环体内须有改变循环条件的语句(如本题中a++),否则会导致无限循环。


3. for循环中的条件判断

int main()
{
    int a = 0;
    for (a = 1; (a<=100) && (a % 3 == 0); a++) 
    {
        printf("%d\n", a);
    }
    return 0;
}


这个循环是错误的,第一次运行时条件为假(1%3不等于0),所以整个循环都不会执行。

4. 计算1-100内3的倍数之和

int main()
{
    int a = 0;
    int sum = 0;
    for (a = 1; a <= 100; a++)
    {
        if (a % 3 == 0)
            sum += a;
    }
    printf("%d", sum);
    return 0;
}


优化版本‌:


int main()
{
    int a = 0;
    int sum = 0;
    for (a = 3; a <= 100; a += 3)
    {
        sum += a;
    }
    printf("%d\n", sum);
    return 0;
}
第二个算法效率更高,因为它直接遍历3的倍数,减少了条件判断的次数


5. do-while循环

int main()
{
    int a = 0;
    do
    {
        printf("%d\n", a);
        ++a;
    } //无论条件是否满足,do-while循环至少执行一次
    while (a >= 1 && a <= 10);
    return 0;
}


do-while循环先执行循环体,再判断条件,所以至少会执行一次。

6. 计算数字位数

int main()
{
    int a = 0;
    int cnt = 0;
    scanf("%d",&a);
    
    do
    {
        a = a / 10;
        cnt++;
    } 
    while (a > 0);
    printf("%d", cnt);
    return 0;
 

循环控制语
7. break语句

int main()
{
    int a = 0;
    scanf("%d", &a);
    while (a <= 10)
    {
        printf("%d", a);
        a++;
        if (a > 5)
            break; //当a大于5时,跳出循环
    }
    return 0;
}
break用于立即终止当前循环。

8. continue语句

int main()
{
    int a = 0;
    scanf("%d", &a);
    while (a <= 10)
    {
        if (a == 5)
            continue; //当a等于5时,跳过本次循环
        printf("%d", a);
        a++;
    }
    return 0;
}


continue导致a无法递增,当a=5时会陷入无限循环

如果想得到5后面的数应该写成:
int main()
{
    int a = 1;
    while (a <= 10)
    {
        a++;
        if (a == 5)
            continue; 
        printf("%d\n", a);
    }
    return 0;
}


或者用for循环:
int main()
{
    int a = 0;
    for (a = 1; a <= 10; a++)
    {
        if (a == 5)
            continue;
        printf("%d", a);
    }
}

用a++会踩的坑
9. 前置递增与后置递增

int main()
{
    int a = 1;
    while (a <= 10)
    {
        printf("%d\n", a); 
        a++;
    }
    return 0;
}



int main()
{
    int a = 1;
    while (a <= 10)
    {
        a++;  //注意a++在前还是在后
        printf("%d\n", a);
    }
    return 0;
}


第一个循环打印1-10,第二个循环打印2-11,因为a++的位置不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值