[C语言]——分支和循环(1)

目录

一.if语句

1.if

2.else

3.分支中包含多条语句

4.嵌套if

5.悬空else问题

二.关系操作符

三.条件操作符


C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合。
我们可以 使用if 、 switch 实现分支结构,使用 for 、 while 、 do while 实现循环结构

一.if语句

1.if

if 语句的语法形式如下:
if ( 表达式 )
 语句
  • 表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行
  • 在C语言中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执行,表达式的结果如果是不是0,则语句执行。
例⼦:输⼊⼀个整数,判断是否为奇数:
#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d", &num);
 if(num % 2 == 1)
 printf("%d 是奇数\n", num);
 return 0;
}

2.else

如果⼀个数不是奇数,那就是偶数了,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数怎么表⽰呢? 这⾥就需要 if...else... 语句了,语法形式如下:
if ( 表达式 )
 语句1
else
 语句2
例⼦:输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印数偶数。
#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d", &num);
 if(num % 2 == 1)
  printf("%d 是奇数\n", num);
 else
  printf("%d 是偶数\n", num);
 return 0;
}
练习:输⼊⼀个年龄,>= 18岁就输出:成年,否则就输出:未成年
#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);
 if(age>=18)
  printf("成年\n");
 else
  printf("未成年\n");
 return 0;
}

3.分支中包含多条语句

默认在 if else 语句中默认都只控制⼀条语句,⽐如:
#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);
 if(age >= 18)
   printf("成年了\n");
   printf("可以谈恋爱了\n");
 return 0;
}
上⾯的代码,你会发现输⼊的值不管是>=18 还是⼩于18,"可以谈恋爱了" 都会打印在屏幕上。

这是因为 if 语句只能控制⼀条语句,就是 printf("成年了\n"); ,if语句为真,则打印成年了, if语句为假,则不打印,对于 printf("可以谈恋爱了\n"); 是独⽴存在的,不管if语句的条件的真假,都会被执⾏。那如果我们要if语句同时控制2条语句,怎么办呢?那就要使用 {} 将代码括起来,else 后也可以跟上大括号。如下:

#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);
 if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
 {
   printf("成年了\n");
   printf("可以交⼥朋友了\n");
 }
 return 0;
}
#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);
 if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句
 {
   printf("成年了\n");
   printf("可以交⼥朋友了\n");
 }
 else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
 {
   printf("未成年\n");
   printf("不可以早恋哦\n");
 }
 return 0;
}

4.嵌套if

if else 语句中, else 可以与另⼀个 if 语句连⽤,构成多重判断。
⽐如:要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数。请看如下代码:
#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d", &num);
 if(num == 0)
   printf("输⼊的数字是0\n");
 else if(num > 0) //这⾥的if 相当于嵌套在else语句中,形成了嵌套结构
   printf("输⼊的数字是正数\n");
 else
   printf("输⼊的数字是负数\n");
 return 0;
}
再⽐如:
输⼊⼀个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:负数。
#include <stdio.h>
int main()
{
 int num = 0;
 scanf("%d", &num);
 if(num>0)
 { //嵌套在if语句中,构成了嵌套的if语句
   if(num%2 == 0)
     printf("偶数\n");
   else
     printf("奇数\n");
 }
 else
 {
   printf("负数\n");
 }
 return 0;
}
练习:
输⼊⼀个⼈的年龄
如果年龄<18岁,打印"少年"
如果年龄在18岁⾄44岁打印"⻘年"
如果年龄在45岁⾄59岁打印"中⽼年"
如果年龄在60岁⾄89岁打印"⽼年"
如果90岁以上打印"⽼寿星"
参考代码:
//⽅法1
#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);
 if(age<18)
   printf("少年\n");
 else if(age<=44)
   printf("⻘年\n");
 else if(age<=59)
   printf("中⽼年\n");
 else if(age<=90)
   printf("⽼年\n");
 else
   printf("⽼寿星\n");
 return 0;
}


