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);
                }
            }
    
  • 相关阅读:
    重量传感器
    cotex_m3内核提供的ITM串口打印调试
    unsigned char 转字符串:
    手工双面打印
    Windows系统(服务器)忘记管理员登录密码:
    标准电流信号为什么是4-20MA?(网络摘录)
    LPC1768之ISP
    万用表的位数
    485收发控制器:
    [LeetCode] 534. Design TinyURL 设计短网址
  • 原文地址:https://www.cnblogs.com/zhenzhen123/p/4990098.html
Copyright © 2011-2022 走看看