【谭浩强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;
}

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


本节完

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web前端项目-3D台球游戏【附源码】

3D台球 【3D台球】这款游戏的操作简洁明了&#xff0c;玩家只需要简单的练习两分钟便能够掌握。玩家需要用鼠标控制击球的方向和力度&#xff0c;将白球打进洞中。每次进球后&#xff0c;玩家需要选择下一个要击打的球&#xff0c;直到所有的球都打进洞中。但要注意避免黑球进…

【Unity】URP报错Object reference not set to an instance of an object

使用URP之后&#xff0c;Unity报错&#xff1a;显示不正常 NullReferenceException: Object reference not set to an instance of an object UnityEngine.Rendering.Universal.UniversalAdditionalCameraData.get_cameraStack () (at Library/PackageCache/com.unity.render-p…

Flink实时数仓同步:拉链表实战详解

一、背景 在大数据领域&#xff0c;业务数据通常最初存储在关系型数据库&#xff0c;例如MySQL。然而&#xff0c;为了满足日常分析和报表等需求&#xff0c;大数据平台会采用多种不同的存储方式来容纳这些业务数据。这些存储方式包括离线仓库、实时仓库等&#xff0c;根据不同…

智能AI写作到底怎么样?这几款AI写作非常好用

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术的快速发展已经渗透到各个领域&#xff0c;包括写作领域。AI写作软件通过模仿指定作家的风格和语言&#xff0c;能够生成高质量的文章。这种技术的出现引发了广泛的讨论和争议。本文将探讨AI写作的优点&#xff0c;并…

Windows给docker设置阿里源

windows环境搭建专栏&#x1f517;点击跳转 Windows系统的docker设置阿里源 文章目录 Windows系统的docker设置阿里源1.获得镜像加速器2.配置docker 由于我们生活在中国大陆&#xff0c;所以外网的访问总是那么慢又困难&#xff0c;用docker拉取几兆的小镜象还能忍受&#xff…

单元测试之Stub和Mock

实例 Analyze类会检查filename的长度&#xff0c;如果小于8&#xff0c;我们就会使用一个实现IWebService的类来记录错误. 我们需要给Analyze方法写单元测试。 public class LogAnalyzer {private IWebService service;private IEmailService email;public IWebService Serv…

软考十大管理领域49个过程开展频次总结

1、仅开展一次或仅在预定义时点开展的项目管理过程 序号 过程 过程组 说明 1 制定项目章程 启动 项目章程尽量在整个项目期间保持不变 2 制订项目管理计划 计划 各种管理(程序性)计划和项目基准尽量在整个项目期间保持不变 3 规划范围管理 除规划沟通管…

【微信小程序开发】环境介绍和基本使用

文章目录 前言1. 项目的基本组成结构1.1 JSON 配置文件的作用1.2 如何新建小程序页面1.3 修改项目首页1.4 WXML 模板1.5 WXSS 样式1.6 JS 逻辑交互 2. 宿主环境2.1 什么是宿主环境2.2 通信模型2.3 运行机制2.4 组件2.4.1 view 组件的基本使用&#xff1a;2.4.2 scroll-view 组件…

强网杯2023 crypto

speed up 当时看到这个题目 也是觉得易懂 并且可以解出来的 但是数字实在是过大了兄弟 题目意思是计算2^27的阶乘,并获取得到每一位数的数字之和,flag即为该数字的sha256编码 2^27为134217728 gmpy2包是支持大数运算的,故利用其fac方法进行尝试,在等待一段时间后可以得到对…

2024第十二届中国(上海)国际流体机械展览会(CFME2024)

2024上海流体机械展|泵展|风机展|压缩机展 2024第十二届中国(上海)国际流体机械展览会(CFME2024) 泵阀门风机压缩机减变速机真空干燥设备展 时间&#xff1a;2024年11月25日-27日 地点&#xff1a;国家会展中心&#xff08;上海虹桥&#xff09; ◆展会背景&#xff1a; &q…

