004-流程控制-C语言笔记

学习目标

1.【掌握】关系运算符和关系表达式

2.【掌握】逻辑运算符和逻辑表达式

3.【掌握】运算符的优先级和结合性

4.【掌握】if-else if-else结构的使用

5.【掌握】变量的作用域

6.【掌握】三目运算符和三目表达式

7.【了解】如何生成一个随机数

一、关系运算符和关系表达式

关系运算符:用来比较两个表达式(数据)之间的大小关系,C语言中的关系运算符有 > 、>=、<、<=、=、!=来。

关系表达式:由关系运算符连接起来的式子,就叫做关系表达式,也可以叫比较表达式。

 
1
2
3
intnum1=10;
intnum2=20;
num1>num2;//这就是关系表达式

关系表达式描述的是1个条件,并且这个条件只有两种结果,一种是成立,另一种是不成立。char类型的数据也可以参与比较运算,比的是char数据对应的ASCII码值大小。

用int类型的变量来表示1个关系表达式的真假,0 代表假 ,1代表真

 
1
2
3
4
5
6
7
8
intnum1=10;
intnum2=20;
 
intresult=num1>num2;//result用于接收比较结果
intresult1=num1<num2;
 
printf("result = %d\n",result);//输出 result = 0
printf("result1 = %d\n",result1);//输出 result = 1

二、逻辑运算符和逻辑表达式

逻辑运算符:用来判断多个关系表达式之间的关系。C语言中常用的逻辑运算符有&&(逻辑与)、||(逻辑或)、!(逻辑非)。

逻辑表达式:由逻辑运算符连接起来的关系表达式式子,就叫做逻辑表达式。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
intnum1=10,num2=20;
 
//存储关系表达式的结果
intresult=num1>num2;
intresult1=num1<num2;
 
//输出关系表达式的结果
printf("result = %d\n",result);//result = 0
printf("result1 = %d\n",result1);//result = 1
 
//对关系表达式的结果进行逻辑运算并存储收逻辑表达式的结果
intres=num&&num1;
intres1=num||num1;
intres2=!res1;
 
//输出逻辑表达式的结果
printf("res = %d\n",res);// res = 0
printf("res1 = %d\n",res1);//res1 = 1
printf("res2 = %d\n",res2);//res2 = 0

&&运算:只有两个表达式同时成立,结果才为1,其他都为0

||运算:只有两个表达式同时不成立,才为0,其他都为1

!运算:表达式成立,结果为0,表达式不成立结果为1

逻辑运算短路问题:

&&是先计算左边的条件,再计算右边的条件。如果左边表达式的结果是不成立, 就可以直接确定整个逻辑表达式为不成立。右边的条件表达式将不会再执行。

|| 是先计算左边的条件,再计算右边的条件。如果左边的条件计算出来是成立,就可以直接确定整个逻辑表达式成立。右边的条件表达式将不会再执行。

 
1
2
3
4
5
6
7
8
9
inti  =1,j=1;
intres=i++>0||++i<10;//i++ > 0已经为真,就不会执行 ++i < 10这个表达式了
intres1=j++<0&&++j<10;//j++ < 0已经为假,就不会执行 ++j < 10这个表达式了
 
printf("res = %d\n",res);//res = 1
printf("i = %d\n",i);//i = 2
 
printf("res1 = %d\n",res1);//res1 = 0
printf("j = %d\n",j);//j = 2

三、运算符的优先级和结合性

运算符优先级:C语言的表达式可以有很多种运算符来共同参与,当多种运算符参与表达式的时候,先算那1个,后算那1个呢?所以我们就要考虑运算符之间的优先级了。C语言中的运算符分为15个等级,1级的优先级最高,15级的优先级最低,运算符的优先级决定先进行那1个运算。

运算符的结合性:优先级决定了先算哪1个后算哪1个,但是当优先级相同的时候,是从左到右的计算,还是从右到左的计算则是根据结合性来决定的。

四、if-else语句的使用

if结构

作用: 可以将1段代码在满足某个条件的时候执行,否则就不执行。

缺点: 只能在条件满足的时候执行代码,条件不满足的时候没法搞。

需求: 希望在条件成立的时候执行1段代码,条件不成立的时候执行另外的1短代码。if结构也可以实现,但是效率低下,要写多个if结构语句,所以条件要判断多次。

 
1
2
3
4
5
6
7
8
9
intmoney=599;
 
if(money>=500){
    printf("走,下课小明请吃饭!\n");
}
 
