C语言循环结构

2023-11-01

目录

循环结构

while循环

基本while循环

do while循环

for循环

跳转语句

break

continue

goto

单纯的循环的常规操作

循环嵌套

循环嵌套的问题

作业

经典问题 百鸡百钱

经典问题 斐波拉契数列


循环结构

  • 循环一搬用来描述有规律的事情,需要重复编写代码

while循环

while("条件成立")
{
    printf("执行循环");
}
printf("条件不成立,执行这里!");

基本while循环

  • 条件控制循环次数

  • 条件的改变:往不满足的情况靠拢

  • 特殊形态

    • 死循环

      • while(1)

      • while(true) (需要包含stdbool.h头文件)

示例代码

#include<stdio.h>
#include<stdbool.h>
​
int main()
{
    int count = 0;
    while (count < 3)
    {
        printf("这是第%d次循环\n", count + 1);
        count++;
    }
    //奇葩写法 学会看出执行过程即可
    int i = 0, j = 3;
    while (i++, i < j)
    {
​
        printf("这是第%d次循环\n",i);
    }
    //死循环
    while (1);
    while (true);   
    return 0;
}

do while循环

do
{
    printf("执行循环");
}while("条件成立");
printf("条件不成立到这里");
  • 无论条件成立与否,至少执行一次

  • do while(0) 宏边界

#include<stdio.h>
​
int main()
{
    do
    {
        printf("条件不成立,也要执行一次!\n");
    } while (0);
    int count = 0;
    do
    {
        printf("这是第%d次循环\n", count + 1);
        count++;
    } while (count < 3);
    printf("循环结束!\n");
    return 0;
}

for循环

for (size_t i = 0; i < length; i++)  
//for(循环变量的初始化;循环条件;改变循环条件)
{
    printf("执行循环")
}
  • 缺省形态的死循环: for(;;)

  • for循环如果只管理一条语句{}可省略,while同

示例代码

#include<stdio.h>
​
int main()
{
    for (int i = 0; i < 3; i++)
    //{
        printf("这是第%d次循环\n", i);
    //}
    //逗号表达式写法
    for (int i = 0, j = 3; j, i < j; i++, j--)
    {
        printf("%d\t%d\n", i, j); 
    }
    return 0;
}

跳转语句

break

  • 只能在switch或者循环中使用

  • 跳出整个循环(一个循环,即循环嵌套的一层循环

continue

  • 只能在循环中使用

  • 退出本次循环(一次循环),提前进入条件判断

goto

  • 只能在当前函数中使用

  • 要写循环效果不要用goto,goto一般用于深度循环嵌套

  • goto是标签跳转,用于深度循环嵌套的退出十分方便

示例代码

#include<stdio.h>
​
int main()
{
    for (int i = 0; i <= 3; i++)
    {
        if (i == 2)
            break;
        printf("这是第%d次循环\n", i + 1);
    }
    printf("break跳到这里\n");
    for (int i = 0; i <= 3; i++)
    {
        if (i == 2)
            continue;   //中场休息
        printf("这是第%d次循环\n", i + 1);
    }
    int count = 0;
code:
    printf("goto跳转到这里!\n");
    if (count < 3)
    {
        count++;
        goto code;
    }
    return 0;
}

单纯的循环的常规操作

#include<stdio.h>
​
int main()
{
    //求累加和
    int sum = 0;
    for (int i = 1; i <= 100; i++)
    {
        sum += i;
    }
    //求阶乘
    printf("sum=%d\n", sum);
    int num = 0;
    sum = 1;
    printf("请输入阶乘最大项:\n");
    scanf_s("%d", &num);
    for (int i = 1; i <= num; i++)
    {
        sum *= i;
    }
    printf("sum=%d", sum);
    return 0;
}

循环嵌套

  • 描述行列变换

  • 描述多条件筛选

    • 特定区间的特定值

    • 找素数,水仙花数

  • 描述数列规律

    • 输出金字塔

示例代码

#include<stdio.h>
#include<stdbool.h>
​
int main()
{
    //描述行列变换
    int row = 4;
    int cols = 5;
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            printf("%d%d\t", i, j);
        }
        printf("\n");
    }
    //行列变换序号化
    printf("===============序号化==============\n");
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            printf("%d\t", i * row + j);
        }
        printf("\n");
    }
    printf("==========================9*9乘法表================================\n");
    //9*9乘法表
    for (int i = 1; i <= 9; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            printf("%d\t", i * j);
        }
        printf("\n");
    }
    //描述多条件筛选
    //求素数(只能被1和自身整除的数)
    int num = 0;
    printf("======判断素数======\n");
    printf("请输入一个数:");
    scanf_s("%d", &num);
    bool result = true;     //标记法
    for (int i = 2; i < num; i++)
    {
        if (num % i == 0)
        {
            result = false;
            break;
        }
    }
    //根据result的值判定结果
    if (result)
    {
        printf("%d是素数\n", num);
    }
    else
    {
        printf("%d不是素数\n", num);
    }
    //找100-1000之间的素数
    printf("==================100-1000之间的素数================\n");
    int temp = 0;
    for (int i = 100; i <= 1000; i++)
    {
        bool isOk = true;
        for (int j = 2; j < i; j++)
        {
            if (i % j == 0)
            {
                isOk = false;
                break;
            }
        }
        if (isOk)
        {
            printf("%d\t", i);
            temp++;
            if (temp % 7 == 0)
            {
                printf("\n");
            }
        }
    }
    //求水仙花数
    printf("\n======判断水仙花数======");
    int iNum = 0;
    bool End = true;
    printf("\n请输入一个数(100<n<1000):");
    scanf_s("%d", &iNum);
    int a = iNum / 100;
    int b = iNum / 10 % 10;
    int c = iNum % 10;
    if ((a * a * a + b * b * b + c * c * c) != iNum)
        End = false;
    if (End)
        printf("%d是水仙花数\n", iNum);
    else
        printf("%d不是水仙花数\n", iNum);
    //数列问题
