分支和循环语句

C语言之《分支和循环语句》 我们知道一个原则,else总是和最接近的if相匹配,当a=0,if表达式是a=1时,if表达式则不成立,if不成立,那么就走else,但这段代码中有两个if,而else和最接近的if相匹配,else和第二个if相匹配,而if表达式又不成立,但else是和第二个if相匹配的,所以也走不了else,最终的结果就是什么都不输出。分支语句就像一条岔路口,你选择走了A,就走不了B,if和else是一样的,当一起出现了if和else,要么走if,要么走else,编译器运行代码绝对不会走了if又走else。 阅读详情

C语言是结构化的程序设计语言

顺序结构,选择结构,循环结构

分支语句

if  switch

循环语句

while,  for,  do while

什么是语句 ?

C语句可分为以下5类:

1、表达式语句

2、函数调用语句

3、控制语句

4、复合语句

5、空语句

这个就是表达式语句

这个是函数调用语句

分支语句(选择结构)

if语句

语法结构:

if语句单分支

在C语言中,if或者else的后面他们默认只能控制一条语句,想要控制多条就需要加上大括号

就像这样:

还有这样:

接下来看看这个代码

认为这个代码能打印出什么?

其实根本无法打印

因为第二个if语句是被第一个直接包括在内,而第一个if语句的条件是 a = 1 代码才能运行,上述显然不符合条件,所以根本无法打印

还有:else只跟离他最近的if相对应

再观察下面这个代码:

这个代码的意思就是条件满足返回x,条件不满足返回y

但这样不容易看出来,可以写成这样:

Tip:写判断语句时可以写成这样,当代码测试时就会报错,避免埋雷,以后程序运行时出现的bug

practice:

判断一个数是否为奇数

输出一个1~100之间的奇数

Switch语句

switch语句也是一种分支语句。

常常用于多分支的情况

就像这样:

使用if语句:

使用Switch语句:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
        printf("星期1\n");
    case 2:
        printf("星期2\n");
    case 3:
        printf("星期3\n");
    case 4:
        printf("星期4\n");
    case 5:
        printf("星期5\n");
    case 6:
        printf("星期6\n");
    case 7:
        printf("星期天\n");
}
            return 0;
    }

但我们打印的效果不太行

当我们输入3后它径直打印了星期四及后面所有,这时只需给每个case后面都加上break,即可解决问题

我们可以得出

switch上面必须是整型表达式

case后面也必须是整型常量表达式

还可以将代码改成这样,每当输入1-5, 就会打印工作日,6-7会打印休息日,输入其他数字则会提示输入错误

如果我们输入了1~7之外的数字,那么就需要加一个默认项:default

我们再观察下面这段代码:

首先,n=1进入case1,m+1,随即进入case2,n+1,再因为n=2进入case2,两者都+1,再出switch,进入case4,m+1,最后n = 3 ,m= 5

while循环

语法结构:

判断这个代码的结果

当 i = 5时,因为break的作用是直接终止循环,所以只会打印1234

这下进行了一些改动:

这里break变成了continue,而continue的作用是跳过本回合,直接进入下一循环的判断阶段,这里 i 还是5,所以也会进入死循环

这里break和continue最大的区别是break会跳过后面所有代码,而continue则是直接进入循环。

getchar函数

获取字符,返回的是 int ,也要放回 int 的变量里面

当我们把那个字符的ASCII码值放在 ch 里面后打印他则需要putchar函数

我们观察一下这个代码

运行后,你输入什么他就会输出什么

这里的 EOF是-1

因为每一次输入后都点击了一次回车,所以回车也被getchar接收,所以结果会是上面那样

如果你想要停下来,只需按键盘上的 Ctrl +z,,此时也是让程序返回了EOF。

EOF :end of file 叫文件结束标志

再观察一下这段代码:

这里的passedWord是数组名,数组名本身就是地址所以不用取地址,除了数组都要取地址

程序运行后,随便输入密码,突然发现还没有让我们判断,就直接显示失败了

当我们在键盘上输入字符串后并不是直接进入scanf,而是因为我们scanf和键盘上有个输入缓冲区,scanf刚开始是在输入缓冲区里查找有没有数据,如果没有那就会等,我们输入密码后敲入回车,scanf就会看见,并且开始从缓冲区里拿东西,但是拿走的是 abcdef

