C++ day7 if else, switch,条件运算符,逻辑运算符

本文回顾程序的三种决策手段:if else结构,switch语句,条件运算符

还会涉及把多个测试表达式(一般是关系表达式)合并为一个测试表达式

if else

if,while,for循环的测试表达式等,需要bool类型值的地方,程序都会自动转换为bool类型,所以if(x)和if(x != 0)一样的,所以测试表达式也可以不是关系表达式,可以是一个值

for,while,do while,if else全部都只被看作是一条语句
在这里插入图片描述
在这里插入图片描述

示例1 回显输入(cout << ++ch 和 cout << ch + 1的区别!)

#include <iostream>
int main()
{
   
    char ch;

    std::cout << "Type, and I shall repeat.\n";
    while((ch = std::cin.get()) != '.')
    {
   
        if (ch == '\n')
            std::cout << ch;//如果是换行符,就原样打印
        else
            std::cout << ++ch;//打印每个字符的后一个字符
    }
    return 0;
}
Type, and I shall repeat.
I spend too much money
J!tqfoe!upp!nvdi!npofz
I have to earn more.
J!ibwf!up!fbso!npsf

如果while循环里只有std::cout << ++ch;就会像下面这样,换行符被打印为它后面的一个字符,而不会换行

Type, and I shall repeat.
I bought a pot
J!cpvhiu!b!qpu

如果把++ch改为ch + 1,我没猜到竟会输出ASCII码的数字!!!

cout 认为++ch还是char类型,但是ch + 1,和int类型相加,ch被整型提升为int,最终结果也是int

Type, and I shall repeat.
I will do it well
7433120106109109331011123310611733120102109109
oh my god.
1121053311012233104112101

示例2 猜数字

#include <iostream>

int main()
{
   
    const int FAV = 34;
    int n = 0;

    std::cout << "Enter a number in the range 1-100\n";
    do
    {
   
        std::cin >> n;
        if(n > FAV)
            std::cout << "Too high------Guess again!\n";
        else if(n < FAV)
            std::cout << "Too low------Guess again!\n";
        else
            std::cout << n << " is right!\n";
    }while(n != FAV);
    return 0;
}
Enter a number in the range 1-100
56
Too high------Guess again!
30
Too low------Guess again!
45
Too high------Guess again!
35
Too high------Guess again!
32
Too low------Guess again!
33
Too low------Guess again!
34
34 is right!

逻辑运算符(优先级低于关系运算符)

就三个,逻辑与&&,逻辑或||,逻辑非!,和英语很像

||,&&是顺序点(冒号,逗号运算符也是顺序点 sequence point)

即||,&&左边的表达式先修改,先判定左侧,并且在判定右侧之前产生所有的副作用,比如

int i = 7, j = 8;
//||是顺序点,先计算左边,i为7和8比较,左边表达式值为false,再递增i,i=8
// 左边表达式的值如果是true,就不计算右边了;这里要计算,右边是true。所以整个逻辑表达式的值是true
i++ > 8 || i == j;//||优先级低于关系运算符,所以不用加括号

示例 菜单选择

#include <iostream>

int main()
{
   
    std::cout << "This program will reformat your hard disk and destroy all your data"
                ".\nDo you wish to continue?<y/n>\n";
    char ans;
    std::cin.get(ans);//只读取第一个字符
    if (ans == 'y' || ans == 'Y')
        std::cout << "You were warned!\a\a\n";
    else if(ans == 'n' || ans == 'N')
        std::cout << "A wise choice...bye!\n";
    else
        std::cout << "That wasn't a y or n!\nApparently you can't follow"
                     " instructions, so I will trash your disk anyway!\a\a\a\n";
    return 0;
}

示例2

脑袋晕乎乎了,昨晚没睡好,这个示例其实没什么新东西,我多敲一敲总是好点

#include <iostream>
const int Arsize = 6;
int main()
{
   
    using namespace std;
    float naaq[Arsize];
    cout << "Enter the NAAQs (New Age Awareness Quotients)"//新时代意识
         << " of\nyour neighbors. Program terminates "
         << "when you make\n"
         << Arsize << " entries "
         << "or enter a negative value.\n";

    int i = 0;
    float temp;
    cout << "First value: ";
    cin >> temp;
    while (i < Arsize && temp >= 0)
    {
   
        naaq[i] = temp;
        ++i;
        if (i < Arsize)//如果递增后还小于数组长度才继续输入
        {
   
            cout << "Next value: ";
            cin >> temp;
        }
    }
    if (i == 0)
    {
   
        cout << "No data--bye!\n";
    }
    else
    {
   
        cout << "Enter your naaq: ";
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值