for语句
标签: C语言
学习人数: 20.9k


高清播放
赞赏支持

题目

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3+5^3+3^3。
现在要求输出所有在L到R范围内的水仙花数。

题目链接:http://www.noobdream.com/DreamJudge/Issue/page/1034/

新知识点:

for循环
for 循环允许您编写一个执行指定次数的循环控制结构。

for ( init; condition; increment ) {
   ...
   ...//循环的内容
}

下面是 for 循环的控制流:

  1. init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
  2. 接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
  3. 在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
  4. 条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。

例如上一节我们用while循环实现的1+2+3+...+n的题目也可以用for循环来实现

#include <stdio.h>

int main() {
    int n;
    scanf("%d", &n);
    int sum = 0;
    for (int i = 1; i <= n; i++) {
        sum = sum + i;
    }
    printf("%d\n", sum);
    return 0;
}

是不是感觉特别简单,其实和while循环是一样的,只是写法不同。

题目解析:我们要求一个区间范围内有没有水仙花数,那么就需要for循环从L开始遍历每个数一直到R,然后判断循环到的每一个数是不是满足水仙花数的特征,如果是的话就输出来。

参考代码

#include <stdio.h>

int main() {
    int m, n;
    while (scanf("%d%d", &m, &n) != EOF) {// !=EOF的意思是一直读到文件末尾,EOF就是End Of File
        if (m == 0 && n == 0) break;//如果m和n都是0的时候跳出循环,程序结束
        int flag= 0;//flag变量用于标记区间内是否有水仙花数
        for (int i = m; i <= n; i++) {//for循环遍历区间
            int w = i, sum = 0;//w临时变量  sum存每一位分解之后的值得三次方和
            while (w > 0) {//分解提取每一数位的值  通过不断取模和除10
        ...
登录查看完整内容


课后作业

1、请完成下面这道题目,检验一下自己是否学会了本节的内容。

传送门:点击这里

2、请完成下面这道题目,检验一下自己是否学会了本节的内容。

传送门:
http://www.noobdream.com/Practice/article/30/


登录后开始许愿

1 条上岸许愿
xunjueyulin
2023年7月8日 23:05

关于!=EOF的作用注释里没讲清楚,只说EOF是文件末尾,搜索了一下,其实应该这样理解:

scanf的返回值由后面的参数决定

scanf(“%d%d”, &a, &b);

如果a和b都被成功读入,那么scanf的返回值就是2

如果只有a被成功读入,返回值为1

如果a和b都未被成功读入,返回值为0

如果遇到错误或遇到end of file,返回值为EOF,且返回值为int型.EOF 是一个宏 ,一般定义为-1。

可以理解为EOF等于-1 其实就是scanf函数的返回值 不等于-1时 继续进行循环

 

赞(0)