以下表达式x&&1 用在if的条件中时,和哪个是等价的:求答案和解释

S_GKCYY 2019-11-15 10:44:06
以下表达式x&&1
用在if的条件中时,和哪个是等价的:
A.x==1

B.x!=1

C.x

D.x==0
...全文
2426 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2019-11-16
  • 打赏
  • 举报
回复
x && 1 不是0的数都表示true,只有0表示false
所以 X&&1 等同于只判定x一项是否为true
答案是A
wang0635 2019-11-16
  • 打赏
  • 举报
回复
分情况讨论:x为0时,x为假,x&&1为假。AC都为假
x非零时,x&&1为真。C为真,A仅x为1时真
所以,结果是C
「已注销」 2019-11-16
  • 打赏
  • 举报
回复
C &&判断完前一个若是错的就不再判断后一个 1显然是对的 因此只需要判断x
「已注销」 2019-11-16
  • 打赏
  • 举报
回复
引用 2 楼 寻开心 的回复:
x && 1 不是0的数都表示true,只有0表示false 所以 X&&1 等同于只判定x一项是否为true 答案是A
x只要不是0都是对的,x==1太狭隘了
第七章 选择结构 7.1 理解选择结构 (1)if语句及if-else语句 (2)switch语句 (3)条件表达式语句 (4)goto语句 7.2 简单分支语句 7.2.1 单分支if语句 基本形式: if(表达式) { 语句块; } 表达式值为逻辑真(ture,非0),执行语句块;否则,表达式值为逻辑假(false,为0),不执行语句块。 7.2.2 双分支if-else语句 基本形式: if(表达式) { 语句1; } else { 语句2; } 表达式值为逻辑真(ture,非0),执行语句1;否则,表达式值为逻辑假(false,为0),执行语句2。 7.3 多分支语句 7.3.1 嵌套if语句 1.嵌套语句的形式 嵌套if-else语句形式 if(表达式1) { if(表达式2) { 语句1; } else { 语句2; } } else { if(表达式3) { 语句3; } else { 语句4; } } 该嵌套语句等价下面4个if语句: if(表达式1&&表达式2) {语句1} if(表达式1&&!表达式2) {语句1} if(!表达式1&&表达式3) {语句1} if(!表达式1&&!表达式3){语句1} 例:一元二次方程a*x*x+b*x+c=0的根 #include #include int main() { float a,b,c,disc,x1,x2; printf("Input coefficents of equation:\n"); scanf("a=%f,b=%f,c=%f",&a,&b,&c); if(a==0) { printf("Not a quodratic!\n "); } else { disc=b*b-4*a*c; if(disc==0) { printf("Two equal roots:%.2f\n",-b/(2*a)); } else { if(disc>0) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("x1=%.2f x2=%.2f\n",x1,x2); } else { printf("No real roots!\n"); } } } return 0; } 2.if-else配对问题 C语言规定,else总是与它最接近且未配对的if语句配对。 7.3.2 多分支else if语句 一般形式: if(表达式1) { 语句1; } else if(表达式2) { 语句2; } · · · else if(表达式3) { 语句3; } else { 语句 } 例:一元二次方程a*x*x+b*x+c=0的根,并能计算方程的复数根。 #include #include int main() { double a,b,c,disc,x1,x2,realPart,imagPart; printf("输入方程系数:\n"); scanf("a=%lf b=%lf c=%lf",&a,&b,&c); disc=b*b-4*a*c; if(fabs(a)<=1e-6) /*if(a==0)*/ printf("不是一元二次方程!\n "); else if(fabs(disc)<=0) /*if(disc==0)*/ printf("有两个相等实根:%.2f\n",-b/(2*a)); else if(disc>0) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("有两个不等实根:x1=%.2f x2=%.2f\n",x1,x2); } else { realPart=-b/(2*a); imagPart=(sqrt(-disc))/(2*a); printf("有两个虚根:x1=%.2f+%.2fi x2=%.2f-%.2fi\n",realPart,imagPart,realPart,imagPart); } return 0; } 运行结果: 输入方程系数: a=1 b=1 c=1 有两个虚根:x1=-0.50+1.73i x2=-0.50-1.73i 注:由于计算机不能精确表示所有实数,因此最好不使用运算符==直接判断两个实数的关系,而是两者差的绝对值是否足够小来判断相等关系。如对于double a判断a==0表示为fabs(a)<=1e-6 7.3.3 switch语句 一般形式: switch(表达式) { case 标号1:语句1;break; case 标号2:语句2;break; · · · case 标号n:语句n;break; default:语句n+1; } 语句执行过程为:先计算表达式的值,将其与每个case后的标号值比较,当和某个标号值相匹配时,执行该case分支对应的语句,若所有标号值都不能与其匹配,执行default分支的语句。 例: enum weather{sunny,cloudy,rainy}; enum weather toaday=cloudy; switch(today) { case 0:printf("wear a T-shirt and a cap\n");break; case 1:printf("wear a T-shirt and a jacket");break; case 2:printf("bring an umbrella\n");break; default:printf("whatever\n"); } weather为枚举类型,today为枚举类型weather的变量,其值只能为枚举型常量sunny、cloudy、rainy中的一个,分别代表数值0、1、2。使用枚举类型可用标识符表示整数值。switch的圆括号中是用于判断的表达式,这里为枚举类型变量today,值为枚举型常量cloudy,具有整型值1,与case后的标号依次匹配,发现与第2个标号相等,执行case 1分支的语句。break作用是跳出当前选择结构,执行switch语句后的代码。若没有break语句,该代码段输出结果为: wear a T-shirt and a jacket bring an umbrella whatever 使用switch语句时注意: 括号中的表达式应具有整型值,

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