//带上⼤括号更容易看明⽩
#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);
 if(age<18)
 {
   printf("少年\n");
 }
 else
 {
   if(age<=44)
   {
     printf("⻘年\n");
   }
   else
   {
     if(age<=59)
     {
       printf("中⽼年\n");
     }
     else
     {
       if(age<=90)
         printf("⽼年\n");
       else
         printf("⽼寿星\n");
     }
   }
 }
 return 0;
}

5.悬空else问题

如果有多个 if else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配
我们⾸先从下⾯代码开始
 #include <stdio.h>
 int main()
 {
 int a = 0;
 int b = 2;
 if(a == 1)
   if(b == 2)
      printf("hehe\n");
 else
  printf("haha\n");
 return 0;
 }

输出结果:

为什么呢?
这就是悬空 else 的问题,如果有多个 if else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配
上⾯的代码排版,让 else 和第⼀个 if 语句对⻬,让我们以为 else 是和第⼀个if匹配的,当 if 语句不成⽴的时候,⾃然想到的就是执⾏ else ⼦句,打印 haha ,但实际上 else 是和第⼆个 if进⾏匹配的,这样后边的 if...else 语句是嵌套在第⼀个 if 语句中的,如果第⼀个 if 语句就不成立,嵌套 if else 就没机会执行了,最终啥都不打印
如果代码改成下⾯这样就更加容易理解了:
#include <stdio.h>
int main()
{
 int a = 0;
 int b = 2;
 if(a == 1)
 {
 if(b == 2)
   printf("hehe\n");
 else
   printf("haha\n");
 }
 return 0;
}
或者如果我们希望else确实和第⼀个if匹配,可以这样修改代码:
#include <stdio.h>
int main()
{
 int a = 0;
 int b = 2;
 if(a == 1)
 {
   if(b == 2)
     printf("hehe\n");
 }
   else
 {
     printf("haha\n");
 }
 return 0;
}
只要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使用,让代码的可读性更⾼。

二.关系操作符

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称 为“关系运算符”(relational operator),主要有下⾯6个。

  • > 大于运算符
  • < ⼩于运算符
  • >= ⼤于等于运算符
  • <= ⼩于等于运算符
  • == 相等运算符
  • != 不相等运算符

 关系表达式通常返回 0 或 1 ,表示真假。

C 语⾔中, 0 表示 假,所有非零值表示真。⽐如, 20 > 12 返回 1 12 > 20 返回 0 。关系表达式常⽤于 if while 结构。
if (x == 3) {
 printf("x is 3.\n");
}
注意: 相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符 ,不要混淆。有时候,可能会不⼩⼼写出下⾯的代码,它可以运⾏,但很容易出现意料之外的结果。
if (x = 3) ...
上⾯⽰例中,原意是 x == 3 ,但是不⼩⼼写成 x = 3 。这个式⼦表⽰对变量 x 赋值 3 ,它的返回值为 3 ,所以 if 判断总是为真。 为了防⽌出现这种错误,有的程序员喜欢将变量写在等号的右边
if (3 == x) ...
这样的话,如果把 == 误写成 = ,编译器就会报错。
/* 报错 */
if (3 = x) ...
另⼀个需要避免的错误是: 多个关系运算符不宜连用
i < j < k

上⾯⽰例中,连续使⽤两个⼩于运算符。这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。

(i < j) < k
上⾯式⼦中, i < j 返回 0 1 ,所以最终是 0 1 与变量 k 进⾏⽐较。如果想要判断变量 j 的值是否在 i k 之间,应该使⽤下⾯的写法。
i < j && j < k //并且
比如:我们输⼊⼀个年龄,如果年龄在18岁~36岁之间,我们输出⻘年。 如果我们这样写
当我们输⼊10的时候,依然输出青年,如下图:
这是因为,我们先拿18和age中存放的10⽐较,表达式18<=10为假, 18<=age 的结果是0,再拿0和 36⽐较,0<=36为真,所以打印了⻘年 ,所以即使当age是10的时候,也能打印 ⻘年 ,逻辑上是有问题,这个代码应该怎么写呢?
#include <stdio.h>
int main()
{
 int age = 0;
 scanf("%d", &age);
 if(age>=18 && age<=36)
 {
   printf("⻘年\n");
 }
 return 0;
}

