1.
单选题(每题
2
分,共
30
分)
第
1
题
下面
C++
数组的定义中,会丢失数据的是
( )
。
A.
char dict_key[] = {'p','t','o'};
B.
int dict_value[] = {33,22,11};
C.
char dict_name[]={'chen','wang','zhou'};
D.
float dict_value[]={3,2,1};
答案[C ]
第
2
题
在下列编码中,不能够和二进制
"1101 1101"
相等的是
( )
。
A.
(
221
)
10
进制
B.
(
335
)
8
进制
C.
(
dd
)
16
进制
D.
(
5d
)
16
进制
答案[D ]
第
3
题
下面
C++
代码执行后不能输出
"GESP"
的是( )
。
A.
string str("GESP"); cout<<str<<endl;
B.
string str="GESP"; cout<<str<<endl;
C.
string str("GESP"); cout<<str[1]<<str[2]<<str[3]<<str[4]<<endl;
D.
string str{"GESP"}; cout<<str<<endl;
答案[C ]
第
4
题
执行下面
C++
代码输出是( )。

A. 10
B.
8
C.
4
D.
3
答案[ C]
第
5
题
执行下面
C++代码后,输出是( )。

A.
4
B.
2
C.
5
D. 3
答案[C ]
第
6
题
执行下面
C++
代码后输出的是( )。

A.
4
B.
3
C.
2
D. 5
答案[ A]
第
7
题
执行下面
C++
代码后输出的是( )。

A.
输出未知的数
B.
输出
'n'
C.
输出
'\0'
D.
输出空格
答案[ A]
第
8
题
下面
C++
代码执行后的输出是( )。

A.
0
B.
1
C. 输出空格
D.
什么也不输出
答案[D ]
第
9
题
下面
C++
代码用于统计每种字符出现的次数,当输出为
3
时,横线上不能填入的代码是( )。

A.
str[i]=='o'
B.
str[i]=='a'+14
C.
str[i]==115
D.
str[i]==111
答案[C ]
第
10
题 32位计算机中,
C++
的整型变量
int
能够表示的数据范围是( )。
A.
2^31~(2^31)-1
B.
2^32
C.
-2^31~+(2^31)-1
D.
-(2^31)+1~2^31
答案[ C]
第
11
题
下面
C++
程序执行的结果是( )。

A.
2
B.
3
C.
5
D.
4
答案[A ]
第
12
题
C++
的数据类型转换让人很难琢磨透,下列代码输出的值是( )。

A.
1.5
B.
1
C. 2
D.
1.50
答案[B ]
第
13
题
C++代码用于抽取字符串中的电话号码。约定:电话号码全部是数字,数字之间没有其他符号如连字符或 空格等。代码中变量
strSrc
仅仅是示例,可以包含更多字符。下面有关代码说法,正确的说法是( )。

A.
代码将换行输出各个含有数字的电话号码。
B.
代码将不换行输出各个含有数字的电话号码,号码中间没有分隔。
C.
代码将不换行输出各个含有数字的电话号码,号码中间有分隔。
D. 不能够输出数字电话号码。
答案[ A]
第
14
题
某公司新出了一款无人驾驶的小汽车,通过声控智能驾驶系统,乘客只要告诉汽车目的地,车子就能自动
选择一条优化路线,告诉乘客后驶达那里。请问下面哪项不是驾驶系统完成选路所必须的。( )
A.
麦克风
B.
扬声器
C.
油量表
D.
传感器
答案[ C]
第
15
题
现代计算机是指电子计算机,它所基于的是( )体系结构。
A.
艾伦
·
图灵
B.
冯
·
诺依曼
C.
阿塔纳索夫
D.
埃克特
-
莫克利
答案[ B]
2
判断题(每题
2
分,共
20
分)
第
1
题
执行
C++
代码
cout<<(5&&2)<<endl;
后将输出
1
。
( )
答案[T ]
第
2
题
C++
程序执行后,输入
chen a dai
输出应该为:
chen
。( )