随后getchar也读数据,就把\n读走放在ch里面去了,然后判断不等于 Y,所以就会确认失败

,我们就可以在passedWord后面再加上一个getchar,将\n清理

这里再次运行程序就会成功

但当我们这样输入时,又会跟上面的错误一样

这里的scanf也同样只读到了abcdef,后面的就没有管,而getchar一次又只能吸收一个字符,这次字符较多,再用上面的方法不现实

我们随即加了这一串代码,只要不是\n都会被接收,然后\n也会被拿走,最后循环才会停下来,程序也会正常运行

for循环

语法结构:

跟while循环大差不差

我们再次观察一段熟悉的代码

这段代码的结果应该是 1234就会停止

这里的break换成continue后结果会变成 1234 678910

两个建议:

不要在for循环体内改变循环变量

建议for语句的循环控制便利的取值采用“前闭后开区间”写法

这里不建议把 <10写成<=9

for的初始化,判断,调整三个部分都可以省略,但是省略掉判断部分,就意味着判断恒为真

这里会打印100次hehe

这个代码就是因为乱省略,结果大为不同

当 i = 0 时打印了10次,当i=1时就无法打印

do ...while循环

这个语句似乎不太常见

语法:

打印1~10

这样就只有1、2、3、4

这样则是1234死循环

 计算n的阶乘

计算1~10的阶乘

练习!!!

二分查找/折半查找

在一个有序数组中查找具体的某个数字n。

先将最左边的数字标记为left,最右边的标记为right,再将两者相加除2所得值mid相比较,如果较大,mid则变为left,right则为原来的right。较小则相反。

假设n = 7,首先left下标为0right下标为9,mid则为4,4

mid还可以这样写

welcome to bit !!!

编写代码,演示多个字符从两端移动,向中间汇聚。

这样

将arr1的字符换为arr2的字符:

这里的sleep是指让打印的缓慢一点,单位是毫秒

还需要加头文件

上面strlen也需要头文件:

结果:

模拟登录

编写代码实现,模拟用户登录情景,并且只能登陆三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入错误,则退出程序。

假设正确的密码是:“bitbit”

程序是:

密码输入成功是这样:

猜数字游戏

电脑随机生成一个1~100之间的数字

如果你猜小了,告知猜小了

如果你猜大了,告知猜大了

如果你猜对了,告知猜对了

代码:

结果:

这个代码用来清理屏幕上的所有显示。

这个是打印出来的效果

接下来具体完成猜数字的游戏代码

先生成随机数,然后才是猜数字

rand函数可以生成随机数,返回一个0 ~ RAND_MAX之间的随机数。头文件是#include

这个是RAND_MAX的值

通过计算机换算得 : 32707

这个是随机数代码

运行后代码也可以正常显示:

但是当关闭窗口后,下一次运行代码,会发现还是一样的数字,一点没有改变,说明代码需要改进,要对随机数生成器进行初始化。

通过调节这个字符

我们可以发现srand后面的值不同,所随机的结果不同

这时为了保证数值的随机性,我们需要使用时间戳,就是就是电此时此刻运行代码的时间也与电脑开机时间的差值,类似这样:

C语言中的time函数,可以生成 当前时间的时间戳。

由于time函数有指针,而我们现在只想用他的返回值不想用参数,只用传一个空指针 NULL 而且time函数的返回类型是time_t的。

srand需要的参数是unsigned

我们就需要吧time_t返回类型强转成unsigned

time函数需要用到的头文件是 #include

这时候我们运行代码会发现数值在时刻变化:

但是这里有个bug,如果我们两次按的非常快,那他生成的随机数就会相等

这是因为我们的代码里随机数生成器每一次都要设置一次,被过于频繁的调用了,而我们只需要在主函数开头设置一次就行了

这样效果就比较好

但我们刚开始的目的是生成1-100之间的数字,我们只需给生成的数字%100就可以了(任何数%100所得的数只能在0-99)

这样生成随机数就完成了

这下就进入编写猜数字代码的环节了

就是猜数字代码:

由于我们要进行多次猜数字,所以需要加上一个循环。

这里的while(1),是指如果一直猜那就是一直为真。

这就是最终效果

如果我们想在vs外运行猜数字游戏

