C语言的for循环(二)

218 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情

for的9种用法

第二种:可以让计数器递增2,10等

#include <stdio.h>
int main() {
    int n;
    for(n=2;n<60;n=n+13)
        printf("%d\n",n);
    return 0;
}

运算结果

每次循环n递增13,程序输出如下:

Snipaste_2022-08-19_17-20-41.png

第三种:可以用字符代替数字计数

#include <stdio.h>
int main() {
    char ch;
    for(ch='a';ch<='z';ch++)
        printf("The ASCII value for %c is %d.\n",ch,ch);
    return 0;
}

运算结果

Snipaste_2022-08-19_17-25-44.png

第四种:除了测试迭代次数外,还可以测试其他条件。

for_cube程序中,可以把:

for(num=1;num<=6;num++)

替换成:

for(num=1;num*num*num<=216;num++)

如果与控制循环次数相比,你更关心限制立方的大小,就可以使用这样的测试条件。

第五种:可以让递增的量几何增长,而不是算术增长。

也就是说,每次都乘上而不是加上一个固定的量:

#include <stdio.h>
int main() {
    double debt;
    for(debt=100.0;debt<150.0;debt=debt*1.1)
        printf("Your debt is now $%.2f.\n",debt);
    return 0;
}

运算结果

该程序中,每次循环都把debt乘以1.1,即debt的值每次都增加10%,输出如下:

Snipaste_2022-08-19_18-24-12.png

第六种: 第3个表达式可以使用任意合法的表达式

无论是什么表达式,每次迭代都会更新该表达式的值。

#include <stdio.h>
int main() {
    int x;
    int y;
    for(x=1;y<=75;y=(++x*5)+50)
        printf("%10d %10d\n",x,y);
    return 0;
}

运算结果

该打印x的值和表达式++x* 5+50的值,输出如下: Snipaste_2022-08-19_18-33-15.png

注意,测试涉及y,而不是x。for循环中的3个表达式可以是不同的变量(建议不要在更新部分加入代数计算,程序会更清楚)。

第七种: 可以省略一个或多个表达式,只要在循环中包含能结束循环的语句即可。

#include <stdio.h>
int main() {
    int ans,n;
    ans=2;
    for(n=3;ans<=25;)
        ans=ans*n;
    printf("n=%d;ans=%d.\n",n,ans);
    return 0;
}

运算结果

输出如下:

Snipaste_2022-08-19_18-45-44.png 该循环保持n的值为3.变量ans开始的值为2,然后递增到6和18,最终是54.

第八种:第1个表达式不一定是给变量赋初值,也可以使用printf()。

记住,在执行循环的其他部分之前,只对第1个表达式求值一次或执行一次。

#include <stdio.h>
int main() {
    int num=0;
    for(printf("Keep entering numbers!\n");num!=6;)
        scanf("%d",&num);
    printf("That's the one I want!\n");
    return 0;
}

运算结果

打印第1行的句子一次,在用户输入6之前不断接受数字:

Snipaste_2022-08-19_18-58-24.png

第九种:循环体中行为可以改变循环头中的表达式。

例如:假设创建了下面的循环体:

for(n=1;n<10000;n=n+delta)

如果程序经过几次迭代后发现delta太小或太大,循环中的if语句可以改变delta的大小。在交互程序中,用户可以在循环运行时才改变delta的值。但这样做不咋好,如果把delta设置为0就没用了。