在顺序结构中,各语句是按自上而下的顺序执行的,执行完上一个语句就自动执行下一个语句,是无条件的,不必作任何判断。实际上,很多情况下,需要根据某个条件是否满足来决定是否执行指定的操作任务,或者从给定的两种或多种操作选择其一。

4.1选择结构和条件判断
例:定义一个函数,如果饿了吃饭。如果不饿不吃饭。

View Code
code result

C语言有两种选择语句:(1)if语句,用来实现两个分支的选择结构;(2)switch语句,用来实现多分支的选择结构。

4.2 用if语句实现选择结构
4.2.1 用if语句处理选择结构举例

例:实现两个变量的交换

View Code
Code Result

4.2.2 if语句的一般形式

if语句的一般形式如下:

if(表达式) 语句1

     [else 语句2]

if语句中的“表达式”可以使关系表达式、逻辑表达式,甚至是数值表达式。

关系表达式就是两个数值进行比较的式子。

根据if语句的一般形式,if语句可以写成不同的形式,最常用的优以下3中形式:

(1)if(表达式)

语句1[复合语句] (没有else子句部分)

(2)if(表达式) (有else子句部分)

     语句1[复合语句]

else

     语句2[复合语句]

(3)if(表达式1) 语句1[复合语句] (在else部分又嵌套了多层的if语句)

else if(表达式2) 语句2[复合语句]

else if(表达式3) 语句3[复合语句]

     …                      …

else if(表达式m) 语句m[复合语句]

else 语句m+1[复合语句]

注意:复合语句应当用花括号括起来。{} 花括号括起来的多条语句称为复合语句。

4.3 关系运算符和关系表达式
在C语言中,比较符(或称比较运算符)称为关系运算符。所谓“关系运算”就是“比较运算”,将两个数值进行比较,判断其比较的结果是否符合给定的条件。

4.3.1 关系运算符机器优先次序

C语言提供6中关系运算符:

①< (小于)

②<= (小于或等于)

③> (大于)

④>= (大于或等于)

⑤== (等于)

⑥!= (不等于)

①②③④优先级相同(高),⑤⑥优先级相同(低)

关于优先次序:

(1)前四种关系运算符(< <= > >=)的优先级相同,后2种也相同。前4种高于后2种。

(2)关系运算符的优先级低于算术运算符

(3)关系运算符的优先级高于赋值运算符

4.3.2 关系表达式

用关系运算符将两个数值或数值表达式连接起来的式子,称关系表达式。关系表达式的值是一个逻辑值,即“真”或“假”。

在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”。更准确来说,是“!0”代表真,“0”代表假。

4.4 逻辑运算符和逻辑表达式

4.4.1 逻辑运算符及其优先次序

有3中逻辑运算符:与(AND) 或(OR) 非(NOT)。注意:在C语言中不能在程序中直接用AND、OR、NOT作为逻辑运算符,而是用其他符号代替。C逻辑运算符及其含义如下:

“&&”和“||”是双目(元)运算符,它要求有两个运算对象(操作数);“!”是一目(元)运算符,只要求有一个运算对象。逻辑运算真值表:

按以下的优先次序:

(1)!(非)->&&(与)->||(或),即“!”为三者中最高的

(2)逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符。

4.4.2 逻辑表达式

逻辑表达式的值应该是一个逻辑量“真”或“假”。

实际上,逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是字符型、浮点型、枚举型或指针型的纯量型数据。(关于纯量型的讲解,在本人博客里C Language的第2章里有讲解)系统最终以0和非0来判定他们属于“真”或“假”。逻辑运算的真值表(用0和非0表示的另一种格式):

在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符;如

(1)a&&b&&c。只有a为真(非0)时,才需要判别b的值。只有当a和b都为真的情况下才需要判别c的值。如果a为假,就不必判断b和c的值(此时整个表达式已确定为假)。换个说法,就是a若为假,则b和c被短路了,不会被执行。

(2)a||b||c。只要a为真(非0)是,就不必判断b和c。只有a为假,才判别b。a和b都为假才判别c。

4.4.3 逻辑型变量

这是C99有所增加的一种数据类型。可将关系运算和逻辑运算的结果存到一个逻辑变量中,以便于分析和运算。定义逻辑变量用类型符_Bool.

float score;

scanf(“%f”,&score);

_Bool a ,b; //a和b被定义为逻辑型变量

a = score>=60; //将关系表达式score>=60的值赋给逻辑变量a

b = score<=69; //将关系表达式score<=60的值赋给逻辑变量b

if(a&&b) //如果a和b均为真,输出分数等级为C

     printf(“The grade is C\n”);

如果在源文件中用#include指令包含了头文件stdbool.h,那么上面的程序段可以写成:

float score;

scanf(“%f”,&score);

