首页 > 编程语言 >选择结构程序设计

选择结构程序设计

时间:2022-12-13 18:23:57浏览次数:45  
标签:语句 运算符 else 选择 && printf 程序设计 表达式 结构

选择结构程序设计

if 语句的一般形式

if 语句包含3种形式:

  1. if(表达式)  语句
    
    • 表达式:可以是关系表达式、逻辑表达式,甚至是数值表达式
    • 关系表达式:两个数值进行比较的式子

    示例:

    #include "stdio.h"
    void main()
    {
        int num_age;
        scanf("%d", num_age);
        if (num_age < 12)
            printf("是儿童\n");
        printf("判断结束");
    }
    

    结果:

    10
    是儿童
    判断结束
    
    Press any key to continue
    
    15
    判断结束
    
    Press any key to continue
    
  2. if(表达式)  语句1
    else   语句2
    

    复合语句:

    if(表达式)
    {
        语句1
        语句2
         ...
    }
    else   语句n
    

    示例:

    #include "stdio.h"
    void main()
    {
        int num_age;
        scanf("%d", num_age);
        if (num_age < 12)
            printf("是儿童\n");
        else
            printf("不是儿童\n");
        printf("判断结束");
    }
    

    结果:

    10
    是儿童
    判断结束
    
    Press any key to continue
    
    15
    不是儿童
    判断结束
    
    Press any key to continue
    
  3. else-if多分支语句:

    if(表达式1)  语句1
    
       else if(表达式2)  语句2
    
       else if(表达式3)  语句3
    
       else if(表达式4)  语句4
    
       ...
    
       else if(表达式n)  语句n
    
    else           语句n+1
    
    • 从前往后计算各个表达式的值,如果某个表达式的值为真,则执行对应的语句,并终止整个多分支结构的执行。如果上述所有表达式均不成立,即均为逻辑假时,则执行对应的 else 部分。else 部分可以省略,但一般情况下不省略

    示例:

    #include "stdio.h"
    void main()
    {
        int num_age;
        scnaf("%d", &num_age);
        if (num_age <= 12)
            printf("是儿童\n");
        else if (12 < num_age && num_age <= 18)
            printf("是青少年\n");
        else if (18 < num_age && num_age <= 30)
            printf("是青年\n");
        else if (30 < num_age && num_age <= 60)
            printf("是中年\n");
        else
            printf("是老年人\n");
    }
    

    结果:

    20
    是青年
    
    Press any key to continue
    

...

任务:

1、有两个变量(a和b)通过scanf获取数据

2、通过比较,将最大的数存储到a变量中,将小的数存储到b变量中

3、并打印输出其内容

示例:

#include "stdio.h"
void main()
{
    int a, b, t;
    scanf("%d,%d", &a, &b);
    if (a < b)
    {
        t = a;
        a = b;
        b = t;
    }
    printf("最大的是:%d,最小的是:%d\n", a, b);
}

结果:

4,5
最大的是:5,最小的是:4

Press any key to continue

关系运算符和关系表达式

关系运算符及优先级

用来对两个数值进行比较,即比较符,也称为关系运算符

在c语言中,满足条件时则结果称为“真”,不满足条件时则称为“假”

C语言6中关系运算符:

  • 优先级相同(高)

    < 小于

    <= 小于等于

    > 大于

    >= 大于等于

  • 优先级相同(低)

    == 等于

    != 不等于

由高到低排列:算术运算符、关系运算符、赋值运算符

例如:

c>a+b,等效于c>(a+b),关系运算符的优先级低于算术运算符

a>b == c,等效于(a>b) == c,大于运算符>的优先级高于相等运算符 ==

a == b<c,等效于a==(b<c),小于运算符<的优先级高于相等运算符 ==

a=b>c,等效于a=(b>c),关系运算符的优先级高于赋值运算符

关系表达式

关系表达式:用关系运算符将两个数值或数值表达式连接起来的式子

例如:a>b、a+b>b+c、(a=3)>(b=5)、‘a’<‘b’、(a>b)>(b>c)

关系表达式的值是一个逻辑值,即“真”或“假”

例如:5==3(假);5>=0(真)

在c的逻辑运算中,1代表真,0代表假

示例:

#include "stdio.h"
void main()
{
    int a = 4, b = 5, c = 1, d, f;
    printf("%d\n", 3 > 2);
    printf("%d\n", a > b == c);
    d = a > b;
    f = a<b> c;
    printf("%d,%d\n", d, f);
}

结果:

[Running] cd "d:\vscode(C语言)\" && gcc 选择结构程序设计.c -o 选择结构程序设计 && "d:\vscode(C语言)\"选择结构程序设计
1
0
0,0

[Done] exited with code=4 in 0.191 seconds

逻辑运算符和逻辑表达式

逻辑运算符

例如:如果a小于100,并且b也要小于100时,输出信息;包含两个条件如何处理?

示例:

#include "stdio.h"
void main()
{
    int a, b;
    scanf("%d,%d",&a,&b);
    if (a < 100 && b < 100)
        printf("a和b的值都小于100\n");
    if (a < 100 || b < 100)
        printf("a和b的值有一个小于100\n");
    if (!(a > 100))
        printf("a的值小于100");
}

结果:

110,50
a和b的值有一个小于100

Press any key to continue

...

C逻辑运算符及其含义

运算符 含义 举例 说明
&& 逻辑与 a&&b 如果a和b都是真,则结果为真,否则为假
|| 逻辑或 a||b 如果a和b有一个以上为真,则结果为真,二者都为假时,结果为假
逻辑非 !a 如果a为假,则!a为真,如果a为真,则!a为假

逻辑运算的真值表

a b !a !b a&&b a||b

例如:!a&&b||x>y&&c(先运算!a、再运算x>y、其次进行逻辑与运算、最后进行逻辑或运算)

由高到低排列:!(非)、算术运算符、关系运算符、&&和||、赋值运算符

逻辑表达式

什么是逻辑表达式?

用逻辑运算符将关系表达式或其他逻辑量连接起来的式子

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

C语言编译系统在表示逻辑运算结果时,用数值1代表“真”,用0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”

示例:

#include "stdio.h"
void main()
{
    int a = 4, b = 5;	//'a' 0 !a a&&b a||b !a||b 4&&0||2 b>3&&8<a-!0
    if (a)
        printf("if语句块被执行了\n");
}

结果:

[Running] cd "d:\vscode(C语言)\" && gcc 选择结构程序设计.c -o 选择结构程序设计 && "d:\vscode(C语言)\"选择结构程序设计
if语句块被执行了

[Done] exited with code=0 in 0.227 seconds

逻辑运算的真值表详细版

a b !a !b a&&b a||b
非0 非0 0 0 1 1
非0 0 0 1 0 1
0 非0 1 0 0 1
0 0 1 1 0 0

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

例如:

  1. a && b && c 如果a为假,就不会判别b和c,因为只有a为真(非0)时,才需要判别b的值。只有当a和b都为真的情况下才需要判别c的值。如果a为真,b为假,不判别c
  2. a || b || c 只要a为真(非0),就不会判别b和c。只有a为假,才判别b。a和b都为假才判别c

关系表达式和逻辑表达式的值是0和1,而且在判断一个量是否为真时,以0代表假,以非0代表真,那么就可以理解为什么在if语句中表达式可以是任何数值表达式

判断是否为闰年

注:能被4整除,但不能被100整除,如2008;或者能被400整除的都是闰年,如2000

示例:

#include "stdio.h"
void main()
{
    int year;
    scanf("%d", year);
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
        printf("%d是闰年\n", year);
    else
        printf("%d不是闰年\n", year);
}

结果:

2008
2008是闰年

Press any key to continue

条件运算符和条件表达式

条件表达式的一般形式:表达式1?表达式2 : 表达式3

表达式的的结果是否为真?如果为真,则执行表达式2,否则执行表达式3

例如:

if (a>b)
    printf(“a”);
else
    printf(“b”);

转化后:

(a>b)? printf(“a”): printf(“b”)

示例:

#include "stdio.h"
void main()
{
    int a;
    scanf("%d", &a);
    if (a < 10)
        printf("a的值小于10\n");
    else
        printf("a的值大于10\n");
}

转化后:

#include "stdio.h"
void main()
{
    int a;
    scanf("%d", &a);
    (a < 10) ? printf("a的值小于10\n") : printf("a的值大于10\n");
}     

结果:

5
a的值小于10

Press any key to continue

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

例如:

c = (a>b)?a:b

根据表达式1的结果,将表达式2或3的结果赋值给变量c

示例:

/*使用条件表达式实现以下要求
输入一个字符,判断它是否为大写字母,如果是,将它转换为小写字母,否则不转换,最后输出得到的字符*/
#include "stdio.h"
void main()
{
    char a;
    scanf("%c", &a);
    a = (a >= 'A' && a <= 'Z') ? a + 32 : a;
    printf("%c\n", a);
}

结果:

H
h

Press any key to continue

选择结构的嵌套

在if语句中又包含一个或多个if语句称为if语句的嵌套

多分支结构就属于if语句的嵌套

if语句的嵌套一般形式如下:

if(表达式1)

	if(表达式2) 语句1

	else  语句2	//第二行与第三行为内嵌if

else

	if(表达式3) 语句3

	else 语句4	//第五行与第六行为内嵌if

示例:

#include "stdio.h"
void main()
{
    int x;
    scanf("%d", &x);
    if (x < 0)
        printf("请输入大于0的数\n");
    if (x < 18)
    {
        if (x < 12)
            printf("是儿童\n");
        else
            printf("是青少年\n");
    }
    else
    {
        if (x < 30)
            printf("是青年\n");
        else if (x < 50)
            printf("是中年\n");
        else
            printf("是老年\n");
    }
}

结果:

40
是老年

Press any key to continue

如何分辨if else的配对?

else总是与它上面最近的未配对的 if 配对

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

