
附上汇总帖GESP认证C编程真题解析 | 汇总单选题第1题下列代码中输出结果是 #includeiostreamusingnamespacestd;intmain(){doublea0.9;doubleb1.0;if((b-a)0.1)){coutEqualendl;}else{coutNot equalendl;}}A. EqualB. Not equalC. 程序不能正确执行D. 没有输出【答案】B【解析】浮点数在计算机中由于精度限制直接比较可能会导致预期外的结果。例如b-a 实际上可能并不完全等于0.1而是一个非常接近但略有不同的值。因此使用比较浮点数通常是不可靠的通常说来只要这个小数没法被二进制表示的话就没法用计算精确表示只能用一个误差很小到可以忽略的近似值来表示。第2题关于计算机中的编码下列说法中正确的是 A. 机器数的形式值和真值是一致的B. 原码就是符号位加上真值C. 机器数是带符号的D. [-1][1000 0001]原[1111 1111]反【答案】C【解析】A选项说法不正确。机器数是指计算机内部表示数据的二进制形式而真值是人类理解的数据值通常是指十进制两者不一定一致。B选项说法是不对的。原码二进制表示法是在最高位作为符号位0表示正数1表示负数其余位表示数值本身。真值是指十进制。、C选项正确。如原码、反码和补码都是带符号的表示方式。D选项错误。对于8位二进制数-1的原码是[1000 0001]-1的反码应该是对原码取反除了符号位即[1111 1110]-1的补码则是在反码基础上加1即[1111 1111]第3题8进制数3703转换成16进制数是 。A. 7C3B. 7A3C. 7B3D. 7D3【答案】A【解析】可以以2进制作为桥梁来转换8216将8进制数3703每一位分别转换成对应的3位二进制表示011 111 000 011然后从右往左每四位分组若最后一组不足4位则在左侧补零接着0111 1100 0011依次逐个转换成16进制7C3第4题0.8125变成二进制是 。A. 0.1110B. 0.1 1111 1011 1101C. 0.1 1111 1011 1100D. 0.1101【答案】D【解析】我们可以通过逐步乘以2依次取出整数部分正向排列的方法进行转换0.1101第5题下面说法正确的是 。A. (2201) (2201成立B. (23|11) 30C. (23|10) 31D. (23|01) 31【答案】C【解析】A选项错误2201的值为02201的值为true不相等B选项错误23|11等于31C选项正确23|10等于31D选项错误23|01等于23第6题下列说法正确的是 。A. 21和11的值是一样的B. (22和11的值是一样的C. (1100和10的值是一样的D. (~0的输出值是1)【答案】B【解析】A选项错误21为111为0。B选项正确22为011为0。C选项错误1100为1110为1。D选项错误~0为1111111代表-1不是1。第7题下列代码实现的是 。voidSwap(inta,intb){if(a!b){a^b;b^a;a^b;}}A. a和b的异或B. a和b的同或C. a和b的值交换D. a和b的高低位互换【答案】C【解析】代码的作用是实现变量变换将a和b的值进行了交换。第8题a~1运算实现的是 。A. 使a的最低位为1B. 使a的最高位为1C. 使a的最低位为0D. 使a的最高位为0【答案】C【解析】a~1是将a的最低位清零而保持其他位不变。第9题a10101110a2下面关于这个说法正确的是 。A. a的值变为10111000B. a的值变为10111010C. a的值变为01011101D. a的值变为01011100【答案】A【解析】位移运算a2表示将二进制数a左移两位。左移操作会把所有位向左移动指定的位数并在右边补上相应数量的0。第10题下列程序中result 和 result2 输出分别是 。longa123;intb1;longresultab;coutresultendl;longa2-123;unsignedintb2-1;longresult2a2b2;coutresult2endl;A. 123 -1B. 123 -123C. 1 -1D. 1 -123【答案】D【解析】第一段执行result 123 1为1。第二段-123 -1因为-1表示为11111111所以result -123第11题陈A歹种植一批农作物第一天需要浇水一次随后的两天第2、第3天每天需要浇水2次再随后的3天第4、第5、第6天需要每天浇水3次这样持续下去随后的n天每天需要浇水n次。请问在1100天里总共浇了多少次水 。A. 994B. 996C. 995D. 945【答案】D【解析】第k组有k天一共需要浇水次。前13组一共149162536496481100121144169次。到这里已经用了91天还剩余9天这些天属于第14组每天需要浇水14次14 * 9 126次。149162536496481100121144169126 945第12题关于一维数组下列程序能够正确执行的是 。A.inta[10];intsum0;for(inti0;i10;i){sumsuma[i];}B.inta[10]{1,2,3,4,5,6,7,8,9,10};intsum0;for(inti0;i10;i){sumsuma[i];}C.inta[10]{1,2,3,4,5,6,7,8,9,10};intsum0;for(inti0;i10;i){sumsuma[i];}D.inta[10]{0};intsum0;for(inti0;i10;i){sumsuma[i];}【答案】C【解析】选项A的问题循环条件i10会导致访问越界因为合法索引范围是0到9另外此程序的数组 a 的初值没有初始化会导致计算结果未知。选项B、D的问题虽然数组a被初始化但循环条件i10会导致访问越界。第13题下面的程序中会输出 。inta[10]{1,2,3,4,5,6,7,8,9,10};couta[10]endl;A. 1B. 0C. 10D. 不确定的值【答案】D【解析】定义了一个长度为10的整数数组a数组下标从0到9。a[10]尝试访问数组第11个元素因为数组下标从0开始此时发生了下标越界所以其结果是不确定的可能会导致程序崩溃或输出任意值。第14题有ABCD4个人其中一个是小偷每个人说一句话只有小偷说的是假话其中A说不是我。说是C。C说是D。D说C瞎说请问谁是小偷 。A. AB. BC. CD. D【答案】C【解析】假设A是小偷A的话是假话所以“不是我”是假话说明A就是小偷。B说“是C”是假话。C说“是D”是假话。D 说“C撒谎”是真话因为C确实撒谎。共有3人说假话不符合题意只有小偷一个人说假话所以选项A错。假设B是小偷B的话是假话所以“是C”是假话说明不是小偷。A说“不是我”是真话。C说“是D”是假话。D 说“C撒谎”也是真话。共有两人说假话不符合题意所以选项错。假设C是小偷C的话是假话所以“是D”是假话说明不是小偷。A说“不是我”是真话。B说“是C”是真话。D说“C撒谎”也是真话。符合题意所以选项 为正确答案。假设D是小偷D的话是假话所以“C撒谎”是假话说明C没有撒谎。A说“不是我”是是真话。B说“是C是假话。C说“是D”是真话。共有两人说假话不符合题意所以选项错。第15题下列程序输出的是 。string strHello,陈A歹;coutstr.find(A)\n;A. 9B. 8C. 7D. 6【答案】B【解析】str.find(‘A’会返回字符 ‘A’ 在字符串中的下标从0开始计数。Hello,陈A歹012345678910所以字符’A’的索引是8选B。注意在Linux/MacOS系统中默认是utf-8编码在此编码中一个汉字是3个字节在简体中文的 Windows系统中默认是GBK编码在此编码中一个汉字是两个字节由于GESP 考点默认采用的是 Windows系统所以本题官方给的答案是按照GBK编码一个汉字占两个位置来算的。判断题第1题1和-1的原码进行1(-1计算的结果是-2。 A. 正确B. 错误【答案】A【解析】1的原码为00000001-1的原码为10000001。它们相加的结果为10000010转成十进制是-2所以此题正确。第2题~1的输出值是-2。 A. 正确B. 错误【答案】A【解析】1补码为00000001~表示按位取反1变00变1。~0000000111111110-2所以本题结论正确。第3题~111111110。 A. 正确B. 错误【答案】A【解析】分析如上题所示。第4题取 X 的低四位可以用 Y00001111用 XY 获取 X 的低四位。 A. 正确B. 错误【答案】A【解析】此题用到了按位与的一个性质0任何二进制数码 x 结果都是01任何二进制数码 x 结果都是 x 本身。所以 XY 的结果为清空Ⅹ高4位保留X的低四位所以本题正确。第5题下列程序输出的是A。 charx65;x;coutxendl;A. 正确B. 错误【答案】B【解析】初始化 x 为ASCII 值65对应的字符是’A’。x; 后x增加到66对应的字符是’B’cout x endl;由于是后置自增所以输出的值是x本行自增之前的结果也就是’B’所以本题题面结论有误。第6题下列程序输出的是3。 string str陈ADai;size_t posstr.find(D);coutposendl;A. 正确B. 错误【答案】A【解析】str.find(‘D’会返回字符 ‘D’ 在字符串中的下标从0开始计数。陈ADai的下标关系如下陈ADai012345所以上述代码输出结果为3。注意在Linux/MacOS系统中默认是utf-8编码在此编码中一个汉字是3个字节在简体中文的 Windows 系统中默认是GBK编码在此编码中一个汉字是两个字节由于 GESP 考点默认采用的是 Windows 系统所以本题官方给的答案是按照GBK编码一个汉字占两个位置来算的。第7题下列程序将输出-1。 inta[10]{1};couta[1]endl;A. 正确B. 错误【答案】B【解析】代码第一行给a数组使用大括号进行了初始化提供了一个初值为1。所以此时a的第一个格子a[0]为1此后的格子由于没有更多的初值所以会被大括号默认初始为0。所以a[1]的值为0。第8题下列程序将输出A。 inta65;cout(char)aendl;A. 正确B. 错误【答案】A【解析】A’的ASCII码为65。第9题16进制数AB表示成2进制数是110101011。 A. 正确B. 错误【答案】A【解析】一位16进制数可以转化成四位2进制数所以A是1010是1011注意16进制的在10进制下是1016进制的在10进制下是11。所以16进制AB表示成2进制为10101011。第10题def十六进制103231五进制。A. 正确B. 错误【答案】B【解析】可以通过中间进制作为桥梁来方便转换16进制def转成10进制为。将10进制的3567变成5进制可以采用短除法不断除以5然后倒取余数得到103232。编程题题解洛谷 B4038 [GESP202409 三级] 平衡序列题解洛谷 B4039 [GESP202409 三级] 回文拼接