bool a ,b; //a和b被定义为逻辑型变量

a = score>=60; //将关系表达式score>=60的值赋给逻辑变量a

b = score<=69; //将关系表达式score<=60的值赋给逻辑变量b

if(a&&b) //如果a和b均为真,输出分数等级为C

     printf(“The grade is C\n”);

注意:在使用bool类型时,要先了解自己所用的编译系统能否允许使用逻辑型变量bool和true和false.

4.5 条件运算符和条件表达式

有一种if语句,当被判别的表达式的值为“真”或“假”时,都执行一个赋值语句且向同一个变量赋值,如:

if(a>b)

     max = a;

else

     max = b;

以上的if语句可以改写为:

     max = (a>b)?a:b;

条件运算符有两个符号(?和:)组成,必须一起使用,要求有3个操作对象,称为三目(元)云三幅,它是C语言中唯一的一个三目运算符。

条件表达式的一般形式为:

表达式1?表达式2:表达式3

执行过程:先计算出表达式1的值,若为非零(真),则执行表达式2;否则,执行表达式3.

说明:

(1)条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假)则求解表达式3,表达式3的值就作为整个条件表达式的值。

(2)条件运算符优先于赋值运算符,因此复制表达式的求解过程是先求解条件表达式再将它的值赋给max

条件运算符的优先级别比关系运算符和算术运算符都低。

例:输入一个字符,判别它是否为大写字母,若是,则转换为小写字母。

#include <stdio.h>

int main()

{

     char ch;scanf(“%c”,&ch);ch = (ch>=’A’&&ch<=’Z’)?(ch+32):ch;printf(“%c\n”,ch);return 0;

}

运行结果 A 回车 a

4.7选择结构的嵌套
在if语句中又包含一个或多个if语句称为if语句的嵌套(nest)。其一般形式如下:

if()

     if()   语句1else()       语句2

else

     if()            语句3else()       语句4

应当注意,if与else的配对关系。else总是与它上面的最近的未配对的if配对。如:

if()

     if()    语句1

else

     if()    语句2

else 语句3

有些编程者会把else写在与第1个if(外层if)同一列上,意图是使else与第1个if对应,但实际上else是与第2个if配对,因为它们相距最近。

为了避免二义性的混淆,最好使内嵌if语句也包含else部分。如:

if()

{

     if() 语句1

}

else 语句2

这时“{}”限定了内嵌if语句的范围,因此else与第一个if配对。

4.7用switch语句实现多分支选择结构
C语言提供switch语句直接处理多分支选择。

switch语句是多分支选择语句。

switch渔具店作用是根据表达式的值,是流程跳转到不同的语句。switch语句的一般形式如下:

switch(表达式)

{

     case 常量1 : 语句1

case 常量1 : 语句1

     …                      …case 常量n : 语句ndefault :      语句n+1

}

说明:

(1)switch后面的括号内的“表达式”,其值的类型应为整数类型(包括字符型)

(2)switch下面的花括号内是一个复合语句。这个复合语句包括若干语句,它是switch语句的语句体。语句体内包含多个以关键字case开头的语句行和最多一个以default开头的行。

case后面跟一个常量(或常量表达式),如:case ‘A’ ,它们和default都是标号(label或称标签、标记)的作用,用来标志一个位置。执行switch语句时,先计算switch后面的“表达式”的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句。如果没有与switch表达式相匹配的case常量,流程转去执行default标号后面的语句。换句话说,就是表达式和case后面的常量比较,有适配的就执行对应的语句;如果case没有匹配的常量,就执行default后面的语句。

(3)可以没有default标号,此时如果没有与switch表达式相匹配的case常量,则不执行任何语句,流程转到switch语句的下一个语句。

(4)各个case标号出现次序不影响执行结果。如,可以先出现default标号,然后再出现case标号。

(5)每一个case常量必须互不相同;否则就会出现相互矛盾的现象(对switch表达式的同一个值,有两种或多种执行方案)

(6)case标号只起标记的作用。如果在个case子句中没有break语句,则会连续输出剩下从case标号对应的语句,直至遇到break或者结束switch选择分支。

注意:一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构,即终止switch语句的执行。最后一个case子句(或者default子句)中可不必加break语句,因为流程已到了switch结构的结束处。

(7)在case子句中虽然包括了一个以上执行执行语句,但可以不必用花括号括起来,会自动顺序执行本case标号后面所有的语句。当然也可以加上花括号。

(8)多个case标号可以共用一组执行语句。

例:case ‘A’

     case ‘B’case ‘C’ : printf(“>60\n”);break;

当值为’A’ ’B’ ’C’时,都会执行同一组语句,输出“>60”,然后换行。

例:

View Code

运行结果:输入a 输出结果为abc;
深圳網站建設 https://www.sz886.com/

