成为C++高手之if与switch

计算器第三版

上一节中的这一部分:

    //跟据运算符进行不同的运算
        if(opt == 1){
            //加
            result = number1+number2;
        }
        if(opt == 2){
            //减
            result = number1-number2;
        }
        if(opt == 3){
            //乘
            result = number1*number2;
        }
        if(opt == 4){
            //除,现在只能整除
            result = number1/number2;
        }

有点问题,虽然逻辑上没问题,但是运行不高效。因为如果opt==1,那么加运算被执行,那么其它的运算肯定不用再看了,但上面的代码依然会执行后面的判断。浪费CPU啊。这样改就OK了:

    //跟据运算符进行不同的运算
        if(opt == 1){
            //加
            result = number1+number2;
        }else if(opt == 2){
            //减
            result = number1-number2;
        }else if(opt == 3){
            //乘
            result = number1*number2;
        }else if(opt == 4){
            //除,现在只能整除
            result = number1/number2;
        }

加了else表示if不成立时才执行。效率变高了。其实可以把运算符不在范围内时的提示功能也结合进来,变成这样:

int main(void)
{
    //保存用户输入的数
    int number1;
    int number2;
    int opt;//运算符

    //提示用户输入第一个数:
    printf("请输入第一个数:\n");
    int r =scanf("%d",&number1);
    //查看Scanf是否收到了正确的数
    if(r==0){
        printf("别调皮,这样不好玩,我走了\n");
        //程序退出
        return 0;
    }

    //提示用户输入第二个数
    printf("请输入第二个数:\n");
    r = scanf("%d",&number2);
    if(r==0){
        printf("别调皮,这样不好玩,我走了\n");
        //程序退出
        return 0;
    }

    //提示用户输入运算符
    printf("请输入运算符(1234分别对应加减乘除):\n");
    r = scanf("%d",&opt);
    if(r==0){
        printf("运算符也是数字,别搞错好吗?你这样让我怎么混? 我走了\n");
        //程序退出
        return 0;
    }

    //程序运行到这里说明两次输入都正确

    int result;//存放计算结果

    //跟据运算符进行不同的运算
    if(opt == 1){
        //加
        result = number1+number2;
    }else if(opt == 2){
        //减
        result = number1-number2;
    }else if(opt == 3){
        //乘
        result = number1*number2;
    }else if(opt == 4){
        //除,现在只能整除
        result = number1/number2;
    }else{
        printf("运算符必须是1,2,3,4之一才行!走了\n");
        return; //退出
    }

    //输出结果
    printf("%d+%d = %d\n",number1,number2,result);
    return 0;
}

最后的else表示当上面所有的判断都不成立时执行。

计算器第四版

条件语句还有一种写法:switch…case。判断运算符的部分适合用switch …case :

//跟据运算符进行不同的运算
    switch(opt){
    case 1:
        //加
        result = number1+number2;
        break;
    case 2:
        //减
        result = number1-number2;
        break;
    case 3:
        //乘
        result = number1*number2;
        break;
    case 4:
        //除,现在只能整除
        result = number1/number2;
        break;
    default:
        printf("运算符必须是1,2,3,4之一才行!走了\n");
        return; //退出
    }

   //输出结果
   printf("%d+%d = %d\n",number1,number2,result);

Switch(opt)表示判断opt的值。case中的break表示跳出。如果没有break,语法没错,但是逻辑出错,不跳出的话,就会继续执行下面的case。defult相当于上一节中的else部分。

Switch…case 只能判断相等的条件,if可以判断任何条件,比如等于,不等于,大于,小于等,所以if完全可以替换switch,反过来却不行。

注意,本系列文章必须结合视频教程 http://edu.csdn.net/course/detail/2057 才能取得快速入门的效果。欢迎加入群535807023讨论。

上一篇:成为C++高手之条件语句

时间: 2024-10-12 14:51:17

成为C++高手之if与switch的相关文章

成为C++高手之宏与枚举

宏 我们的计算器程序,用1234对应加减乘除,对于人阅读很产生一点障碍.隔一个月后再看此代码可能想不起是0123还是1234了,还得去代码中查找,如果能为代表四则运算的四个数取个有意义的别名就好了,一看是知道对应什么.没问题,用宏啊.以下是我们的计算器程序第五版: //定义四则运算的宏 #define JIA 1 #define JIAN 2 #define CHENG 3 #define CHU 4 int main(void) { //保存用户输入的数 int number1; int nu

Android数据库高手秘籍(三)——使用LitePal升级表

在上一篇文章中,我们学习了LitePal的基本用法,体验了使用框架来进行创建表操作的便利.然而大家都知道,创建表只是数据库操作中最基本的一 步而已,我们在一开始创建的表结构,随着需求的变更,到了后期是极有可能需要修改的.因此,升级表的操作对于任何一个项目也是至关重要的,那么今天我们就 一起来学习一下,在Android传统开发当中升级表的方式,以及使用LitePal来进行升级表操作的用法.如果你还没有看过前一篇文章,建议先去参考 一下 Android数据库高手秘籍(二)——创建表和LitePal的

Android高手进阶——Adapter深入理解与优化

Android高手进阶--Adapter深入理解与优化 通常是针对包括多个元素的View,如ListView,GridView.ExpandableListview,的时候我们是给其设置一个Adapter.Adapter是与View之间提供数据的桥梁,也是提供每一个Item的视图桥梁.   以ListView为例.其工作原理为: ● ListView针对List中每一个item, adapter都会调用一个getView的方法获得布局视图 ●我们通常会Inflate一个新的View,填充数据并返

Android高手速成--第二部分 工具库

主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少View.服务.资源简化初始化,事件绑定等重复繁琐工作 AndroidAnnotations(Code Diet)android快速开发框架项目地址:https://github.com/excilys/androidannotations文档介绍:https://github.com/excilys/a

收录:Php高手带路--问题汇总解答

  1:为什么我得不到变量 我在一网页向另一网页POST数据name,为什么输出$name时却得不到任何值? 在PHP4.2以后的版本中register_global默认为off 若想取得从另一页面提交的变量: 方法一:在PHP.ini中找到register_global,并把它设置为on. 方法二:在接收网页最前面放上这个extract($_POST);extract($_GET);(注意extract($_SESSION)前必须要有Session_Start()). 方法三:一个一个读取变量

成为C++高手之实战项目

在内存中模拟出一副牌,然后模拟洗牌,发牌等动作. 流程是这样的:构建一副牌保存到一个数组中-洗牌-创建玩家-向玩家发牌–输出每个玩家的牌. #include <stdio.h> #include <stdlib.h> #include <time.h> //定义扑克的花色 enum Suit{ heart, spade, diamond, club, joker1, joker2 }; //一副牌的数量 #define CARD_COUNT 54 //定义扑克 type

Ubuntu完全教程,让你成为Ubuntu高手!

Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音.了解发音是有意义的,您不是第一个为此困惑的人,当然,也不会是最后一个:) 大多数的美国人读 ubuntu 时,将 u 作为元音发音,类似单词 who 或者 boo ,重音在第二个音节即 u'buntu ,oo-boon-too . 如果您喜欢撒哈拉,喜欢它令人窒息的温柔.梦幻般的寂寥还有张扬恣肆的旷远,您大可在第一个 u,后面带些嗡嗡声: oom-boon-too. Ubuntu的中文发音大约为:

PHP高手干货分享:不能不看的50个细节!【PHP培训教程】

兄弟连分享PHP高手干货:不能不看的50个细节 1.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的"函数"(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号). 2.如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. 3.$row['id']的速度是$row[id]的7倍. 4.echo比 print

成为C++高手之头文件与条件编译

书接上回(http://blog.csdn.net/niu_gao/article/details/51478789). 但现在看起来真不爽,main.c依赖的文件不能在工程中管理,要修改那些文件的话麻烦大了.如何既能分成多个文件又能在工程中看到呢?可以,使用头文件(h文件). 头文件中只放那些不产生内存占用的代码,比如定义结构(定义结构不会产生内存分配,只有用结构定义变量时才产生内存分配).定义枚举,定义宏,声明变量,声明函数等.而且大都是一个c文件对应一个h文件.下面增加poker.h和pl