CCF-GESP 等级考试 2023年12月认证C++四级真题

2023年12月真题

一、单选题(每题2分,共30分)

第 1 题 下⾯有关函数参数的说法,正确的是( )。

  • A. 函数参数传递时,主函数当中采⽤值传递⽅式将参数传递给⼦函数时,若⼦函数将参数值改变,主函数当中的参数值不变。
  • B. 函数参数传递时,主函数当中采⽤值传递⽅式将参数传递给⼦函数时,若⼦函数将参数值改变,主函数当中的参数值将随⼦函数⼀样改变⽽改变。
  • C. 函数参数传递时,主函数如果将参数的地址传递给⼦函数,若⼦函数将参数值改变,主函数当中的参数值将不改变。
  • D. 函数参数传递可以不满⾜⼦函数的参数个数要求。

第 2 题 下⾯C++代码执⾏后,输出的是( )。

int arr[10] = {1};
string strArr = "chen a dai";
cout << strArr[arr[1]] << endl;
  • A. chen
  • B. c
  • C. chen a dai
  • D. dai

第 3 题 下⾯C++代码最后执⾏后输出是( )。

int fun1(int *n)
{
	return *n**n;
}
int main()
{
int arr[10] = {2};
arr[1] = fun1(arr);
cout << arr[1] << endl;
}
  • A. 1
  • B. 2
  • C. 3
  • D. 4

第 4 题 下⾯C++代码执⾏后的结果是( )。

int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
for(int i = 0; i < 3; i++)
{
	for(int j = 2; j >= 0; j--)
	{
		cout << arr[i][j] << " ";
	}
	cout << endl;
}
  • A.
1 2 3
4 5 6
7 8 9
  • B.
1 2 3 4 5 6 7 8 9
  • C.
3 2 1 
6 5 4 
9 8 7
  • D.
9 8 7 6 5 4 3 2 1

第 5 题 下⾯C++代码执⾏后输出是( )。

int arr[3] = {1,2,3};
int *p = NULL;
p = arr;
p++;
cout << *p << endl;
  • A. 1,2,3
  • B. 1
  • C. 2
  • D. 3

第 6 题 如果变量x的地址是0x6ffe14,下⾯C++代码执⾏以后输出的是( )。

int *p = NULL;
int x = 2;
p=&x;
p++;
cout << p << endl;
  • A. 0x6ffe11
  • B. 0x6ffe14
  • C. 0x6ffe18
  • D. 0x6ffe15

第 7 题 在C++中,执⾏下⾯代码后,输出的是( )。

int point(int *p)
{
	return *p**p;
}
int main()
{
	int a = 20;
	int *p=&a;
	*p = point(p);
	cout << *p << endl;
}
  • A. 400
  • B. 200
  • C. 20
  • D. 100

第 8 题 下列C++语句执⾏以后结果是true的是( )。

  • A. 3&&false
  • B. 5&&2
  • C. 101&&000
  • D. 4&true

第 9 题 在如下的C++代码中实现了对字符串中出现的26个字母的个数统计,横线处应填⼊是( )。

string str = "HELLO CHEN A DAI";
int strlen = str.lenth();
char alpha[26] = {65};
int cnt[26] = {0};
for(int i = 1; i < 26; i++)
{
	_________;
}
for(int i = 0; i < 26; i++)
{
	cout << alpha[i] << " ";
}
cout << endl;
for(int i = 0; i < 26; i++)
{
	for(int j = 0; j < strlen; j++)
	{
		if(alpha[i] == str[j])
		{
			cnt[i]++;
		}
	}
}
for(int i = 0; i < 26; i++)
{
	cout << cnt[i] << " ";
}
  • A. alpha[i]=alpha[i-1]+1;
  • B. alpha[i]=alpha[i]+1;
  • C. alpha[i+1]=alpha[i]+1;
  • D. alpha[i-1]=alpha[i]+1;

第 10 题 下⾯C++代码执⾏后⽣成的⽂件其字节数为( )。

ofstream fout;
fout.open("1.txt");
for(int i = 1; i <= 10; i++)
{
	if(i % 5 == 0)
	{
		int x = 6;
		fout << x;
	}
	else
	{
		char ch = 'A';
		fout << ch;
	}
}
  • A. 10
  • B. 16
  • C. 40
  • D. 24

