seifer1754 发表于 2007-8-2 13:23:35

一道非常基本的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 编辑 ]

cr19800604 发表于 2007-8-2 13:35:35

我没看出来有什么问题。怎么就能从这道题看出“基本从侧面反映出了中国应试教育的悲哀”了,不明白。
结果很简单,和上机调试的一样啊。

cr19800604 发表于 2007-8-2 14:09:00

你修改了之后我倒是做错了。

guolm1225 发表于 2007-8-2 14:17:50

考察的无非是=和>的优先级顺序和A||B如果A为真则不再执行B而已。有什么难的?

sean_yin 发表于 2007-8-2 14:19:09

k=1,n=1,m=0

net3000 发表于 2007-8-2 15:34:14

k ---1
n----1
m---0
easy !
the pointiskown the pri ofcoperators.
than chariness.

seifer1754 发表于 2007-8-2 17:05:22

在C语言的语法中,有没有说 计算 A||B 时, 如果 A 为真,就不计算 B 的值了?

Jor 发表于 2007-8-2 18:32:41

左值又值得问题 在C语言中是从右读到左的 如果&或者||条件已经符合了 就不进行下面的判断

seifer1754 发表于 2007-8-2 19:31:40

后来特意查了一下书,

A||B

对于||运算符来说,只有A=0,才继续进行其右边的运算。

lovefei1027 发表于 2007-8-2 20:14:55

运算符的问题

sanmujuno 发表于 2007-8-13 09:20:12

原帖由 seifer1754 于 2007-8-2 19:31 发表 http://bbs.51testing.com/images/common/back.gif
后来特意查了一下书,

A||B

对于||运算符来说,只有A=0,才继续进行其右边的运算。

是哦.好严谨的问题,是的。以前好像有接触过这类问题

serena_chueng 发表于 2007-8-13 11:57:52

1,1,0?是这样吗?sdlkfj1

keenling 发表于 2007-8-13 23:28:29

不是我狂妄,说实话这种题一点意义都没有,纯粹白痴题一个。一般情况下根本用不到,即使要用,也会分成几步的。即使降低效率也要分开,因为合一块不符合现在软件工程的思想(清晰第一,效率第二)。退一万步说,非要这样写,要知道结果,上机调试看一下就知道了。像这样的题肯定是中国人出给中国人做的,做对了也不代表你很强,最多说明比较你BT。应试教育的产物。
   类似的还有什么++i=i++....的,都没意思。

Jor 发表于 2007-8-13 23:57:09

原帖由 keenling 于 2007-8-13 23:28 发表 http://bbs.51testing.com/images/common/back.gif
不是我狂妄,说实话这种题一点意义都没有,纯粹白痴题一个。一般情况下根本用不到,即使要用,也会分成几步的。即使降低效率也要分开,因为合一块不符合现在软件工程的思想(清晰第一,效率第二)。退一万步说,非 ...
非也非也~ 对于开发 可能是白痴题目 但是对于测试还是有一定用的`````````````

MarsNoNo 发表于 2007-8-14 00:05:44

嗯,赞成这样的说法。对测试还是有一定用处的,做测试的,思维一定要开阔,甚至要比开发的思路还要开阔。

seifer1754 发表于 2007-8-14 08:48:55

原帖由 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;
    }
}



那你帮忙把这个函数测试一下,设计几个用例来看看。

yujunhua8999 发表于 2007-8-14 09:34:27

好复杂哦,看不懂!sdlkfj5

angiebyx 发表于 2007-8-14 14:19:28

k=1,n=1,m=0

ciskzm 发表于 2007-8-16 22:34:04

头晕

walkman2508 发表于 2007-9-29 00:31:40

眼花缭乱
页: [1] 2
查看完整版本: 一道非常基本的C语言题目,看看有几人能做对。