C++信息学奥赛CSP-J考试试卷4
一、选择题(每题2分,共20分)
-
下列哪个选项是C++中声明一个整型变量的正确方式?
A. int = a;
B. a = int;
C. int a; (正确答案)
D. a int; -
下列哪个选项是C++中输出“Hello, World!”的正确语句?
A. cout << "Hello, World!"; (正确答案)
B. printf("Hello, World!");
C. System.out.println("Hello, World!");
D. echo "Hello, World!"; -
在C++中,如果
a = 5
,b = 10
,那么表达式a++ + b
的值是?
A. 5
B. 10
C. 15 (正确答案)
D. 16 -
下列哪个是C++中有效的单行注释方式?
A. // 这是一个注释 (正确答案)
B. # 这是一个注释
C. /* 这是一个注释 /
D. // 这是一个注释 -
下列哪个选项不能用来表示整数?
A. int (正确答案的排除项)
B. float
C. long
D. short -
下列哪个是C++中的布尔类型?
A. bool (正确答案)
B. logical
C. boolean
D. truth -
在C++中,下列哪个运算符用于比较两个数是否相等?
A. == (正确答案)
B. =
C. &
D. | -
下列哪个是C++中的字符串类型?
A. char
B. char[]
C. string (正确答案,虽然string是标准库中的类,但通常作为字符串类型处理)
D. text -
在C++中,哪个关键字用于声明一个返回整型的函数?
A. void
B. int (正确答案)
C. float
D. string -
下列哪个不是C++中的控制结构?
A. if (正确答案的排除项,因为if是控制结构)
B. for
C. while
D. goto (虽然不常用,但仍是控制结构)
E. function (正确答案,因为function不是控制结构,而是一个可能的函数名或标准库中的类)
二、填空题(每题2分,共10分)
-
C++中,使用
const
关键字来声明一个常量。 -
在C++中,使用
break
语句可以结束当前循环。 -
C++中,使用
#include <iostream>
预处理指令可以包含标准输入输出流库。 -
C++中,使用
cin
对象可以从标准输入中读取数据。例如:cin >> variable;
-
C++中的字符串可以通过
std::string
类来表示。例如:std::string str = "Hello, World!";
注意:在第5题中,我添加了std::
前缀来明确指出string
类位于std
命名空间内。在实际编程中,如果使用了using namespace std;
指令,则可以省略这个前缀。但是,为了清晰性和避免潜在的命名冲突,建议明确指出命名空间。
三、编程题(每题10分,共40分)
- 编写一个程序,从用户那里接收两个整数,并输出它们的和。
#include <iostream>
using namespace std;
int main() {
int a, b, sum;
cout << "请输入两个整数:";
cin >> a >> b;
sum = a + b;
cout << "它们的和是:" << sum << endl;
return 0;
}
- 编写一个程序,打印出1到100之间所有能被3整除的数。
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 100; i++) {
if (i % 3 == 0) {
cout << i << " ";
}
}
cout << endl;
return 0;
}
- 编写一个程序,接收一个字符串作为输入,并检查该字符串是否是一个回文字符串(正读和反读都一样的字符串)。如果是,则输出“Yes”,否则输出“No”。
#include <iostream>
#include <string>
using namespace std;
bool isPalindrome(string str) {
int len = str.length();
for (int i = 0; i < len / 2; i++) {
if (str[i] != str[len - i - 1]) {
return false;
}
}
return true;
}
int main() {
string str;
cout << "请输入一个字符串:";
cin >> str;
if (isPalindrome(str)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
- 编写一个程序,实现一个简单的冒泡排序算法,对给定的整数数组进行排序,并输出排序后的结果。
#include <iostream>
using namespace std;
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr[j], arr[j + 1]);
}
}
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
cout << "排序后的数组:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
- 编写一个程序,计算并输出1到n之间所有奇数的和,其中n由用户输入。
#include <iostream>
using namespace std;
int main() {
int n, sum = 0;
cout << "请输入一个正整数n:";
cin >> n;
for (int i = 1; i <= n; i += 2) {
sum += i;
}
cout << "1到" << n << "之间所有奇数的和是:" << sum << endl;
return 0;
}
四、应用题(每题15分,共30分)
(题目1-2同前面示例,继续添加更多应用题)
- 编写一个程序,模拟一个简单的ATM取款机。程序应支持以下功能:
- 用户登录(用户名和密码验证)
- 查询账户余额
- 取款(输入取款金额,更新账户余额)
- 退出程序
提示:你可以使用结构体来表示用户账户信息,并使用数组或文件来存储用户数据。
- 编写一个程序,实现一个简单的计算器。程序应支持以下基本运算:
- 加法(+)
- 减法(-)
- 乘法(*)
- 除法(/)
程序应能够接收用户输入的两个操作数和一个运算符,执行相应的运算并输出结果。注意处理除数为0的情况。
应用题 1: 用户登录与余额查询
题目:
编写一个程序,该程序允许用户输入用户名和密码进行登录。如果用户登录成功,程序将显示该用户的余额。假设用户名和密码是预定义的(例如:username = "admin"
,password = "12345"
),并且每个用户都有一个初始余额(例如:balance = 1000
)。
答案:
#include <iostream>
#include <string>
// 假设的用户信息
const std::string username = "admin";
const std::string password = "12345";
const double balance = 1000.0;
bool login(const std::string& inputUsername, const std::string& inputPassword) {
return inputUsername == username && inputPassword == password;
}
int main() {
std::string inputUsername, inputPassword;
std::cout << "请输入用户名:";
std::cin >> inputUsername;
std::cout << "请输入密码:";
std::cin >> inputPassword;
if (login(inputUsername, inputPassword)) {
std::cout << "登录成功!您的余额是:" << balance << std::endl;
} else {
std::cout << "登录失败!请检查您的用户名和密码。" << std::endl;
}
return 0;
}
应用题 2: 简单计算器
题目:
编写一个简单的计算器程序,该程序能够接收两个操作数和一个运算符,并输出相应的结果。支持加(+)、减(-)、乘(*)和除(/)四种运算符。如果除数为零,则显示错误信息。
答案:
#include <iostream>
double calculate(double num1, double num2, char operatorChar) {
switch (operatorChar) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
if (num2 != 0) {
return num1 / num2;
} else {
std::cout << "错误:除数不能为零!" << std::endl;
exit(1); // 退出程序
}
default:
std::cout << "错误:无效的运算符!" << std::endl;
exit(1); // 退出程序
}
}
int main() {
double num1, num2;
char operatorChar;
std::cout << "请输入第一个操作数:";
std::cin >> num1;
std::cout << "请输入运算符(+、-、*、/):";
std::cin >> operatorChar;
std::cout << "请输入第二个操作数:";
std::cin >> num2;
double result = calculate(num1, num2, operatorChar);
if (std::isfinite(result)) { // 检查结果是否是有限数(排除除零错误导致的NaN或无穷大)
std::cout << "结果是:" << result << std::endl;
}
return 0;
}