第 11 题 下列C++代码输⼊1,2,3,4 ,执⾏后,将输出的是( )。

string str = "";
cin >> str;
int strlen = str.length();
for(int i = 0; i < strlen; i++)
{
	if(str[i] <= '9' && str[i] >= '0')
	{
		cout << str[i];
	}
	else
	{
		cout << "#";
	}
}
  • A. 1#4#
  • B. 1#3#
  • C. 1#2#3#4#
  • D. 1#2#3#4

第 12 题 以下C++代码⽤于实现每个整数对应的因数,如输⼊12,则输出1 2 3 4 6 12;如输⼊18,则输出1 2 3 6 9 18。横线处应填⼊代码是( )。

int n;
cin >> n;
for(int i = 1; i <= n; i++)
{
	___________
	{
		cout << i << " ";
	}
}
  • A. if(n%i==0)
  • B. if(n/i==0)
  • C. if(n%i!=0)
  • D. if(n/i!=0)

第 13 题 某公司新出了⼀款⽆⼈驾驶的⼩汽车,通过声控智能驾驶系统,乘客只要告诉汽车⽬的地,车⼦就能⾃动选择⼀条优化路线,告诉乘客后驶达那⾥。请问下⾯哪项不是驾驶系统完成选路所必须的。( )

  • A. 麦克风
  • B. 扬声器
  • C. 油量表
  • D. 传感器

第 14 题 现代计算机是指电⼦计算机,它所基于的是( )体系结构。

  • A. 艾伦·图灵
  • B. 冯·诺依曼
  • C. 阿塔纳索夫
  • D. 埃克特-莫克利

第 15 题 输入一个正整数N(N>=7),想找出它所有相邻的因数对,比如,输入12,因数对有(1,2)、(2,3)、(3,4)。下面哪段代码找不到所有的因数对?( )

  • A. for(i=1;i<N;i++) if(!(N%i) && !(N%(i+1))) printf(“(%d,%d)\n”, i, i+1);
  • B. for(i=2;i<N;i++) if(!(N%i) && !(N%(i+1))) printf(“(%d,%d)\n”, i, i+1);
  • C. for(i=2;i<N/2;i++) if(!(N%(i-1)) && !(N%i)) printf(“(%d,%d)\n”, i-1, i);
  • D. for(i=1;i<N/2;i++) if(!(N%i) && !(N%(i+1))) printf(“(%d,%d)\n”, i, i+1);

二、判断题(每题2分,共20分)

第 1 题 C++的内置函数sort()⽀持数组的局部排序。例如int a={10,9,8,7,6,5,4,3,2,1},可以⽤sort(a,a+5),排序成{6,7,8,9,10,5,4,3,2,1}。( )

第 2 题 ⽤递归法求n的阶乘,时间复杂度是O(n)。( )

第 3 题 [(1,2)*2]*3在C++中是合法的表达式。( )

第 4 题 在下⾯的C++代码中,将对1.txt⽂件写⼊hello。( )

ifstream filein;
ofstream fileout;
filein.open("1.txt");
fileout << "hello";

第 5 题 ⽂本⽂件1.txt第1⾏由01234共5个字符组成其间没有空格,当⽤C++代码正常打开⽂件成功并执⾏如下
代码以后,第1⾏长度为5( )

ifstream filein;
int buff;
filein.open("1.txt");
filein >> buff;
cout << buf << endl;

第 6 题 执⾏C++代码cout<<(5||2); 后将输出1。( )

第 7 题 在C++中,两个字符串相加的运算符为+相当于字符串的合并运算。下⾯C++代码执⾏后,将输出chenadai 。( )

string a = "chen";
string b = "a";
string c = "dai";
string name = a + b + c;
cout << name << endl;

第 8 题 C++内置函数sort() 可以对整数、浮点数、字符数组进⾏从⼤到⼩,从⼩到⼤,局部排序。( )

第 9 题 ⼩杨最近在准备考GESP,他⽤的Dev C++来练习和运⾏程序,所以Dev C++也是⼀个⼩型操作系统。( )

第 10 题 任何⼀个while循环都可以转化为等价的for循环( )。

三、编程题(每题25分,共50分)

3.1 编程题 1

试题名称:小杨的字典
3.1.1 问题描述

