zoukankan      html  css  js  c++  java
  • 【C语言】循环结构for语句

    for语句:

    for (表达式1;表达式2;表达式3)
    {
      循环语句
    }
    
    • 表达式1 给循环变量赋初值
    • 表达式2 为循环条件
    • 表达式3 用来修改循环变量的值,称为循环步长。

    for语句的执行流程:

    for语句的执行流程

    例:编程计算:1+2+3+...+99+100的结果。

    这是累加问题,累加问题的通用表达式为:S = S + T;
    其中,S是一个变量,用来存储累加最后的结果,称之为累加器;T是一个表达式,代表每次需要加入累加器的中的值。
    累加一般是通过循环结构实现的。循环之前要设置累加器S的初始值为0。
    累加项T可以是很简单的表达式,也有可能是一个通过分析得到的较复杂的表达式。

    int S = 0;
    for (int i = 1; i <= 100; i++)
    {
       S = S + i;
    }
    printf("%d\n",S);
    

    注意:

    1)对于已经确定是累加算法的题目,首先确定累加项与循环变量的关系;
    2)然后,考虑第一个累加项的值是多少,以确定循环变量的初值;
    3)其次,确定最后一个累加项的值,确定循环条件;
    4)最后,考虑每个累加项之间的关系,以确定循环变量的变化(步长值)。

    例:编程计算S = a + aa + aaa + aaaa + ... 的前n项之和。

    例如:如果a = 3,n = 5,则表达式为:S = 3 + 33 + 333 + 3333 + 33333。

    int S = 0;
    int t = 0;
    for (int i = 0;i < 5;i++ )
    {
       t = t * 10 + 3;
       S = S + t;
    }
    printf("%d\n",S);
    
    累加算法也可以演化为连乘的形式:S = 1 * 2 * 3 * ... * n。
    连乘的算法和累加算法相似,循环体实现的是S = S * T的形式。需要注意的S的初值不是0,而是要设为1。
    在求连乘时,由于每乘一次结果增长都非常快,所以应该注意是否会出现溢出的问题。

    循环程序设计思路:

    (1)输入是什么?用来确定原始值。

    (2)输出是什么?确定应该输出的结果。

    (3)从输入转换为输出需要怎样的步骤,是否需要重复(确定是否需要使用循环语句以及循环语句的内容)。

    (4)如果需要重复,能否提前预知重复的次数?用来确定使用while、do while、for中的哪种循环语句。

    (5)何时不再需要重复?用来确定循环条件以及循环体中使循环条件趋近于0的语句。

    例:水仙花数、四叶玫瑰数、五角星数、六位数的问题。

    水仙花数:每位数字的3次幂之和等于它本身。例:1^3 + 5^3 + 3^3 = 153。
    四叶玫瑰数:每位数字的4次幂之和等于它本身。
    五角星数:每位数字的5次幂之和等于它本身。
    六位数:每位数字的6次幂之和等于它本身。

    // 打印出所有的水仙花数
    int i,j,k,n,s;
    for(i = 1;i <= 9;i++)
       for(j = 0;j <= 9;j++)
          for(k = 0;k <= 9;k++)
          {
             n = k * k * k + j * j * j + i * i * i;
             s = i * 100 + j * 10 + k;
             if (n == s)
             {
                printf("%d\n",n);
             }
           }
    

    或:

    // 打印出所有水仙花数
            int i,j,k,n,s;
            printf("水仙花数有:\n");
            for(n = 100;n < 1000;n++)
            {
                i = n / 100;          /*分解出百位*/
                j = n / 10 % 10;     /*分解出十位*/
                k = n % 10;          /*分解出个位*/
                s = i * i * i + j * j * j + k * k * k;
                if(s == n)
                {
                    printf("%d\n",n);
                }
            }
    
  • 相关阅读:
    深入理解计算机系统 第六章 存储器层次结构 第二遍
    深入理解计算机系统 第六章 存储器层次结构
    深入理解计算机系统 第八章 异常控制流 Part2 第二遍
    深入理解计算机系统 第八章 异常控制流 part2
    深入理解计算机系统 第八章 异常控制流 Part1 第二遍
    深入理解计算机系统 第八章 异常控制流 part1
    深入理解计算机系统 第三章 程序的机器级表示 Part2 第二遍
    深入理解计算机系统 第三章 程序的机器级表示 part2
    深入理解计算机系统 第三章 程序的机器级表示 Part1 第二遍
    深入理解计算机系统 第三章 程序的机器级表示 part1
  • 原文地址:https://www.cnblogs.com/zhenzhen123/p/4990098.html
Copyright © 2011-2022 走看看