选择结构程序设计

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

1.关系运算符

用来对两个数值进行比较,其结果为布尔类型(“1” 或 “0”),即 ture(真)或者 false(假),只有两个数才能比较,都是左结合性

  • < :小于
  • <= :小于等于
  • > :大于
  • >= :大于等于
  • == :等于(区别于 “=” 的赋值含义)
  • != :不等于

2.关系表达式

用关系运算符将两个运算对象连接起来的式子,关系成立时,表达式的值为 1,否则是 0 。一般形式为:

表达式        关系运算符        表达式

例如:

a >= b

5 - a < 9 + b

m ! = ( j = = k )

3.运算优先级

运算符的优先级是指不同运算符之间的执行顺序,优先级高的运算符先执行。在表达式中,括号可以改变运算符的优先级,括号中的表达式先执行。常见的运算符优先级从高到低依次为:

 !(非 运算符)>算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符

详细概述为:

1. 括号 ()
2. 一元运算符 !、++、--
3. 算术运算符 *、/、%
4. 算术运算符 +、-
5. 移位运算符 <<、>>
6. 比较运算符 <、<=、>、>=
7. 相等运算符 ==、!=
8. 位运算符 &
9. 位运算符 ^
10. 位运算符 |
11. 逻辑运算符 &&
12. 逻辑运算符 ||
13. 条件运算符 ?:
14. 赋值运算符 =
15. 其他运算符

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

1.逻辑运算符

优先级:!(非)  >    &&(与)   >    ||(或)

  • && :与 运算符(双目,左结合)
  • || :或 运算符(双目,左结合)
  • ! :非 运算符(单目,右结合)

2.逻辑表达式

一般形式:

表达式        逻辑运算符        表达式

逻辑表达式的结果为 “真” 或 “假”,分别用 “0” 或 “1” 表示,不一定所有的运算都要被执行,当某个运算对象的值可以确定整个表达式的值时,其他的运算将不再需要被执行:

  1. (表达式1)&&(表达式2)&&(表达式3)。当所有运算符都为True时,整个表达式的值才为True,如果有一个表达式为False,则不用看其他表达式,可以直接断定整个表达式的值为False
  2. (表达式1)||(表达式2)||(表达式3)。与(1)相反,当所有运算符都为False时,整个表达式的值才为False,如果有一个表达式为Ture,则不用看其他表达式,可以直接断定整个表达式的值为Ture
  3. (表达式1)&&(表达式2)||(表达式3)。由于优先级,可以将整个表达式理解为 ||(或)的表达式,按照(2)来处理

三、if 语句

1.单分支 if 语句

格式:

if  (表达式)

        {

        < 语句块 >

        }

  • 当表达式的值为True时,执行 if 的语句块,否则跳过语句块,直接执行 if 语句下面的一条语句
  • 用花括号括起来的语句组为复合语句,若语句只有一条时,可以省略花括号({})

2.双分支 if 语句

格式:

if (表达式)

        <语句块1>

else

        <语句块2>

说明:先确定表达式的值,若值为True,则执行语句块1,否则执行语句块2。当语句块是多条语句时,用花括号括起来

3.多分支选择结构

格式:

if(表达式1)

        <语句块1>

else if(表达式2)

        <语句块2>

...

else if(语句块n)

        <语句块n>

else

        <语句块 n+1>

说明:先执行表达式1,若值为Ture,则执行语句块1,然后执行整个 if 语句块之后的语句,否则执行表达式2,若表达式2的值为Ture,则执行语句块2,然后执行整个 if 语句块之后的语句,否则执行语句块3......若前面 n-1 个表达式的值都为False,但第n个表达式的值为Ture,则执行语句块 n,若所有的表达式都为False,则执行语句块 n+1

4.if 的嵌套

在 if 语句中包含一个或多个if语句,称为 if 语句的嵌套,一般有下面两种嵌套情况:

1.内嵌一个 if 语句

if(表达式1)

        <语句块1>

else

        if(表达式2)

                <语句块2>

        else

                <语句块3>

2.内嵌多个 if 语句

