03- 流程控制(C语言)

news2025/2/12 0:07:51

一 概述

C语言支持三种程序运行结构:顺序结构选择结构循环结构

  • 顺序结构:按照语句编写的顺序 上到下逐句执行
  • 选择结构:也叫 分支结构,依据是否满足条件,有选择的执行相应功能。
  • 循环结构:依据条件是否满足,重复多次执行 某段代码。

二 选择结构

2.1 if语句

1、语法:

if (表达式)
{
语句
}

2、执行逻辑
如果表达式的值为真,则执行其后的语句, 否则不执行该语句

3、示例代码: 

#include <sdtdio.h>
int main()
{
    int a;
    scanf("Plz Input a Integer Number: ", &a);
    if (a > 10)
    {
        printf("a > 10 \n");
    }
    return 0;
}

2.2 if...else语句

1、语法

if (表达式)
{
语句1
}
else
{
语句2
}

2、执行逻辑

如果表达式1成立(表达式1的结果为逻辑真),则执行语句1,否则执行语句2

3、示例代码 

#include <stdio.h>

int main()
{
    int a;
    printf("Plz Input a Integer Number: ");
    scanf("%d", &a);
    if (a > 10)
    {
        printf("a > 10 \n");
    }
    else
    {
        printf("a <= 10 \n");
    }
    return 0;
}

2.3 if...else if ...else 语句

1、语法

if (表达式1)
{
语句1
}
else if (表达式2)
{
语句2
}
...
else if(表达式n)
{
语句n-1
}
else
{
语句n
}

2、执行逻辑

从“表达式1”开始,从上往下判断,直到某个表达式的结果为逻辑真,则执行对应的语句,并
且结束整个选择结构,如果所有的表达式结果为逻辑假,则执行else逻辑对应的“语句n”

3、示例代码 

#include <stdio.h>

int main()
{
    unsigned int a;
    scanf("%u", &a);
    if (a < 10)
    {
        printf("个位\n");
    }
    else if (a < 100)
    {
        printf("十位\n");
    }
    else if (a < 1000)
    {
        printf("百位\n");
    }
    else
    {
        printf("超过了4位数\n");
    }
    return 0;
}

2.4 switch语句

1、语法

witch (表达式)
{
    case 常量表达式1: 语句1;break;
    case 常量表达式2: 语句2;break;
    ...
    case 常量表达式n-1: 语句n-1;break;
    default : 语句n
}

2、执行逻辑

计算"表达式"的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的
值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达
式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

注意:每个语句后面都有break

3、示例代码

#include <stdio.h>

int main()
{
    int day;
    printf("plz Input weekday number: ");
    scanf("%d", &day);
    switch (day)
    {
        case 1:printf("星期一\n"); break;
        case 2:printf("星期二\n"); break;
        case 3:printf("星期三\n"); break;
        case 4:printf("星期四\n"); break;
        case 5:printf("星期五\n"); break;
        case 6:printf("星期六\n"); break;
        case 7:printf("sunday\n"); break;
        default:printf("I don't know \n");
    }
    return 0;
}

4、总结

1、switch结构的表达式必须为 “常量表达式
2、switch结构可以用if ... else if ... else 结构来实现

2.5 选择结构的嵌套

1、语法