三.条件操作符

条件操作符也叫 三目操作符(也是C语言中唯一一个三目操作运算符) ,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果
exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
练习1:使用条件操作符表⽰下⾯代码的逻辑
#include <stdio.h>
int main(){
 int a = 0;
 int b = 0;
 scanf("%d %d", &a, &b);
 if (a > 5)
 b = 3;
 else
 b = -3;
 printf("%d\n", b);
 return 0;
}


改造后:
#include <stdio.h>
int main()
{
 int a = 0;
 int b = 0;
 scanf("%d %d", &a, &b);
 b = a>5 ? 3:-3;
 printf("%d\n", b);
 return 0;
}
练习2:使用条件表达式实现找两个数中较大值
#include <stdio.h>
int main()
{
 int a = 0;
 int b = 0;
 scanf("%d %d", &a, &b);
 int m = a>b ? a : b;
 printf("%d\n", m);
 return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

xinput1_3.dll丢失都有什么办法可以有效的解决、xinput1_3.dll导致游戏不能启动怎么办?

使用电脑的过程中是不是会遇到关于某个dll文件丢失的提示&#xff0c;今天想和大家聊的是xinput1_3.dll文件&#xff0c;如果电脑提示xinput1_3.dll丢失有什么办法可以有效的解决&#xff0c;解决办法都有哪些&#xff0c;如果xinput1_3.dll丢失会对电脑有什么影响。&#xff0…

8、Linux-软件安装:rpm和yum;配置yum阿里云镜像源

一、介绍 Linux安装软件有两种方式&#xff0c; ①rpm&#xff1a;安装已有的安装包&#xff0c;类似于Windows中双击exe的安装包程序 ②yum&#xff1a;拉取远程仓库的文件&#xff0c;类似于python的pip install 区别&#xff1a;假设软件A依赖软件B&#xff0c;软件B依赖…

【打工日常】Linux实现可回滚的回收站功能

1.为什么创建可回滚的回收站功能&#xff1f; 为了让运维人员可以有回旋的余地&#xff0c;但是也要保证可以清理不需要的文件。 2.涉及到的文件安全概念&#xff1f; Linux的文件安全概念主要涉及到文件权限和文件系统安全两个方面。 那什么是文件权限&#xff1f; 在Linux系统…

数学建模【整数规划】

一、整数规划简介 整数规划其实是线性规划和非线性规划的一个特殊情况&#xff0c;即有的变量取值只能是整数&#xff0c;不能是小数。这时候就需要一个新的函数来解决问题。 对于整数规划&#xff0c;分为线性整数规划和非线性整数规划 线性整数规划&#xff1a;MATLAB可进…

VS2022打包C#安装包(最新、最全)

开发c#的一个小工具到打包环境碰壁了&#xff0c;在网上找了很多资料耶踩了很多坑&#xff0c;耗时1hour才打包完毕&#xff0c;避免以后碰到类似的问题再次记录&#xff0c;自认为步骤比较全面&#xff0c;如果有帮助麻烦点个赞呗&#xff01;&#xff01;&#xff01; 一、Mi…

MATLAB知识点:循环语句的经典练习题

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自​第4章&#xff1a;MATLAB程序流程控制 下面我们来看…

代码随想录(day1)

1. 二分查找&#xff1a; 704. 二分查找 - 力扣&#xff08;LeetCode&#xff09; 对于二分查找的思想较为简单&#xff0c;具体如下&#xff1a; 假设寻找的值为&#xff0c;分别定义两个变量,其中&#xff0c;。 再定义一个变量&#xff0c;如果&#xff0c;表示需要查找的元…

灵魂指针,教给(一)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 一、内存和地址 1.1 内存 在介绍知识之前&#xff0c;先来想一个生活中的小栗子&#xff1a; 假如把你放在一个有100间屋子的酒店…

flutter_gen依赖

flutter_gen 5.4.0 flutter项目内终端&#xff1a; dart pub global activate flutter_gen export PATH“ P A T H " : " PATH":" PATH":"HOME/.pub-cache/bin” fluttergen

为 OpenBMC 添加一个新的系统

1. 前言 在上一篇文章中向大家介绍了 OpenBMC 的是什么以及它的作用和应用场景&#xff0c;并且以一个自带的示例平台 romulus 展示了从下载源码包开始到启动系统并访问 Web 控制页面的整体构建流程。 通过前文已经了解到如何为已有的平台构建系统镜像&#xff0c;下面我们来…

AcWing 1027. 方格取数

解题思路 相关代码 import java.util.Scanner;public class Main {public static void main(String[] args){Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int nums[][] = new int[n+1][n+1];while(true){int a = scanner.nextInt();int b = scanner.…

1.初识python

1.初识python 编程语言是用来定义计算机程序的语言&#xff0c;用来向计算机发出指令。 1.python语言是一种面向对象的解释型高级编程语言。 解释型语言&#xff1a;使用专门的解释器对源码程序逐行解释成特定平台的机器并立即执行&#xff0c;是代码在执行时才被解释器一行行…

数据库(mysql)-新手笔记-基本知识点(1)

基本概念 数据库 Database :存储数据的容器 表 Table : 在数据库中存储的基本结构,它由行和列组成 行 Row : 表中的一条记录 列 Column : 表中的字段,定义了数据的类型和约束 数据类型 数据值 如 INT(整型),FLAOT(浮点型) ,DECIMAL (精确小数点) 字符串 如 VARCHAR(可变长度字…

Redis报错NOAUTH Authentication required怎么解决?

问题描述 在使用redis-cli时&#xff0c;可能会遇到报错 (error) NOAUTH Authentication required. 问题分析 这是因为在redis的配置文件 redis.windows-service.conf 中设置了密码&#xff0c;导致了这个问题 问题解决 1. 在redis.windows-service.conf文件查看密码 2. 输…

苹果曝出两个 iOS 系统 0-Day 漏洞

最近&#xff0c;苹果公司发布了紧急安全更新&#xff0c;解决了两个 iOS 零日漏洞。这些漏洞存在于 iOS 内核&#xff08;CVE-2024-23225&#xff09;和 RTKit&#xff08;CVE-2024-23296&#xff09;中&#xff0c;威胁攻击者可利用其绕过内核内存保护&#xff0c;这就给了具…

[R] ggplot2 - exercise (“fill =“)

We have made the plots like: Lets practice with what we have learnt in: [R] How to communicate with your data? - ggplot2-CSDN博客https://blog.csdn.net/m0_74331272/article/details/136513694 #tutorial 5 -script #Exercise 1 #1.1# ggplot(smoking_and_drug_use_…

20 easy 70. 爬楼梯

//假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 // // 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; // // // // 示例 1&#xff1a; // // //输入&#xff1a;n 2 //输出&#xff1a;2 //解释&#xff1a;有两种方法可以爬到楼顶。 /…

electron 架构

文章目录 Chromium 架构Electron 架构 Chromium 架构 主体架构&#xff1a;主进程 Browser&#xff0c;打开一个页面就会启动一个 Render 渲染进程&#xff0c;进程间通信就是 IPC 机制&#xff08;Inter-Process Communication&#xff09;。 主进程的 RenderProcessHost 和 R…

算法 - 【受限条件下可到达节点的数目】

受限条件下可到达节点的数目 题目示例1示例2 分析代码 题目 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。给你一个二维整数数组 edges &#xff0c;长度为 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和…

【通信原理笔记】【一】确定信号分析——1.4 信号的功率谱与能量谱

文章目录 前言一、功率谱与能量谱1. 从频域求能量说起2. 再聊聊密度3. 单边能量谱与带宽3.1 实信号的共轭对称性3.2 单边谱与带宽 二、信号的相关函数1. 说回到时域分析 总结 前言 上一篇我们学习了信号的功率与能量&#xff0c;现在我们继续深入&#xff0c;探讨一下信号的功…
最新文章