if(表达式1)

        if(表达式2)

                <语句块1>

        else

                <语句块2>

else

        if(表达式3)

                <语句块3>

        else

                <语句块4>

...

说明:

  • else 语句不能单独使用,必须与 if 配对。else 总是与离它上面最近的、尚未与其他 else 配对的 if 语句配对,一般是从后往前找,确定 else 与 if 的配对关系,不能被缩进迷惑
  • 如果 if 和 else 的个数不同,可以用花括号确定配对关系,提升可读性,形式如下:

if()

        { if(表达式1) <语句块1> }

else

        <语句块2>

5.条件运算符

一种简短的控制结构,它允许根据一个条件来决定程序流程的走向,包含三个部分:

  • 一个条件,它可以是任何能够返回布尔值(true 或 false)的表达式
  • 一个成立时的结果,它是当条件为 true 时要执行的代码块
  • 一个不成立时的结果,它是当条件为 false 时要执行的代码块

格式为:

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

类似于:

if(表达式1)

        <表达式2>

else

        <表达式3>

说明:

  • 首先执行表达式1,若结果为ture,则执行表达式2,若结果为false,则执行表达式3
  • 若遇到嵌套,运算顺序为从右向左

例如:a ? b ? a :c > d ? c : d 应该理解为 a > b ? a : (c > d ? c : d )

四、switch 语句

格式:

switch(表达式)

{

        case 常量表达式 1:

                < 语句1 >;

                [ break ];

        case 常量表达式 2:

                < 语句2 >;

                [ break ];

...

        case 常量表达式 n:

                < 语句n >;

                [ break ];

        default:语句 n + 1;

}

说明:

  • 执行流程:程序先计算 switch 表达式的值,若值与某个 case 后的常量表达式相等,则执行对应 case 所包含的语句(若没有 break ,则执行该 case 后面的所有语句,包括之后其他 case 的语句)
  • 若表达式的值不等于任何 case 后面的值,则执行 default 所属的语句,若没有 default 语句,则不执行 switch 语句中的任何语句,即跳过属于 switch 的任何语句,执行之后的程序
  • switch 以及 case 后面的值,通常是整型或字符型,且 case 后的值不能相同
  • 各个 case 以及 default 语句可以任意排列先后顺序
  • 多个 case 可以共用同一组执行语句,表示多种情况,都执行同一个命令

4-13

题目:编制实现给一百分制成绩评定等级,要求输出成绩等级:90分及以上为A、80~90为B、70~79为C、60~69为D、60以下为E。

分析:1.一个成绩变量,int c        2.输入与输出 scanf、printf        3.按成绩分五档来选择判断 else if 或者 switch

#include <stdio.h>
int main(void)
{
	int a;
	printf("input the score:");
	scanf("%d", &a);
	switch(a / 10)
	{
		case 10:
		case 9:
			printf("A\n");
			break;
		case 8:
			printf("B\n");
			break;
		case 7:
			printf("C\n");
			break;
		case 6:
			printf("D\n");
			break;
		case 5:
		case 4:
		case 3:
		case 2:
		case 1:
		case 0:
			printf("E\n");
			break;
		default:
			printf("Error!");
	}
	return 0;
}

4-14

题目:模拟计算器,实现两个数的加、减、乘、除运算,并且再电脑上输出运算结果。

分析:1.两个运算数、一个运算符号,float a,b ; char c        2.输入与输出,scanf 和 printf        3.按运算符号分四档来选择判断,switch

#include <stdio.h>
int main(void)
{
	float x, y, m;
	char z;
	printf("input:x(+、—、*、/) y:");
	scanf("%f%c%f", &x, &z, &y);
	switch(z)
	{
		case '+':
			m = x + y;
			printf("%f + %f = %f", x, y, m);
			break;
		case '-':
			m = x - y;
			printf("%f - %f = %f", x, y, m);
			break;
		case '*':
			m = x * y;
			printf("%f * %f = %f", x, y, m);
			break;
		case '/':
			m = x / y;
			printf("%f / %f = %f", x, y, m);
			break;
		default:
			printf("Error!!!");
	}
	return 0;
 } 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无烟橙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值