if (表达式1)
{
if (表达式2)
{
语句1
}
else
{
语句2
}

else //else if ()
{
if (表达式3)
{
语句3
}
else
{
语句4
}
}

2、执行逻辑
如果表达式1结果为逻辑真,则判断表达式2的结果,如果结果为真则执行语句1,否则执行语
句2
如果表达式1结果为逻辑假,则判断表达式3的结果,如果结果为真则执行语句3,否则执行语
句4

3、举例 

if (体育老师生病了)
{
    if (语文老师没课)
    {
        上语文课
    }
    else
    {
        上自习
    }
}
else
{
    上体育课程
}

三 循环结构

3.1 while语句

1、语法

while (表达式)
{
    语句
}

2、执行逻辑
如果表达式的结果为逻辑假则执行循环体语句,直到表达式的结果为假。

3、示例代码 

#include <stdio.h>

int main()
{
    int x = 10;
    while (x != 0)
    {
        printf("%d\n", x);
        x -= 1;
    }
    return 0;
}

4、练习:通过while循环计算1~100的和

#include <stdio.h>

int main()
{
    int sum = 0;
    int i = 1;
    while (i <= 100)
    {
        sum += i;
        i += 1;
        printf("view data sum: %d, i: %d\n", sum, i);
    }
    return 0;
}

3.2 do~while 语句

1、语法

do{
    语句
}while (表达式);

2、执行逻辑
这个循环与 while 循环的不同在于:它先执行循环中的语句,然后再判断表达式是否为真,如果为
真则继续循环;如果为假,则终止循环。因此, do-while 循环至少要执行一次循环语句。其执行
过程可用下图表示。

3、示例代码 

#include <stdio.h>

int main()
{
    int sum = 0;
    int i = 1;
    do
    {
        sum += i;
        i++;
        printf("view data sum: %d, i: %d\n", sum, i);
    }
    while (i <= 100);
    return 0;
}

4、总结:do~ while和while的区别在于:do~while至少会执行一次循环体语句

3.3 for语句

1、在C语言中,for语句使用最为灵活,它完全可以取代 while 语句。语法格式如下

for(表达式1; 表达式2; 表达式3)
{
    语句
}

2、执行逻辑

  • 先求解表达式1。
  • 求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(O),则结束循环,转到第5)步。
  • 求解表达式3。
  • 转回上面第2)步继续执行。
  • 循环结束,执行for语句下面的一个语句。

3、示例代码 

#include <stdio.h>

int main()
{
    int sum = 0;
    int i;
    for (i = 1; i <= 100; i++)
    {
        sum += i;
    }
    return 0;
}

4、实例讲解

  • 求某个整数二进制表达形式中有多少个1

5、练习

  • 求5的阶乘
  • 输出100~999之间的所有的水仙花数(水仙花数是一个三位数满足如下条件:水仙花数 = 个位
    的立方+十位的立方+百位的立方)
  • 在键盘上输入两个数字,分别存储到a和n中,自动计算表达式 a + aa + aaa + ...+ a...a(n个a)
    的结果, 例如,在键盘上输入 3 和5 ,表达式为: 3 + 33 +333+3333+33333

3.4 循环的嵌套

1、所谓的循环结构就是“循环逻辑中有循环逻辑”
2、示例代码

#include<stdio.h>

int main()
{
    int i,j;
    for(i=1;i<=9;i++)
    {
        for(j=1;j<=i;j++)
        {
            printf("%d*%d=%d\t",i,j,i*j);
        }
        printf("\n");
    }
    return 0;
}

四 流程控制

4.1 break语句

1、break在switch语句中的使用
break用于switch中时,可使程序跳出switch,如果没有break语句,则会继续执行下一个case逻辑
中的语句(不论case后面的表示式结果与switch后的表达式结果是否相等),直到遇到break才
会跳出switch。

switch(x)
{
    case 1:printf("1\n");break;
    case 2:printf("2\n");
    case 3:printf("3\n");break;
    case 4:printf("4\n");break;
}

上面的例子中因为case 2 逻辑后没有break,所以当x为2时,输出结果为 2 3
思考:如何使用switch语句实现在键盘上输入一个月份,然后输出该月份对应的天数呢?

2、break在循环语句中的使用
当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语
句,通常break语句总是与if语句联在一起
。即满足条件时便跳出循环。

#include <stdio.h>

int main() {
    int m, n;
    for (m = 0; m < 10; m++) {
        for (n = 0; n < 10; n++) {
            if (n == 3) break;
            printf("%d\n", n);
        }
    }
    return 0;
}

4.2 continue语句

1、continue语句用于循环结构中,作用是结束本次循环,继续下次循环

#include <stdio.h>

int main() {
    int m, n;
    for (m = 0; m < 10; m++)
    {
        for (n = 0; n < 10; n++)
        {
            if (n == 3)
                continue;
            printf("%d  ", n);
        }
        printf("\n");
    }
    return 0;
}

2、当执行到continue语句时,此次循环结构中continue语句后的其他所有语句都不会被执行到

4.3 企业笔试题

