• for循环进阶


    【引例】 输出一行10个“*”

    #include<cstdio>
    int main(){
        printf("**********
    ");
        return 0;
    }
    View Code

    思考:

    (1)输出一行100个“*”

    (2)输出一行1000个“*”

    (3)输出……

    引入for

    #include<cstdio>
    int main(){
        for (int i=1;i<=10;i++)
           printf("*");
        return 0;
    }
    View Code

    要求:单步执行,观察循环控制变量i的变化。

    【例1】输出1,2,3…,10,每个数字一行。

    for的格式1:

    for (控制变量初始化;条件表达式;增量表达式)

         <一条语句>;

    for的格式2:

    for (控制变量初始化;条件表达式;增量表达式)

    {

                     语句1;

                     语句2;

                     ……

      }

    for语句执行过程:

    (1)执行“控制变量初始化”语句,使控制变量获得一个初值。

    (2)判断控制变量是否满足“条件表达式”,若满足条件则执行一遍循环体,否则跳到步骤5。

    (3)根据增量表达式,计算出控制变量所得到的新值

    (4)自动转到第(2)步。

    (5)循环结束,执行for循环后面的语句。

    【例2】键入一个自然数n,求s=1+2+...+n的值

    如:

    输入:

    100

    输出:

    5050

    #include<cstdio>
    int main(){
        int s=0, n;
        scanf("%d",&n); 
        for (int i=1;i<=n;i++)
            s=s+i;
        printf("%d
    ",s);
        return 0;
    }
    View Code

    【例2拓展】 键入一个自然数n(<10000),求这个自然数的所有约数之和S (n的约数不包含1和n)。

    如:

    输入:

    6

    输出:

    5

    #include<cstdio>
    int main(){
        int s=0,n;
        scanf("%d",&n);
        for (int i=2; i<=n-1;i++)
            if (n%i==0) s=s+i;  
        printf("%d ",s);
        return 0;
    }
    View Code

    【例3】输入正整数n(<1000000),判断它是否为素数。是素数输出”yes”,不是素数输出”no”.素数也称为质数。

    程序1(例二的延伸)

    #include<cstdio>
    int main(){
        int s=0,n;
        scanf("%d",&n);
        for (int i=2; i<=n-1;i++)
            if (n%i==0) s=s+i;  
        if (s==0) printf("yes");
        else printf("no");     
        return 0;
    }    
    View Code

    程序2(使用标志变量,添加break):

    #include<cstdio>
    int main(){
        int n,f=0;
        scanf("%d",&n);
        for (int i=2; i<=n-1;i++)     
           if (n%i==0) {
               f=1; 
               
        }
        if (f==0) printf("yes");
        else printf("no");     
        return 0;
    }
    View Code

    尝试:n=1000000007

    程序3(提高程序效率)

    #include<cstdio>
    
    #include<cmath>
    
    int main(){
    
      int n,m,f=0;
    
      scanf("%d",&n);
    
      m= floor(sqrt(n)+0.5);
    
      for (int i=2; i<=m;i++)
    
         if (n%i==0) {
    
           f=1;
    
           break;
    
      }
    
      if (f==0) printf("yes");
    
      else printf("no");  
    
      return 0;
    
    }
    View Code

    知识补充:floor(x)返回不超过x的最大整数

    思考:循环结束时变量i的值是多少,输出结果验证和你的猜测。

    程序4(灵活利用for循环)

    #include<cstdio>
    #include<cmath>
    int main(){
        int i,n,m;
        scanf("%d",&n);
        m=floor(sqrt(n)+0.5);
        for (i=2; i<=m&&n%i!=0;i++);
        if (i==m+1) printf("yes");
        else printf("no");     
        return 0;
    }
    View Code

    注意:

        在for循环“控制变量初始化语句”中声明的变量,这些变量只在for循环结构中有效,离开了该for结构,变量就无效了。

    练习1. 编一个程序,从键盘输入一个分数的分子a和分母b(a<b),输出它的小数形式,精确到小数点后n位。a,b,n<1000,不考虑四舍五入。

    练习2.

    数列的前两项分别是1、1,从第三项开始,每个数均为前面两项的和,即: 1,1,2,3,5,8,…。

    输入:n

    输出:数列第n项的值,n<=90

    如:

    输入:6

    输出:8

  • 相关阅读:
    面试数据分析岗,怎么提升一倍成功率?让过来人给你支支招
    SQL执行效率提升几万倍的操作详解!
    记一次因Redis使用不当导致应用卡死过程
    运筹学那些事,专科学生学习运筹学之运输问题,No.5
    如何在C++中嵌入JAVA
    国际站中国区,孟买上Redis 4.0 集群版
    国际站中国区,孟买上Redis 4.0 集群版
    国际站中国区,孟买上Redis 4.0 集群版
    国际站中国区,孟买上Redis 4.0 集群版
    attachEvent与addEventlistener兼容性
  • 原文地址:https://www.cnblogs.com/ssfzmfy/p/5068905.html
Copyright © 2020-2023  润新知