51Testing软件测试论坛

标题: 一道非常基本的C语言题目,看看有几人能做对。 [打印本页]

作者: seifer1754    时间: 2007-8-2 13:23
标题: 一道非常基本的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
我没看出来有什么问题。怎么就能从这道题看出“基本从侧面反映出了中国应试教育的悲哀”了,不明白。
结果很简单,和上机调试的一样啊。
作者: cr19800604    时间: 2007-8-2 14:09
你修改了之后我倒是做错了。
作者: guolm1225    时间: 2007-8-2 14:17
考察的无非是=和>的优先级顺序和A||B如果A为真则不再执行B而已。有什么难的?
作者: sean_yin    时间: 2007-8-2 14:19
k=1,n=1,m=0
作者: net3000    时间: 2007-8-2 15:34
k ---1
n----1
m---0
easy !
the point  is  kown the pri of  c  operators.
than chariness.
作者: seifer1754    时间: 2007-8-2 17:05
在C语言的语法中,有没有说 计算 A||B 时, 如果 A 为真,就不计算 B 的值了?
作者: Jor    时间: 2007-8-2 18:32
左值又值得问题 在C语言中是从右读到左的 如果&或者||条件已经符合了 就不进行下面的判断
作者: seifer1754    时间: 2007-8-2 19:31
后来特意查了一下书,

A||B

对于||运算符来说,只有A=0,才继续进行其右边的运算。
作者: lovefei1027    时间: 2007-8-2 20:14
运算符的问题
作者: sanmujuno    时间: 2007-8-13 09:20
原帖由 seifer1754 于 2007-8-2 19:31 发表
后来特意查了一下书,

A||B

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


是哦.好严谨的问题,是的。以前好像有接触过这类问题
作者: serena_chueng    时间: 2007-8-13 11:57
1,1,0  ?是这样吗?sdlkfj1
作者: keenling    时间: 2007-8-13 23:28
不是我狂妄,说实话这种题一点意义都没有,纯粹白痴题一个。一般情况下根本用不到,即使要用,也会分成几步的。即使降低效率也要分开,因为合一块不符合现在软件工程的思想(清晰第一,效率第二)。退一万步说,非要这样写,要知道结果,上机调试看一下就知道了。像这样的题肯定是中国人出给中国人做的,做对了也不代表你很强,最多说明比较你BT。应试教育的产物。
   类似的还有什么++i=i++....的,都没意思。
作者: Jor    时间: 2007-8-13 23:57
原帖由 keenling 于 2007-8-13 23:28 发表
不是我狂妄,说实话这种题一点意义都没有,纯粹白痴题一个。一般情况下根本用不到,即使要用,也会分成几步的。即使降低效率也要分开,因为合一块不符合现在软件工程的思想(清晰第一,效率第二)。退一万步说,非 ...

非也非也~ 对于开发 可能是白痴题目 但是对于测试还是有一定用的`````````````
作者: MarsNoNo    时间: 2007-8-14 00:05
嗯,赞成这样的说法。对测试还是有一定用处的,做测试的,思维一定要开阔,甚至要比开发的思路还要开阔。
作者: seifer1754    时间: 2007-8-14 08:48
原帖由 keenling 于 2007-8-13 23:28 发表
不是我狂妄,说实话这种题一点意义都没有,纯粹白痴题一个。一般情况下根本用不到,即使要用,也会分成几步的。即使降低效率也要分开,因为合一块不符合现在软件工程的思想(清晰第一,效率第二)。退一万步说,非 ...



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
好复杂哦,看不懂!sdlkfj5
作者: angiebyx    时间: 2007-8-14 14:19
k=1,n=1,m=0
作者: ciskzm    时间: 2007-8-16 22:34
头晕
作者: walkman2508    时间: 2007-9-29 00:31
眼花缭乱
作者: Jor    时间: 2007-9-29 21:18
原帖由 seifer1754 于 2007-8-14 08:48 发表



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;
   ...

单元测试注重的是接口等 并不是关注源码的!! 一切都以LLD为参考 你看到了源码就写测试用例?
作者: yu_xiulan    时间: 2007-10-1 11:28
A||B,在执行的时候,如果A为真,就不会再去判断B是否为真
作者: Jor    时间: 2007-10-4 16:22
原帖由 yu_xiulan 于 2007-10-1 11:28 发表
A||B,在执行的时候,如果A为真,就不会再去判断B是否为真

这个看语言的 。。 有的是都要判断 有的是一半一半。。
作者: january    时间: 2007-10-7 00:30
k=1,n=1,m=0
作者: seifer1754    时间: 2007-10-8 17:10
原帖由 Jor 于 2007-10-4 16:22 发表

这个看语言的 。。 有的是都要判断 有的是一半一半。。


那你举几个例子来说明一下。
哪个语言是都要判断的??
作者: WKCH6    时间: 2007-12-11 15:59
都好复杂,越来越没底啦,做测试不是那么简单啊,什么都要懂




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2