首页 > 试题广场 >

判断语句中作为条件部分的语句编写有问题的有?

[单选题]
以下是C++的不同数据类型值的比较语句,请问这些判断语句中作为条件部分的语句编写有问题的有:
  • 如果变量bVar是布尔类型:if(false==bVar){doSomeThing();}
  • 如果变量nVar是int型:if(0==nVar){doSomeThing();}
  • 如果变量fVar为浮点型:if(0.02==fVar){doSomeThing();}
  • 如果变量sVar为字符串型:if(""==sVar){doSomeThing();}
浮点中用的不是比较,而是赋值,C错,
字符串的比较是用strcmp(str1,str2);,D错

发表于 2017-03-18 19:58:47 回复(0)
字符串是c风格字符串,不支持==重载。
赋值运算符不是等性比较运算符。
发表于 2016-10-26 22:04:27 回复(0)
c选项,float有精度问题,尾数不精确,比较会出问题
d选项,字符串比较,一般用strcmp(str1,str2),直接用==比较两个字符串,应该比较的是字符串的首地址是否相等,那就不是真正的字符串比较了
发表于 2015-09-09 11:40:45 回复(19)
D项不对,当sVar=“\0”以及 sVar=“”时均能通过,不是作者本意;
C项就更不对了,大家看清楚那是赋值号“=”不是等号“==”啊,将变量赋值给常数,肯定不对!
发表于 2015-12-09 16:02:43 回复(5)
D估计大家都知道字符串用==比较没有意义
说说C吧,也是基本的,浮点型(double,flout)由于是用于科学计算的,尾数一定会不精确的,所以不能用==比较,Java可以用Math.abs(fVar-0.02) < 0.0000001表示等于,或者直接用Double.compare(d1, d2)比较,C也一样。
发表于 2015-09-08 16:21:21 回复(11)
C++里面是可以直接对于string类型对象,进行关系判断(==, >, <)操作的。
这里题目应该指的是,内置类型,而不是标准库的string,所以应该是C语言的字符串类型。
而C语言的字符串类型,要用strcmp。
所以要选D。
发表于 2016-03-31 15:04:49 回复(1)
c选项肯定错了,浮点型精度问题
d选项好像也是错了。。“\0”跟“”比较的结果也是1.。。。
发表于 2015-09-08 18:14:53 回复(3)
这道题目D绝对有歧义了。
C语言中没有“字符串类型”的概念,如果有字符串类型,那么还注意'\0'干屁呢?就是因为没有字符串的概念,所以用'\0'来用语义上表示字符串。
如果说字符串类型,那就是指C++中的string类型。

char *p1 = "xxxx";
char *p2 = "yyyy";

if( p1 == p2 )
有很多人认为==号比较的是字符串地址,我只能说你理解有问题。==比较地址是没有问题的,但是比较的不是字符串地址,就是单纯内存的地址。C中没有字符串类型,只有字符类型。还是上面已经提到过的,如果C中有字符串类型,那么就不用人为地考虑'\0'的问题了。就是因为没有字符串类型,所以用字符类型来表示字符串(所以产生了'\0'作为字符串的结束,但是C根本不认为那是字符串,只是遇到'\0'就结束处理了)
发表于 2016-07-09 18:18:54 回复(2)
此处字符串不是指string,而是指char[]

发表于 2016-03-21 16:07:00 回复(0)
D:如果变量sVar为字符串型:if(""==sVar){doSomeThing();}
在vs上测试通过。

发表于 2015-09-08 16:31:02 回复(3)
C++的string类,对==号进行了运算符重载,所以可以直接用一个string对象和string对象比较,也可以用const char*类型的字符串和string对象比较。
发表于 2023-05-11 20:20:10 回复(0)

显然在C++中,D选项的语法没有任何问题(出题目的人是什么年代的老古董了啊,在这里误人子弟。。。)
发表于 2017-08-01 19:13:27 回复(0)
c++ 里面这种比较没错呀,而且比较的就是内容,到底为什么不能比较?题目也没说它的本意是想比较地址是否相等,我就法克了。
编辑于 2017-06-19 20:18:50 回复(0)
对于d选项,我想说c++字符串类型就是string,明明就是可以的,实践出真理大家可以上机调试
发表于 2017-04-10 19:58:01 回复(0)
对两个字符串比较,不能用以下形式:
    if(str1>str2)  cout<<″yes″;
字符数组名str1和str2代表数组地址,上面写法表示将两个数组地址进行比较,而不是对数组中的字符串进行比较。对两个字符串比较应该用
    if(strcmp(str1, str2)>0)  cout<<″yes″;
发表于 2016-01-28 21:30:22 回复(0)
“作为条件部分的语句编写有问题”这句话怎么理解呢?

C错,注意是0.02=fVar,应该是==,如果忽略这个,那么两个浮点数比较也是有问题的,应该指定一个误差
D,测试没问题,如果从程序中字符串比较的规范角度可以不能使用==
发表于 2015-09-14 10:03:07 回复(0)
难道不应该是ACD吗,A应该用if(!bVar)

发表于 2015-09-08 17:04:42 回复(3)
float的精度为:6-7位有效数字,double的精度为15-16位有效数字
发表于 2022-09-14 10:21:46 回复(0)

首先C答案中if里面不是比较运算符 == ,而是赋值运算符 =

其次,就算是 == ,float型数据也不能直接这样比较,因为浮点型数据有精度的。
举例与0进行比较:
    float f = 0.00000000001;
    if( f > -0.0000001 && f < 0.00000001 )//比较语句
    {
        cout << "123" << endl;
    }
    f = 123456720;
    //浮点型有效值7位(其余的都不准确)
    f = f + 20;//非常大的数与一个小的数相加无意义
    cout << f << endl;//结果:1.23457e+08
    printf("f = %f\n",f);
    //结果:f = 123456736.000000    而不是f = 123456740.000000  小数点前两位数是随机的

编辑于 2018-09-19 23:47:31 回复(0)
C,由于浮点型并不是精确表示,因此无法使用==进行比较
D,还没有完全明白
发表于 2016-09-25 21:41:45 回复(0)