C语言日记 5 运算符和表达式

 

书P23例题2-3:

 #include <iostream>
using namespace std; 
void main()
{
    cout << 20 / 7 << "," << -20 / 7 << endl;
    cout << 20.0 / 7 << "," << -20.0 / 7 << endl; cout << 20 % 7 << endl;
}

算术表达式。例:

#include <iostream>
using namespace std; 
void main()
{
    int x = 5, r = 8, a= 9, b = 10;
    cout << (x + r) * 8 - (a + b) / 7;
}

步骤:括号的优先级最高,所以先算x+r=13和a+b=19,其次优先级最高的是乘除,所以接下来先算乘八和加七,最后在做优先级最低的减法计算,最后得到102。


书P4例题2-4:

#include <iostream>
using namespace std;
void main()
{
int i = 8;
    cout << ++i << endl;
    cout << --i << endl;
    cout << i++ << endl; 
    cout << i-- << endl;
    cout << -i++ << endl;
    cout << -i-- << endl;//输出9//输出 8//输出 8//输出9//输出-8//输出-9
}
notes:

例2-5:

#include <iostream>
using namespace std;
void main()
{
    int i = 5, j = 5, p, q;
    p = (i++) + (i++) + (i++);
    q = (++j) + (++j) + (++j);
    cout << p << "," << q << "," << i << "," << j << endl;
}

对于p我们没什么好说的。

对于q,q = (++j) + (++j) + (++j);遵循原则“先自增,再运算”;

由于++运算符的优先级高于+,所以我们先进行自增操作:

步骤1:j等于j+1等于6,然后我们带着j=6的结果继续参加下一步运算;

步骤2:j等于j+1等于7,然后我们带着j=7的结果继续参加下一步运算;

步骤3:j等于j+1等于8,然后我们带着j=8的结果继续参加下一步运算;

自增完成,下面我们继续进行加法运算即可:q=8+8+8=24;

鉴于后续遇到的一些问题,

有关于自增运算符更多的一些非常重要非常必要的point,详见:

自增运算符附加说明_宇 -Yu的博客-CSDN博客

例2-6:

using namespace std;
void main()
{
    int a, b = 322;//整型
    float x, y = 8.88;//浮点型,即实(数)型
    char cl = 'k', c2;//字符型
    a = y; //实型转整型,a=8
    x = b;//整型转实型,x=322.0
    a = cl;//字符型转整型,把字符k对应的ASCII码数值ASC(k)=107赋给a,a=107
    c2 = b;//整型转字符型
    //把数字322对应二进制数(101000010)低八位(01000010)作为ASCII码数值(66)
    //把ASCII码数值(66)对应的字符Char(66)=B赋给c2

    cout << a << "," << x << "," << a << "," << c2 << endl;
}

复合赋值运算符

例如:

#include <iostream>
using namespace std;
void main()
{
    int a = 5;
    a += 5;
        cout << a;
}

等价于

#include <iostream>
using namespace std;
void main()
{
    int a = 5;
    a = a + 5;
        cout << a;
}

书P28例2-7:

#include <iostream>
using namespace std;
int main()
{
    int a = 0, b = 1;
    bool m = (a++) && (b++);
    //表达式 a++的值为a原本的值0
    //所以&&前的表达式确定为假,b++不会被执行
    cout << a << "," << b << endl; 
    m = a++ && b++;
    cout << a << "," << b << endl; 
    m = a++ || b++;
    //表达式a++确定为真,b++不会被执行
    cout << a << "," << b << endl; 
    return 0;
}

 在这里,其实因为自增的算数运算符优先级始终大于逻辑运算符。
所以不管是先自增后运算还是先运算后自增,不管有没有加括号,都是先进行自增操作,然后再进行国际运算符的与操作,或操作。
注意:这里括号加跟不加都一样,比如:

#include <iostream>
using namespace std;
int main()
{
    int a = 0, b = 1;
    bool m = a++ && b++;
    //表达式 a++的值为a原本的值0
    //所以&&前的表达式确定为假,b++不会被执行
    cout << a << "," << b << "," << m << endl;
    m = a++ && b++;
    cout << a << "," << b << "," << m << endl;
    m = (a++) || (b++);
    //表达式a++确定为真,b++不会被执行
    cout << a << "," << b << "," << m << endl;
    return 0;
}

书P29例2-8:

#include <iostream>
using namespace std;
int main()
{
    int a = 2, b = 4, c = 6, x, y;
    y = ((x = a + b), (b + c));
    cout << "y=" << y << ",x=" << x << endl;
}

强制类型转换两种方式:

一:

#include <iostream>
using namespace std;
int main()
{
    float f = 1.2;
    int i = (int)f;
    cout << i;
}

二:

#include <iostream>
using namespace std;
int main()
{
    float f = 1.2;
    int i = int(f);
    cout << i;
}

提到类型转换,在正常运算,编写程序时,要注意:

在一开始赋初值时不仅要关注变量的数值,还要关注给变量赋的类型给变量赋的类型

例:(《实践教程》P9<三.扩展练习>,1)(我扩展了一下,额外增加了几个输出语句)

#include<iostream>
using namespace std;
#include<iomanip>
int main()
{
    double d = 3.2; int x, y;
    x = 1.2; y = (x + 3.8) / 5.0;
    cout << " d * y =" << d * y << endl;
    cout << "x=" << x << endl;
    cout << "输出带有两位小数的y =" << fixed << setprecision(2) << (double)y << endl;
}
 

#include<iostream>
using namespace std;
#include<iomanip>
int main()
{
	double d = 3.2; int x, y;
	x = 1.2; y = (x + 3.8) / 5.0;
	cout << " d * y =" << d * y << endl;
	cout << "x=" << x << endl;
	cout << "输出带有两位小数的y =" << fixed << setprecision(2) << (double)y << endl;
}

 结果:

注意(有趣的是):这里最后一行代码

“cout << "输出带有两位小数的y =" << fixed << setprecision(2) << (double)y << endl;  ”程序

其中的<< fixed和(double)缺一不可(缺少一个就达不到输出小数点后两位小数的效果)

为什么?

fixed 将指定浮点数字的小数点后要显示的位数。

(double)确保我们将y转换为实数,而不是整数。

其实为什么具体只有两者条件都满足的情况下才能输出两位小数我暂时也不清楚,但是未来总有一天我们一定会搞清楚的。

详见:

C++ fixed用法详解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值