c语言求绝对值一个小问题求解释

C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下原因_百度知道
C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下原因
#include&stdio.h&void main(){ int i=1; k=(i++)+(++i)+(i++); printf(&%d,%d&,k,i);}i,k的结果是?可以解释下吗?
提问者采纳
i++,i 先参与运算,再自加。++i,i 先自加,自加的结果参与运算。第一个i++,i
的值参与到式中的运算;第二个++i,i = 2的值参与到式中的运算;第三个i++,i = 2的值参与到式中的运算。对于第一个i++,i 的值是2,得到k的值是2+2+2 = 6;i 在式子结束后,开始未实现的自加运算,在式中完成自加一次的基础上,再自加2次,值是4。
答案是k=6怎么回事?
我的理解是,式中实现了++i,即++i 必须在该条语句中实现。故对于这条式子,i 的值是2。故参加运算的 i 的值应该是2 。对于第一个i++也一样!
提问者评价
其他类似问题
按默认排序
其他5条回答
i的值是4,k的值是5。解释i++表示先进行运算再自加1。++i表示先自加再进行运算。(i++) + (++i) + (i++)/*第一个值为1,第二个值为2,第三个值为2。所以k的值是5。*/ i=1
i=2现在i的值是2了,表达式也计算完了。那么i++才开始自加。之前有两个i++,所以i的值是4。
答案是k=6怎么回事?
不好意思,我试了下也想了下。不知道是什么原因。应该是2+2+2,但是我想不出为什么。。。
不知道LZ是在哪里看到的这个函数,但别在这个问题上纠结,第六行中对于等式右边的计算,不同的编译器会有不同的计算顺序,可能从左至右,也可能从右至左,也可能是其他,没有保证的,对于自增运算符,有两条准则:1:当同一个变量多次出现在同一个表达式里,不要用自增或自减。2:同一个变量出现在同一个函数中的多个参数时,不要使用,
k=1+2+1=4i=1+1+1+1=4i++ 和++i的区别就是
i++先计算再自增,++i是先自增再计算~~不懂可以追问。
答案是k=6呀
噢噢噢= =。我知道了 先算括号里的所以都
i=4k=6i++是进行计算再给自己赋值+1.++i是先给自己+1再进行计算。所以K的式子中,第一个i=1,在进行下一步计算之前给自己+1,然后第二个再++i,所以第二个i=3,第三个i因为第二个i的原因也等于2,所以K=1+2+2 i=1+1+1+1
答案是k=6怎么回事?
这个我也不太明吧了有点,你分部测试一下,看一下每一步计算出来后i的值,我觉得是C语言编译时序的问题,这种很可能不同编译器有不同的编译规则。但是叠加号在前还是在后是固定原则的
=i 1=i=2;所以它的k=6;解答完毕;
i=4可以理解,k=6怎么理解呢,可以详细点吗
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言冒泡排序问题。下面是程序,求每一步的解释。还有j在里面是什么意思
C语言冒泡排序问题。下面是程序,求每一步的解释。还有j在里面是什么意思
#include&stdio.h&#defineN8intmain(){inta[N]={9,8,3,7,5,2,6,1};inti,j,/***冒泡排序***/for(j=0;j&=N-2;j++){for(i=0;i&=N-j-1;i++)if(a[i]&a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=}}/***输出结果***/printf(&\n排序结果:&);for(i=0;i&=N-1;i++)printf(&%3d&,a[i]);printf(&\n&);return0;}
①看懂不管什么代码都有一些非常有意思的技巧②我假设我现在从来没看过冒泡排序,和你一起分析一下这代码③inta[N]={9,8,3,7,5,2,6,1};//初始化了乱序数组inti,j,//嗯?i,j,temp干嘛的?我暂时不知道,因为我还没往下看,我先记着有这几个变量for(j=0;j&=N-2;j++)for(i=0;i&=N-j-1;i++)//出现两个嵌套循环,第一个是j从0到N-2第二个是i从从0到N-j-i,如果没看后面,我仍然不知道i,j具体要干嘛,接着看if(a[i]&a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=}//这句就很明显了,当a[i]和a[i+1]不是大于关系,就让他们交换顺序,也就用到了之前的temp变量//换句话说,就是任意相邻的a[i]和a[i+1]只要不是从小到大的顺序,就让相邻的元素从小到大//后面的代码我知道,是循环并输出所有数组内元素//再回头分析,我人脑模拟一下,当j=0,i从0到N-1,【从a[0]到a[N-1]之间的相邻元素会对比换序】当j=1,i从0到N-2,【从a[0]到a[N-2]之间的相邻元素会对比换序】.....当j=N-2,i从0到1,【a[0]和a[1]对比换序】结束循环//我们再看一下,每次对比换序会有什么影响,由于相邻元素对比换序会导致扫描到的最右边那个元素为最大值//所以,当j=0,我们得到了a[N-1]是最大值,j=1得到了a[N-2]是第二大值...依此类推//等j扫描完了,我们就得到了a[N-1]到a[0]分别是最大值,第二大值,第三大值...最小值④以上分析隐含了什么技巧?其实就是《算法导论》中的一个定理:循环不变式循环不变式:当你证明循环中i=0,1是对的,以及n是对的,并且都符合同样的规则,那么这个循环整个就是对的。同样,你能用循环不变式通过归纳出i=0,1步,n步时的效果,来推断整体效果。(类似数学第一、第二归纳法)一般分析复杂代码分两种:循环逻辑复杂度分析:要用到循环不变式去判定语义逻辑复杂度分析:要用到诸多编码技巧和经验,包括优先级等等。
相关知识等待您来回答
编程领域专家C语言一个小问题求解释_百度知道
C语言一个小问题求解释
#include&stdio.h&int max2(int a,int b)//比较两个数大小,并返回较大值的函数{ if (a&b)
}int max4(int a,int b,int c,int d)//求出四个数中最大值并返回最大值{ int f,g,h; f=max2(a,b);//调用求两个数最大值的函数 g=max2(c,d);//调用求两个数最大值的函数 h=max2(f,g);//求f和g的最大值并赋值给h //返回h值}int main(){
int a,b,c,d,e; printf(&请输入四个整数:&); scanf(&%d,%d,%d,%d\n&,&a,&b,&c,&d); e=max4(a,b,c,d); //调用max4函数 printf(&最大的数是:%d\n&,e); return 0;}这应该是求四个数中最大数的程序,但是我输入三个数时能输出正确结果,输入四个数时再按回车就没反应了
提问者采纳
scanf(&%d,%d,%d,%d\n&,&a,&b,&c,&d);中的\n去掉就可以了
哎呀,我怎么没发现这个问题,郁闷。。。试试再说。。拜谢。
试玩也不采纳~
哎呦,还没试啊,话说我的电脑上vc还没装好哦,莫急莫急。。。
提问者评价
哎呦,别这么急嘛,谢谢哦
其他类似问题
c语言的相关知识
按默认排序
其他2条回答
求真相,求解释!!!
楼主课以简单一点讲一下吗,不然没法做细致讲解。
输入语句scanf中的回车不要!
您可能关注的推广回答者:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁一个简单的问题,本人菜鸟,求解释_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:258,315贴子:
一个简单的问题,本人菜鸟,求解释收藏
为什么是0呢
if里面的是1==0也就是值是0 ,不执行下面的语句。但是X的值已经是0了。所以、输出0
回复2楼:if里面的判断x自减也要对x产生影响……那用if不是还会造成x的改变了吗
自加自减的执行范围是一条语句。在if语句中,x是1,在下一条语句就是0了。
回复4楼:我知道你的意思,我的意思是if里面自加只是用来判断是否==0的,但造成了x值的改变了呢
因为比较的时候x值还是1,比较完之后执行了--操作,所以x值变成了0.建议lz仔细区别一下--x和x--
x--,自减运算,如果有这样一个语句:int x=1;y=x--;printf("%d%d\n",x,y);则,输出的x0;y=1;因为,自减运算符要是在变量的后面,就先使用变量的值以后,再执行自减运算,即先把x的值(1)赋给y以后,再减一(0);你的这个问题,x=1,if语句里(x--==0),先用x的值与0进行比较,明显为假,所以不执行if语句,但这时x进行了一次自减,所以值为0.(区别
x++ 与 ++x)
先判断是否==0再减一
回复7楼:我懂++x和x++,if里面x++是判断的,但运算也执行了,x初值改变了,我以前以为if语句不执行,x维持初值不变
呃,我解释一下吧,看能不能说明白。
首先,x被赋值为1。x--的意思是先使用x的原值,然后再对其自减1。所以if(x--==0)是不成立的(因为这里使用的是x的原值1来判断的),但这条语句执行之后,x自减1变为0。所以输出的结果就是0了。
登录百度帐号我的游戏推荐游戏
后查看最近玩过的游戏
为兴趣而生,贴吧更懂你。或求解释,程序没检测出错误,但是无论输入什么。输出结果都一样_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:258,315贴子:
求解释,程序没检测出错误,但是无论输入什么。输出结果都一样收藏
#include&stdio.h&#include&math.h&main(){ double t,x,y=2;printf(&Enter x:&);scanf(&%d&,&x);if(x&0){t=pow(x+1,y); }else{t=sqrt(x);}printf(&f(%.2f)=%.2f\n&,x,t);}输出结果一直都是f(0.00)=0.00
X定义的是double,但是scanf是以int形式来录入,当然是0,把%d改成%lf
登录百度帐号我的游戏推荐游戏
后查看最近玩过的游戏
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 c语言求绝对值 的文章

 

随机推荐