有冇人可否解答我以下既c++問題?(請列出步驟及解釋)

peter022 2008-10-07 12:27:52
1. int n=5,a=-1,b=3;
switch((--n)%4){
case 0: n++;
break;
case 1: n*=a++;
case 2: n+=--b;
case 3: --n;
deafult:n++;
} 問題:n=幾多?(請列出步驟及解釋)
2. int a=2.5,b=7.5;
int x=2.5+7.5/a;
double y=a+b*1.0/a;
double y=b/a+b/(double)a+double(b/a);
問題:z=幾多?(請列出步驟及解釋)
3. int n=5,a=4,b=0,c=8;
if(b<=6&&c>4||a++==6)
n++;
if(a!=4||b>5||c<=9)
n+=a++;
if(c<=2||a>=5&&b--=0)
n*=a++;
問題:n=幾多?(請列出步驟及解釋)
...全文
138 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jia_xiaoxin 2008-10-07
  • 打赏
  • 举报
回复
剩下两道好象有问题
jia_xiaoxin 2008-10-07
  • 打赏
  • 举报
回复
1.
int n=5,a=-1,b=3;
switch((--n)%4){ //n = 4; ((--n)%4) = 0;
case 0: n++; //n = 5;
break; //跳出
case 1: n*=a++;
case 2: n+=--b;
case 3: --n;
deafult:n++;

结果为5
nuptwzp 2008-10-07
  • 打赏
  • 举报
回复
6楼的解释很清楚
nuptwzp 2008-10-07
  • 打赏
  • 举报
回复
6楼的解释很清楚
chgq456 2008-10-07
  • 打赏
  • 举报
回复
学习了
jetcui1 2008-10-07
  • 打赏
  • 举报
回复
1. int n=5,a=-1,b=3;
switch((--n)%4){ //(--n)%4 = 0;n=4;
case 0: n++; //n=5;
break; //跳出
case 1: n*=a++;
case 2: n+=--b;
case 3: --n;
deafult:n++;
} 問題:n=幾多?(請列出步驟及解釋)
2. int a=2.5,b=7.5; a=2,b=7
int x=2.5+7.5/a; //7.5/a=3.75;3.75+2.5 = 6.25; 6.25取整是6;所以x=6
double y=a+b*1.0/a; //b*1.0 = 7.0;7.0/a = 3.5;a + 3.5 = 5.5
double y=b/a+b/(double)a+double(b/a); //b/a=3;b/(double)a=3.5;double(b/a)=3;y=9.5
問題:z=幾多?(請列出步驟及解釋)
3. int n=5,a=4,b=0,c=8;
if(b <=6&&c>4||a++==6)
n++; //b<6&&c>4,所以a++==6不进行判断,n=6,a=4

if(a!=4||b>5||c <=9)
n+=a++; //a=5;由于先做+=,然后才作++,所以n=10;
if(c <=2||a>=5&&b--=0)
n*=a++; //a=5&&b=0,--运算在=运算之后进行,所以进入,n=50,a=6,b=-1;,你这里的b--=0是通不过编译的,应该是b--==0吧?
問題:n=幾多?(請列出步驟及解釋)

鄙视这个考题中对运算符优先级的考点,你加格括号,岂不是更加明了。
szc21 2008-10-07
  • 打赏
  • 举报
回复
6楼正确
中间有个地方VC通不过 if(c <=2||a>=5&&b--=0) 改 if(c <=2||a>=5&&b--==0)
heshiquanwin 2008-10-07
  • 打赏
  • 举报
回复
6楼的朋友
解得太详细了
嘿嘿
e_sharp 2008-10-07
  • 打赏
  • 举报
回复
UP
fox000002 2008-10-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 peter022 的回复:]
第二題:
What are the value of z after the following C++ statements are
executed?
int a = 2.5, b = 7.5;
int x = 2.5 + 7.5 / a;
double y = a + b * 1.0 / a;
double z = b / a + b / (double)a + double( b/a );
[/Quote]

主要是考虑浮点数转化为整数的精度损失


int a = 2, b = 7;
int x = 2.5 + 7.5 / a;
double y = a + b * 1.0 / a;
double z = b / a + b / (double)a + double( b/a );
OenAuth.Net 2008-10-07
  • 打赏
  • 举报
回复