if语句只有两个分支可以选择,如果要实现多个分支,使用起来比较复杂,嵌套的层数比较多,大大降低了代码的可读性。C语言提供了switch语句直接处理多分支选择

switch语句的一般形式:

switch(表达式)
{
	case 常量1:语句1
	case 常量2:语句2
	...
	case 常量n:语句n
	default:	   语句n+1
}

实例:学生成绩分类(85分以上为A等、7084分为B等、6069分为C等、60分以下为D等)

转化前示例:

#include "stdio.h"
void main()
{
    char a;
    scanf("%c", &a);
    if (a < 'A' || a > 'D')
        printf("输入错误\n");
    else
    {
        if (a == 'A')
            printf("100~85\n");
        if (a == 'B')
            printf("84~70\n");
        if (a == 'C')
            printf("69~60\n");
        if (a == 'D')
            printf("<60\n");
    }
}

结果:

C
69~60

Press any key to continue

转化后示例:

#include "stdio.h"
void main()
{
    char a;
    scanf("%c", &a);
    switch (a)
    {
    case 'A':
        printf("100~85\n");
        break;
    case 'B':
        printf("84~70\n");
        break;
    case 'C':
        printf("69~60\n");
        break;
    case 'D':
        printf("<60\n");
        break;
    default:
        printf("输入错误\n");
    }
}

结果:

B
84~70

Press any key to continue

switch 详解:

  • switch括号中的表达式,值类型应为整数类型(包括字符型)
  • switch下面的花括号是一个复合语句,都属于switch语句的语句体
  • case和default是标号,用来标志一个位置
  • 执行switch语句时,先计算表达式的值,然后将值与case后面的常量按顺序进行对比,如果相同则从该执行该语句。如果没有相同的常量,则执行default标号后面的语句
  • 可以没有default标号,如果没有与switch表达式相匹配的case常量,则不执行任何语句,继续执行switch语句块后面的代码
  • 各个case标号出现次序不影响执行结果
  • 每个常量值不能重复,否则出现冲突
  • 在case子句中虽然包含了一个以上执行语句,但可以不必用{ }括起来,会自动顺序执行case标号后面的所有语句。加上{}也可以
  • 多个case标号可以公用一组执行语句
  • break语句打断,防止执行完对应语句继续向下执行

标签:语句,运算符,else,选择,&&,printf,程序设计,表达式,结构
From: https://www.cnblogs.com/ruoxianshi/p/16979536.html

相关文章

  • java springboot项目树结构递归查询
    记录工作本文记录树结构递归查询,像菜单栏和部门首先需要一张表CREATETABLE`sys_dict`(`id`intNOTNULLAUTO_INCREMENT,`parent_id`intNOTNULL,`name`......
  • linux目录结构
    所有目录都在根目录下/目录名作用bin存放2进制可执行命令的目录,例如mkdir,cat等sbin只供系统管理员使用,例如ifconfig,initdev设备文件存放目录,例如鼠......
  • spark structured streaming (结构化流) join 操作( 官方文档翻译)
    spark结构化流join连接结构化流支持将流dataset/DataFrame与静态dataset/DataFrame,或者另一个流数据集-DataFrame连接起来。流式连接的结果是增量生成的,与流式聚合(str......
  • 新建项目及语法结构
    1.新建一个项目1.新建工作目录:xxx2.目录内新建文件夹:bin,pkg,src3.初始化:gomodinitsrc4.环境变量:exportGOPATH=/Users/..../..../go_workspaceexportGOBIN=$GOPAT......
  • 结构体
    1.结构体的初始化#include<stdio.h>structdate{intmonth;intday;intyear;};intmain(){structdatetoday={7,30,2020};structdat......
  • JUC包结构
    atomiclocksExecutorAbstractExecutorServiceCallableExecutorDelayedExecutorServiceForkJoinPoolForkJoinTaskForkJoinWorkerThreadFutureFutureTaskThrea......
  • Go 结构体与 JSON 之间的转换
    耐心和持久胜过激烈和狂热。哈喽大家好,我是陈明勇,今天分享的内容是Go结构体与JSON之间的转换。如果本文对你有帮助,不妨点个赞,如果你是Go语言初学者,不妨点个关注,一起成......
  • 数据结构 线索二叉树
    一、线索二叉树的原理    通过考察各种二叉链表,不管儿叉树的形态如何,空链域的个数总是多过非空链域的个数。准确的说,n各结点的二叉链表共有2n个链域,非空链域为n-1个,......
  • Element组件:el-date-picker日期选择控件少一天的问题
    在使用el-data-picker时,选择的日期和存入的日期差了一天。这个是由于element-ui中时间控件的默认时间为国际标准时间,因此与北京时间差8个小时,且value-format格式错误。正......
  • 顺序程序设计
    顺序程序设计三种基本结构顺序结构:代码从前往后依次按顺序运行选择结构:根据条件选择运行某部分代码循环结构:反复执行某部分代码数据形式常量和变量数据有两种表现......