if(money<500){
    printf("放学别走,天台决战!\n");
}

if-else结构

作用:在条件成立的时候执行1段代码,条件不成立的时候执行另外的1短代码. 并且条件只判断1次.

语法:

 
1
2
3
4
5
if(条件表达式){
  执行代码1;
}else{
  执行代码2;
}

if-else结构执行步骤

1.先计算if后条件表达式的结果。

2.如果结果为真:就执行if块中的代码1,执行完毕之后,结束if-else结构往下执行。特别注意这个时候不会执行else中的代码2。

3.如果结果为假:就跳过if中的代码1,执行else中的代码2,执行完毕之后继续往下执行。

if-else if-else结构:

作用: 可以有序的判断多个条件,当条件成立的时候执行对应的代码。

语法:

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(条件表达式1)
{
    执行代码1;
}
elseif(条件表达式2)
{
    执行代码2;
}
elseif(条件表达式3)
{
    执行代码3;
}
else
{
    执行代码;
}

if-else if-else结构执行步骤

1.从上到下的挨个的去判断每1个条件表达式,如果条件不成立,再判断下1个条件。

2.只要有1个条件是成立的,就会执行其中的代码,执行完毕之后就会立即结束整个结构。

3.如果所有的条件都不成立,那么就执行else中的代码。

五、变量的作用域

当CPU在执行程序的时候,如果执行完1对大括弧,会将声明在这个大括弧之中的变量立即回收掉。所以,定义在1对大括弧之中的变量,只能在这个大括弧之中访问。出了这个大括弧就无法访问了,因为出了这个大括弧以后 定义在大括弧之中的变量就被系统回收掉了。

在多个层级关系的大括弧中,内层大括弧可以声明1个和外层大括弧名字相同的变量。在内层大括弧中,从声明同名变量的地方开始,访问这个同名变量访问的是内层变量。C语言根据变量作用域的不同,将变量分为局部变量和全局变量。

局部变量:在函数内部定义的变量,称为局部变量。形式参数也属于局部变量。局部变量只在定义它的函数内部有效,即局部变量只有在定义它的函数内部使用,其它函数不能使用它。

全局变量:在所有函数外部定义的变量,称为全局变量。全局变量的作用范围是从定义变量的位置开始到源程序结束,即全局变量可以被在其定义位置之后的其它函数所共享。

 
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
 
intnum=10;//全局变量
 
intmain(){
    printf("num = %d\n",num);//num = 10
    
    intnum=20;//局部变量
    printf("num = %d\n",num);//num = 20
    return0;
}

六、三目运算符和三目表达式

三目运算符有三个操作数参与运算,三目表达式就是有三个操作数参与运算的表达式。

语法:表达式1 ?  表达式2 : 表达式3;

执行流程:如果表达式1成立,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为条件表达式的值。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
intmain(){
    inta=10;
    intb=a>0?printf("printf函数返回值为int类型哦\n"):printf("不管你信不信,反正我信了\n");
    
    printf("b = %d\n",b);
    /*
     printf函数返回值为int类型哦
     b = 37
     */
    return0;
}

七、如何生成一个随机数

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/*
先引入1个头文件.叫做stdlib.h
调用个函数.
int num =  arc4random_uniform(写1个整型的数);
就会返回0到这个整型的数-1中的1个随机的整数,然后赋值给num变量。
*/
 
#include <stdio.h>
#include <stdlib.h>
 
intmain(intargc,constchar*argv[]){
    
    intnum=  arc4random_uniform(6)+5;//产生5-10的随机数
    printf("num = %d\n",num);
    
    return0;
}