简单的C程序设计——选择结构程序设计相关推荐

  1. 第4章 简单的C程序设计——选择结构程序设计

    在顺序结构中,各语句是按自上而下的顺序执行的,执行完上一个语句就自动执行下一个语句,是无条件的,不必作任何判断.实际上,很多情况下,需要根据某个条件是否满足来决定是否执行指定的操作任务,或者从给定的两 ...

  2. c语言选择结构程序设计报告,《C语言程序设计》实验报告选择结构程序设计.doc...

    <C语言程序设计>实验报告选择结构程序设计.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会 ...

  3. C语言输入输出及选择结构程序设计的综合应用——简单超级战士游戏and 取牙签游戏

    最全C系列题目!从0到管理系统 一.C语言数据类型及输出--体重是否正常.球的体积.计算存银行利息and浮点数长度与精度 二.C语言运算符与表达式--输出逆序数and二进制包含0和1的数量and判断是 ...

  4. c语言选择结构程序设计笔记,C语言选择结构程序设计.ppt

    <C语言选择结构程序设计.ppt>由会员分享,可在线阅读,更多相关<C语言选择结构程序设计.ppt(32页珍藏版)>请在人人文库网上搜索. 1.选择结构程序设计,关系运算符和关 ...

  5. c语言选择结构程序设计实验报告6,c语言-选择结构程序设计实验报告4.doc

    c语言-选择结构程序设计实验报告4.doc 实验报告 实验题目:选择结构程序设计 实验目的: 了解C语言表示逻辑量的方法(以0代表"假"以非0代表"真"). 学 ...

  6. c语言ns图选择结构程序设计,项目3选择结构程序设计.ppt

    项目3选择结构程序设计 项目3 选择结构程序设计 [任务目标] 掌握关系运算符.逻辑运算符和条件运算符的用法 掌握选择结构程序设计的方法 能够画出选择结构的流程图 能够用选择结构程序设计解决实际问题 ...

  7. c语言预测未来身高的编程源代码,C语言选择结构程序设计编程题

    实验2 选择结构程序设计 一.实验目的: 1.掌握选择控制语句的使用方法: 2.了解C程序语句的执行过程. 二.实验内容: 1.编写程序:输入一个整数,判断该数的奇偶性.(输出相应的标志even-偶数 ...

  8. c语言程序设计 第三版 哈工大,C语言程序设计_哈工大(3):选择结构程序设计.pdf...

    圳 职 业 技 术 学 院Shenzhen Polytechnic 三单元:选择结构程序设计 教学内容 选择结构程序设 教学目标 应知 关系表达式与逻辑表达式 if 语句及条件表达式 switch 语 ...

  9. c语言中描述y是奇数,4章选择结构程序设计C语言入门习题

    C语言入门习题 第四章 选择结构程序设计 一.选择题 1.有以下程序 main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) pr ...

最新文章

  1. keras 的 example 文件 conv_lstm.py 解析
  2. 用Python爬取42年数据,告诉你高考有多难!
  3. python输入星期几_Python练习实例31 | 输入首字母,判断是星期几
  4. P2082 区间覆盖(加强版)
  5. 如何分析SAP UI5应用的undefined is not a function错误
  6. 2016重庆计算机一级考试题型,重庆计算机一级考试真题2016年最新(笔试+上机).doc...
  7. axios源码中的10多个工具函数,值得一学~
  8. “约见”面试官系列之常见面试题之第八十篇之css常见属性(建议收藏)
  9. Pandas-DataFrame基础知识点总结
  10. java如何画矩形条和填充_java.awt.Graphics 类的哪个方法可绘制填充矩形?
  11. python3对接聊天机器人API
  12. matlab硬币覆盖问题和八皇后,八皇后问题matlab程序
  13. 吴恩达机器学习2——单变量线性回归
  14. Hive 建表语句大全
  15. 中文版-动手学深度学习
  16. 入门物联网需要服务器
  17. 激光雷达在自动驾驶中的应用
  18. 二维数组指针表示,C语言指针引用二维数组详解
  19. 文本分类概述(nlp)
  20. VUE项目配置UEditor集成秀米编辑器

热门文章

  1. 微信小程序真的能赚钱吗?
  2. 看hp 服务器cpu型号怎么看,惠普电脑怎么查看型号的
  3. easypoi导出excel表格实现列宽自适应
  4. Java通过POI或Freemarker生成word文档,使用Jfreechart创建统计图表
  5. Drill在Ubuntu配置
  6. css命名规范--小技巧
  7. 【树莓派4】ARM64 | 家庭网盘【Seafile】的部署 | raspberrypi 4
  8. 如何将ieda设置为中文版
  9. 20145202马超 《网络对抗》第一次作业
  10. sql 临时表代替left join提高性能