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

news2024/9/21 4:37:07

文章目录

  • 第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;
      else
        y=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.coloradmin.cn/o/1398705.html

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

相关文章

Linux 批量添加 known_hosts

前言 我们在做完linux ssh 免密登录后&#xff0c;通常会执行一些自动化任务&#xff08;比如启动Spark集群&#xff09;&#xff0c;也就是需要ssh到每台节点执行相同命令。但是有一个问题就是如果 known_hosts 文件中不存在这个ip的话&#xff0c;在第一次连接时会弹出确认公…

Unity常用的优化技巧集锦

Unity性能优化是面试的时候经常被问道的一些内容&#xff0c;今天给大家分享一些常用的Unity的优化技巧和思路&#xff0c;方便大家遇到问题时候参考与学习。 对啦&#xff01;这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白&#xff0c;也有一些正在从事游…

傲空间私有部署Windows指南

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 安装 docker 请下载对应的 Docker&#xff0c;安装完成后启动。 Docker Desktop for Windows…

【Redis配置】Linux下的Redis安装配置

压缩包方式的Redis下载与安装 进入官网 Redis官网&#xff1a;https://redis.io/download/ 往下翻可以找到其他版本的Redis&#xff0c;或者访问https://download.redis.io/releases/查找自己所需Redis版本。 下载自己所需版本 此处我选择下载的是6.2.14版本 上传到Linux…

Crow:实现点击下载功能

Crow:设置网站的index.html-CSDN博客 讲述了如何完成一个最简单的网页的路由 很多网页提供了下载功能,怎么实现呢,其实也很简单。 假设网页的目录结构如图 $ tree static static ├── img │ └── goodday.jpg └── index.html //index.html <html> <body&…

VMnet1、VMnet8到底是什么?

VMnet1、VMnet8到底是什么&#xff1f; 当我们安装VMware Workstation后&#xff0c;在宿主机(物理电脑)上会多出两个网卡VMNet1、VMNet8。 VMnet1和VMnet8是两个虚拟网卡&#xff0c;主要作用是让虚拟机可以通过你的宿主机的网线上网。 VMnet1是为host-only方式服务的&#x…

CSS实现平行四边形

1、为什么实现平行四边形 在日常开发过程中&#xff0c;有些时候我们可以会遇到一种情况&#xff0c;如可视化大屏中要求我们横线实现对应的进度条&#xff0c;但进度条的内容是由无数个平行四边形组装类似于进度条的形式&#xff0c;那么我们就需要使用CSS来进行对应的实现。 …

后台管理系统: 数据可视化基础

数据可视化简单理解&#xff0c;就是将数据转换成易于人员辨识和理解的视觉表现形式&#xff0c;如各种 2D 图表、3D 图表、地图、矢量图等等。 例如Excel等等 canvas <canvas> 标签只是图形容器&#xff0c;相当于一个画布&#xff0c;canvas 元素本身是没有绘图能力…

内存那点事:让我们一点点的搞懂它

内存是计算机系统中至关重要的组成部分&#xff0c;它不仅储存了运行中的程序和数据&#xff0c;还直接关系到系统的性能和稳定性。让我们一起深入探讨Linux系统下内存管理的核心原理&#xff0c;揭开它的神秘面纱。 基础概念 物理地址 概念&#xff1a;物理地址是指计算机内…

一个关于自动化工具的操作手册

整体 整个软件由首页、设计页构成 首页 按钮功能 清除缓存&#xff1a;主要为了避免线程占用的问题&#xff0c;端口占用无法重新执行。所以操作执行任务、修改任务、新建任务没有响应时&#xff0c;可以操作该事件新建任务&#xff1a;顾名思义就是创建一个网页自动化任务执…

世界上真的存在比苹果品质还好的笔记本电脑吗?

苹果笔记本电脑的品质一直是业界标杆&#xff0c;但它真的是最好的吗&#xff1f;答案是肯定的&#xff0c;但也要看你怎么定义“好”。为什么mac那么贵&#xff0c;还有很多人买&#xff1f;探索高性能的Mac系列&#xff0c;包括 MacBook Pro、Mac Studio和Mac Pro&#xff0c…

后台管理系统: spu管理模块

spu管理模块业务 spu 可以理解为类 例如 people类【spu】 sku可以理解为实例 例如&#xff1a;小明 18 男 spu跟sku可以理解为类跟多个实例的关系 spu管理模块静态 <template><div><el-card style"margin: 20px 0px"><CategorySelect get…

视频剪辑技巧:一键批量制作画中画视频的方法,高效提升剪辑任务

在数字媒体时代&#xff0c;视频剪辑已成为一项重要的技能。无论是专业的影视制作&#xff0c;还是日常的社交媒体分享&#xff0c;掌握视频剪辑技巧都能为内容增色不少。下面来看云炫AI智剪如何高效的剪辑视频技巧&#xff1a;一键批量制作画中画视频的方法&#xff0c;帮助您…

【日常聊聊】边缘计算的挑战和机遇

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; 日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 边缘计算的挑战和机遇 一&#xff1a;数据安全与隐私保护 二&#xff1a;网络稳定性与可靠性 三&#xff1a;实时性与性能优…

SpringCloud-高级篇(十四)

缓存的作用是其实就是为了减轻对数据库的压力&#xff0c;缩短服务响应的时间&#xff0c;从而提高整个服务的并发能力&#xff0c;Redis单节点并发其实已经很高了&#xff0c;但是它依然有自己的上限&#xff0c;随着互联网的发展&#xff0c;用户低量越来越大&#xff0c;想淘…

list列表可编辑状态

有时候list需要修改或选择属性,mfc自带的只能显示内容,基本上是不可以修改,为了实现这个功能需求,需要完成一下步骤转换. 第一步记录选择的单元格. 第二步创建一个编辑框CComboBox对象, 设置字体,窗口属性. 第三步获取选中单元格的位置信息. 第四步获取单元格内容信息. 第五步…

C++ STL容器详解

string容器 string的基本概念 本质 string是C风格的字符串&#xff0c;而string本质上是一个类 string与char* 的区别 char * 是一个指针 string是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char*型的容器。 string的构造函数 构造函…

数据库性能优化的解决方案

目录​​​​​​​ 1、什么是数据库性能优化 1.1 数据库性能优化的概念 1.2 为何需要进行数据库性能优化 1.3 数据库性能优化的好处 2、数据库性能优化的基本原理 2.1 数据库查询优化 2.2 数据库索引优化 2.3 数据库表结构优化 2.4 数据库硬件优化 3、数据库查询优化…

机床导轨误差对机械加工品质的影响

机床导轨是确定机床各部件相对位置关系的基准&#xff0c;也是相对运动的基准&#xff0c;其精度直接决定了机械加工产品的精度&#xff0c;机床导轨要确保精准,才能保证机械加工产品的良好&#xff0c;否则&#xff0c;会影响加工品质&#xff0c;主要体现在以下几方面&#x…

力扣刷MySQL-第六弹(详细讲解)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;力扣刷题讲解-MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出…