第1个回答 2008-08-16
哦,明白你的意思了,输出确实是打印错了,
其实这是C++输出的问题,举个简单的例子,
比如a,b,c都是一个表达式;
那么cout<<a<<b<<c;
编译器会怎么处理呢?
它会先算出c表达式,再算出b表达式,最后算出a表达式,算完所有的结果后,在将三个值依次输出,(输出默认是从右向左进行的);
你上面的题目如果是
cout<<print(a)<<endl<<print(b)<<endl<<print(d)<<endl<<print(l)<<endl;
按照我上面说的,先进入函数print(l),此时输出了a,而l的平方被保存到一个类似栈的数据结构中,再进入print(d),此时输出了b,而d的平方也被保存到刚才的栈中,再进入print(b),此时输出了b,而b的平方也被保存到刚才的栈中,最后进入print(a),此时输出了a,而a的平方也被保存到刚才的栈中,此时已经输出了a b b a,最后输出函数将栈中保存的结果全部输出,就是25 9.2 3.3
而你的另外一种输出,是将cout函数一个一个做,就形成了那种结果
我觉得你可以将cout<<a<<b<<c当作一个函数a,b,c是它的三个参数
cout<<a<<b<<c;是将函数执行了依次
而cout<<a;cout<<b;cout<<c;是将函数做了三次
第2个回答 2008-08-16
你自己的答案错了因为两个反回值分别是return i*i; 和return 2*d;
除非你把他改成return i;和return d;
上面的调用其实是因为int 和long类型几乎一样,就是可以输出的字的长度多点好小点,而double和float也是和上面差不多的,所以调用时他们调用的都是相同的,如果cout<<print(a)<<endl<<print(b)<<endl<<print(d)<<endl<<print(l)<<endl;把他们写在一块就会出现每个函数先调用,接着运行
cout<<返回的值<<endl<<返回的值<<endl<<返回的值<<endl<<返回的值<<endl;
所以出现上面的答案,而用
cout<<print(a)<<endl;
cout<<print(b)<<endl;
cout<<print(d)<<endl;
cout<<print(l)<<endl;
把他们分开了就会第一个调用回来再直接输出,导致一个字母一个答案本回答被网友采纳
第3个回答 2008-08-16
这涉及到拼接输出的问题。
举例说明cout<<"abcd"<<"this is a girl.";就是一个输出拼接。
其在内存中的运行如下:
当调用cout时,先在内存中获得输出缓冲区,然后选取调用cout的对象("abcd","this is a girl.")依次将其放入输出缓冲区,待拼接语句中的对象全部进入到缓冲区以后,将他们输出到屏幕。
cout<<print(a)<<endl<<print(b)<<endl<<print(d)<<endl<<print(l)<<endl; 此句拼接输出时,相当于
cout<<625<<endl<<18.4<<endl<<6.6<<endl<<81<<endl;
虽然在print运行时输出了a,b,b,a;但是本句是在等待四个数值全部进入输出缓冲区后才将数字输出的。
楼下的,我只是说出了此句运行时与内存的关系,为什么会有先有后,或是一起输出。
----------------------------------------------------------------------
print是重载函数吧,当调用此函数时,首先判断参数类型,然后调用为该类型所定义的相应函数体。
第4个回答 2008-08-16
首先,你自己把答案弄错了,正确答案是:
a
b
b
a
625
18.4
6.6
81
a
625
b
18.4
b
6.6
a
81
第一个输出语句,系统首先扫描整个表达式,先执行print(a),print(b)、print(d)和print(l)等,然后执行cout。
第二个及以后的输出语句则不同了,它是每个cout执行完后,再执行下一个cout语句。而在执行每个cout语句时,顺序和
上面的一样,所以就出现了上面的答案。
和输出拼接没有关系
建议看看相关资料或者MSDN