从 Context 看 Go 设计模式:接口、封装和并发控制

文章目录 Context 的基本结构Context 的实现和传递机制为什么 Context 不直接传递指针案例&#xff1a;DataStore结论 在 Go 语言中&#xff0c; context 包是并发编程的核心&#xff0c;用于传递取消信号和请求范围的值。但其传值机制&#xff0c;特别是为什么不通过指针传递…

智慧工地解决方案及案例:PPT全文26页,附下载

关键词&#xff1a;智慧工地解决方案&#xff0c;智慧工地建设&#xff0c;智慧工地整体架构&#xff0c;数字化工地&#xff0c;智慧工程 一、智慧工地建设对传统建筑业的影响 1、提高了施工效率和质量&#xff1a;智慧工地建设采用了先进的信息技术和管理方法&#xff0c;可…

力扣343. 整数拆分(动态规划)

Problem: 343. 整数拆分 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 该题目可以抽象成动态规划中的爬楼梯模型&#xff0c;将整数的拆分类比为上台阶&#xff1a; 1.每个阶段可以从整数中划分出1、2、…k的一个整数 2.int dp[n 1] dp[i]表示为i的整数划分的最大…

Next-GPT: Any-to-Any Multimodal LLM

Next-GPT: Any-to-Any Multimodal LLM 最近在调研一些多模态大模型相关的论文&#xff0c;发现Arxiv上出的论文根本看不过来&#xff0c;遂决定开辟一个新坑《一页PPT说清一篇论文》。自己在读论文的过程中会用一页PPT梳理其脉络和重点信息&#xff0c;旨在帮助自己和读者快速了…

线程池的简单介绍及使用

线程池 线程池的参数介绍拒绝策略 线程池的任务处理流程使用Executors创建常见的线程池 线程池的参数介绍 corePoolSize: (核心线程数)这是线程池中始终存在的线程数&#xff0c;即使这些线程处于空闲状态。maximumPoolSize:(最大线程数) 是线程池允许的最大线程数。keepAliveT…

免费200万Tokens 用科大讯飞API调用星火大模型服务

简介 自ChatGPT火了之后&#xff0c;国内的大模型发展如雨后春笋。其中的佼佼者之一就是科大讯飞研发的星火大模型,现在大模型已经更新到V3 版本&#xff0c;而且对开发者也是相当友好&#xff0c;注册就送200万tokens,讯飞1tokens 约等于 1.5 个中文汉字 或者 0.8 个英文单词…

安卓开发-day

一、安卓项目结构 1、manifests文件夹 Android系统配置文件夹&#xff0c;包含一个AndroidManifest.xml文件&#xff1b; AndroidMainifest.xml文件是每个android项目必须要包含的文件&#xff08;项目唯一&#xff09;&#xff0c;创建项目时默认就会生成这个文件&#xff0…

【Python学习】Python学习21- 正则表达式(1)

目录 【Python学习】Python学习21- 正则表达式&#xff08;1&#xff09; 前言re.match函数实例 re.search方法re.match与re.search的区别参考 文章所属专区 Python学习 前言 本章节主要说明Python的正则表达式。 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的…

HarmonyOS 页面跳转控制整个界面的转场动画

好 本文 我们来说 页面间的转场动画 就是 第一个界面到另一个界面 第一个界面的退场和第二个界面的进场效果 首先 我这里 创建了两个页面文件 Index.ets和AppView.ets index组件 编写代码如下 import router from "ohos.router" Entry Component struct Index {b…

解决你所有ArcGIS标注问题!二分式、三分式、条件分类标注、上下标、牵引线、文字格式化…

解决你所有ArcGIS标注问题&#xff01;二分式、三分式、条件分类标注、上下标、牵引线、文字格式化… 标注是将描述性文本放置在地图中的要素上或要素旁的过程。 本文整理了ArcGIS中的各种标注方法、可能遇到的问题和细节&#xff0c;内容比较杂&#xff0c;想到哪写到哪。 …