1、有一只青蛙,有一口井深 h米,白天爬 m 米,晚上掉 n 米,假设这只青蛙从白天开始爬,多少
天可以爬出来
2、在一个坐标系中有x坐标、y坐标,假如以坐标(400,240)为圆心,请编程实现,打印出所有在
以50为半径的圆中的所有的点的坐标
3、在键盘上输入一个数字,求除该数字的所有质因数(因数是质数,, 例如:6 = 2*3, 20 = 2 * 2
* 5)
4、假设某人有100,000现金.每经过一次路口需要进行一次交费. 交费规则为当他现金大于50,000时
每次需要交5%如果现金小于等于50,000时每次交5,000.请写一程序计算此人可以经过多少次这个路口
5、假设一个简单的ATM机的取款过程是这样的:

  • 1)首先提示用户输入密码(password),最多只能输入三次,超过3次则提示用户“密码错误,请取卡”结束交易。
  • 2)如果用户密码正确,再提示用户输入取款金额(amount)
  • 3)ATM机只能输出100元的纸币,一次取钱数要求最低100元,最高1000元。
  • 4)若用户输入的金额符合上述要求,则打印输出用户取得钱数,最后提示用户“交易完成,请取卡”,否则提示用户重新假设用户密码是111111,请编程实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/640144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态字符串SDS

基本概括 Redis中保存的Key是字符串&#xff0c;value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。 但Redis没有直接使用C语言中的字符串&#xff0c;因为C语言字符串存在很多问题&#xff08;C语言中实际上没有字符串&#xff0c;本质上是字符数…

面向对象的封装

9. 面向对象特征一&#xff1a;封装性(encapsulation) 什么是封装 就像快递一样我们在网上买的物品&#xff0c;快递都会给我们添加外包装&#xff0c;给我们封装起来&#xff0c;这就是封装 客观世界里每一个事物的内部信息都隐藏在其内部&#xff0c;外界无法直接操作和修改…

怎样才算一个计算机知识体系完整的毕业生

为什么突然想写这个话题呢&#xff1f; 最近有不少新关注的读者&#xff0c;在后台问&#xff1a;大学学 Java 和 C 哪个好找工作&#xff0c;学前端好还是后端好&#xff0c;该学 Vue 还是 React。。。 仿佛看到了自己当年的模样&#xff0c;所以觉得有必要单独写一篇文章&a…

CSS基础学习--8 盒子模型(Box Model)

一、介绍 所有HTML元素可以看作盒子&#xff0c;在CSS中&#xff0c;"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子&#xff0c;封装周围的HTML元素&#xff0c;它包括&#xff1a;边距&#xff0c;边框&#xff0c;填充&#xff0c;和实…

调用阿里API实现图片中的文字识别

作者介绍 王雪玉&#xff0c;女&#xff0c;西安工程大学电子信息学院&#xff0c;2022级研究生 研究方向&#xff1a;机器视觉与人工智能 电子邮件&#xff1a;2239580540qq.com 王泽宇&#xff0c;男&#xff0c;西安工程大学电子信息学院&#xff0c;2022级研究生&#xf…

网规例题(二)

解题思路&#xff1a; 1.发送150000字节大小IP报文 数据帧长1518字节 首部18字节 可用数据1500字节 因此需要发送 100个数据帧 1518字节 1518*8 bit 带宽10 Mb/s 10 000 000 bps &#xff08;一&#xff09;发送100个数据帧的发送时延 0.12144 秒 &#xff08;二&#…

Java程序员不得不知道的一些设计模式

1、什么是设计模式 设计模式&#xff08;Design pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问&#xff0c;设计模式于己于他人于系统都是多赢…

【arXiv2303】Learning with Explicit Shape Priors for Medical Image Segmentation

Learning with Explicit Shape Priors for Medical Image Segmentation, aXiv2303 解读&#xff1a;SPM: 一种即插即用的形状先验模块&#xff0c;可轻松嵌入任意编解码架构&#xff0c;助力涨点并显著改善分割效果&#xff01; (qq.com) 论文&#xff1a;https://arxiv.org/…

基于Air103的DAP-link的硬件介绍

原文及固件链接 视频介绍链接 xkb7070-z 自锁式按键 上电开关 WAFER-SH1.0-6PWB 1.0间距卧贴插座 下载及通信接口 A2-4PA-2.54DS 4Pin接插件 纯下载接口 Air32F103CBT6 lqfp48 216MHz 256K Flash 32K RAM UD/UD- DP&DM信号 USB的差信号 R1 DIO监听 限流 PM254-2-04-W…

【3DsMAX】从零开始建房(7)

目录 1. 制作屋顶小船剩余部分 2. 制作小广告牌 1. 制作屋顶小船剩余部分 新建一个平面 长度分段设置为1 转换成可编辑多边形后&#xff0c;对边进行缩放 同样的方法再添加一个平面 添加“壳” 新建一个圆柱体作为桅杆 选中圆柱的底面&#xff0c;点击插入 挤出 将顶部的点缩…

深入理解深度学习——Transformer:编码器(Encoder)部分

分类目录&#xff1a;《深入理解深度学习》总目录 Transformer中的编码器不止一个&#xff0c;而是由一组 N N N个编码器串联而成。一个编码器的输出作为下一个编码器的输入。在下图中有 N N N个编码器&#xff0c;每一个编码器都从下方接收数据&#xff0c;再输出给上方。以此…

7年测试经验之谈,什么是模糊测试?

背景&#xff1a;近年来&#xff0c;随着信息技术的发展&#xff0c;各种新型自动化测试技术如雨后春笋般出现。其中&#xff0c;模糊测试&#xff08;fuzz testing&#xff09;技术开始受到行业关注&#xff0c;它尤其适用于发现未知的、隐蔽性较强的底层缺陷。这里&#xff0…

类的多继承的派生类的虚表的一些问题

虚表保存的其实并不是虚函数的地址&#xff0c;而是他的到jmp地址。 上我们的操作代码 class A { public:virtual void func1(){}virtual void func2(){}int a 1; };class B { public:virtual void func1(){}virtual void func2(){}int b 2; };class C : public A, public …

SAP HANA内存

用着用着HANA 数据库就慢了&#xff0c;原因都出在内存。 内存不足无非几个原因&#xff1a; 1.你的机器物理内存不足&#xff0c;这个好办&#xff0c;花钱扩。 2.你的HANA License容量不足&#xff0c;这个也好办&#xff0c;申请更大容量的内存License 3.你机器分配给HAN…

爬虫案例-使用Session登录指定网站(JS逆向AES-CBC加密+MD5加密)

总体概览&#xff1a;使用Session登录该网站&#xff0c;其中包括对password参数进行js逆向破解 &#xff08;涉及加密&#xff1a;md5加密AES-CBC加密&#xff09; 难度&#xff1a;两颗星 目标网址&#xff1a;aHR0cHM6Ly93d3cuZnhiYW9nYW8uY29tLw 下面文章将分为四个部分…

在后大流行时代利用Airbnb实现逆周期增长

回望近十年共享经济的发展历程&#xff0c;谁也不曾想到&#xff0c;最被看好的共享经济代表Uber竟在连年亏损后忍痛IPO&#xff0c;上市首日即破发&#xff0c;而主打「互联网房地产」模式的独角兽WeWork则上市失败&#xff0c;迅速失血&#xff0c;一度走到破产边缘。作为“共…

模型剪枝:Network Slimming剪枝实战

本文来自公众号“AI大道理” ​ Network Slimming剪枝是比较广泛的一种模型剪枝方法&#xff0c;作者来自清华大学、英特尔中国实验室、复旦大学和科内尔大学。 1、Network Slimming剪枝理论 Network Slimming剪枝是结构性剪枝&#xff0c;是通道剪枝&#xff0c;是静态剪枝…

mac安装hive_20230609

竟然是今年第一篇 hhhh 过两天把上半年的东西梳理好的话 陆续放上来吧&#xff5e; 公司本地测试环境的hive版本不支持不等式关联操作&#xff0c;而现在用hive也比较多&#xff0c;所以在本地装了一个hive&#xff0c;主要写一下大致步骤和过程中遇到的问题&#xff5e;&#…

win10任务栏卡死解决

现象&#xff1a; win10 更新后&#xff0c;开机任务栏卡死&#xff0c;点开始反应&#xff0c;设置页面无法打开。 原因&#xff1a; 原因是Win10更新的任务栏资讯和兴趣&#xff0c;而资讯和兴趣是Edge浏览器的&#xff0c;该服务器是在国外&#xff0c;国内的网络加载不出来…

【lvs集群】HAProxy搭建Web集群

HAProxy搭建Web集群 一、 HAProxy简介1.1HAProxy主要特性1.2HAProxy负载均衡策略非常多&#xff0c;常见的有如下8种1.3LVS、Nginx、HAproxy的区别1.4常见的Web集群调度器 二、Haproxy搭建 Web 群集haproxy服务器部署节点服务器部署 三、定义监控页面与定义日志3.1定义监控页面…