精华内容
下载资源
问答
  • if语句判断真假的几种情况

    千次阅读 2019-05-16 14:56:56
    于是深入地了解了下if语句的判断真假的几种情况,发现还真有点东西…(自己果然是菜鸡hhhhhhhh) 这个是书本上的 i = Root(T);//i 为int型,这里Root函数返回的是空格字符 if (!i) printf("树空,无根\n"); 这...

    在写二叉树的最后判断二叉树是否为空的时候遇到if语句的判断竟然跟想得不一样!于是深入地了解了下if语句的判断真假的几种情况,发现还真有点东西…(自己果然是菜鸡hhhhhhhh)
    这个是书本上的

    	i = Root(T);//i 为int型,这里Root函数返回的是空格字符
    	if (!i) 
    		printf("树空,无根\n");
    

    这个是我写的

    e = Root(T);//e为char型
     if(!e)
     		printf("树为空,无根\n");
    
    

    没错,书本上写错了,判断语句应该是if(i)我是不会告诉你这本书是《大话数据结构》的 ),也亏这里弄得我的程序总是不对,我才能发现原来在if语句真假的判断这种自认为简单的东西上自己也好菜啊…(手动狗头)

    之后找了下资料,发现判断竟然有九种之多…好吧 ,任重而道远~~~~

    1. 已定义的变量,赋值为空字符串在if中认为是假,赋值为其他的字符串,也就是字符串中有字符(即使是"空格字符")就认为是真;
      这个就是上面第二个代码那个;

    2. 已定义的变量,赋值为0(不管是0,还是0.0)在if中则为假,其他数值认为是真,这和c语言中数值的类型的变量是一样的;
      这个就是上面第一个代码那个;

    然后补充一句,上面第一个代码Root函数返回的是空格字符,ascll码为32,所以i为32,所以判断if(!i)判断肯定为假啦;若把i改为字符型(就像上面第二个代码),然后空格字符型判断为假,if(!e)就没错了。

    1. 已定义的变量但未赋值在if中认为是假;
      酱紫
      在这里插入图片描述

    2. 已定义的对象,未赋值时在if中则为假,赋值后是真(其实由于在js中变量在没有赋值时是没有类型的,因此和第一种情况是一样的);

    3. js中的特殊值null,undefined,都是假(由于在js中未定义的变量默认值是undefined,因此这也就解释了第一类情况);
      嗷呜,这个都懂;

    4. 已定义的变量,赋值为true在if中认为是真,赋值为false,则为假,这和其他语言中bool的类型的变量是一样的;
      这个应该是最常见的;

    5. 已定义的函数,根据调用方式又分为两种
      第一种:不带括号的,如果定义了就是真,没有定义会报错,
      第二种:带括号的,其实相当于调用函数,自然是根据函数的返回值判断真假;
      emmmmmmmmm,这个,原谅在下弱鸡,没注意过…

    6. 已定义的对象的属性字段,和单独的变量是一样的,例如数值型为0时是假,其他为真,字符串型是为空值时是假,其他为真;

    7. 已定义的对象的方法,和单独的函数是一样的,不加括号是如果没定义就是假,加了括号相当于调用方法,就是根据返回值判断真假;

    总结:最基本是null,undefined,if判断都是假;对于数值类型,0是假,其他为真;对于字符类型空字符串是假,其他为真,对于方法属性,如果定义了就是真,否则就是假,其他所有都可以看做是这些的变相应用。

    (弱鸡的第一篇CSDN博客…莫名的激动…望各位大佬多多指教)

    展开全文
  • for 循环 if语句 分支 python三大结构 1 、顺序结构 ...分支结构的基本语法 if语句 1 if 语句单项分支 if语法在分支结构中表达式是如果怎么样,表达式中的布尔值如果是True就执行当前if语句内...

    python基础 python三大结构 if语句 多重if语句 else语句 elif语句 for循环 while循环


    python三大结构

    一 、自上而下,自左至右 运行的顺序 在编程语言中大多是的编码都是这种结构,这中结构叫做顺序结构
    二 、 在python中以一个布尔表达式的进行分支的结构 叫做分支结构 分支条件按照表达式的条件进行运行 在分支结构中有 if语句 多重if语句 else语句 elif语句 但没有 goto语句
    1 、顺序结构
    在python中代码共有三种运行结构是指代码按照编写的顺序,自上而下,自左至右 运行的顺序 在编程语言中大多是的编码都是这种结构。


    2、 分支结构
    分支结构的表达式结果是一个布尔值的表达式
    分支结构的基本语法有 if语句

    1 if 语句单项分支
    if语法在分支结构中表达式是如果怎么样,表达式中的布尔值如果是True就执行当前if语句内缩进的代码块

    Ask = input('您对伊凡ED的博客满意么?\n')  #询问用户对伊凡ED的博客是否满意 并将答案赋值在Ask中
    if Ask == '满意':  #使用分支语法if表示如果用户输入的是满意使用下面的代码块
       print('感谢您的支持')   #缩进内的代码块指被执行的代码

    输出:
    您对伊凡ED的博客满意么?
    满意
    感谢您的支持

    2多重if语句多项分支
    在一个if语句中你可以使用多个if语句 如果条件成立将都执行 但如果不成立将会被略过 并执行下一组代码
    注意:所有符合表达式条件的语句都会被执行

    例如

    Ask = input('您对伊凡ED的博客满意么?\n')  #询问用户对伊凡ED的博客是否满意 并将答案赋值在Ask中
    if Ask == '满意':  #使用分支语法if表示如果用户输入的是满意使用下面的代码块
       print('感谢您的支持')   #缩进内的代码块指被执行的代码
    if Ask =='满意':  #使用第二个if表示如果用户输入的是满意也执行下面的代码块
        print('您的满意是我的动力!') #第二个缩进的代码块
    if Ask == '一般': 第三个if语句 表示如果输入的是一般将执行这一行下面的代码块而不满足条件的将被略过
    
        print('我会尽力做到让您满意的!')

    输出1:
    您对伊凡ED的博客满意么?
    满意
    感谢您的支持
    您的满意是我的动力!

    进程已结束,退出代码0

    输出2:
    您对伊凡ED的博客满意么?
    一般
    我会尽力做到让您满意的

    进程已结束,退出代码0

    3 else 语句双项分支
    else:一般用于if语句的后面使用 表示如果怎么样不成立否则怎么样 上面的表达式都不符合要求就执行else语句 在双向分支语句中必然会执行一个表达式
    注意:else语句只能有一个

    刚才例子显示如果显示满意 就显示怎么样 但是如果用户身体很满意但是嘴上非说不满意呢:

    Ask = input('您对伊凡ED的博客满意么?\n')  #询问用户对伊凡ED的博客是否满意 并将答案赋值在Ask中
    if Ask == '满意':  #使用分支语法if表示如果用户输入的是满意使用下面的代码块
        print('感谢您的支持')   #缩进内的代码块被执行的代码
    else:    #else语句表示否则怎么样以上的例子都不符合标准
        print('我会努力完善的!')   #否则执行的代码块
    

    输出:
    您对伊凡ED的博客满意么?
    我不想说满意
    我会努力完善的!

    进程已结束,退出代码0

    4.多路分支语句elif
    elif语句是指一个if语句 如果if语句不成立 再去检查下一行elif语句
    注意: elif语句只会按顺序执行第一个满足条件的语句 当满足条件后将不执行后面的代码

    level = input('请您给伊凡ED的博客打分(1-5星请输入1-5中的数字)')
    if int(level) >4: # 如果用户输入的数值大于4将打印一下的代码块
        print('感谢五星')
    elif int(level) > 3:  # 如果输入不满足上一组的代码表达式就测试这一行表达式 
        print('我会改进我的不足')
    elif int(level) > 2 :  # 如果还不满足在测试这组表达式
        print('我会做的更好')
    elif int(level) > 1:  # ...
        print('不足之处很多望谅解')
    else: #如果以上表达式都不符合 将使用下面的代码块
        print('希望你能提出我的不满 我会及时改进')
    

    3、 循环结构

    循环结构时指重复的执行某些固定的代码任务

    1. for循环
    for循环指重复的调用一个序列的内容到一个变量内运行直到序列中的内容结束或执行到结束条件时结束
    for循环for循环变量一般用i k m n 或者indx idx item之类的 如果循环变量并不重要可以用下划线代替
    for循环的结构一般是

    for 变量 in 序列:
        语句
            代码块

    例如:

    nums = [1,2,3,4,5,6,7,8]
    for num in nums:
        print(num)
    

    输出:
    1
    2
    3
    4
    5
    6
    7
    8

    进程已结束,退出代码0
    可以使用任何语句
    例如:

    nums = [1,2,3,4,5,6,7,8] #创建了一个带有12345678的列表
    for num in nums:    # 使用for循环将nums列表中的每个值放入num变量
        if num == 3:     # 使用if语句创建条件如果 变量num是3  
            print('3  查找到数字')  # if代码块
        else:  #使用else语句 创建否则的条件
            print(num)
    

    输出:
    1
    2
    3 查找到数字
    4
    5
    6
    7
    8

    进程已结束,退出代码0
    for else语句
    又时在for循环结束后还想另外怎加一个代码可以使用for else语句
    用法时在for循环没有缩进加入else

    for _ in range(1,9):  #使用for循环 调用range函数生成一个1-8的序列
        print('{0}只羊'.format(_))  #调用format函数 将数列格式化到字符串
    else:  #循环结束后 还要在运行一个代码块
        print('..zzzZZZ')  # 代码块

    输出:
    1只羊
    2只羊
    3只羊
    4只羊
    5只羊
    6只羊
    7只羊
    8只羊
    ..zzzZZZ

    进程已结束,退出代码0

    附:顺便一提 在循环中经常会使用关键字
    break 跳出循环 结束循环
    contineu 结束本轮循环 进入下一轮循环
    pass 什么也不做 作为占位使用

    2.while循环
    while循环时是在条件成立时就开始循环的循环 循环的次数时无限的所以在建立while循环时应该建立跳出循环的条件
    while循环语句的格式:

    while 条件表达时
        代码块

    举个例子:

    sheep = 1 # 设定羊的数值为1
    while sheep < 10: # 设置条件 循环羊的数值小于等于10
    sheep += 1 #设置每循环一次羊的数字加1
    print(‘{0}只羊’.format(sheep)) # 每循环一次打印当前羊的数量
    else: #循环结束后 使用else语句 执行下面的代码块
    print(‘..zzzZZZ’) #代码块

    附:在循环中同样经常会使用关键字:
    break 跳出循环 结束循环
    contineu 结束本轮循环 进入下一轮循环
    pass 什么也不做 作为占位使用

    展开全文
  • MySQL中特别实用的几种SQL语句送给大家

    万次阅读 多人点赞 2020-06-11 17:23:49
    4.SQL中的if-else判断语句 5.指定数据快照或备份 6.写入查询结果集 7.强制使用指定索引 心得体会: 高能预警,这是一篇干货满满的MySQL技术文章,总一天,你必然会用到,记得收藏! -- 来自一位被技术经理...

    在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑。减少程序与数据库的交互次数,有利于数据库高可用性,同时也能显得你的SQL很牛B,让同事们眼前一亮。

    小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL专栏目录 | 点击这里

    目录

    实用的SQL

    1.插入或替换

    2.插入或更新

    3.插入或忽略

    4.SQL中的if-else判断语句

    5.指定数据快照或备份

    6.写入查询结果集

    7.强制使用指定索引

    心得体会:

    (续)评论区问题反馈

    @当年经理的SQL

    @修改后最终版SQL

    @最终版SQL原理


    高能预警,这是一篇干货满满的MySQL技术文章,总有一天,你必然会用到,记得收藏! -- 来自一位被技术经理毒打多年的程序员的忠告

    实用的SQL

    1.插入或替换

    如果我们想插入一条新记录(INSERT),但如果记录已经存在,就先删除原记录,再插入新记录。

    • 情景示例:这张表存的每个客户最近一次交易订单信息,要求保证单个用户数据不重复录入,且执行效率最高,与数据库交互最少,支撑数据库的高可用。

    此时,可以使用"REPLACE INTO"语句,这样就不必先查询,再决定是否先删除再插入。

    "REPLACE INTO"语句是基于唯一索引或主键来判断唯一(是否存在)的。
    "REPLACE INTO"语句是基于唯一索引或主键来判断唯一(是否存在)的。
    "REPLACE INTO"语句是基于唯一索引或主键来判断唯一(是否存在)的。

    注意事项:如下SQL所示,需要在username字段上建立唯一索引(Unique),transId设置自增即可。

    -- 20点充值
    REPLACE INTO last_transaction (transId,username,amount,trans_time,remark) 
       VALUES (null, 'chenhaha', 30, '2020-06-11 20:00:20', '会员充值');
    
    -- 21点买皮肤
    REPLACE INTO last_transaction (transId,username,amount,trans_time,remark) 
       VALUES (null, 'chenhaha', 100, '2020-06-11 21:00:00', '购买盲僧至高之拳皮肤');


    若username='chenhaha'的记录不存在,REPLACE语句将插入新记录(首次充值),否则,当前username='chenhaha'的记录将被删除,然后再插入新记录。

    id不要给具体值,不然会影响SQL执行,业务有特殊需求除外。

    2.插入或更新

    如果我们希望插入一条新记录(INSERT),但如果记录已经存在,就更新该记录,此时,可以使用"INSERT INTO ... ON DUPLICATE KEY UPDATE ..."语句:

    • 情景示例:这张表存了用户历史充值金额,如果第一次充值就新增一条数据,如果该用户充值过就累加历史充值金额,需要保证单个用户数据不重复录入。

    这时可以使用"INSERT INTO ... ON DUPLICATE KEY UPDATE ..."语句。

    注意事项:同上,"INSERT INTO ... ON DUPLICATE KEY UPDATE ..."语句是基于唯一索引或主键来判断唯一(是否存在)的。如下SQL所示,需要在username字段上建立唯一索引(Unique),transId设置自增即可。

    -- 用户陈哈哈充值了30元买会员
    INSERT INTO total_transaction (t_transId,username,total_amount,last_transTime,last_remark) 
       VALUES (null, 'chenhaha', 30, '2020-06-11 20:00:20', '充会员') 
       ON DUPLICATE KEY UPDATE  total_amount=total_amount + 30, last_transTime='2020-06-11 20:00:20', last_remark ='充会员';
    
    -- 用户陈哈哈充值了100元买瞎子至高之拳皮肤
    INSERT INTO total_transaction (t_transId,username,total_amount,last_transTime,last_remark) 
       VALUES (null, 'chenhaha', 100, '2020-06-11 20:00:20', '购买盲僧至高之拳皮肤') 
       ON DUPLICATE KEY UPDATE total_amount=total_amount + 100, last_transTime='2020-06-11 21:00:00', last_remark ='购买盲僧至高之拳皮肤';

    若username='chenhaha'的记录不存在,INSERT语句将插入新记录,否则,当前username='chenhaha'的记录将被更新,更新的字段由UPDATE指定。

    3.插入或忽略

    如果我们希望插入一条新记录(INSERT),但如果记录已经存在,就啥事也不干直接忽略,此时,可以使用INSERT IGNORE INTO ...语句:情景很多,不再举例赘述。

    注意事项:同上,"INSERT IGNORE INTO ..."语句是基于唯一索引或主键来判断唯一(是否存在)的,需要在username字段上建立唯一索引(Unique),transId设置自增即可。

    -- 用户首次添加
    INSERT IGNORE INTO users_info (id, username, sex, age ,balance, create_time) 
       VALUES (null, 'chenhaha', '男', 12, 0, '2020-06-11 20:00:20');
    
    -- 二次添加,直接忽略
    INSERT IGNORE INTO users_info (id, username, sex, age ,balance, create_time) 
       VALUES (null, 'chenhaha', '男', 12, 0, '2020-06-11 21:00:20');


    若username='chenhaha'的记录不存在,INSERT语句将插入新记录,否则,不执行任何操作。

    4.SQL中的if-else判断语句

    众所周知,if-else判断在任何地方都很有用,在SQL语句中,"CASE WHEN ... THEN ... ELSE ... END"语句可以用在增删改查各类语句中。

    • 给个情景:妇女节大回馈,2020年注册的新用户,所有成年女性账号送10元红包,其他用户送5元红包,自动充值。

    示例语句如下:

    -- 送红包语句
    UPDATE users_info u 
        SET u.balance = CASE WHEN u.sex ='女' and u.age > 18 THEN u.balance + 10 
                             ELSE u.balance + 5 end 
                             WHERE u.create_time >= '2020-01-01'
    • 情景2:有个学生高考分数表,需要将等级列出来,650分以上是重点大学,600-650是一本,500-600分是二本,400-500是三本,400以下大专;

    原测试数据如下:


    查询语句:

    SELECT *,case when total_score >= 650  THEN '重点大学' 
                  when total_score >= 600 and total_score <650 THEN '一本'
                  when total_score >= 500 and total_score <600 THEN '二本'
                  when total_score >= 400 and total_score <500 THEN '三本'        
                  else '大专' end as status_student 
                  from student_score;

    5.指定数据快照或备份

    如果想要对一个表进行快照,即复制一份当前表的数据到一个新表,可以结合CREATE TABLE和SELECT:

    -- 对class_id=1(一班)的记录进行快照,并存储为新表students_of_class1:
    CREATE TABLE students_of_class1 SELECT * FROM student WHERE class_id=1;

    新创建的表结构和SELECT使用的表结构完全一致。

    6.写入查询结果集

    如果查询结果集需要写入到表中,可以结合INSERT和SELECT,将SELECT语句的结果集直接插入到指定表中。

    例如,创建一个统计成绩的表statistics,记录各班的平均成绩:

    CREATE TABLE statistics (
        id BIGINT NOT NULL AUTO_INCREMENT,
        class_id BIGINT NOT NULL,
        average DOUBLE NOT NULL,
        PRIMARY KEY (id)
    );

    然后,我们就可以用一条语句写入各班的平均成绩:

    INSERT INTO statistics (class_id, average) SELECT class_id, AVG(score) FROM students GROUP BY class_id;


    确保INSERT语句的列和SELECT语句的列能一一对应,就可以在statistics表中直接保存查询的结果:

    SELECT * FROM statistics;
    +----+----------+--------------+
    | id | class_id | average      |
    +----+----------+--------------+
    |  1 |        1 |        475.5 |
    |  2 |        2 | 473.33333333 |
    |  3 |        3 | 488.66666666 |
    +----+----------+--------------+
    3 rows in set (0.00 sec)


    7.强制使用指定索引

    在查询的时候,数据库系统会自动分析查询语句,并选择一个最合适的索引。但是很多时候,数据库系统的查询优化器并不一定总是能使用最优索引。如果我们知道如何选择索引,可以使用FORCE INDEX强制查询使用指定的索引。例如:

    SELECT * FROM students FORCE INDEX (idx_class_id) WHERE class_id = 1 ORDER BY id DESC;

    指定索引的前提是索引idx_class_id必须存在。
     

    心得体会:

           记得那一年,我还是个孩子,记得第一个需求是做个统计接口,查询近两小时每隔5分钟为一时间段的网站访问量,JSONArray中一共返回24个值,当时菜啊,写了个接口循环二十四遍,发送24条SQL去查(捂脸),由于那个接口,被技术经理嘲讽~~表示他写的SQL比我吃的米都多。虽然我们山东人基本不吃米饭,但我还是羞愧不已。。

           然后经理通过调用一个dateTime函数分组查询处理一下,就ok了,效率是我的几十倍吧。从那时起,我就定下目标,深入MySQL学习,日后争取嘲讽回去~~~

           筒子们,MySQL路漫漫,其修远兮。永远不要眼高手低,一起加油,希望本文能对你有所帮助。

     

    ------------------------------------------------------------- 华丽的分割线 ---------------------------------------------------------

     

    (续)评论区问题反馈

            这一周有好几个朋友在评论区评论或私信我,问我当年那条SQL是咋写的,经理是咋写的。。看大家对知识的热情这么高,我必须得开源一下了,在这贴出来当时的SQL。有个点声明,项目数据库在内网不好测试,我就模拟了一张表来给大家统计一下吧。

            需求回顾:时间就'2020-01-14 00:00:00' - '2020-01-15 00:00:00' 为准,统计当天以每10分钟为间隔的分组数据。

    @当年经理的SQL

    其中时间根据需求自行修改,由于我只生成了一天的测试数据,我就以此为例。

    SELECT DATE_FORMAT(p.createTime, '%H') as date_str,count(*) as count 
        from data_timing p
    	where DATE_FORMAT(p.createTime, '%Y-%m-%d %H:%i:%S') >= DATE_FORMAT('2020-01-14 00:00:00', '%Y-%m-%d %H:%i:%S')
    	    AND DATE_FORMAT(p.createTime, '%Y-%m-%d %H:%i:%S') < DATE_FORMAT('2020-01-15 00:00:00', '%Y-%m-%d %H:%i:%S')
    		GROUP BY HOUR(p.createTime)

    经理这条SQL查询的结果如下,基本保留了当年原版~~这条的意思是取“2020-01-14”这天24小时每小时的count。当时我很有启发,也很有感觉,发现SQL还能这么玩儿。完事儿写完他说就要撤了,说要去接孩子。我说:“大佬,咱别吃饭吃一半儿啊,再给我来一下子呗”。

    @修改后最终版SQL

    然后经过我后续修改SQL如下:

    SELECT concat( date_format( p.createTime, '%Y-%m-%d %H:' ) , floor( date_format( p.createTime, '%i' ) /10 )*10 ) as date_str
    , count(*) as count from data_timing p
        where DATE_FORMAT(p.createTime, '%Y-%m-%d %H:%i:%S') < DATE_FORMAT('2020-01-15 00:00:00', '%Y-%m-%d %H:%i:%S')
            AND DATE_FORMAT(p.createTime, '%Y-%m-%d %H:%i:%S') >= DATE_FORMAT('2020-01-14 00:00:00', '%Y-%m-%d %H:%i:%S')
            GROUP BY  concat( date_format( p.createTime, '%Y-%m-%d %H:' ) , floor( date_format( p.createTime, '%i' ) /10 ))
    

    乍一看是不是还挺复杂,并不是多复杂,只是其中几个函数内容比较多。。比如concat()里的那一堆,以及date_format那些。先看结果吧。后面跟各位说一下查询原理:

    @最终版SQL原理

    如上所述,是每隔10分钟为一个时间段,当时只能想到了以每分钟为时间段分组的SQL,如下。

    SELECT concat( date_format( p.createTime, '%Y-%m-%d %H:' ) , floor( date_format( p.createTime, '%i' ) )) as date_str
    , count(*) as count from data_timing p
    		where DATE_FORMAT(p.createTime, '%Y-%m-%d %H:%i:%S') < DATE_FORMAT('2020-01-15 00:00:00', '%Y-%m-%d %H:%i:%S')
    		AND DATE_FORMAT(p.createTime, '%Y-%m-%d %H:%i:%S') >= DATE_FORMAT('2020-01-14 00:00:00', '%Y-%m-%d %H:%i:%S')
    		GROUP BY MINUTE(p.createTime)

    查询结果:

    那我怎么以10分钟为单位呢??网上各种查,网上虚的太多。也没有找到真正有用的写法,这不是坑爹吗,后来我想了想。想到了个好主意,每10分钟的特征在于“yyyy-MM-dd HH:m”这里,如果我将“10分钟”级为单位的字符串切分出来,不管“1分钟”级的。不就能分组匹配了么,哎呀我tm真是有点佩服我自己。

    因此,按每分钟分组的SQL和上面按10分钟分组的SQL不同之处就在这里:

    group by concat( date_format( p.createTime, '%Y-%m-%d %H:' ) , floor( date_format( p.createTime, '%i' ) /10 ) )

    我将分钟'%i'除以10然后向下取整,再进行group by 分组,最后展示的时候我可以在处理一下加“ *10 ”用于展示,当然,也可以不用“*10 ”,结果如下,有点畸形,看着难受,但不妨碍使用。

     

    好了,答应各位的已经搞定啦。有细心的小伙伴会发现,咦,你这数据中,如果没查到为0的怎么不显示呢?比如凌晨1点多的,都没有显示。这样岂不是还得后台处理补全?这个问题留给大家,如果有好的方法可以在评论区留言,我会随时关注老铁们的动态的~~

     

    展开全文
  • 2.3 分支结构-if语句的嵌套

    千次阅读 2016-06-11 10:24:34
    如果if语句中的“内嵌语句...嵌套if语句有2形式: 嵌套在else分支中,格式如下: if (表达式1) 语句1; else if (表达式2) 语句2;  else if …  else语句n;嵌套在if分支中,格式如下:  if (表达式1){  i
    如果if语句中的“
    内嵌语句
    ”(即语句1或语句2)也是if语句,就构成了“
    嵌套if语句
    ”。 
    

    嵌套的基本格式

    嵌套if语句有2种形式:
    • 嵌套在else分支中,格式如下:
      if (表达式1) 语句1;
      else if (表达式2) 语句2;
          else if …
              else语句n;
    • 嵌套在if分支中,格式如下:
          if (表达式1){
              if (表达式2) 语句1;
              else 语句2 ;
          }
          else 语句3;

    配对原则

    C++规定:在嵌套if语句中,if和else按照“ 就近配对 ”的原则配对, 即相距最近且还没有配对的一对if和else首先配对

    试分析下面的2组语句有何区别?

    //语句1:
    if(n%3==0)
        if(n%5==0) cout<<n<<″是15的倍数″<<endl;
        else cout<<n<<″是3的倍数但不是5的倍数<<endl; //else与第二个if配对

    //语句2:
    if(n%3==0){
        if(n%5==0) cout<<n<<″是15的倍数″<<endl;
    }
    else cout<< n <<″不是3的倍数″; //else与第一个if配对

    两个语句的差别虽然仅在于一对“{}”,但逻辑关系却完全不同。

    关于if嵌套语句的几点说明:
    • if语句用于解决二分支的问题,嵌套if语句则可以解决多分支问题。
    • 2种嵌套形式各有特点,应用时注意区别,考虑一下是否可以互相替换。
    • 由上述2个语句可以看出:if中嵌套的形式较容易产生逻辑错误,而else中嵌套的形式配对关系则非常明确,因此从程序可读性角度出发,建议尽量使用在else分支中嵌套的形式

    应用举例

    【例2.6】用嵌套if语句完成改写【例2.5】, 求三个整数中的最大值。
    #include <iostream>
    using namespace std;
    int main(){
        int a, b, c, max;
        cout<<"输入三个整数:";
        cin>>a>>b>>c;
        if(a>b&&a>c)  max=a;
        else if(b>a&&b>c)  max=b;
            else  max=c;
        cout<<"最大数为:max="<<max<<endl;
        return 0;
    }

    【例2.7】某商场优惠活动规定,某商品一次购买5件以上(包含5件)10件以下(不包含10件)打9折,一次购买10件以上(包含10件)打8折。设计程序根据单价和客户的购买量计算总价。
    #include <iostream>
    using namespace std;
    int main(){
        float price,discount,amount;   //单价、折扣、总价
        int count;         //购买件数
        cout<<"输入单价:"<<endl;
        cin>>price;
        cout<<"输入购买件数:"<<endl;
        cin>>count;
        if(count<5)  discount=1;
        else if(count<10)  discount=0.9;
            else  discount=0.8;
        amount=price*count*discount;
        cout<<"单价:"<< price<<endl;
        cout<<"购买件数:"<<count<<"\t\t"<<"折扣:"<<discount<<endl;
        cout<<"总价:"<<amount<<endl;
        return 0;
    }

    【例2.8】求一元二次方程ax 2 +bx+c=0的根。系数a(a≠0)、b、c由键盘输入。
    #include <iostream>
    #include <cmath>
    using namespace std;
    int main(){
        float a,b,c;
        float delta,x1,x2;
        cout<<"输入三个系数a(a!=0), b, c:"<<endl;
        cin>>a>>b>>c;
        cout<<"a="<<a<<'\t'<<"b="<<b<<'\t'<<"c="<<c<<endl;
        delta=b*b-4*a*c;
        if(delta==0){   
            cout<<"方程有两个相同实根:";
            cout<<"x1=x2="<<-b/(2*a)<<endl;
        }
        else if(delta>0){
            delta=sqrt(delta);
            x1=(-b+delta)/(2*a);
            x2=(-b-delta)/(2*a);
            cout<<"方程有两个不同实根:";
            cout<<"x1="<<x1<<'\t'<<"x2="<<x2<<endl;
        }
       else cout<<"方程无实根!"<<endl;//delta<0
        return 0;
    }
    展开全文
  • if 语句的三形式

    万次阅读 2016-10-22 21:19:25
    if 语句的三形式: 第一形式为基本形式:if 如果表达式的值为真,则执行其后的语句,否则不执行该语句。 ...第二形式为:if-else ...然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句
  • java中if语句的三格式,和例题

    千次阅读 2019-10-31 20:22:48
    if语句的三格式: 1. if语句 格式:if(判断语句){ 执行的程序 } 2.if...else语句 格式:if(判断语句){ 执行的程序1 } else{ 执行程序2 } 3.if...elseif...elseif.....语句 格式:if(判断语句1){ 执行语句1 }...
  • 在Java中,选择结构有if语句和switch语句。if语句的语法格式1: if(比较表达式) { 语句体; }它的执行流程: 1.先计算比较表达式的值,看其返回值是true还是false。 2.如果是true,就执行语句体; 3.如果...
  • Fortran:if语句

    万次阅读 2018-08-28 17:36:26
    声明:本博文翻译自:... fortran语言下面几种if结构语句 if...then语句结构 if...then...else语句结构 if...else if...else语句结构 nested if语句结构 select case语句结构 nested select case...
  • Java流程控制语句-分支结构(选择结构)

    万次阅读 多人点赞 2019-09-28 22:53:49
    文章目录定义分类if分支结构第一格式格式执行流程举例第二格式格式执行流程举例第三格式格式执行流程举例注意事项switch分支结构执行流程举例注意事项 定义 条件语句可根据不同的条件执行不同的语句。包括if...
  • //if语句的三格式 //格式1 if(比较表达式){ 语句体; } //格式2 if(比较表达式){ 语句体1; }else{ 语句体2; } //格式3 ...
  • C语言选择结构--RAPTOR算法及if语句

    千次阅读 2019-06-10 10:31:26
    选择结构也称为分支结构,可以分为三情况 1.单分支选择结构(Single Selection) 1)面临的选择是:要么执行一个操作,要么跳过它 a)根据苹果的质量好坏决定买或者不买 b)根据应聘的表现,单位决定录用还是不录用 2...
  • if语句和switch语句的区别

    千次阅读 2019-07-26 12:01:12
    switch:表示这是switch选择结构 switch后边的表达式的取值是限定的,取值类型: byte,short,int,char ...if语句和switch语句的区别: if语句的使用场景: A:针对结果是Boolean类型的判断 B:...
  • if语句可以构成分支结构3形式;表达式中判断两个值是否相等用==,多个语句时用{}括起来;当if语句中的执行语句又是if语句时,构成嵌套,else与if配对应该采取就近原则,一般情况下较少使用if语句的嵌套结构...
  • 下面是一个典型的决策中IF...ELSE结构的一般形式使用在大多数的编程语言中: if 语句: if 语句包含一个布尔表达式后跟一个或多个语句。 语法: 一个 if 语句的语法: if(Boolean_expression) {  // ...
  • C语言if语句的一些小错误

    千次阅读 多人点赞 2018-10-15 22:49:02
    常用的if用法:(1)if...else (2)if...else ...对于初学者来说,如果不注意的话,很容易在if语句上出现错误,下面是几种常见的错误: (1).  if(3 &gt; 2);  printf("hello");  els...
  • 课程首页在: ...第一部分 阅读程序并画流程图:阅读下列... 下面是程序运行的几种结果。要注意完整的测试,否则……这个问题让初学者很容易出错。 第三部分:画流程图练习:在下一页画出下面各个scratch程序对应的流程图
  • java基础语法if语句、循环

    千次阅读 2019-04-24 17:43:17
    java基础语法Java 条件语句if语句if...else语句if...else if...else 语句嵌套的 if…else 语句Java 循环语句while 循环do…while 循环for 循环Java 增强 for 循环关键字break 关键字continue 关键字 Java 条件语句 ...
  • C#学习——三种语句结构

    千次阅读 热门讨论 2016-01-29 20:14:50
    种语句结构:顺序、选择、循环 总述:  以前我们学过VB,知道VB中三大语句结构:顺序,选择和循环。这三种语句结构构成了VB...C#中也种语句结构,跟VB的一样,分别是:顺序结构,选择结构,循环结构。下面先
  • 选择结构语句

    千次阅读 2017-06-04 19:35:21
    if条件语句 ifelse的多层叠加 格式 流程图 代码 console 结论 ifelse ifelse语句 ...执行if语句1 }else{ 执行esle语句1} if(判断语句){ 执行if语句2 }else{ 执行esle语句2} 流程图代码public static void main
  • 分支语句结构

    千次阅读 2018-04-03 20:37:08
    一、if语句语句:C语言中由一个分号隔开就是一个语句1、if语句的语法if (表达式) 语句; if (表达式) 语句1; else 语句2;表达式为真执行语句1,否则执行语句20表示假,1表示真执行多条语句:if (表达式) { 语句...
  • 通常在云计算运维中,通常会用到shell和python,今天介绍shell当中的if和case语句,来完成测试判断,以减少程序的运行错误。
  • IF语句有如下的形式: IF 条件1 THEN 语句序列1; [ELSIF 条件2 THEN 语句序列2; ELSE 语句序列n;] END IF; 其中:  条件部分是一个逻辑表达式,值只能是真(TRUE)、假(FALSE)或空(NULL)。 语句序列为多...
  • If选择结构

    千次阅读 2020-04-29 16:01:23
    if语句共有三不同的形式,分别是单分支结构,双分支结构和多分支结构。 1、使用if语句实现单分支结构 if语句结构如下: if表达式是布尔型表达式,其结果为ture或false。 if语句流程图如下: if语句执行的步骤...
  • shell中if语句的格式以及使用

    千次阅读 2015-02-27 12:57:01
     这里的关键有几点:  1 使用单个等号  2 注意到等号两边各一个空格:这是unix shell的要求  3 注意到"$test"x最后的x,这是特意安排的,因为当$test为空的时候,上面的表达式就变成了x = test
  • v-if 判断语句

    万次阅读 2017-06-17 14:12:30
    这个例子演示了我们不仅可以绑定 DOM 文本到数据,也可以绑定 DOM 结构到数据。而且,Vue 也提供一个强大的过渡效果系统,可以在 Vue 插入/更新/删除元素时自动应用过渡效果 vue {{msg}} ...
  • vb 简单If条件语句

    万次阅读 2013-05-16 11:17:46
    一、简单If条件语句   使用在称之为分支结构的特殊语句块中的条件表达式控制了程序中哪些语句被执行以及什么样的执行次序执行。“If...Then”分支结构在程序中计算条件值,并根据条件值决定下一步执行的操作。最...
  • Shell 编程之条件语句一、常见的条件测试操作1、文件测试2、整数值比较3、字符串比较4、逻辑测试二、if 条件语句1、单分支 if 语句2、双分支 if 语句3、多分支 if 语句三、case 分支语句1、case语句的使用格式2、...
  • 顺序、选择和循环语句(程序的三基本控制结构) 复合语句 1、在了解程序的三基本控制结构之前,我们先了解以下什么是复合语句,即块语句。 2、与C语言及其他语言不同,Java语言的复合语句是以整个块区为单位的...
  • java基础_if嵌套和switch语句

    千次阅读 2018-07-04 12:00:02
    if嵌套:用于选择结构中多个分支的情况,而基本的if语句只能解决两个分支的情况。多分支的另一种结构:else if的语句结构:if(){ }else if(){ }else if(){ }else if(){ }else if形式的特点:这种写法公家简洁,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 256,810
精华内容 102,724
关键字:

if语句都有哪几种结构