/*
*       1+(1-1)
**      1+(2-1)
***     1+(3-1)
****    an=n
*****
*/
    printf("=====输出直角=====\n");
    for (int i = 1; i <= 5; i++)
    {
        for (int j = 1; j <= i; j++)
        {
            printf("*");
        }
        printf("\n");
    }
/*
    *
   ***
  *****
 *******
*********   
    */
    printf("=====输出金字塔=====\n");
    for (int i = 1; i <= 5; i++)
    {
        for (int k = 1; k <= 5 - i; k++)
        {
            printf(" ");
        }
        for (int j = 1; j <= 2 * i - 1; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

循环嵌套的问题

  • 作用域问题

    • {}中定义的变量只在{}中使用

示例代码

#include<stdio.h>
​
int main()
{
    for (int i = 0; i < 3; i++)
    {
        printf("i只能在{}中使用\n");
    }
    int i = 0;      //i在下面都可以用
    for (i = 0; i < 3; i++)
    {
        printf("i在下面都可以用\n");
    }
​
    //当i=1,j=1时退出循环
    i = 0;
    int j;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            if (i == 1 && j == 1)
            {
                break;  //只跳出一层循环
            }
            printf("%d%d\t", i, j);
        }
        if (i == 1 && j == 1)
        {
            break;
        }
    }
    printf("\n");
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            if (i == 1 && j == 1)
            {
                goto code;
            }
            printf("%d%d\t", i, j);
        }
    }
code:
    printf("\ngoto放到循环嵌套的退出时非常方便!");
    return 0;
}

作业

经典问题 百鸡百钱

一只公鸡cock值五钱,一只母鸡hen值三钱,三只小鸡(chick)值一钱 100钱,买100只鸡,请问公鸡,母鸡,小鸡各多少只? 全买公鸡:20只 全买母鸡:33只 全买小鸡: 100只

#include<stdio.h>
​
int main()
{
    for (int i = 0; i < 20; i++)
    {
        for (int j = 0; j < 33; j++)
        {
            if (((i * 5 + j * 3 + (100 - i - j)/3) == 100)&&((100-i-j)%3==0))
                printf("公鸡:%d只\t母鸡:%d只\t小鸡:%d只\n", i, j, 100 - i - j);
        }
    }
}

经典问题 斐波拉契数列

1 1 2 3 5 8 13 ...

f(n)=1 n<=2

f(n) = f(n-1)+f(n-2)

用户输入n 求出f(n)的值:

#include<stdio.h>
​
int Fib(int n)
{
    if (n == 1 || n == 2)
        return 1;
    else
        return Fib(n - 1) + Fib(n - 2);
}
​
int main()
{
    //递推求解
    int n = 0, vlue=0, t1 = 1, t2 = 1;
    printf("请输入所求项数(n):");
    scanf_s("%d", &n);
    if (n == 1 || n == 2)
    {
        printf("第%d项值为1\n", n);
    }
    else
    {
        for (int i = 0; i < n - 2; i++)
        {
            vlue = t1 + t2;
            int temp = t2;
            t2 = vlue;
            t1 = temp;
        }
        printf("第%d项值为%d\n", n, vlue);
    }
    //递归求解
    n = 0;
    printf("请输入所求项数(n):");
    scanf_s("%d", &n);
    //Fib(n);
    printf("第%d项值为%d\n", n,Fib(n));
    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言循环结构 的相关文章

随机推荐

  • 多中机器学习模型对比可视化

    传统的机器学习模型的选择往往是凭借经验和习惯 部分人一般情况会用TPOT今天最佳模型调参 但是也许要对比其他模型在哪些模型衡量指标下的优劣势 这里提供一个简单的效果对比工具 import matplotlib pyplot as plt m
  • 数睿通2.0数据中台数据资产、数据集市功能发布

    引言 数睿通 2 0 数据中台迎来了 7 月份的首次更新 本次更新主要是添加了数据资产 数据集市的相关核心功能 完整的功能实现尚需要时间打磨 因为最近工作实在是有些繁忙 琐事也多 所以能投入开发的时间着实有限 只实现了部分功能 通过数据资产
  • 路由器安装cloudflared进行内网穿透,安全访问内网

    文章目录 前言 一 Cloudflare Argo Tunnel是什么 二 使用步骤 1 开始准备 https developers cloudflare com cloudflare one setup 2 创建隧道 https deve
  • Win10系统下VisualStudio2019编译配置LAStools-v2.0.0

    目录 一 概述 1 LAStools v2 0 0 2 下载解压 二 源码编译 2 1 打开 2 2 移除加载失败的项目 2 3 修改代码 2 4 配置管理器 2 5 修改输出目录 2 6 修改头文件目录 2 7 修改运行库 2 8 生成l
  • matlabplot———散点图

    散点图 散点图 散点图的分类 散点图的优势 绘制散点图 散点图 散点图是指在回归分析中 数据点在直角坐标系平面上的分布图 散点图表示因变量随自变量而变化的大致趋势 在数据分析可视化时 一般会先绘制散点图 初步了解自变量和应变量之间的关系 通
  • wsl2安装archlinux

    前提 开启了WSL 虚拟平台 有WSL2内核 可以开启WSL2 下载Archlinux镜像 镜像名称archlinux bootstrap 2022 01 01 x86 64 tar gz 推荐到清华镜像站下载 下载LxRunOffline
  • 四.在centos上搭建Jira管理工具

    打开虚拟机并点击启动 再打开finalshell双击连接 打开navicat12 方法一 再在下载包里打开 1 下载配置jira 先进入根目录cd 创建两个文件mkdir software mkdir jiradata 进入software
  • jsp 页面编码优先级

    优先级如上图 另外贴一张之前的图
  • Ubantu——Linux文件解压和压缩

    Linux文件压缩和解压指令 一 gzip和gunzip 二 tar命令 三 tar解压和查看 压缩形式介绍 一 gzip和gunzip 例如 二 tar命令 使用区别如下 三 tar解压和查看 tar xvf 加上要解压的文件名字
  • 关于React项目中百度地图API的使用

    一 前言 1 首先进入百度地图API官方地址https lbsyun baidu com 选择适合自己项目的开发文档 我这次使用的是Javascript API 2 点击开发指南 gt Hello World 会有详细步骤介绍使用流程 按步
  • 牛客刷题 数组求和

    在leetcode上刷到第一题 又在牛客上刷到与第一题相似的第二 第三题 整理如下 第一题 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标 解题思路 public
  • 手机功能测试主要测哪些方面?

    1 RF收发信机指标测试 测试发射功率 发射频谱 接收灵敏度等等 2 音频指标测试 检查或测试发送音频灵敏度 振铃响度 受话器响度 失真度 侧音 免提功能等等 3 LCD和菜单功能的检查 看是否与说明书中所述内容相一致 4 各按键触觉和力度
  • docker基础:把容器做成镜像

    安装 Lua 语言环境 apt get update y apt get install y luajit luarocks 再用 exit 命令退出容器 再运行 docker commit 命令 docker commit a44444a
  • Apache优化

    Apache优化 Apache优化 系统层面优化 内核调试 关闭一些不必要运行的服务 或者删除一些不需要的用户 软件优化 Apache Tomcat Nginx Mysql Apache优化 工作模式 1 worker 单进程多线程 是和并
  • docker安装启动es

    原文链接 docker安装启动es 走看看 docker安装es和kibana docker pull elasticsearch 7 4 2 docker pull kibana 7 4 2 创建映射文件夹 并写入配置 mkdir p k
  • ShaderToy入门初体验

    ShaderToy入门初体验 前言 shadertoy https www shadertoy com 那些大神写的demo简直太震撼了 官方给出的how to 第一个程序 点击上图中的 新建 弹出下图界面 代码详解 void mainIm
  • table树形结构,获取一个节点的所有父节点

    判断叶子节点的所有父节点 function scheduleAlgorithm array 树形数据 value 根据该值判断找哪个节点的父节点 valueName fsecid 与上一节点相关联的值的字段名 childrenName ch
  • 【无人自主系统】自主系统自主性(持续更新内容中)

    事实上 过去当我们考虑地面 空中 水下无人设备的时候 我们考虑的是一个个子系统的自动化 传统意义上 自动化的定义是 系统或者设备在没有或者很少人工的参与下 完成特定操作 达成预期目的 广义的自动化涵盖执行逻辑操作的软件及其他应用过程 这也是
  • 不需要PS也能生成淘宝我的订单页面截图

    不知道大家有没有遇到这样的情况 在发微博 发朋友圈或者写博客的时候 想要分享购物心得 但却苦恼于找不到虚拟淘宝订单截图 别担心 今天我就来教大家一个轻松又快捷的方法 使用淘宝订单生成器 无需PS 虚拟淘宝订单在线生成工具 https tao
  • C语言循环结构

    目录 循环结构 while循环 基本while循环 do while循环 for循环 跳转语句 break continue goto 单纯的循环的常规操作 循环嵌套 循环嵌套的问题 作业 经典问题 百鸡百钱 经典问题 斐波拉契数列 循环结