首页 > 试题广场 >

有以下程序 #include using...

[单选题]
#include <iostream>
using namespace std;

double power(double x, int n) {
    double val = 1.0;
    while (n--)  val *= x;
    return(val);
}

int main() {
    int  i;
    int  value = 0;
    char ch;
    for (i = 7; i >= 0; i--) {
        cin >> ch;
        if (__________)
            value += power(2, i);
    }
    cout << value << endl;
}
对于上面的程序,当从键盘输入 00100101,程序的运行结果是 37,请为横线处选择合适的语句()
  • ch
  • ch == '1'
  • ch==1
  • ch!=0
首先,cin的接收变量ch接收类型是char,因此ch接收的数据就是char类型的,ACD中这样子比较是把ch当作int型比较,也就是ascii码,其值都大于0,对于B选项,这里就是char类型的比较,而且37=2^5+2^2+2^0,pow函数为2的n次方,for循环这里相当于ch为‘1’的时候进行2的n次方累加求和
发表于 2020-12-23 20:50:21 回复(0)
当ch输入的字符为‘1’时才调用power()函数: i=7时ch=0,继续循环 i=6时ch=0,继续循环 i=5时ch=1,pow(2,5)=32,value=32,继续循环 i=4时ch=0,继续循环 i=3时ch=0,继续循环 i=2时ch=1,pow(2,2)=4,value=32+4=36,继续循环 i=1时ch=0,继续循环 i=0时ch=1,pow(2,0)=1,value=36+1=37,结束
发表于 2019-08-21 21:39:44 回复(0)
选D的人应该是看懂了这个函数,但是没有注意到字符0和0的区别
发表于 2021-01-07 09:54:32 回复(0)
ch!=0是字符不为空的意思,该题中,‘0’和‘1’都不是空字符
发表于 2023-03-12 11:50:23 回复(0)
ch是字符表达
发表于 2021-03-01 10:36:05 回复(0)
结果为37,是个奇数,也就说明必有传入的n为0的一次,使得val传出1,不然偶数想加不可能是奇数。 n接收的i值,也就是i=0的那一次循化必定进入了函数,i=0时输入的是1,所以由此确定if的条件 可我选的C,淦
发表于 2021-01-13 10:17:19 回复(0)
char类型不是本来也可以代表数字吗
发表于 2021-01-03 13:48:59 回复(0)
cin>>chch若为char,那么,此时输入的都是字符
发表于 2020-05-21 16:29:18 回复(0)
ch在为‘1’时进入函数,循环次数分别是5,2,0时会进入power函数对2进行循环累乘,2^5+2^2+2^0=37(520我是没想到的,现在出题者都这么秀么)
发表于 2020-01-28 23:16:53 回复(0)
不理解power这个函数哪位大佬解释一下谢谢谢 我感觉2^5怪怪的
发表于 2020-01-19 11:50:10 回复(3)