答案[ T]
第
3
题
执行
C++
代码
cout<<(5||2);
后将输出
1
。( )
答案[ T]
第
4
题
执行下面
C++
代码后将输出
"China"
。( )

答案[T ]
第
5
题
执行
C++
代码将输出
0 5
,
5
之后还有一个空格。( )

答案[ F]
第
6
题
下面
C++
代码将输出
1
( )

答案[ F]
第
7
题
下面
C++
程序将输出
1
。( )

答案[ T]
第
8
题
执行
C++
代码,将输出
1 3 5 7 9
,
9
之后还有一个空格。( )

答案[ T]
第
9
题
小杨最近在准备考
GESP
,他用的
Dev C++
来练习和运行程序,所以
Dev C++
也是一个小型操作系统。( )
答案[ F]
第
10
题
任何一个
while
循环都可以转化为等价的
for
循环( )。
答案[T ]
3
编程题(每题
25
分,共
50
分)
编程题
1
试题名称
:小猫分鱼
时间限制
:
1.0 s
内存限制
:
128.0 MB
问题描述
海滩上有一堆鱼,N 只小猫来分。第一只小猫把这堆鱼平均分为N 份,多了 i<N个,这只小猫把多的 i个扔入海 中,拿走了一份。第二只小猫接着把剩下的鱼平均分成N 份,又多了 i个,小猫同样把多的i 个扔入海中,拿走了一 份。第三、第四、
……
,第 N只小猫仍是最终剩下的鱼分成N 份,扔掉多了的 i个,并拿走一份。
编写程序,输入小猫的数量N 以及每次扔到海里的鱼的数量i ,输出海滩上最少的鱼数,使得每只小猫都可吃到鱼。
例如:两只小猫来分鱼 N=2,每次扔掉鱼的数量为i=1 ,为了每只小猫都可吃到鱼,可令第二只小猫需要拿走
1条 鱼,则此时待分配的有
3条鱼。第一只小猫待分配的鱼有 3*2+1=7条。
输入描述
总共
2
行。第一行一个整数N ,第二行一个整数i 。
保证0<N<10 ;i<N。
输出描述
一行一个整数,表示满足要求的海滩上最少的鱼数。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任 何提示信息。
样例输入
1
2 1
样例输出
1
7
样例输入
2
3 1
样例输出
2
25
样例解释
2
三只小猫来分鱼N=3,每次扔掉鱼的数量为i=1,为了每只小猫都可吃到鱼,可令第三只小猫需要拿走
3条鱼(拿 走
1
条和
2
条不满足要求),则此时待分配的有
10
条鱼。第二只小猫待分配的鱼有
10*3/2+1=16条。第一只小猫 待分配的鱼有 16*3/2+1=25条。
参考程序:
递推
思路:
枚举最后一只猫拿走的鱼i,i>=1,从小到大枚举,最后一只猫拿走鱼之前待分配鱼的数量为ans=i*3+a,扔掉的鱼的数量为a,倒数第二只猫待分配的鱼的数量设为y,则(y-a)*(n-1)/n=ans,则y=ans/(n-1)*n+a;
状态:f(j)表示第j只猫拿走鱼之前待分配的鱼的数量
初始值:f(n)= i*n+a;
递推关系式:f[j-1]=f[j]/(n-1)*n+a;
注意:由第j只猫待分配鱼的数量f[j]是第j-1只猫待分配的鱼的数量f[j-1]扔掉a个后的(n-1)份,所以
第j只猫的待分配数量f[j]必须是(n-1)的整数倍才是合理的。
#include<iostream>
using namespace std;
int f[20]; //f[i]第i只猫拿走鱼之前的待分配鱼数
int main(){
int n,a;
cin>>n>>a;
//枚举最后一只猫拿走的鱼数
for(int i=1;;i++){
int flag=1;//n只小猫都成功分到了鱼
f[n]=i*n+a; //第n只猫待分配的鱼数
//从倒数第2只到第一只
for(int j=n;j>=2;j--){
if(f[j]%(n-1)==0){//如果符合条件
f[j-1]=f[j]/(n-1)*n+a;
}else{
flag=0;
break;
}
}
if(flag==1){
cout<<f[1];
return 0;
}
}
return 0;
}
编程题
2
试题名称
:单位转换
时间限制
:
1.0 s
内存限制
:
128.0 MB
问题描述
小杨这周的数学作业是做单位转换,喜欢编程的小杨决定编程帮他解决这些问题。
小杨只学了长度单位和重量单位,具体来说:
长度单位包括千米(
km
)、米(
m
)、毫米(
mm ),它们之间的关系是:1km=1000m=1000000mm。
重量单位包括千克(
kg
)、克(
g
)、毫克(
mg
),它们之间的关系是:
1kg=1000g=1000000mg。
小杨的作业只涉及将更大的单位转换为更小的单位,也就是说,小杨的作业只会包含如下题型:米转换为毫米,千 米转换为毫米,千米转换为米,克转换为毫克,千克转换为毫克,千克转换为。
现在,请你帮忙完成单位转换的程序。
输入描述
输入的第一行为一个整数 ,表示题目数量。
接下来 行,每行一个字符串,表示转换单位的题目,格式为
x
单位
1 = ?
单位
2
。其中,
x 为一个不超过1000的非负整数,
单位
1
和
单位
2
分别为两个单位的英文缩写,保证它们都是长度单位或都是重量单位,且 单 位
1
比
单位
2
更大。
例如,如果题目需要你将1km转换为mm,则输入为
1 km = ? mm
。
保证1<=N<=1000。
输出描述
输出 行,依次输出所有题目的答案,输出时,只需要将输入中的
?
代入答案,其余部分一字不差地输出即可。
由于小杨的题目只涉及将更大的单位转换为更小的单位,并且输入的
x
是整数,因此答案一定也是整数。
例如,如果题目需要你将1km转换为mm,,输入为 1 km = ? mm
,则你需要输出
1 km = 1000000 mm
。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任 何提示信息。
输入格式将严格按照题目要求,且你的输出必须和标准答案完全一致才能得分,请在提交前仔细检
查。
样例输入
1
2
1 km = ? mm
1 m = > mm
样例输出
1
1 km = 1000000 mm
1 m = 1000m
样例输入
2
5
100 m = ? mm
1000 km = ? m
20 kg = ? g
200 g = ? mg
0 kg = ? mg
样例输出
2
100 m = 100000 mm
1000 km = 1000000 m
20 kg = 20000 g
200 g = 200000 mg
0 kg = 0 mg
参考程序:
循环+判断
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
long long k, ans;
string a, b;
char c;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> k >> a >> c >> c >> b;
if (a == "g") {
if (b == "kg") {
ans = k / 1000;
} else if(b == "mg") {
ans = k * 1000;
} else {
ans = k;
}
} else if(a == "kg") {
if (b == "g") {
ans = k * 1000;
} else if(b == "mg") {
ans = k * 1000000;
} else {
ans = k;
}
} else if(a == "mg") {
if (b == "g") {
ans = k / 1000;
} else if(b == "kg") {
ans = k / 1000000;
} else {
ans = k;
}
} else if (a == "m") {
if (b == "km") {
ans = k / 1000;
} else if(b == "mm") {
ans = k * 1000;
} else {
ans = k;
}
} else if(a == "km") {
if (b == "m") {
ans = k * 1000;
} else if(b == "mm") {
ans = k * 1000000;
} else {
ans = k;
}
} else if(a == "mm") {
if (b == "m") {
ans = k / 1000;
} else if(b == "km") {
ans = k / 1000000;
} else {
ans = k;
}
}
cout << k << " " << a << " = " << ans << " " << b << endl;
}
return 0;
}