【谭浩强C程序设计精讲 chap4】选择结构程序设计

2024-01-20 17:28

本文主要是介绍【谭浩强C程序设计精讲 chap4】选择结构程序设计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 第4章 选择结构程序设计
    • 一、用 if 语句实现选择结构
    • 二、用 switch 语句实现多分支选择结构
    • 三、条件运算符和条件表达式

第4章 选择结构程序设计

一、用 if 语句实现选择结构

  • 一般形式:
    if (表达式)  语句1
    [ else  语句2 ]

  • 其他形式,常用的有以下三个:

    • (1)if (表达式)   语句1

    • (2)if (表达式)
          语句1
         else
          语句2

    • (3)if (表达式1)     语句1
         else if (表达式2)  语句2
         else if (表达式3)  语句3
         … 
         else if (表达式m)  语句m
         else       语句m+1


  • 【说明】
  1. 整个 if 语句可以写在多行上,也可以写在一行上

    //写法1
    if      (number>500) cost=0.15;
    else if (number>300) cost=0.10;
    else if (number>100) cost=0.075;
    else if (number>50)  cost=0.05;
    else                 cost=0; //写法2(推荐这种写法)
    if(number>500) cost=0.15;
    else if(number>300) cost=0.10;
    else if(number>100) cost=0.075;
    else if(number>50)  cost=0.05;
    else                 cost=0; 
    
  2. 常用形式(3)中的语句1~语句m+1都是 if 语句的内嵌语句,它们是 if 语句中的一部分。每个内嵌语句结尾都要有分号(它是语句组成的成分),否则出现语法错误。

    if(x>0) y=1;  //结尾必须有分号
    else y=-1;  //结尾必须有分号
    
  3. if 语句无论写在几行上,都是一个整体,属于同一个语句。不要认为 if 部分是一个语句,else 部分是一个语句。注意:else 子句不能作为语句单独使用,它必须是 if 语句的一部分,与 if 配对使用。

  4. 语句1~语句m可以是一个简单的语句,也可以是一个包括多个语句的复合语句(用花括号括起来)。

    if(x>0) 
    {y=1;z=2;
    }
    else 
    {y=-1; z=9;
    }
    
  5. 内嵌语句也可以是一个if语句。
    如用 if 语句表示阶跃函数:
    y = { 1 ( x > 0 ) 0 ( x = 0 ) − 1 ( x < 0 ) y=\left\{ \begin{aligned} 1 \ \ \ (x>0)\\ 0 \ \ \ (x=0)\\ -1 \ \ \ (x<0)\\ \end{aligned} \right. y= 1   (x>0)0   (x=0)1   (x<0)

    if(x<0) y=-1;
    else  //内嵌语句是一个 if 语句,它也是else的一部分
    {if(x==0)y=0;elsey=1;
    }
    
  6. 在 if 语句中要对给定的条件进行检查,判定所给定的条件是否成立。判断的结果是一个逻辑值“是”(“真”)或“否”(“假”)

  • 示例:实现输入x的值,输出y相应值
    y = { x ( x < 1 ) 2 x − 1 ( 1 ≤ x < 10 ) 3 x − 11 ( x ≥ 10 ) y=\left\{ \begin{aligned} &x \ \ \ &(x<1)\\ &2x-1 \ \ \ &(1\leq x<10)\\ &3x-11 \ \ \ &(x\geq 10)\\ \end{aligned} \right. y= x   2x1   3x11   (x<1)(1x<10)(x10)
#include <stdio.h>
int main(void)
{int x,y;printf("输入x:");scanf("%d",&x);if(x<1){y=x;printf("x=%d,y=x=%d\n",x,y);}else if(x>=1 && x<10){y=2*x-1;printf("x=%d,y=2*x-1=%d\n",x,y);}else{y=3*x-11;printf("x=%d,y=3*x-11=%d\n",x,y);}	2
}

运行结果1:
请添加图片描述

运行结果2:
在这里插入图片描述

运行结果3:
在这里插入图片描述

二、用 switch 语句实现多分支选择结构

  • 一般形式:
  • switch (表达式)
    {
    case  常量1 : 语句1
    case  常量2 : 语句2
       … 
    case  常量n : 语句n
    default :     语句n+1
    }

  • 【说明】
  1. 上面 switch 一般形式中括号内的表达式,其值的类型应为整数类型(包括字符型)

    switch(a+b)//a+b的值是整数
    {case 2:   break;case 33:  break;case 'a': break;default:  break;
    }
    
  2. switch 下面的花括号内是一个复合语句

    • 这个复合语句包括若干语句,它是switch语句的语句体
    • 语句体内包含多个以关键字 case 开头的语句行和最多一个default 开头的行。
    • case 后面跟一个常量(或常量表达式),如case ‘A’,它们和 default 都是起标号的作用,用来标志一个位置。
    • 执行 switch 语句时,先执行 switch 后面表达式的值,然后将它与 case 标号比较,如果与某一个 case 标号中的常量相同,流程就转到此 case 标号后面的语句。如果没有与 switch 表达式相匹配的 case 常量,流程转去执行 default 标号后面的语句。
  3. 可以没有 default 标号,此时如果没有与 switch 表达式相匹配的 case 常量,则不执行任何语句,流转到 switch 语句的下一个语句。

  4. 各个 case 标号出现次序不影响执行结果。

  5. 每一个 case 常量必须互不相同;否则就会出现互相矛盾的现象。但是如果语句后面加上 break 则执行到 break 后跳出 switch 语句。

  6. case 标号只起到标记的作用,不作条件检查。

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

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

    case 'A':
    case 'B':
    case 'C':printf(">60\n");break;
    ...
    
  • 示例:功能要求:输入学生分数,百分制,输出学生的等级。
    (1)90分以上为等级A
    (2)80-89分为等级B
    (3)70-79分为等级C
    (4)60-69分为等级D
    (5)60分以下为等级E
#include <stdio.h>
int main(void)
{float score;char grade;printf("请输入学生的成绩:");scanf("%f",&score);while(score>100 || score<0){printf("\n输入错误,请重新输入:");scanf("%f",&score);}switch((int)(score/10)){case 10:case 9:grade='A';break;case 8:grade='B';break;case 7:grade='C';break;case 6:grade='D';break;default:grade='E';break;}printf("学生成绩等级为 %c\n",grade);  return 0;
}

运行测试结果1:
在这里插入图片描述

运行测试结果2:
在这里插入图片描述

三、条件运算符和条件表达式

  • 条件运算符:由两个符号(?和:)组成,必须一起使用。

    要求3个操作对象,称为三目(元)运算符,它是C语言中唯一的一个三目运算符。

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

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

  • 执行顺序:
    在这里插入图片描述

  • 【说明】

  1. 条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表示2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值。
    //赋值表达式
    max=(a>b)?a:b;//功能:将a和b二者中的大者赋给max
    
  2. 条件运算符优先级高于赋值运算符,所以以上示例赋值表达式中,先求解条件表达式,再将它的值赋给max。
  3. 条件表达式后面加一个分号就是一个独立的语句。
    //赋值表达式形式
    max=(a>b)?a:b;
    //条件表达式语句形式
    (a>b)?(max=a):(max=b);
    //相当于
    if(a>b) max=a;
    else    max=b;
    //还可以写成以下形式
    (a>b)?printf("%d",a):printf("%d",b);
    //相当于
    if(a>b) printf("%d",a);
    else    printf("%d",b);
    
  • 示例:输入一个字符,判断它是否是大写字母,如果是,将它转换成小写字母并输出。
#include <stdio.h>
int main(void)
{char ch;
scanf("%c",&ch);
ch=(ch>='A' && ch<='Z')?(ch+32):ch;printf("%c\n",ch);return 0;
}

运行结果:
在这里插入图片描述


本节完

这篇关于【谭浩强C程序设计精讲 chap4】选择结构程序设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/626760

相关文章

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount