C++2 判断

/*C++ 系列巩固知识的博客不出意外应该都是在编译器中写了。
承接上一章,这一章讲一下判断的相关知识点,记住是知识点,没法做到把所有细节都兼顾到。
上一章简单了解了输入输出,换行,变量命名等知识点。
2 判断,再判断
2.1 数据类型 知道常见的几种类型,知道声明变量的方式,初始化。
关于截断的问题,就是把浮点型的数据赋值给整形,小数部分会被截去,编译器会警告一下。
关于一种数据类型的存储范围可以通过所占字节数推出或者通过编译器自带获得。
比如int 型,4个字节,1个字节8位,所以共占了32位,每位可以表示两种情况即pow(2,32)种情况了。
其中pow是C++库里的函数,想知道是干嘛的,自己去试试就行。另一种方式是直接输出其最值*/
#include<iostream>
using namespace std;
int main(){
    cout << "INT_MAX =" << INT_MAX << endl;
    cout << "INT_MIN =" << INT_MIN << endl;
    system("pause");  //不让输出的界面一闪而逝。正如pause 的意思嘛。暂停。
    return 0;
}
/*肯定和你想的一样,你可以通过这个方式获得浮点型表示的最大范围,没必要去记住这个,还有
 想知道一个数据类型占了多上字节,可以通过sizeof(type_name)获得,常见的能说出来就行了。
 讲个笑话:一天晚上,警察叔叔在街上巡逻,碰见一男子。警察张口就问,int 型几个字节,答曰:4个
 字节,警察说你走吧,一看就是程序猿。大晚上才下班的,无非小偷和程序猿。哈哈。
 Tips: 关于long long int 型。这个是C++ 0x的新特性了。相当于对int 型扩容了,以后妈妈在也不用担心
 我为了范围改用double型了。*/
/*
2.2 程序中的判断  
Tips :计算机只能执行那些绝对清晰的命令。这句话有点意思。一方面说计算机的指令不能存在二义性。
另一方面也暗示计算机根本没有判断能力。计算机和数学是我认为最精确的两门学科了。容不得一丝马虎。
Tips: 介绍下人工智能(artificial intelligence)也叫(AI)比如可能听说过深蓝计算机击败国际象棋
冠军 盖瑞.卡斯帕洛夫 。我感觉计算机能赢他还是靠我们预先输入的处理方案,不然计算机根本没法赢。
介绍一下if 和else语句。就按照英语的字面意思理解就可以了。
if(condition)
    statement ;
condition 是条件,statement是语句。计算机里面的条件都被转换为0和1.非零值转换为1.
Tips: C++中可以写一条语句的地方,那么肯定可以放无数条语句,也叫复合语句了。一条语句可以省略
花括号,但是两条语句包括两条以上一定要加上花括号。新手要注意。注意加上分号表示这个语句结束。
if (condition)
    statements;
}
注意对齐格式问题。主要我在statement后加了s表示复数。建议都加上花括号,程序可读性好,易维护。
这里介绍一下写码的格式问题:
一种是 括号放在下面,一种是括号放在后面。
如: if(condition)
        {
            自己定义的语句。
        }  括号放在下面。
        if(condition) {
            自定义语句
        } 括号放在后面。两种都要注意对齐括号,美观是一方面,易于维护也是一方面。
if和else搭配使用,else表示if条件之外的所有可能性操作都归结到else的判断中了。
流程图表示下:if -else语句。
顺序执行代码→遇到condition 进行求解→判断其值是否是非0的→
若是非0值,进入if 里,执行statement 语句否则执行else语句下的statement→完成执行。
Tips:区分 等号(==) 和赋值(=) 。
basic语言中是不区分,根据上下文区分,想想都不舒服。
如果你在if(x=y)写成这个样子,编译器是可以接受的,只要的的y不是0,那么if底下的statement就会被
执行,因为condition从来不关里输入的是啥,它要知道是0值还是非0值就行了,输入啥是你程序员的问题。
这里若写成(x==y)其实这个表示会生成一个值,这个值只能是0或者1.
关于连带的赋值表达式:x=y=z=0; 三个都是0,或者写成:x=(y=(z=0))效果一样,不推荐。
示例:2.1 判断奇数还是偶数。这里简单的方式我就给出了,自己写试试。*/
#include<iostream>
using namespace std;
template<class T>
class EvenOdd{
private:
    T number;
    T remainder;
    T test_number;
public:
    EvenOdd(T test, T t_test_number){
        number = test;
        test_number = t_test_number;
        remainder = number % test_number;
    }
    void Result();
};
template<class T>
void EvenOdd<T>::Result(){
    if (remainder == 0)
        cout << "The number can be divided by " << test_number << "!" << endl;
    else
        cout << "The number can be divided by " << test_number << "!" << endl;
}
int main(){
    int n = 0;
    int divident = 0;

    cout << "Enter two numbers and press ENTER" << endl;
    cin >> n >> divident;
    EvenOdd<int> Test(n, divident);
    Test.Result();
    system("pause");
    return 0;
}
/*这个例子被我用练习模版编程了,虽然有点牵强。其中Even 是偶数, Odd是奇数。
写代码的时候取名字最好用英文起了,不知道意思可以查下电子词典之类的工具。
介绍%操作符,这个决对是个好东西。各种强大。感兴趣可以去查查余数除法
2.3 循环语句
一共三种结构,顺序,循环,判断。如果站在这个层面来说语言学习,无非就是这三种结果的组合嵌套
,至于怎么组合,怎么样才能组合的好,那就是你要学习的东西了,看多了,写多了,用大牛的话说
不过奇技淫巧尓。所以多看别的人代码是有好处的。新手可能感觉手打别人的代码是抄袭,其实不用这样
想,你写多了自然有一部分是内化成你固有的实力了,剩余的一部分就要靠你自己去思考才有所得
才能领悟精妙思想。
while语句,同if语句一样,需要一个判断条件,根据条件的真假决定是否执行statement 语句。
while下若只有一条语句,可以省略花括号,多条必须加上。
while(condition){
     statement;
}
语法格式就是如此,没什么可说的。没必要为记住语言细节而烦恼,用多了就会了,忘记了就查书。
注意到一点,while是循环啊。你只给判断条件,如果不修改条件,那么不就陷入死循环了嘛。
所以为了不让他死循环,要加上跳出循环的条件。如果你就想搞死循环,那你随意。
一般要设置一个退出循环的机制。不然循环无意义啊。
编程实例: 2.2 显示n1 到n2 的数字,这里就用整形,步长是1。我给代码不是答案,是参考.*/
#include<iostream>
using namespace std;
template<class T>
class DispNumbers{
private:
    T n1, n2;
public:
    DispNumbers(T &n_n1, T &n_n2){
        n1 = n_n1;
        n2 = n_n2;
    }
    void Show();
    void ShowEven();
};
template<class T>
void DispNumbers<T>::ShowEven(){
    if (n1 % 2 == 0){
        while (n1 <= n2){
            cout << n1 << '\t';
            n1 += 2;
        }
    }
    else {
        n1 = n1 + 1;
        while (n1 <= n2){
            cout << n1 << '\t';
            n1 += 2;
        }
    }
}
template<class T>
void DispNumbers<T>::Show(){
    if (n1 < n2){
        cout << "Number from " << n1 << " to " << n2 << " is :" << endl;
        while (n1 <= n2){
            cout << n1++ << '\t';
        }
    }
    else {
        cout << "Number from " << n2 << " to " << n1 << " is :" << endl;
        while (n1 >= n2){
            cout << n1-- << '\t';
        }
    }
}
int main(){
    cout << "Enter two numbers as the begin and end !" << endl;
    double n1 = 0, n2 = 0;
    cin >> n1 >> n2;
    /*if (n1 > n2){
    n1 = n1 + n2;
    n2 = n1 - n2;
    n1 = n1 - n2;
    }*/
    DispNumbers<double> dob(n1, n2);
    dob.Show();
    //dob.ShowEven();
    system("pause");
    return 0;
}
/*自己动手写,尽可能尝试用多种方式写。
2.4 C++中的真与假
非0即真,记住这个就可以了。可以看看开关上的标识:1 和0, 1表示开,0表示关,这个就是传送中的
布尔逻辑吧。
比较下bool 型和 int 型。 bool 型可以算是int的子类型了吧。若过不支持bool  型,可以考虑用int 型代替
下,当然如果你的编译器连bool 型都不支持,你也可以换了。
2.5 递增操作符
++操作符。按照书上讲,C语言的设计着有着追求简介的癖好。++操作符就是最好的证据之一。
n++//n=n+1 两个是等价的。
下面讲一下重点:i++是一个具有连带作用的表达式,这意味着它不仅会生成一个值,还会执行一个动作
,那i++来说,i++的生成值等于i, 但在求值之后,它还会给i加上1;有点奇特吧。
因为如果你的语句中写成了这个样子 cout<<i<<" " ; i++ ;  注意这个地方我一行写了两个语句。但是我
用分号隔开了。 那么你可以写的更简洁点: cout<<i++; 效果一样的。
很好的展示了连带作用。建议不要连续使用多个自增自减表达式。安全。
一共四个操作符。 ++ ,--  两个前置两个后置。
前置 var ++ ;       含义: 先给var 加上1 ,在传递加法结果。
后置 var ++ ;        含义:先传递var 当前的值,在给var 加上1.
减减类似了就不说了。注意++ 可以当计数器用,决对是个好东西。
2.6 语句和表达式
区分一下两者。一般来说 ,根据分号(;)结尾的可以的当作是语句。一行可以写多条语句,但是不推荐。
表达式是啥?一般来说表达式会生成一个值(有几个明显的例外)举个例子
x  12 x+=12 x==33 num++ 这些都是表达式,在后面加上分号就成语句了。
2.7 布尔(短路)逻辑
直接上正文了,不说小例子了。
三个操作符 (||) (&&),! ,江湖俗称与或非,集合中的交并补类似。
例如 if(x>1||(x+3)<66) 这里说一下运算符的优先级。算数操作符(加减乘除)>关系操作符(>,<,==,等)>逻辑操作符。越高的越先执行。
这个采用的是短路逻辑。嗯,你可能很好奇什么是短路逻辑。举个例子说明下
if(x>1&&x<5) 计算机是这样执行的。先求解x>1的值,如果是0值,那么后面的想x<5不用执行了,
因为整体的值一定是0,和后面的东西无关了。相当于电路中的短路。
同样的有|| 操作符。记住! 不采用,因为它就比较一个东西,哪来的短路。
Tips: 不要和& | ! ^ ~ 操作符弄混了。它们是位操作符!!!位操作符是把一个操作数的每一个
二进制位与另一个操作数的二进制位进行比较。不使用短路逻辑!!!
编程实例2.3 判断一个人年龄。*/
#include<iostream>
using namespace std;
int main(){
    int age;
    cout << "Enter an age and press ENTER" << endl;
    cin >> age;
    if (age < 0){
        cout << "Your age must be more than 0 ,enter an age again " << endl;
        cin >> age;
    }
    if (age<12 || age>20)
        cout << "The subject is not a teenager ! " << endl;
    else
        cout << "The subject is a teenager ! " << endl;
    system("pause");
    return 0;
}
/*参考即可。
2.8 math 库简介
一看就是和数学相关的,加载这个头文件,我们就可以使用相关的数学函数,三角函数,开平方函数等。十分强大。
如: double n_sqrt=sqrt(n); 注意截断。
给个例子,判断素数的例子。*/
#include<cmath>
#include<iostream>
using namespace std;
template<class T>
class Prime{
private:
    T test_number;
public:
    bool IsPrime = 1;
    Prime(T & test){
        test_number = test;
    }
    bool Judge();
};
//template<class T>
//bool Prime<T>::IsPrime = true;
template<class T>
bool Prime<T>::Judge(){
    int temp = sqrt(test_number);
    while (int i = 2< temp){
        if (test_number%i == 0){
            IsPrime = false;
            //break;
            return IsPrime;
        }
        i++;
    }
    return IsPrime;
}
int main(){
    int number;
    cout << "Enter a number and press ENTER !" << endl;
    cin >> number;
    Prime<int> Judgement(number);
    if (Judgement.IsPrime)
        cout << "The number is prime" << endl;
    else
        cout << "The number is not prime" << endl;
    system("pause");
    return 0;
}
/*仅供参考,我写的不是答案。仔细品味下bool 变量的使用小技巧,break 的设置。以及整体的设计思想。
int temp = sqrt(test_number);while (int i = 2< temp) 解释下为什么要写成这个样子,而不是写成
while(int i=2<sqrt(test_number),。因为这个样子可以只计算一次开平方就可以了,不然多次执行浪费
编程实例 2.5 ,具体的要求我就不写了直接放代码了,叫做取石子游戏,感兴趣的搜一下看看。*/
#include<iostream>
using namespace std;
int main(){
    //这是一个计算机和人交互的游戏,给计算机设置好一个处理方案,用户则提示输入。
    cout << "Welcome to NIM.Pick a starting total :";
    int number = 0;
    cin >> number;
    while (1){
        if (number % 3 == 2){
            number = number - 2;
            cout << "I am subtracting 2" << endl;
        }
        else {
            number = number - 1;
            cout << "I am subtracting 1" << endl;
        }
        cout << "The new number is " << number << endl;;
        if (number == 0){
            cout << "I win " << endl;
            break;
        }
        cout << "Enter a number to subtract ." << endl;
        int n = 0;
        cin >> n;
        while (n<1 || n>2){
            cout << "The input must be 1 or 2 ." << endl;
            cout << "Wrong number , Enter again " << endl;
            cin >> n;
        }
        number = number - n;
        cout << "The new number is " << number << endl;
        if (number == 0){
            cout << "You Win " << endl;
            break;
        }
    }
    system("pause");
    return 0;
}
/*大概就是如此了。谈一下对这种交互模式的理解。说一下自己的理解。咋一想,感觉写一个交互的模式很难
其实看了代码感觉很简单嘛。一路到头是顺序执行加循环。计算机和人交互,无非是这样子,给计算机设置
好响应的操作,当然响应得是有条件的,条件的就得自己定义了。而用户就提示它输入即可,这样不就是
是简单的计算机和人交互嘛.所以一些看起来很深奥的东西,站在一定的层面去理解,也不是那么不能接受。
关于如何组织代码的问题,可以参考一种思路。倒推结果。根据结果来倒推需要的条件。不赘述。
2.9 总结
1)选用适当的数据类型。
2)声明变量的方法
3)C++里最简单的判断结构是if语句了吧。
4)if else搭配使用
5)写一条语句的地方可以写多条。
6)区分赋值操作符和比较的等号操作符。
7)死循环,出循环怎么出。
8)除与操作符和自增神器。
9)自增的连带作用
10)布尔逻辑
11)跳出循环的break语句。
第二篇完!*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值