004-流程控制-C语言笔记的更多相关文章

  1. No1_2. 流程控制_java学习笔记

    import java.util.Scanner; import java.lang.Math; public class HelloForWhile { /** * 文档注释,程序名称:HelloF ...

  2. 流程控制 - PHP手册笔记

    脚本由语句构成,语句靠流程控制实现功能,这一节主要介绍了几个关键字的使用. elseif elseif和else if的行为完全一样,如果用冒号来定义if/elseif条件,那就不能用两个单词的els ...

  3. go语言入门(3)运算符及流程控制

    1,运算符 算数运算符:+   -   *   /   %   ++   -- 关系运算符:==    !=    <    >    <=    >== 逻辑运算符:按位与 ...

  4. Go的流程控制

    流程控制 Go语言支持最基本的三种程序运行结构:顺序结构.选择结构.循环结构. 顺序结构:程序按顺序执行,不发生跳转. 选择结构:依据是否满足条件,有选择的执行相应功能. 循环结构:依据条件是否满足, ...

  5. Go语言学习笔记-流程控制(二)

    Go语言流程控制 字典类型Map 1.上节遗留:map字典类型 变量声明:var myMap map[string] PersonInfo 其中,myMap是变量名,string是键的类型,Perso ...

  6. C语言学习笔记(四) 流程控制

    流程控制 流程控制,说通俗一点就是程序代码执行的顺序.不管对于哪门语言来说,流程控制都是很重要的一部分内容: 流程控制的分类,可以分为三大类: 1.顺序 这个很好理解,顺序执行就是代码从上往下一行行的 ...

  7. [Java入门笔记] Java语言基础(四):流程控制

    流程控制指的是在程序运行的过程中控制程序运行走向的方式.主要分为以下几种: 顺序结构 顺序结构,顾名思义,是指程序从上往下逐步顺序执行.中间没有任何的判断和跳转. 分支结构 Java提供两种分支结构: ...

  8. [java学习笔记]java语言基础概述之运算符&程序流程控制&for循环嵌套

    一.运算符 算数运算符 +,-,*,/,%,++,-- 1.+,-,*,/ 整数除以整数的结果为舍弃了小数部分的整数. 2.%:取余 %左右都为正数,左边小于右边结果为左边值,如,4%5=4 %左边大 ...

  9. c语言学习笔记(4)——流程控制

    一.什么是流程控制 程序代码执行的顺序 流程控制分类 顺序执行 选择执行 定义 有选择的执行某些代码 分类 if switch 循环执行 定义 某些代码会被重复执行 分类 for while do w ...

随机推荐

  1. Python入门到放弃

    前传:计算机基础 01-计算机基础1 02-计算机基础2 第一章:Python入门 01-python入门之解释器环境安装 02-python入门之变量和基本数据类型 03-python内存管理之垃圾 ...

  2. 【盘它!】那些让效率MAX的工具和方法(Mac篇)

    一.前言 人类之所以伟大,是因为会创造并使用工具! 工欲善其事必先利器.高效的工具和方法不仅能最大化 节省我们的时间,还可以一定程度上让我们 保持专注,以达到 事半功倍 的效果. 但仅仅有工具不会使用 ...

  3. 14. java基于excel模板导出excel=>使用jxls最新版(注意点)

    注意点:如下: jxls官网:http://jxls.sourceforge.net/getting_started.html

  4. Mol Cell Proteomics. | MARMoSET – Extracting Publication-ready Mass Spectrometry Metadata from RAW Files

    本文是马克思普朗克心肺研究所的三名研究者Marina Kiweler.Mario Looso和Johannes Graumann发表在8月刊的MCP的一篇文章. 由于Omics实验经常涉及数百个数据文 ...

  5. 01FPGA设计流程

    今天学习了FPGA设计流程的视频,我理解要做一个完整的FPGA系统,所要经历的步骤,先将它简单总结如下: 我在对上面的流程图进行解释: 第一:设计定义就是我们这个FPGA系统或者FPGA设计所要实现的 ...

  6. macOS 去掉系统软件更新红点提示

    当前系统提示更新到macOS Catalina .打开终端执行以下命令: 第一步运行: sudo softwareupdate --ignore "macOS Catalina" ...

  7. Jmeter4.0接口测试之案例实战(七)

    在前面的知识体系中介绍了Jmeter的基本应用,下来通过具体的案例来看Jmeter在接口测试中的具体案例实战部分. HTTP是基于应用层的协议,底层的网络传输层它不需要去关心,同时它是一个无状态的协议 ...

  8. 一篇漫画故事带你理解透HTTPS(上)

    2020年蝙蝠纪元,二毛一如往常的呆在家中,不敢外出去浪. 为排解心中之闷,二毛抽了一口老烟,熟练的打开了全球最大的同性交友网站,准备假装了解下最近流行的项目... 只听啪的一声回车键,哪知浏览器蹦出 ...

  9. 面试都在问的微服务、服务治理、RPC、下一代微服务框架... 一文带你彻底搞懂!

    文章每周持续更新,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 单体式应用程序 与微服务相对的另一个概念是传统的单体式应用程序( ...

  10. 透过 ReentrantLock 分析 AQS 的实现原理

    对于 Java 开发者来说,都会碰到多线程访问公共资源的情况,这时候,往往都是通过加锁来保证访问资源结果的正确性.在 java 中通常采用下面两种方式来解决加锁得问题: synchronized 关键 ...