一道非常基本的C语言题目,看看有几人能做对。
#include <stdio.h>void main()
{
int a=1,b=2,m=0,n=0,k;
k= ((n=b>a)||(m=a<b));
printf("%d,%d,%d\n",k,n,m);
}
先根据C语言的运算符优先级规则自己推测一下,然后再上机调试一下,看看输出结果和自己推测的结果是否一致。
[ 本帖最后由 seifer1754 于 2007-8-2 13:47 编辑 ] 我没看出来有什么问题。怎么就能从这道题看出“基本从侧面反映出了中国应试教育的悲哀”了,不明白。
结果很简单,和上机调试的一样啊。 你修改了之后我倒是做错了。 考察的无非是=和>的优先级顺序和A||B如果A为真则不再执行B而已。有什么难的? k=1,n=1,m=0 k ---1
n----1
m---0
easy !
the pointiskown the pri ofcoperators.
than chariness. 在C语言的语法中,有没有说 计算 A||B 时, 如果 A 为真,就不计算 B 的值了? 左值又值得问题 在C语言中是从右读到左的 如果&或者||条件已经符合了 就不进行下面的判断 后来特意查了一下书,
A||B
对于||运算符来说,只有A=0,才继续进行其右边的运算。 运算符的问题 原帖由 seifer1754 于 2007-8-2 19:31 发表 http://bbs.51testing.com/images/common/back.gif
后来特意查了一下书,
A||B
对于||运算符来说,只有A=0,才继续进行其右边的运算。
是哦.好严谨的问题,是的。以前好像有接触过这类问题 1,1,0?是这样吗?sdlkfj1 不是我狂妄,说实话这种题一点意义都没有,纯粹白痴题一个。一般情况下根本用不到,即使要用,也会分成几步的。即使降低效率也要分开,因为合一块不符合现在软件工程的思想(清晰第一,效率第二)。退一万步说,非要这样写,要知道结果,上机调试看一下就知道了。像这样的题肯定是中国人出给中国人做的,做对了也不代表你很强,最多说明比较你BT。应试教育的产物。
类似的还有什么++i=i++....的,都没意思。 原帖由 keenling 于 2007-8-13 23:28 发表 http://bbs.51testing.com/images/common/back.gif
不是我狂妄,说实话这种题一点意义都没有,纯粹白痴题一个。一般情况下根本用不到,即使要用,也会分成几步的。即使降低效率也要分开,因为合一块不符合现在软件工程的思想(清晰第一,效率第二)。退一万步说,非 ...
非也非也~ 对于开发 可能是白痴题目 但是对于测试还是有一定用的````````````` 嗯,赞成这样的说法。对测试还是有一定用处的,做测试的,思维一定要开阔,甚至要比开发的思路还要开阔。 原帖由 keenling 于 2007-8-13 23:28 发表 http://bbs.51testing.com/images/common/back.gif
不是我狂妄,说实话这种题一点意义都没有,纯粹白痴题一个。一般情况下根本用不到,即使要用,也会分成几步的。即使降低效率也要分开,因为合一块不符合现在软件工程的思想(清晰第一,效率第二)。退一万步说,非 ...
void read_nvm(unsigned long nvm_addr, unsigned long size_in_bytes, unsigned long output_addr)
{
unsigned long i;
unsigned long bytes_moved = 0;
unsigned long output_data_ptr;
nvm_word_t *nvm_word_ptr;
/*
* Since the NVM types we defined account for the unpopulated
* upper 16 bits of an NVM word, ensure that the input
* address starts on a 32-bit boundary.
*/
nvm_word_ptr = (nvm_word_t*) (nvm_addr & 0xfffffffc);
/* Move 32-bit words */
output_data_ptr = output_addr;
for (i = 0; i < (size_in_bytes >> 2); i++)
{
*((unsigned long*) output_data_ptr) = ((nvm_word_ptr++)->data << 16) | (nvm_word_ptr++)->data;
output_data_ptr += 4;
bytes_moved += 4;
}
/*
* Move remaining 16-bit words if any (there can be only 1); ignore
* any remaining odd bytes if any.
*/
while (bytes_moved < size_in_bytes)
{
*((unsigned short*) output_data_ptr) = (nvm_word_ptr++)->data;
output_data_ptr += 2;
bytes_moved += 2;
}
}
那你帮忙把这个函数测试一下,设计几个用例来看看。 好复杂哦,看不懂!sdlkfj5 k=1,n=1,m=0 头晕 眼花缭乱
页:
[1]
2