那就要把这里的Debug换成Relsas,随后运行代码

就可以在运行框里找到代码的地址,然后根据地址就可以找到exe程序

猜数字游戏源码

#define _CRT_SECURE_NO_WARNINGS 1
//猜数字游戏实现

//电脑随机生成一个1~100之间的数字
//猜数字
//如果你猜小了,告知猜小了
//如果你猜大了,告知猜大了
//如果你猜对了,告知猜对了
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void menu()
{
    printf("*********************************\n");
    printf("**********  1. play  ************\n");
    printf("**********  0. exit  ************\n");
    printf("*********************************\n");
}

//rand函数可以生成随机数
//返回一个0~RAND_MAX(32767)
void game()
{
    int guess = 0;
    //1. 生成随机数
    int ret = rand()%100+1;//0~99-->1~100
    //printf("%d\n", ret);
    
    //2. 猜数字
    while (1)
    {
        printf("请猜数字:>");
        scanf("%d", &guess);
        if (guess < ret)
        {
            printf("猜小了\n");
        }
        else if (guess > ret)
        {
            printf("猜大了\n");
        }
        else
        {
            printf("恭喜你,猜对了\n");
            break;
        }
    }
}

int main()
{
    int input = 0;
    //设置随机数的生成器
    srand((unsigned int)time(NULL));
    do
    {
        menu();
        printf("请选择:>");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            game();
            break;
        case 0:
            printf("退出游戏\n");
            break;
        default:
            printf("选择错误,重新选择!\n");
            break;
        }

    } while (input);

    return 0;
}

STM32F407单一定时器输出4路不同频率及占空比的PWM波 阅读详情

相关推荐

OCC入门指南:从零开始掌握Open CASCADE Technology

本文是Open CASCADE Technology(OCC)的入门指南,详细介绍了这款开源C++三维几何建模内核的核心概念与价值。内容涵盖从零开始搭建开发环境、编写第一个显示立方体的程序,到深入理解其几何与拓扑核心、掌握Draw测试工具及Handle内存管理等关键编程范式,旨在帮助开发者快速掌握这一工业级CAD/CAE/CAM应用开发利器。

java5的博客 1275

分支语句和循环语句

本章重点讲解分支语句和循环语句的使用 1. 什么是语句? C语言中由一个分号 ; 隔开的就是一条语句。 如下图: int a = 0; printf("Hei Tuo"); 1+2; 2. 分支语句(选择结构)

qq_59860806的博客 3140

基于 Node.js + MongoDB 技术栈的小众开源短链接程序 —— Lynx

开源的短链接程序有很多,像 YOURLS、Shlink 等大多采用 PHP + MySQL 技术栈。但我之前的服务器配置一般,再加上自己写的小玩具使用的是 Node.js + MongoDB,这些环境已经装在服务器上了,因此更倾向于寻找一款同样基于这套技术栈的短链接程序。搜索了很久才找到这么一款基于的短链接程序——Lynx。这个开源项目非常小众,Star 数只有两百多。

zc_mk的博客 826

【c语言】分支和循环语句

C语言中的分支与循环语句的用法以及它们之间的区别。

2403_88429866的博客 1460

S.BUS协议及编解码,C语言源码

1、简介 SBUS本质是一种串口通信协议,采用100K的波特率,8位数据位,两位停止位,偶效验,即8E2的串口通信。 值得注意的有三点: 1.SBUS采用负逻辑,所以无论接收还是发送都要进行硬件取反(注意,一定要硬件取反),电路如下 这是我在网上看资料时看到的电路,实际上我用的是下面这个电路 2.SBUS有两种模式, a.高速模式:每4ms发送一次 b...

qq_31232793的博客 1万+

Unity程序化河流生成工具Waterways:从算法到实践的全流程解析

程序化内容生成(PCG)是游戏开发与三维建模领域的关键技术,它通过算法自动创建游戏内容,显著提升开发效率。其核心原理是将设计规则转化为可执行的代码逻辑,从而生成复杂、多样且符合自然规律的环境资产。在开放世界游戏和模拟经营类项目中,程序化生成技术能够快速构建大规模、高一致性的自然场景,如山川、森林与水体网络。Unity引擎作为广泛使用的开发平台,其地形系统与着色器管线为程序化工具的集成提供了强大基础。本文聚焦于利用Waterways这一Unity工具集,深入探讨如何通过模拟重力驱动、流量累积等自然水力原理,在

