C++信奥赛专题

C++信息学奥赛CSP-J考试试卷4

一、选择题(每题2分,共20分)

  1. 下列哪个选项是C++中声明一个整型变量的正确方式?
    A. int = a;
    B. a = int;
    C. int a; (正确答案)
    D. a int;

  2. 下列哪个选项是C++中输出“Hello, World!”的正确语句?
    A. cout << "Hello, World!"; (正确答案)
    B. printf("Hello, World!");
    C. System.out.println("Hello, World!");
    D. echo "Hello, World!";

  3. 在C++中,如果a = 5b = 10,那么表达式a++ + b的值是?
    A. 5
    B. 10
    C. 15 (正确答案)
    D. 16

  4. 下列哪个是C++中有效的单行注释方式?
    A. // 这是一个注释 (正确答案)
    B. # 这是一个注释
    C. /* 这是一个注释 /
    D. //
     这是一个注释

  5. 下列哪个选项不能用来表示整数?
    A. int (正确答案的排除项)
    B. float
    C. long
    D. short

  6. 下列哪个是C++中的布尔类型?
    A. bool (正确答案)
    B. logical
    C. boolean
    D. truth

  7. 在C++中,下列哪个运算符用于比较两个数是否相等?
    A. == (正确答案)
    B. =
    C. &
    D. |

  8. 下列哪个是C++中的字符串类型?
    A. char
    B. char[]
    C. string (正确答案,虽然string是标准库中的类,但通常作为字符串类型处理)
    D. text

  9. 在C++中,哪个关键字用于声明一个返回整型的函数?
    A. void
    B. int (正确答案)
    C. float
    D. string

  10. 下列哪个不是C++中的控制结构?
    A. if (正确答案的排除项,因为if是控制结构)
    B. for
    C. while
    D. goto (虽然不常用,但仍是控制结构)
    E. function (正确答案,因为function不是控制结构,而是一个可能的函数名或标准库中的类)

二、填空题(每题2分,共10分)

  1. C++中,使用const关键字来声明一个常量。

  2. 在C++中,使用break语句可以结束当前循环。

  3. C++中,使用#include <iostream>预处理指令可以包含标准输入输出流库。

  4. C++中,使用cin对象可以从标准输入中读取数据。例如:cin >> variable;

  5. C++中的字符串可以通过std::string类来表示。例如:std::string str = "Hello, World!";

注意:在第5题中,我添加了std::前缀来明确指出string类位于std命名空间内。在实际编程中,如果使用了using namespace std;指令,则可以省略这个前缀。但是,为了清晰性和避免潜在的命名冲突,建议明确指出命名空间。

三、编程题(每题10分,共40分)

  1. 编写一个程序,从用户那里接收两个整数,并输出它们的和。
#include <iostream>  
using namespace std;  
  
int main() {  
    int a, b, sum;  
    cout << "请输入两个整数:";  
    cin >> a >> b;  
    sum = a + b;  
    cout << "它们的和是:" << sum << endl;  
    return 0;  
}
  1. 编写一个程序,打印出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;  
}
  1. 编写一个程序,接收一个字符串作为输入,并检查该字符串是否是一个回文字符串(正读和反读都一样的字符串)。如果是,则输出“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;  
}
  1. 编写一个程序,实现一个简单的冒泡排序算法,对给定的整数数组进行排序,并输出排序后的结果。
#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. 编写一个程序,计算并输出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同前面示例,继续添加更多应用题)

  1. 编写一个程序,模拟一个简单的ATM取款机。程序应支持以下功能:
    • 用户登录(用户名和密码验证)
    • 查询账户余额
    • 取款(输入取款金额,更新账户余额)
    • 退出程序

提示:你可以使用结构体来表示用户账户信息,并使用数组或文件来存储用户数据。

  1. 编写一个程序,实现一个简单的计算器。程序应支持以下基本运算:
    • 加法(+)
    • 减法(-)
    • 乘法(*)
    • 除法(/)

程序应能够接收用户输入的两个操作数和一个运算符,执行相应的运算并输出结果。注意处理除数为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;  
}

 

0.056429s