首页 > 编程语言 >c++初识------if-else与复合语句

c++初识------if-else与复合语句

时间:2024-12-06 21:04:21浏览次数:10  
标签:语句 30 c++ else pen book ------ 100 dis

上次,我们讲了简单的判断语句,今天,我们讲一些复杂的判断语句。

首先,我们讲一个情景:

小明在Goc课程上学会了利用pen.r指令来画椭圆,也学会了利用p.oo指令来画实心圆,今天他想利用这两个指令来画眼睛,步骤如下:

第1步:画一个宽度半径是100,高度半径是40的椭圆,颜色是1号颜色。

第2步:画一个半径是35的实心圆,颜色是1号颜色。

第3步:隐藏笔头。                                

程序1

眼睛效果(图1)

913)H(84ZI(AH@JKW(ZU$)X.png

X@6~B@_`VZ95PJSUO3NJHL7.png

露丝是小明的同学,她是外国人,眼睛是蓝色的,她希望小明也帮助她画一个蓝色的眼睛。

由于露丝的眼睛比小明稍微一点,所以决定实心圆的半径是30,小明很快就画出来了。

程序2

眼睛效果(图2)

3NS8}%7A]{7Y64Q10A}~P)7.png

V}R2X(7F{%9(T{}J1_Y0Q`F.png

班上的其他同学们看到效果后都很开心,希望小明帮助它们都画一次。所以我们要融合程序1程序2。

于是小明设计了一个通用的程序:如果是中国学生就画黑色眼睛(上面的图1),如果是外国学生就画蓝色眼睛(上面的图2)。

程序读入一个变量a,如果a等于1则需要画上面出图1的眼睛效果;如果a等于2则需要画出图2的眼睛效果。

小明设计的思路如下:

第1步:定义一个变量a

第2步:读入变量a

第3步:用if语句判断,如果a等于1,则要做两件事:

(1)画一个黑色椭圆,宽度半径是100,高度半径是40.

(2)画一个黑色实心圆,半径是35。

第4步:用if语句判断,如果a等于2,则要做两件事:

(1)画一个蓝色椭圆,宽度半径是100,高度半径是40.

(2)画一个蓝色实心圆,半径是30。

程序3

int main()

{

    int a;  //定义a变量

    cin>>a; //读入a变量

    if(a==1) p.e(100,40,0); p.oo(35,0); //画黑色椭圆和黑色实心圆

    if(a==2) p.e(100,40,2); p.oo(30,2); //画蓝色椭圆和蓝色实心圆

    p.hide();   //隐藏笔头

    return 0;

}

运行程序之后,却发现了问题,不管输入的是1还是2,画出的眼球都蓝色实心圆:

I`SC(SRRQZFL3$T8X3$~L5C.png

这既不是图1的眼睛效果,也不是图2的眼睛效果,程序出现了错误,为什么呢?

程序3中的if(a==1) p.e(100,40,0); p.oo(35,0);   等价于下面两条语句:

if(a==1) p.e(100,40,0);

p.oo(35,0);

程序3中的if(a==2) p.e(100,40,0); p.oo(35,0);   等价于下面两条语句:

if(a==2) p.e(100,40,0);

p.oo(35,0);

所以程序3等价于:

C6%62MUDG4E1_H1})6)]CE4.png

小明设计思路是当a等于1才画黑色实心圆,当a等于2才画蓝色实心圆。

但是可以发现程序有问题,不管a是1还是2,语句A和语句B都一定会执行,所以先画了黑色实心圆再画了蓝色实心圆,这与小明的设计思路是不符合的。应该怎么改了?我们先来了解一下if的复合语句。

if与复合语句

两条或两条以上的语句用一对{}括起来叫做复合语句,复合语句可与if语句组合使用。

if(表达式)

{

语句1;

语句2;

......

语句n;

}

表示的意义是当表达式为真,才执行复合语句。如果表达式为假,不执行复合语句。

也就是说复合语句作为一个整体,其内部的语句要么全部执行,要么全部不执行。

小明学习了复合语句后,把程序4改成了如下的程序,终于得到了正确的效果:

程序5

int main()

{

    int a;  //定义a变量

    cin>>a; //读入a变量

    if(a == 1)  //如果是中国人,画黑眼睛

    {

        p.e(100,40,0);  //画黑色椭圆

        p.oo(35,0);     //画黑色实心圆

    }

    if(a == 2)  //如果是外国人,画蓝眼睛

    {

        p.e(100,40,2);  //画蓝色椭圆

        p.oo(30,2);     //画蓝色实心圆

    }

    p.hide();    //隐藏笔头

    return 0;

}

举个例子:

这次比赛有两名学生考的特别好,老师打算奖励这两名学生。用1表示男生,用2表示女生。

每个获奖的男生得到的奖励是4本书和3支笔。每个获奖的女生得到的奖励是3本书和5支笔。

老师总共需要准备多少本书和多少支笔?

先讲一下思路:

第1步: 定义两个整型变量a,b,表示两名学生。

第2步:用cin语句读入a,b的值。

第3步:定义两个变量book和pen,表示需要准备的书和笔的数量。

第4步:一开始让book和pen都赋值为0。

第5步:用if语句判断a是否为男生,如果是男生,做下面两件事:

(1)让book增加4。

(2)让pen增加3。

第6步:用if语句判断a是否为女生,如果是女生,做下面两件事:

(1)让book增加3。

(2)让pen增加5。

第7步:用if语句判断b是否为男生,如果是男生,做下面两件事:

(1)让book增加4。

(2)让pen增加3。

第8步:用if语句判断b是否为女生,如果是女生,做下面两件事:

(1)让book增加3。

(2)让pen增加5。

第9步:输出book和pen的值

程序6

输出结果

#include <bits/stdc++.h>

using namespace std;

int main()

{

    int a,b;      //定义变量a,b

     cin>>a>>b;   //读入变量a,b的值

    int book, pen;  //定义变量book和pen

    book = 0;    //book的初始值赋值为0

    pen  = 0;       //pen的初始值赋值为0

    if(a == 1)      //如果a是男生

    {

        book = book + 3; //增加3本书

        pen = pen + 5;   //增加5支笔

    }

    if(a == 2)  //如果a是女生

    {

        book = book + 4; //增加4本书

        pen = pen + 3;   //增加3支笔

    }

    if(b == 1)   //如果b是男生

    {

        book = book + 3; //增加3本书

        pen = pen + 5;   //增加5支笔

    }

    if(b == 2)   //如果b是女生

    {

        book = book + 4; //增加4本书

        pen = pen + 3;   //增加3支笔

    }

    cout<<book<<" "<<pen;   //输出答案

    return 0;

}

XKT}XKOEXQ[AM)CCL(JJ2LL.png

再举一个场景:

在日常生活中,经常碰到这样的情况:如果一个条件成立,就做A事情;否则就做B事情。

例如:如果下雨,就在室内上体育课,否则就在操场上体育课。

在程序设计中,把这种情况称为“双分支结构”。

C++中可以用if和else搭配使用实现双分支结构,格式:

if(表达式)

语句块A

else

语句块B

表示的意义是:当表达式的值是1时(即表达式为真),就执行语句块A;否则就执行语句块B

语句块A可以是一条语句,也可以是复合语句,如果是复合语句即要用{}括起来

语句块B可以是一条语句,也可以是复合语句,如果是复合语句即要用{}括起来。

`_9VO)I8EJ$ZQFC`%0EAYNN.png

举几个例子:有两个整数a和b,按照从小到大的次序输出这两个数。

思路:

第1步: 定义两个整型变量a,b。

第2步:用cin语句读入a,b的值。

第3步:用if判断是否a<b,如果是,输出a和b; 否则输出b和a。

程序7

#include <bits/stdc++.h>

using namespace std;

int main()

{

    int a,b;      //定义变量a,b

    cin>>a>>b;   //读入变量a,b的值

    if(a < b)    //如果a<b

        cout<<a<<" "<<b;   //按照a,b的次序输出

    else        //否则

        cout<<b<<" "<<a;   //按照b,a的次序输出

    return 0;

}

输出结果:

有一只蜗牛在井底,它收到了三条指令。每条指令要么是向上爬,要么是向下滑落。

如果是指令1,表示它会向上爬100厘米;如果是指令2表示它会下滑30厘米。

你的任务是计算:每当蜗牛完成一个指令后,它距离井底是多少厘米?

思路:

第1步:定义三个整型变量x,y,z,表示三次指令。

第2步:用cin语句读入x,y,z的值。

第3步:定义整型变量dis,表示蜗牛现在距离井底的高度。

第3步:一开始,初始化dis等于0。

第4步:如果x等于1,用复合语句做下面两件事

(1)dis的值增加100;

(2)输出dis。

否则,用复合语句做下面两件事

(1)dis的值减少30;

(2)输出dis。

第5步:和第(4)步同理,判断y。

第6步:和第(4)步同理,判断z。

程序8

#include <bits/stdc++.h>

using namespace std;

int main()

{

    int x, y, z;      //定义变量x, y, z

    cin>>x>>y>>z;    //读入变量x,y,z的值

    int dis = 0;     //定义变量dis,表示蜗牛离井底的高度。

    if(x == 1){      //如果x是向上爬指令

        dis = dis + 100; //高度增加100

        cout<<dis<<" ";  //输出距离

    }

    else {   //否则   

        dis = dis - 30; //高度减少30

        cout<<dis<<" "; //输出距离

    }

    if(y == 1){      //如果y是向上爬指令

        dis = dis + 100; //高度增加100

        cout<<dis<<" ";  //输出距离

    }

    else {   //否则   

        dis = dis - 30; //高度减少30

        cout<<dis<<" "; //输出距离

    }

    if(z == 1) {     //如果z是向上爬指令

        dis = dis + 100; //高度增加100

        cout<<dis<<" ";  //输出距离

    }

    else  {  //否则   

        dis = dis - 30; //高度减少30

        cout<<dis<<" "; //输出距离

    }

    return 0;

}

优化思路:

观察上面解决问题的第4步:

如果x等于1,用复合语句做下面两件事

(1)dis的值增加100;

(2)输出dis。

否则,用复合语句做下面两件事

(1)dis的值减少30;

(2)输出dis。

可以发现,不管x的值是否等于1,有一件事是相同的:输出dis

因此可以把第4步改造成这样:

如果x等于1,则dis的值增加100;

否则dis的值减少30;

输出dis

同理,对于y和z的判断也可以这样改造。

这样改造之后有什么好处呢?由于这样改造之后,if和else都只执行一条语句,就不需要复合语句了,代码会更加简洁。

优化代码:

程序8

#include <bits/stdc++.h>

using namespace std;

int main()

{

    int x, y, z, dis = 0;      //定义变量x, y, z, dis

    cin>>x>>y>>z;    //读入变量x,y,z的值

    if(x == 1) //如果x是向上爬指令

        dis = dis + 100; //高度增加100     

    else  //否则   

        dis = dis - 30; //高度减少30

    cout<<dis<<" "; //输出高度

    if(y == 1) //如果y是向上爬指令

        dis = dis + 100; //高度增加100

    else //否则   

        dis = dis - 30; //高度减少30

    cout<<dis<<" "; //输出距离

    if(z == 1)  //如果z是向上爬指令

        dis = dis + 100; //高度增加100

    else //否则   

        dis = dis - 30; //高度减少30

    cout<<dis<<" "; //输出距离

    return 0;

}

输出结果:

这次就到这里,我们下次见!

标签:语句,30,c++,else,pen,book,------,100,dis
From: https://blog.csdn.net/2401_86949778/article/details/144299692

相关文章

  • 14. 异常处理
    一、什么是异常  程序在运行过程之中,不可避免的出现一些错误,比如:使用了没有赋值的变量、使用了不存在的索引、除0等等。这些错误在程序中,我们称之为异常。程序运行过程中,一旦出现异常将会导致程序立即终止,异常以后的代码全部都不会执行。二、异常的传播  当在函数......
  • 基于ssm咖啡馆管理系统,附源码+数据库+论文+任务书+开题,包安装调试
    1、项目介绍基于ssm的咖啡馆管理系统,分为用户、员工和管理员用户-功能:登录、注册、首页、公告、商品、我的、跳转到后台、购物车、个人中心、收货地址、商品收藏、商品订单员工-功能:登录、个人中心、公告管理、商品管理、原材料管理管理员-功能:登录、个人中心、轮播图信息......
  • 打造智能翻译助手:ChatMistralAI快速入门
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习......
  • json学习
    JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于人阅读和编写,也易于机器解析和生成。它通常用于在服务器和客户端之间交换数据,特别是在Web应用中。JSON格式基于JavaScript对象表示法,但它是语言独立的,广泛用于多种编程语言中。JSON使用文本格式来存储和表......
  • 序列化方法
    序列化(Serialization)是将对象转换为可存储或传输的格式的过程。对于Java中的JSON序列化,通常是将Java对象转换成JSON字符串,以便传输到网络中或保存到文件中。反序列化则是将JSON字符串转换回Java对象的过程。在Jackson中,序列化的核心任务是将Java对象转换为JS......
  • 补码一位算法(booth算法)
    方法初始化将被乘数A放在寄存器A中。将乘数B放在寄存器B中,并在最低位添加一个额外的位Q(-1)=0。结果寄存器P初始化为0,长度为2n位。迭代过程(重复n次)对于i从0到n-1:检查乘数B的最后两位(Bi和Q(-1)):如果BiQ(-1)=01,则P=P+A,然后右移一位(ARShift)。如果B......
  • Linux -初识 与基础指令2
    博客主页:【夜泉_ly】本文专栏:【Linux】欢迎点赞......
  • xss-labs通关(1--18)
    level1:在name中传入参数时直接插入到HTML中,可以直接在name后插入js代码。level2:直接在搜索框输入上一题的代码查看源码发现value中的代码特殊符号没有被实体转义可以闭合掉">,构造payload  level3:随机输入查看源码发现是单引号闭合,输入'><script>alert()</scrip......
  • 15. 文件操作
    一、什么是文件  文件(file)通常是磁盘或固态硬盘上的一段已命名的存储区。它是指一组相关数据的有序集合。这个数据集合有一个名称,叫做文件名。文件名是文件的唯一标识,以便用户识别和引用。文件名包括3个部分:文件路径+文件名主干+文件后缀名。所有的文件都通过流进......
  • 什么是 Merkle 树
    Merkle树(也称为哈希树)是一种特殊的树形数据结构,它的每个非叶子节点都是其子节点哈希值的哈希。Merkle树的主要用途是高效地验证数据完整性和一致性,广泛应用于区块链、分布式系统、文件系统等领域。Merkle树的原理Merkle树是一种二叉树,每个叶子节点包含数据块的哈希值......