weixin_33690963的博客 684

C语言分支和循环语句

执行完循环体内的代码后,程序会回到 while 语句处,再次检查 condition 的值,若为真则再次执行循环体中的代码,这个过程会一直重复,直到 condition 的值为假,此时循环终止,程序会继续执行循环之后的下一条语句。🔸此代码最后只打印出10个hehe,这是因为 i 和 j 都省略了初始化部分,尤其是 j 省略了 j=0,这会导致第一次外循环进来的时候,j 的内循环已经循环了三次,j 已经变成10了,当 i 再次增加的时候内循环就进不去了,所以只输出了10个。)结尾,这是C语言中语句的标志;

2301_81591231的博客 1637

大数据NiFi(十一):NiFi入门案例一

注意:数据写出的目录可以不需要提前在对应节点上创建,默认是可以自动创建,可以通过“Create Missing Directories”属性配置。将输出文件的权限设置为此属性的值,格式必须是UNIX rwxrwxrwx,用-来代替被拒绝的权限(例如rw-r--r--)或八进制数字(例如644),可以使用表达式,例如${file.permissions}。这里需要使用到的处理器是“GetFile”和“PutFile”,完成以上需求对“GetFile”和“PutFile”相关属性进行配置。

Lansonli(蓝深李)的博客 1489

深入认识分支语句和循环语句

详细了解分支语句和循环语句分支语句:ifswitch循环语句:whilefordo whilegoto语句c语言语句可分为:• 空语句• 表达式语句• 函数调用语句• 复合语句• 控制语句语句是一段指令或命令的集合,用于告诉计算机执行特定的操作。语句可以包含变量、表达式、函数调用和控制流指令等元素。

Alivia_Sophia的博客 1462

YOLOv11改进策略【Conv和Transformer】| IJCAI 2024 利用FreqFormer中的SFA 空间 - 频率注意力和CTA 通道转置注意力 二次改进C3k2

在FreqFormer模型中,SFA(Spatial-Frequency Attention)和CTA(Channel Transposed Attention)模块是关键组成部分,它们针对传统Transformer在图像超分辨率任务中的不足而设计,旨在更好地恢复高频细节,提升模型性能。

Limiiiing的博客 758

AI漫剧全套万能提示词合集

今天给大家整理一套已经跑通爆款漫剧的万能提示词库!覆盖:豆包剧本人设词 + 分镜生成词 + 即梦绘图词 + 动态优化词 + 防翻车固定词直接复制粘贴,新手也能做出稳定、高清、统一、有质感的AI漫剧!你是资深短视频漫剧编剧,擅长制作60秒竖屏爆款AI漫剧,请为我创作一集完整漫剧内容。要求:开头3秒高能抓眼,中段有冲突转折,结尾留强悬念钩子,节奏紧凑、适合短视频流量。首先生成固定统一人物人设:包含脸型、五官、发色、发型、穿搭、身材、气质、画风、光影细节,要求足够精细,保证全程角色不变脸。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1897

C语言 —— 分支语句和循环语句

介绍C语言中的各个控制语句:if、switch、while、for、do...while

YeZh1Yong 的博客 904

手把手教你学SINULINK-- --Linear Transformer 模块

模块是 Simulink 中用于模拟理想变压器行为的重要工具。通过本文的详细介绍,希望你能更好地理解和使用模块。

MHD0815的博客 2614

python的分支和循环语句

python的分支和循环语句分支语句循环语句案例 分支语句 分支语句: 计算机三种基础语句(顺序、分支、循环)之一,用于描述“如果满足什么条件,就怎么样,否则就怎么样”的语法。 语法格式 格式一: if 条件: 条件成立执行的代码 格式二: if 条件: 条件成立执行的代码 else 条件不成立执行的代码 格式三: if 条件1: 条件1成立执行的代码 elif 条件2: 条件2成立执行的代码 elif 条件3: 条件3成立执行的代码 else 条件都不成立

David_house的博客 1026

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 初始指针和结构体
下一篇: 函数——C语言的重要部分
宴之敖者、
博客等级 码龄4年 131粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值