在遥远的星球,有两个国家 A 国和 B 国,他们使用着不同的语言:A 语言和 B 语言。小杨是 B 国的翻译官,他的工作是将 A 语言的文章翻译成 B 语言的文章。

为了顺利完成工作,小杨制作了一本字典,里面记录了 ( N ) 个 A 语言单词对应的 B 语言单词,巧合的是,这些单词都由地球上的 26 个小写英文字母组成。

小杨希望你写一个程序,帮助他根据这本字典翻译一段 A 语言文章。这段文章由标点符号 !()-[]{}|;:'",./?<> 和一些 A 语言单词构成,每个单词之间必定由至少一个标点符号分割,你的程序需要把这段话中的所有 A 语言单词替换成它的 B 语言翻译。特别地,如果遇到不在字典中的单词,请使用大写 UNK 来替换它。

例如,小杨的字典中包含 2 个 A 语言单词 abc 和 d,它们的 B 语言翻译分别为 a 和 def,那么我们可以把 A 语言文章 abc.d.d.abc.abcd. 翻译成 B 语言文章 a.def.def.a.UNK. ,其中,单词 abcd 不在字典内,因此我们需要用 UNK 来替换它。

3.1.2 输入描述

第一行一个整数 ( N ),表示词典中的条目数。保证 ( N ≤ 100 )。

接下来 ( N ) 行,每行两个用单个空格隔开的字符串 ( A) 和 ( B),分别表示字典中的一个 A 语言单词以及它对应的 B 语言翻译。保证所有 ( A) 不重复;保证 ( A) 和 ( B) 的长度不超过 10。

最后一行一个字符串 ( S ),表示需要翻译的 A 语言文章。保证字符串 ( S ) 的长度不超过 1000,保证字符串 ( S ) 只包含小写字母以及标点符号 !()-[]{}|;:'",./?<> 。

3.1.3 输出描述

输出一行,表示翻译后的结果。

3.1.4 特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

3.1.5 样例输入 1
2
abc a
d def
abc.d.d.abc.abcd.
3.1.6 样例输出 1
a.def.def.a.UNK.
3.1.7 样例输入 2
3
 abc a
 d def
 abcd xxxx
 abc,(d)d!-abc?abcd
3.1.8 样例输出 2
a,(def)def!-a?xxxx
3.1.9 样例输入 3
 1
 abcdefghij klmnopqrst
 !()-[]{}\|;:'",./?<>abcdefghijklmnopqrstuvwxyz
3.1.10 样例输出 3
!()-[]{}\|;:'",./?<>UNK

3.2 编程题 2

试题名称:田忌赛马
3.2.1 问题描述

你要和田忌赛马。你们各自有 N 匹马,并且要进行N轮比赛,每轮比赛,你们都要各派出一匹马决出胜负。你的马匹的速度分别为u1,u2,…,uN,田忌的马匹的速度分别为v1,v2,…,vN。田忌会按顺序派出他的马匹,请问你要如何排兵布阵,才能赢得最多轮次的比赛?巧合的是,你和田忌的所有马匹的速度两两不同,因此不可能出现平局。

3.2.2 输入描述

第一行一个整数N。保证1 ≤ N ≤ 5 * (10^4)。

接下来一行N个用空格隔开的整数,依次为 u1,u2,…,uN,表示你的马匹们的速度。保证1 ≤ ui ≤2N。

接下来一行 N个用空格隔开的整数,依次为v1,v2,…,vN,表示田忌的马匹们的速度。保证1 ≤ vi ≤2N。

3.2.3 输出描述

输出一行,表示你最多能获胜几轮。

3.2.4 特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。

3.2.5 样例输入 1
3
1 3 5
2 4 6
3.2.6 样例输出 1
2
3.2.7 样例解释 1

第 1 轮,田忌派出速度为 2 的马匹,你可以派出速度为 3 的马匹迎战,本轮你获胜。
第 2 轮,田忌派出速度为 4 的马匹,你可以派出速度为 5 的马匹迎战,本轮你获胜。
第 3 轮,田忌派出速度为 6 的马匹,你没有更快的马匹,本轮田忌获胜。
如此,你可以赢得 2 轮比赛。

3.2.8 样例输入 2
5
10 3 5 8 7
4 6 1 2 9
3.2.9 样例输出 2
5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天秀信奥编程培训

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值