(i++)+(++i)+(++i)+(i++)=10为什么?求过程分解作用的过程

您的举报已经提交成功,我们将尽快处理,谢谢!
&&是逻辑与,任意一个值为零则表达式为零。
++运算,自变量+1,相当于 j = j +1
i+1这样,并不会赋值给i变量。
最后,你那些比较表达式,没有程序...
for(int i=0;i&i++){
  cin.clear();//
  for(int j=0;j&3;j++)
    fo...
大家还关注
谁能吧下面这段C的标程翻译成Pascal...
<a href="/b/.html" target="_blank" title="哪位仁兄帮忙把C的程序转成PASCAL 这年代连个翻译器都没有 哎 小弟不懂C,偶尔调试程序时不成功,无奈只得看标程,但标程多是C语种,让我苦不堪言。网上所谓的翻译器纯属骗人,编程序的人为什么连个if语句都不写好,像printf就不翻译成writeln。无奈只能把标程晒出来,让过路的仁兄帮个忙。
题目描述:
你有n段长度相等的段落,编号为1到n。它们开始顺序是乱的,但你想将它们按照1,2,3..n的顺序排好。在编辑器中我们可以使用“剪切”“粘贴”功能,于是我们可以将连续若干段落剪切下来,然后粘贴到我们想要的位置。例如对于{2,4,1,5,3,6},我们可以将1剪切并粘贴到2前面,然后将3剪切人后粘贴到4前面,用两步。对于{3,4,5,1,2},我们可以将3,4,5一次剪切并粘贴到2后面,便能用一步到达目标。
现在给你一段文本,请你用最少的步数使它们排成升序。
输入格式
输入包含多组测试数据,且保证最多有十组。
每组测试数据的第一行包含一个整数n,表示段落数。接下来一行包含n个整数,为1到n的一个排列。
输入以一组n=0结束。对于这组数据程序不应有任何输出。
输出格式
对于每组数据,输出一个整数表示最少的步数。一次剪切加一次粘贴记为一步。
样例输入
6 样例输出21源程序:#include#include#includemapM;intq[];inta[9],b[9];intans,n;voidBfs(){inti,j,k,l,r,x,y,z;ear();for(i=k=0;i<n;++i){k=k*10+a[i];q[0][i]=a[i];}M[k]=1;for(i=k=0;i<n;++i){k=k*10+i+1;q[1][i]=i+1;}if(nd(k)!=M.end()){ans=0;}M[k]=-1;for(l=0,r=1;l<=r;++l){for(x=z=0;x<n;++x)z=z*10+q[l][x];//printf("%d:%d\n",z,M[z]);z=M[z];for(i=0;i<n;++i)
for(j=i;j<n;++j){
for(k=0;k<i;++k){
//
printf("%d
%d\n",i,j,k);
for(x=0;x<k;++x) b[x]=q[l][x];
for(x=i;x<=j;++x) b[x-i+k]=q[l][x];
for(x=k+j-i+1;x<=j;++x) b[x]=q[l][x-j+i-1];
for(x=j+1;x<n;++x) b[x]=q[l][x];
for(x=y=0;x<n;++x) y=y*10+b[x];
//
if( nd(y)==M.end()){
if(z<0) M[y]=z-1;
else M[y]=z+1;
for(x=0;x<n;++x) q[r][x]=b[x];
else if(M[y]*z<0){
ans=abs(M[y]-z)-1;
for(k=j+2;k<n;++k){
//
printf("%d
%d\n",i,j,k);
for(x=0;x<i;++x) b[x]=q[l][x];
for(x=j+1;x<k;++x) b[x-j+i-1]=q[l][x];
for(x=i;x<=j;++x) b[k-(j-x+1)]=q[l][x];
for(x=k;x<n;++x) b[x]=q[l][x];
for(x=y=0;x<n;++x) y=y*10+b[x];
//
if( nd(y)==M.end()){
if(z<0) M[y]=z-1;
else M[y]=z+1;
for(x=0;x<n;++x) q[r][x]=b[x];
else if(M[y]*z<0){
ans=abs(M[y]-z)-1;
int main(){
freopen(" ","r",stdin);
freopen("edit.out","w",stdout);
for(int T=1;;++T){
scanf("%d",&n);
for(int i=0;i哪位仁兄帮忙把C的程序转成PASCAL ...
(window.slotbydup=window.slotbydup || []).push({
id: '2081942',
container: s,
size: '1000,60',
display: 'inlay-fix'3258人阅读
C/C++(106)
在网上看到了这篇文章,很不错就转载了,摘自:/hustcat/archive//1494311.html
与在前面:&#43;&#43;(--)有太多让人困惑的地方,(i&#43;&#43;)&#43;(i&#43;&#43;)与(&#43;&#43;i)&#43;(&#43;&#43;i)有什么不同?为什么不同?如果从机器的角度去理解,就会豁然开朗。
&先来看段程序:
int main()
int j=(i++)+(i++);
int j=(++i)+(++i);
printf(&%d,%d\n&,i,j);
(1)在VC 6.0下:
对于(i&#43;&#43;)&#43;(i&#43;&#43;):
结果:i=5,j=6
相应的汇编代码为(有详细注释):
eax,dword ptr [ebp-4]i-&eax
eax,dword ptr [ebp-4]i+i=6
dword ptr [ebp-8],6-&j
ecx,dword ptr [ebp-4]i-&ecx(=3)
dword ptr [ebp-4],4-&i
edx,dword ptr [ebp-4]i-&edx
dword ptr [ebp-4],5-&i
对于(&#43;&#43;i)&#43;(&#43;&#43;i):
结果:i=5,j=10
相应的汇编代码为:
eax,dword ptr [ebp-4]i-&eax (=3)
dword ptr [ebp-4],4-&i
ecx,dword ptr [ebp-4]i-&ecx
dword ptr [ebp-4],5-&i
edx,dword ptr [ebp-4]i-&edx
edx,dword ptr [ebp-4]edx=10 ,即i+i
dword ptr [ebp-8],10-&j
(2)在gcc 3.2.2下:
对于(i&#43;&#43;)&#43;(i&#43;&#43;):
结果:i=5,j=6相应的汇编代码为:
c7 45 fc 03 00 00 00
$3, -4(%ebp)3-&i
-4(%ebp), %i-&edx (=3)
-4(%ebp), %i-&eax
(%eax,%edx), %i+i=6 -&eax
%eax, -8(%ebp)6-&j
-4(%ebp), %&i-&eax
(%eax)i++ ,即i=4,注意这里为寄存器间接寻址
-4(%ebp), %&i-&eax
(%eax)i++,即i=5
对于(&#43;&#43;i)&#43;(&#43;&#43;i):
结果:i=5,j=10
相应的汇编代码为:
$3, -4(%ebp)3-&i
-4(%ebp), %&i-&eax
(%eax)i++,即i=4
-4(%ebp), %&i-&eax
(%eax)i++, i=5
-4(%ebp), %i-&eax, eax=5
-4(%ebp), %i+i -&eax ,eax=10
%eax, -8(%ebp)10-&j
可见,对于VC6.0和gcc,二者的结果一致,但是gcc 3.2.2生成的汇编代码明显比VC6.0高效、简洁。这也许是因为VC 6.0出现较早的原因吧。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:407470次
积分:5248
积分:5248
排名:第3263名
原创:88篇
转载:165篇
评论:73条
(1)(1)(1)(1)(1)(4)(7)(11)(8)(2)(3)(2)(2)(2)(2)(2)(4)(4)(6)(11)(8)(2)(58)(8)(10)(8)(22)(17)(3)(16)(29)(3)(i=3,i++,++i,i+5)这个逗号表达式的值是10,i的值为5,
泯皇降临868
逗号表达式严格按照从左向右顺序计算,并将最后一个逗号之后的表达式的值作为逗号表达式的最终返回值.下面详细解释i=3 //i值:3,表达式值:3i++ //i值:4,表达式值:3++i //i值:5,表达式值:5i+5 //i值:5,表达式值:10所以,最终i的值为5,逗号表达式值为最后一个表达式i+5的值,也即10.
为您推荐:
其他类似问题
扫描下载二维码i++&10是不是相当于i&10;i++?_百度知道
i++&10是不是相当于i&10;i++?
循环了几次;i++&);10,最后i的值是多少i++&lt?for(i=1,之后在算i++;10是不是就是相当于先判断i的值小于10
提问者采纳
第9次的时候先判断i(9)&10
第10次的时候
判断i(10) &10 失败 再 i++
然后跳出循环
最后的i==11 如果++写在第二个;后面
跳出之后不再++了
其他类似问题
为您推荐:
其他1条回答
循环了9次;10是不是就是相当于先判断i的值小于10,然后在+1;i++&lt;for(i=1,最后i的值是多少;10;循环了几次;),i的值是10i++&lt,之后在算i++:正确,i++的意思是指先使用i的值
是不是i++和++i单独使用的时候,是一样的?在赋值语句和输出语句中就区分开了?可是答案给的i值是11啊……
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 脂肪分解过程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信