GESP认证C++编程真题解析 | 202409 二级 附上汇总帖GESP认证C编程真题解析 | 汇总单选题第1题据有关资料山东大学于1972年研制成功 DJL-1计算机并于1973年投入运行其综合性能居当时全国第三位。DJL-1计算机运算控制部分所使用的磁心存储元件由磁心颗粒组成设计存贮周期为2us微秒。那么该磁心存储元件相当于现代计算机的 。A. 内存B. 磁盘C. CPUD. 显示器【答案】A【解析】磁心存储器是一种早期的随机存取存储器RAM断电后会丢失数据设计存取周期为2微秒具有较快的访问速度这与内存的特性一致。而磁盘存储则不具备如此高的存取速度其主要特点是大容量和非易失性即断电后数据不会丢失。第2题IPv4版本的因特网总共有有 个A类地址网络。A. 65000B. 200万C. 126D. 128【答案】C【解析】IPv4版本的 A 类地址网络号占1字节8位首位必须是0全0和全1这两种情况被保留有特殊作用网络地址和广播地址所以总共用个A类地址。第3题在C中下列不可做变量的是 。A.ccf-gespB.ccf_gespC.ccfGespD._ccfGesp【答案】A【解析】有效的变量名是由大小写字母、数字、下划线组成的任意长度的序列且第一个字符不能为数字。另外C中有一些关键字已被编程语言保留不能用作变量名。A选项的因包含非法字符-连字符而不符合C变量命名规则。第4题在C中与for (int i 1; i10; i)​效果相同的是 A.for (int i 0; i10; i)​B.for (int i 0; i11; i)​C.for (int i 1; i10; i)​D.for (int i 0; i11; i)​【答案】C【解析】原始循环for (int i 1; i10; i)​循环变量i从1开始到9结束循环共执行9次。A选项从0到9共执行10次不等效。B选项从0到10共执行11次7不等效。C选项从1到9共执行9次且前置递增和后置递增对的结果无影响因此效果相同。D边选项从0到10共执行11次不等效。因此正确答案是C第5题在C中cout (5 / 2 5 % 3)​的输出是 。A. 1B. 2C. 3D. 4【答案】C【解析】先进行除法和取模运算表达式5/2求5除以2的商结果为1整数除法舍去小数部分。表达式5%3求5除以3的余数结果为2。然后进行加法运算123。因此最终输出为3故正确答案为C。第6题假定变量a和b可能是整型、字符型或浮点型则下面C代码执行时先后输入-2和3.14后其输出不可能是 。已知字符、-、的ASCII码值分别是43、45和61cina;cinb;cout(ab);A. 1B. 1.14C. 47D. 将触发异常【答案】D【解析】A选项a和b都是整型。输入-2后a-2输入3.14会被截断为整数部分即b3。输出结果为-231B选项a和b都是浮点型。输入-2后a-2.0输入3.14后b3.14。输出结果为-2.03.141.14。C选项a为字符类型b为整数类型输入-2后a‘-’b2在执行加法时a被转换成整数类型值为’-的ASCII码45输出结果45247。D选项默认情况下cin 不会抛出异常而是设置错误状态标志。第7题在C代码中假设N为正整数则下面代码能获得个位数的是 。A. N%10B. N/10C. N 10D. 以上选项均不正确【答案】A【解析】在十进制满10进1个位的位权为十位的位权为百位的位权为第N位的位权为该数的数值等于每位的的数值位权之和。对于任意正整数N我们可以将其分解成如下形式其中k是除去个位后的部分而r则是个位数。所以N%10可以获得个位数。第8题下面C代码执行后的输出是 。inti;for(i0;i10;i){if(i%2)break;cout0#;}if(i10)cout1#;A.0#B.1#C.0_#0#_1D. 没有输出【答案】A【解析】第一次迭代时i0检查条件i%2因为0%20条件为假不执行 break。执行 cout 0#​输出0#。增加i的值第二次迭代时i1检查条件i%2因为1%21条件为真执行 break 路跳出循环。因为跳出循环此时i1不满足if(i10)条件所以不会输出1#。因此程序在第一次循环中输出 0_#后由于i%2为真而跳出循环因此最终的输出结果是0#_。第9题执行下面C代码并输入1和0有关说法正确的是 。inta,b;cinab;if(ab)cout(1);elseif(!(a||b))cout(2);elseif(a||b)cout(3);elsecout(4);A. 1B. 2C. 3D. 4【答案】C【解析】用户输入a1和b0。程序首先检查 if(a b条件因为a1和b0所以ab为假不输出1。接下来检查 else if (!(a || b)条件因为a为真所以a || b为真取反后为假不输出2“。然后检查 else if (a || b条件因为a为真所以a || b为真满足条件输出3。最后的 else 不会被执行。第10题下面C代码执行后的输出是 。intloopCount0;for(inti1;i5;i2)loopCount1;cout(loopCount);A. 1B. 2C. 3D. 5【答案】B【解析】初始化loopCount 为 0。for 循环从i1开始条件是i5每次迭代i增加2。第一次迭代i1条件满足15进入循环体loopCount 加 1变为1。第二次迭代i3条件满足35)进入循环体loopCount 再加1变为2。第三次迭代i5条件不满足55)退出循环。最终输出loopCount 的值即2第11题下图是C程序执行后的输出。为实现其功能横线处应填入代码是 。71233454567567896789101178910111213//////////////////////////////intlineNum;cinlineNum;for(inti1;ilineNum1;i){for(int______________)coutj ;coutendl;}A.j i; j i; jB.j 1; j i; jC.j i; j i*2; jD.j i1; j ii; j【答案】C【解析】根据给定的输出格式每行的数字从当前行号开始到当前行号乘以2为止。因此内层循环的条件应该是ji; ji*2; j​。第12题下面C代码执行后输出逆序数如输入123则输出321。如输入120则输出21。横线处先后应填入的代码是 。intN;cinN;intrst0;while(N){__________________;__________________;}cout(rst);A.rst rst * 10 N % 10 N N / 10​B.rst N % 10 N N / 10​C.rst rst * 10 N / 10 N N % 10​D.rst N / 10 N N % 10​【答案】A【解析】使用变量 rst 存储结果。每次取出原数最右边的一位数字并将其加到结果中。将原数字去掉最右边的一位继续上述过程直到数字为零。​rstrst * 10 N % 10​将当前结果向左移动一位并加上新提取的位数字。​N N / 10​去掉原数字的最右边一位。第13题下面的C代码用于输入学生成绩并根据人数计算出平均成绩有关说法错误的是 。floatSum0;// 保存总成绩intcnt0;// 保存学生人数while(1){intscore;cinsocre;if(score0)break;cnt1;Sumscore;}cout总学生数: cnt平均分: Sum/cnt;A. 代码while (1)写法错误B. 如果输入负数将结束输入并正确输出C. 如果输入的学生成绩含有小数程序将无法正常执行D. 变量 int score 初始值不确定但不影响程序执行【答案】A【解析】在C中while(1中1会被转换为true 是一种常见的无限循环写法没有语法错误。第14题以下C代码判断输入的正整数是否为质数如果该数字是质数则输出YES否则输出NO。质数是指仅能被1和它本身整除的正整数。请在横线上填写代码。 intnum,i;cinnum;for(i2;inum;i)if(________){cout(NO);break;}if(inum)cout(YES);A.num % i​B.num % i 0​C.num / i​D.num / i 0​【答案】B【解析】判断一个数是否为质数即检查从2到num-1是否有任何数能整除num在循环中使用条件if (num % i0)​来检查 i 是否为num 的因子。如果存在这样的数则 num 不是质数。第15题一个数如果能被某个数比如7整除或者含有该数则说该数是某个数的相关数。下面C代码用于判定输入的数与7是否有关。下列说法错误的是 。intN,M;boolFlagfalse;cinN;MN;if(M%70)Flagtrue;while(!FlagM){if(M%107{Flagtrue;break;}M/10;}if(Flag)coutN与7有关;elsecoutN与7无关;A. 删除 break 语句不会导致死循环但有时会导致结果错误B. 删除M/10将可能导致死循环C. 删除MN并将其后代码中的M 变量改为N并调整输出同样能完成相关功能D. 删除break语句不会导致死循环但有时会影响效率【答案】A【解析】A/D选项删除break 语句不会导致死循环只会影响效率。B选项正确没有M/10M 永远不会变成0循环将永远进行下去。C选项正确修改后可以在 while 循环前输出N。判断题第1题小小杨最近开始学习C编程老师说C是一门面向对象的编程语言也是一门高级语言。 A. 正确B. 错误【答案】A【解析】C是一门支持面向对象的高级语言。第2题在C中cout (3, 4, 5)​ 可以输出3 4 5且每个输出项之间用空格分开。 A. 正确B. 错误【答案】B【解析】C中逗号运算符 , 的作用是计算所有表达式并返回最后一个表达式的值。因此(3, 4, 5实际上等价于5最终会输出5。第3题C表达式12 % 10 % 10的值为2。 A. 正确B. 错误【答案】A【解析】现运算10%22再运算2%102最终结果是2。第4题C语句cout rand() rand();​ 的第二个输出值较大。 A. 正确B. 错误【答案】B【解析】​rand()​用于生成伪随机数无法任何保证两次调用中哪个值更大。第5题定义C的int类型的变量ch而且值为1则语句可cout int(ch);​的输出为1。 A. 正确B. 错误【答案】B【解析】字符’1’的ASCII 1值是49。当将字符’1’转换为整数时实际上是在获取它的ASCII 编码值而不是其字面上的数值。因此int(‘1’的结果是49而不是1。第6题下面C代码执行后将输出10。 inti;for(i0;i10;i)continue;if(i10)couti;A. 正确B. 错误【答案】A【解析】i被初始化为0。只要 i10 为真循环继续。每次迭代 i 增加1(i)。continue 语句使得循环体内没有其他操作直接进入下一次迭代当 i 达到10时条件 i10 不再满足循环终止此时i 的值是10因此最终输出10。第7题下面C代码能求整数N和M之间所有整数之和包含N和M。 intN,M,Sum;cinNM;if(NM){inttmpN;NM,Mtmp;}for(intiN;iM1;i)Sumi;coutSum;A. 正确B. 错误【答案】B【解析】变量 Sum 没有被初始化为0。Sum持有一个无法确定的初始值从而导致最终的结果无法确定。第8题将下面C代码中的L3标记的代码行调整为for (int i0; i5; i)​后输出结果相同。 intloopCount0;for(inti1;i5;i)// L3for(intj0;ji;j)loopCount1;coutloopCount;A. 正确B. 错误【答案】A【解析】无论是从i1到i5还是从i0到i5最终累加到loopCount 的总和都是10。因此该题的正确答案为“正确“。第9题某一系列数据的规律是从第3个数值开始是前两个数之和。下面的代码求第N个数的值N限定为大于2。 intstart1;// 第1个数intstart2;// 第2个数intN;// 求N个数的值inttmp;cinstart1start2N;for(inti2;iN;i){tmpstart1start2;start1start2;start2tmp;}coutstart2;A. 正确B. 错误【答案】A【解析】每次迭代中将当前的start1与 start2相加得到tmp。然后更新start1和start2的值使得start1变为之前的start2start2 变为新的和 tmp。这个过程模拟了斐波那契数列的生成方式从第三个数开始每个数都是前两个数之和。最终输出的是第N个数的值即start2。第10题下面C代码执行时如果输入2024则输出是4202。 intN,flag0;cinN;while(N){if(!flag)coutN%10;N/10;flag(flag1)%2;}A. 正确B. 错误【答案】B【解析】flag 的值在0和1之间交替如果 flag 为0则输出N 的最后一位位数字名即N%10。该程序的实际输出是40而不是题目所述的4202。编程题题解洛谷 B4036 [GESP202409 二级] 数位之和题解洛谷 B4037 [GESP202409 二级] 小杨的 N 字矩阵