第二题:
int a = 2.5, b = 7.5;
//其实a=2 b=7,小数点后面的会被强制扔掉
int x = 2.5 + 7.5 / a; //x=2.5+7.5/2=2.5+3.75=6.25=6
double y = a + b * 1.0 / a; //y=2+7*1.0/2=2+3.5=5.5
double z = b / a + b / (double)a + double( b/a );
//z=7/2+7/2.0+7.0/2.0=3+3.5+3.0=9.5 只有中间那个为3.5
太乙 2008-10-07
  • 打赏
  • 举报
回复


1. int n=5,a=-1,b=3;
switch((--n)%4){
case 0: n++;
break;
case 1: n*=a++;
case 2: n+=--b;
case 3: --n;
deafult:n++;
} 問題:n=幾多?(請列出步驟及解釋)
-------------------------
--n:先减后用,所以是(--n)%4=(5-1)%4=0
case 0:4++;break;

最终:n=5

----------------------------------


2. int a=2.5,b=7.5;
int x=2.5+7.5/a;
double y=a+b*1.0/a;
double z=b/a+b/(double)a+(double)(b/a); //这是z吧??记得最后一个double加括号
問題:z=幾多?(請列出步驟及解釋)
------------------------
a=2,b=7//简单,不用多说
x=2.5+7.5/2=2.5+3.75=6.25=6
y=2+7*1.0/2=2+3.5=5.5
z=7/2+7/2.0+(double)(7/2)=3+3.5+3=9.5

记住,计算的时候,int型的转换是向0取整,-2.5=-2,2.5=2

多种类型混合运算的时候:char.short转换为int,float转换为double,然后计算了再取舍

比如:z的计算,7/2,int/int,没啥特殊的,为3
7/2.0,为int/float,int提升为float,然后float/float转换为double/double


--------------------------


3. int n=5,a=4,b=0,c=8;
if(b <=6&&c>4||a++==6)
n++;
if(a!=4||b>5||c <=9)
n+=a++;
if(c <=2||a>=5&&b--=0)
n*=a++;
問題:n=幾多?(請列出步驟及解釋)
---------------------
第一个if满足条件,进入:n++,n=6
第二个if满足条件,进入:n+=a++,先用a,后对a加加,所以n+=4 n=10 ,a=5
第三个if满足条件,进入:n*=a++,先用a,后对a加加,所以n*=5 n=50,a=6

在||与&&的时候,&&优先级高于||
而||在判断前面为真的时候,后面就不进行判断
而&&在判断前面为假的时候,后面就不进行判断
-----------------------
OenAuth.Net 2008-10-07
  • 打赏
  • 举报
回复
int a = 2.5, b = 7.5;
int x = 2.5 + 7.5 / a; x=2.5+7.5/2=2.5+3.75=6.25=6
double y = a + b * 1.0 / a; y=2+7*1.0/2=2+3.5=5.5
double z = b / a + b / (double)a + double( b/a );
z=7/2+7/2.0+7.0/2.0=3+3.5+3=9.5
peter022 2008-10-07
  • 打赏
  • 举报
回复
第二題:
What are the value of z after the following C++ statements are
executed?
int a = 2.5, b = 7.5;
int x = 2.5 + 7.5 / a;
double y = a + b * 1.0 / a;
double z = b / a + b / (double)a + double( b/a );
matrixcl 2008-10-07
  • 打赏
  • 举报
回复

2. int a=2.5,b=7.5; //a=2 b=7
int x=2.5+7.5/a; //7.5/2=3.75, 2.5+3.75=6.25, 转化为int, x=6
double y=a+b*1.0/a; //被加数7*1.0/2,因含有1.0,转化为double计算,值为3.5。 固y=5.5
double z=b/a+b/(double)a+double(b/a); //7/2 = 3, 7/(double)2 = 3.5, double(7/2)=double(3)=3. 固z = 9.5
brookmill 2008-10-07
  • 打赏
  • 举报
回复
3. LZ的代码编译不过,稍微修改了一下:
int n=5,a=4,b=0,c=8; 
if(b <=6&&c>4||a++==6) // b<=6和c>4同时成立,所以a++==6不执行
n++; // n=6; a=4
if(a!=4||b>5||c <=9)
n+=a++; // n=10; a=5
if(c <=2||a>=5&&b--==0) // 这里加了个=
n*=a++; // n=50; a=6

第二题实在看不懂

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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