运算符与表达式编程题

1.运算符的优先级 

如有定义int a=11;那么执行完a+=a-=a*a后,a的值为(      )   。

 A. 121

 B. 220

 C. -220 正确答案

 D. -110

首先a的值是11。

现在来分析式子a += a -= a*a。我们通过查表可知,里面优先级最低的是赋值运算符:+=、-=,有两个优先级最低的运算符,继续查表:发现赋值运算符的结合性是从右到左,所以:(a) += (a) -= (a*a)会先计算 a -= a*a (也就是a=a-a*a), a -= a*a 表达式的结果是赋值号左边的 a值,a的值为-110。

继续分析:式子还剩下:a += -110(也就是a = a + (-110)),并且a的值是-110 ,,所以整个表达式的结果是-220。

 2.逻辑运算(偷懒的计算机)

以下程序段的执行结果为:(       )

int x = 0,y = 0,z = 0;

++x || ++y && z++;

printf("x=%d,y=%d,z=%d\n", x , y , z );

 A. x=0,y=0,z=0

 B. x=1,y=0,z=0  正确答案

 C. x=1,y=1,z=0

 D. x=1,y=1,z=1

答案解析:

考察的点是:自增运算符、逻辑运算符的使用。难点++在前与在后的区别,易错点:计算机运行逻辑运算符的偷懒操作

++x||++y&&z;++式子看起来有点复杂,先找式子中优先级最低的运算符进行分解。,查表可知逻辑或||的优先级比逻辑与&&要低,因此得到:(++x) || (++y&&z;++ ),也就是左操作数||右操作数。

左操作数的计算:++x。++在前会先是变量x自身的值+1,x=1,再来使用x的值作为++x表达式的结果,所以++x的值为1。

非零表示真,逻辑或左操作数已经为真,右边的操作数不会改变逻辑或运算符表达式的值,这时候计算机进行偷懒,不会执行右操作数。所以x=1,y=0,z=0。

3.scanf的报错 

从键盘输入三个数据,输出其中最大的数(如果有数据相等也只输出其中一个较大的数据)。

提示:能够使用条件运算符(三目运算符)或者分支选择结构实现

编程思路:

假设定义两个变量a、b,并赋了初值。

a>=b?a:b,该表达式可以得到a和b中的较大值。

现在比较三个数,得到最值。可以先前两个数据进行比较,保存较大值,再将这个较大值与第三个数据进行比较即可。

参考代码:

#define _CRT_SECURE_NO_WARNINGS//后面是没有分号的

#include<stdio.h>

int main()

{

 float a, b, c;

 scanf("%f %f %f", &a, &b, &c);

 printf("%2.2f", (a >= b ? a : b) >= c ? (a >= b ? a : b):c);

 return 0;

}

附上自己的暴力代码,相形见绌啦

int a, b, c, Larger_value, Max_value;//我的命名还是很严谨滴哈哈
	scanf_s("%d %d %d",&a,&b,&c);//vs不信任scanf,这里的scanf_s()只让vs信服,还是加命令屏蔽好一些  #define _CRT_SECURE_NO_WARNINGS
	Larger_value = (a > =b) ? a : b;
	Max_value = (Larger_value > =c)? Larger_value: c;
	printf("%d", Max_value);
	

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿井侯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值