2024年12月CCF编程能力等级认证(GESP)C++一级试卷讲解
1. 单选题(每题2分,共30分)
-
第1题
- 题目 :2024年10月8日,诺贝尔物理学奖"意外地"颁给了两位计算机科学家约翰·霍普菲尔德(John J. Hopfield)和杰弗里·辛顿(Geoffrey E. Hinton)。这两位科学家的主要研究方向是( )。
- A. 天体物理
- B. 流体力学
- C. 人工智能
- D. 量子理论
- 答案:C
- 知识点:计算机科学家约翰·霍普菲尔德和杰弗里·辛顿的研究领域相关知识。
- 解析:约翰·霍普菲尔德和杰弗里·辛顿主要研究方向为人工智能,所以答案为C。A选项天体物理、B选项流体力学、D选项量子理论均不符合两位科学家的主要研究方向。
- 题目 :2024年10月8日,诺贝尔物理学奖"意外地"颁给了两位计算机科学家约翰·霍普菲尔德(John J. Hopfield)和杰弗里·辛顿(Geoffrey E. Hinton)。这两位科学家的主要研究方向是( )。
-
第2题
- 题目 :下列软件中是操作系统的是( )。
- A. 高德地图
- B. 腾讯会议
- C. 纯血鸿蒙
- D. 金山永中
- 答案:C
- 知识点:常见软件的类型,操作系统的概念。
- 解析:高德地图是地图导航软件,腾讯会议是视频会议软件,金山永中是办公软件,而纯血鸿蒙是操作系统,答案为C。
- 题目 :下列软件中是操作系统的是( )。
-
第3题
-
题目 :有关下列C++代码的说法,正确的是( )。
cppprintf("Hello,GESP!");
- A. 配对双引号内,不可以有汉字
- B. 配对双引号可以相应改变为英文单引号而输出效果不变
- C. 配对双引号可以相应改变为三个连续英文单引号而输出效果不变
- D. 配对双引号可以相应改变为三个连续英文双引号而输出效果不变
-
答案:D
-
知识点:C++中字符串的表示方法。
-
解析:在C++中,配对双引号可以相应改变为三个连续英文双引号而输出效果不变。A选项配对双引号内可以有汉字;B选项改为英文单引号输出效果会改变;C选项三个连续英文单引号会改变输出效果,答案为D。
-
-
第4题
- 题目 :C++表达式12 - 3 * 2 && 2的值是( )。
- A. 0
- B. 1
- C. 6
- D. 9
- 答案:B
- 知识点:C++中算术运算和逻辑运算的优先级。
- 解析:先计算算术运算12 - 3 * 2 = 6,然后6 && 2为真,在C++中逻辑真用1表示,所以答案为B。A选项0错误;C选项6是算术运算结果,不是最终答案;D选项9也是错误的计算结果。
- 题目 :C++表达式12 - 3 * 2 && 2的值是( )。
-
第5题
- 题目 :在C++中,假设N为正整数2,则cout << (N / 3 + N % 3)将输出( )
- A. 0
- B. 2
- C. 3
- D. 4
- 答案:B
- 知识点:C++中整数的除法和取余运算。
- 解析:N为2,N / 3 = 0,N % 3 = 2,0 + 2 = 2,所以输出2,答案为B。A选项0错误;C选项3错误;D选项4错误。
- 题目 :在C++中,假设N为正整数2,则cout << (N / 3 + N % 3)将输出( )
-
第6题
- 题目 :C++语句cout << 7%3 << ' '<< "7%3"<< ' ' << "7%3={7%3}"执行后的输出是( )。
- A. 1 1 1=1
- B. 1 7%3 1=1
- C. 1 7%3 7%3=1
- D. 1 7%3 7%3={7%3}
- 答案:D
- 知识点:C++中取余运算和字符串输出。
- 解析:7 % 3 = 1,然后按照语句顺序依次输出,所以答案为D。A选项错误的将后面的字符串也当作取余结果;B选项错误的输出格式;C选项同样错误的输出格式。
- 题目 :C++语句cout << 7%3 << ' '<< "7%3"<< ' ' << "7%3={7%3}"执行后的输出是( )。
-
第7题
- 题目:下面C++代码执行后,求出几天后星期几。如果星期日则输出"星期天"否则输出形如"星期1"。横线上应填入的代码是( )
cppint N, nowDay, afterDays; cout << "今天星期几?" <<endl; cin >> nowDay; cout << "求几天后星期几?"<< endl; cin >>afterDays; N = nowDay+afterDays; if( ) else printf("星期天"); printf("星期%d", N%7);
- A. N % 7!= 0
- B. N % 7 == 0
- C. N == 0
- D. N % 7
- 答案:A
- 知识点:C++中判断语句和星期的计算逻辑。
- 解析:如果不是星期日(即N % 7!= 0)则输出星期几的数字形式,否则输出星期天,所以答案为A。B选项N % 7 == 0是判断星期日的条件,不符合题意;C选项N == 0没有实际意义;D选项N % 7不是完整的判断语句。
-
第8题
- 题目:下面C++代码执行后输出是( )。
cppint N=0,i; for (i = 1; i < 10; i++) N += 1; cout << (N + i); A. 54 B. 20 C. 19 D. 18
- 答案:C
- 知识点:C++中循环语句和变量的计算。
- 解析:循环中N从0加到9,共9次,N的值为9,循环结束后i的值为9 + 1 = 10,N + i = 9 + 10 = 19,所以答案为C。A选项54错误;B选项20错误;D选项18错误。
-
第9题
- 题目:下面C++代码执行后输出的是( )。
cppint tnt=0; for(1=0;i<100;i++) tnt+=i%10; cout<<tnt;
- A.4950
- B.5050
- C.450
- D.100
- 答案:C
- 知识点:C++中循环语句和取余运算的综合应用。
- 解析:循环中每次将i对10取余后累加到tnt中,0到99对10取余的和为(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9)×10 = 450,所以答案为C。A选项4950是0到99的累加和;B选项5050是0到100的累加和;D选项100错误。
-
第10题
- 题目:下面C++代码执行后输出的是( )。
cppint N=0,i; int tnt=0; for(1=5;i<100;i+=5){ if(1%2==0) continue; tnt +=1; if(i>=50) break; } cout<<tnt;
- A.10
- B.9
- C.6
- D.5
- 答案:D
- 知识点:C++中循环语句中的continue和break语句的应用。
- 解析:从5开始每次加5,遇到偶数跳过,当i >= 50时退出循环,符合条件的数有5,15,25,35,45共5个,所以tnt的值为5,答案为D。A选项10错误;B选项9错误;C选项6错误。
-
第11题
- 题目:下面的程序用于判断输入的整数N是否为能被3整除的偶数,横线处应填写代码是( )
cppint N; cin >>N; if( ) cout<<"能被3整除的偶数"<<end1; else cout<<"其他情形"<<end1;
- A.(N%2)&&(N%3)
- B.(N%2==)&&(N3)
- C.(N2)&&(N3==)
- D.(N%20)&&(N%30)
- 答案:D
- 知识点:C++中判断语句和整除、偶数的判断条件。
- 解析 :要判断是否为能被3整除的偶数,需要同时满足能被2整除(N % 2 == 0)和能被3整除(N % 3 == 0),所以答案为D。A选项缺少判断等于0的条件;B选项N % 2后面缺少0,N3缺少判断整除的符号;C选项N2缺少判断整除的符号,N3缺少判断等于0的条件。
-
第12题
- 题目:下面C++代码执行后的输出是( )。
cppint cnt; cnt=0; for(inti=1;i<10; i++) cnt+=i++; cout<<cnt; cout<<end1;
- A.54
- B.45
- C.25
- D.10
- 答案:C
- 知识点:C++中循环语句和自增运算符的应用。
- 解析:循环中每次将i的值(先取i的值,然后i自增)累加到cnt中,i的值依次为1,3,5,7,9,累加和为25,所以答案为C。A选项54错误;B选项45错误;D选项10错误。
-
第13题
- 题目 :int类型变量a的值是一个正方形的边长,如下图中的正方形的四条边长都为4,则下列哪个语句执行后能够使得正方形的周长(四条边长的和)增加4?()。
- A.a*4;
- B.a+4;
- C.a+1;
- D.++a;
- 答案:D
- 知识点:C++中变量的自增操作和正方形周长的计算。
- 解析:正方形周长为4a,要使周长增加4,即边长增加1,++a可以使a的值自增1,所以答案为D。A选项a*4是计算正方形的周长,不是增加周长;B选项a+4只是边长增加了4,但没有改变变量a的值;C选项a+1没有改变变量a的值,无法使周长持续增加4。
- 题目 :int类型变量a的值是一个正方形的边长,如下图中的正方形的四条边长都为4,则下列哪个语句执行后能够使得正方形的周长(四条边长的和)增加4?()。
-
第14题
- 题目 :C++表达式(6>2)*2的值是( )。
- A.1
- B.2
- C. true
- D. truetrue
- 答案:B
- 知识点:C++中关系运算和算术运算的优先级。
- 解析:先计算关系运算6 > 2为真,在C++中真用1表示,然后1 * 2 = 2,所以答案为B。A选项1是关系运算的结果,但不是最终答案;C选项true不是C++中的正确表示;D选项truetrue错误。
- 题目 :C++表达式(6>2)*2的值是( )。
-
第15题
- 题目:下面C++代码用于判断输入的整数是否为位增数,即从首位到个位逐渐增大,是则输出1。如123是一个位增数。下面横线处应填入的是( )。
cppint N; int n1,n2; cin>>N; while(N){ n1=N%10; if(n1>=n2){ cout<<0; return; } n2=n1,N/=10; }
- cout<<1;
- A.n2=N%10
- B.N/=10
- C.n2=N/10,N%=10
- D.n2=N%10,N/=10
- 答案:D
- 知识点:C++中整数的取余和除法运算以及位增数的判断逻辑。
- 解析:首先n2需要初始化为N的最后一位数字,即n2 = N % 10,然后每次循环需要更新n2的值为当前位数字,并将N的值更新为去掉最后一位后的数字,即N/=10,所以答案为D。A选项只赋值了n2,但没有更新N;B选项只更新了N,没有赋值n2;C选项n2=N/10,N%=10计算错误。
2. 判断题(每题2分,共20分)
-
第1题
- 题目:在Windows的资源管理器中为已有文件A建立副本的操作是Ctrl+C,然后Ctrl+Y。()
- 答案:×
- 知识点:Windows资源管理器中文件复制的快捷键操作。
- 解析:在Windows资源管理器中,Ctrl+C是复制操作,但粘贴操作通常是Ctrl+V,而不是Ctrl+Y,所以答案为×。
-
第2题
- 题目:在C++中,表达式8/3和8%3的值相同。()
- 答案:×
- 知识点:C++中整数除法和取余运算的结果。
- 解析:在C++中,8/3的结果是2(整数除法取整),8%3的结果是2(8除以3的余数),两者结果不同,所以答案为×。
-
第3题
- 题目:X是C++语言的基本类型变量,则语句cin>>x, cout<<X能接收键盘输入并原样输出。()
- 答案:×
- 知识点:C++中基本类型变量的输入输出操作。
- 解析:如果X是基本类型变量,需要正确定义变量类型,例如int X; 才能正确进行输入输出操作,这里没有正确定义变量类型,所以答案为×。
-
第4题
- 题目:下面C++代码执行后将输出10。()
cppint N=0; for (int i=0;i<10;i++){ continue; N+=1; } cout<<N;
- 答案:×
- 知识点:C++中循环语句和continue语句的作用。
- 解析:循环中每次遇到continue语句就会跳过本次循环体中后续的代码,直接进入下一次循环,所以N的值始终为0,输出不是10,答案为×。
-
第5题
- 题目:下面C++代码执行后将输出100。
cppint i; for(1=0;i<=100;i++) continue; cout<<i;
- 答案:×
- 知识点:C++中循环语句和continue语句的作用。
- 解析:循环中每次遇到continue语句就会跳过本次循环体中后续的代码,直接进入下一次循环,当i的值达到100时,循环结束,但由于没有对i进行输出操作,所以不会输出100,答案为×。
-
第6题
- 题目 :下面C++代码被执行时,将执行三次输出(即标记行L2将被执行一次)。()
- for(inti=0;i<10;i+=3) cout<<i;//L2
- 答案:×
- 知识点:C++中循环语句的执行次数。
- 解析:循环从0开始,每次增加3,当i的值小于10时执行循环体,会执行4次输出(分别是0,3,6,9),而不是3次,所以答案为×。
- 题目 :下面C++代码被执行时,将执行三次输出(即标记行L2将被执行一次)。()
-
第7题
- 题目:C++语句cout<<(3,2)执行后,将输出3和2,且3和2之间有逗号间隔。()
- 答案:×
- 知识点:C++中逗号表达式的运算结果。
- 解析:在C++中,逗号表达式(3,2)的结果是2,只会输出2,而不是3和2且有逗号间隔,所以答案为×。
-
第8题
- 题目:在C++代码中,studentName、student_name以及sstudentName都是合法的变量名称。()
- 答案:×
- 知识点:C++中变量命名规则。
- 解析:在C++中,变量名不能以数字开头,所以sstudentName不是合法的变量名称,答案为×。
-
第9题
- 题目:在C++中,对浮点变量float f,则语句cin >> f; cout << (f<1);在输入是2e - 1时,输出是0。( )
- 答案:√
- 知识点:C++中浮点变量的输入输出以及比较运算。
- 解析:当输入2e - 1(即0.2)时,f的值为0.2,f<1的结果为真,在C++中逻辑真用0表示,所以输出是0,答案为√。
-
第10题
- 题目:在C++的循环体内部,如果break和continue语句连续在一起,那么作用抵消,可以顺利执行下一次循环。( )
- 答案:×
- 知识点:C++中break和continue语句的作用。
- 解析:在C++中,break语句是跳出循环,continue语句是跳过本次循环体中后续的代码进入下一次循环,它们的作用不会抵消,所以答案为×。
3. 编程题(每题25分,共50分)
-
第3.1题 温度转换
- 题目描述 :小杨最近学习了开尔文温度、摄氏温度和华氏温度的转换。令符号K表示开尔文温度,符号c表示摄氏温度,符号F表示华氏温度,这三者的转换公示如下:
- C = K − 273.15 C = K - 273.15 C=K−273.15
- F = C × 1.8 + 32 F = C × 1.8 + 32 F=C×1.8+32
- 现在小杨想编写一个程序计算某一开尔文温度对应的摄氏温度和华氏温度。
- 输入格式:一行,一个实数K,表示开尔文温度。
- 输出格式:一行,若输入开尔文温度对应的华氏温度高于212,输出Temperature is too high!;否则,输出两个空格分隔的实数c和F,分别表示摄氏温度和华氏度,保留两位小数。
- 参考程序:
cpp#include <cstdio> using namespace std; int main() { double K; scanf("%lf", &K); double C = K - 273.15; double F = 32 + C * 1.8; if (F > 212) printf("Temperature is too high!\n"); else printf("%.2f %.2f\n", C, F); return 0; }
- 知识点:C++中输入输出函数的使用,以及温度转换公式的应用。
- 解析 :程序首先通过scanf函数获取输入的开尔文温度K,然后根据公式 C = K − 273.15 C = K - 273.15 C=K−273.15计算摄氏温度C,再根据公式 F = C × 1.8 + 32 F = C × 1.8 + 32 F=C×1.8+32计算华氏温度F。最后根据F的值判断是否输出Temperature is too high!,如果F不高于212,则输出C和F的值,保留两位小数。
- 题目描述 :小杨最近学习了开尔文温度、摄氏温度和华氏温度的转换。令符号K表示开尔文温度,符号c表示摄氏温度,符号F表示华氏温度,这三者的转换公示如下:
-
第3.2题 奇数和偶数
- 题目描述:小杨有个正整数,他想知道其中的奇数有多少个,偶数有多少个。
- 输入格式:第一行包含一个正整数n,代表正整数个数。之后n行,每行包含一个正整数。
- 输出格式:输出两个正整数(用英文空格间隔),代表奇数的个数和偶数的个数。如奇数或偶数的个数为0,则对应输出0。
- 参考程序:
cpp#include<bits/stdc++.h> using namespace std; int main(){ int n; int a = 0, b = 0; cin>>n; for(int i = 1; i <= n; i++){ int x; cin>>x; if(x%2!= 0)a++; else b++; cout<<a<<" "<<b<<"\n"; } return 0; }
- 知识点:C++中输入输出函数的使用,以及判断奇数偶数的方法。
- 解析:程序首先通过cin获取正整数个数n,然后通过循环n次获取每个正整数x。对于每个x,通过判断x%2是否等于0来确定是奇数还是偶数,如果x%2!= 0则为奇数,a++;否则为偶数,b++。最后输出a和b的值,分别代表奇数和偶数的个数。