6.3测试题以及参考答案(C++基础)

发布时间 2023-06-03 14:20:23作者: HelloHeBin

测 试 题

总分120,时间180分钟

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

  1. C++中表示大于等于用以下哪个关系运算符( B )
    A.> B.>= C.≥ D.>&=
  2. C++中,不等于用以下哪个关系运算符( C )
    A.<> B.≠ C.!= D.==
  3. 表达式7%2的值是多少( B )
    A.0 B.1 C.2 D.-1
  4. 要计算变量B的算术平方根,可以用以下哪个语句( A )
    A.sqrt(B) B.abs(B) C.B*B D.pow(B)
  5. 变量A是一个int类型的变量,它一般占用空间大小是( C )字节。
    A.1 B.6 C.4 D.8
  6. C++中,语句a++;和下面哪个语句效果一致( A )
    A.a=a+1; B.a=1; C.a==1; D.a--;
  7. 有下面两个语句,运行后屏幕输出的结果为( D )
    int a=3;
    cout<<++a;
    
    A.3 B.1 C.a=3 D.4
  8. 下面语句的输出结果为( A )
    int y=21;
    if(y%7==0&&y%2==1) cout<<”ok”;
    else cout<<”no”;
    
    A.ok B.no C.ok no D.无输出
  9. C++程序中,主函数的名字为( A )
    A.main B.mat C.abs D.任意标识符
  10. 要输出一个换行,可以用下面哪个语句( A )
    A.cout<<endl; B.cout<<””; C.cout<<a; D.cout>>endl;
  11. 关于变量的命名,哪个是正确的( D )
    A.3x B.int C.return D.abcd
  12. C++中检测两个变量a,B 是否相等,哪个关系运算式是正确的( C )
    A.a=b B.a==b C.a==B D.a=B
  13. 表达式1.0/2的值是多少( B )
    A.0 B.0.5 C.nan D.2
  14. 我们可以用下面哪个语句将字符’a’强制转化成数值( B )
    A.char(‘a’) B.int(‘a’) C.return ‘a’ D.a++
  15. 想在计算机屏幕上输出一个”hello world”,可以用下面哪个语句( C )
    A.cin<<”hello world”
    B.cin>>”hello world”
    C.cout<<”hello world”
    D.cout>>”hello world”
    
  16. 想给变量x赋值为3,我们可以用下面哪个语句( B )
    A.x>3 B.x=3 C.x=x+1 D.3=x
  17. for 循环语句中continue 表示的意思是( A )
    A.跳到循环变量的下一个值 B.没有任何意义
    C.中断循环 D.退出程序
  18. 运行下面几行语句后,变量a,b的值是多少( C )
    int a,b,t;
    a=3;b=4;
    t=a;a=b;b=t;
    
    A.a=3 b=4 B.a=3 b=3 C.a=4 b=3 D.a=4 b=4
  19. 用下面的语句定义数组,以下描述正确的是( D )
    int d[10];
    A.数组d的元素共10个,分别是d[1]到d[10]
    B.d是一个字符形数组。
    C.数组的大小是11
    D.数组的大小是10
  20. 已知’B’的ASCII值是66,请问’A’的ASCII值是多少( B )
    A.67 B.65 C.66 D.68

二、程序设计(每题20分,共80分)

洛谷在线提交测试,数据是我自己造的,非官方,成绩供参考

  1. 矩形的面积(area,1s,512M)
    小明得到一个红色的矩形,它的长为 \(a\),宽为 \(b\),请你帮小明计算一下矩形的面积。面积公式 \(S=a*b\)
    输入两个以空格分割的正整数 \(a,b\);输出一个正整数 \(S\)
    数据保证答案不超过 \(2^{31}-1\)
    输入:3 2
    输出:6
#include <iostream>
using namespace std;、
int main() {
    int a, b; cin >> a >> b;
    cout << a * b;
    return 0;
}
  1. 结队子(team,1s,512M)
    小明和小张来自两个不同的小学,一天他们结队子做游戏,规则很简单,他们每人独自写一个 \(10\) 以内的正整数,如果他们写出的数相同,则结队子成功(输出”yes”),否则失败(输出”no”)。
    输入两个数,分别表示小明和小张写出的两个正整数。
    输出一个字符串,表示是否成功。
#include <iostream>
using namespace std;
int main() {
    int a, b; cin >> a >> b;
    if (a == b) cout << "yes";
    else cout << "no";
    return 0;
}
  1. 求和(sum,1s,512M)
    小明今天接到一个任务,就是计算求 \(1,2,3,...,n\) 的奇数和。由于小明比较懒,他请你帮他算一下。
    输入一个正整数 \(n\),输出一个正整数,表示奇数之和。
    数据规模:
    80%的数据,\(n\) 小于\(10000\);
    90%的数据,\(n\) 小于\(1000000\);
    100%的数据,\(n\) 小于等于 \(2^32\)

问题:求 \(1,2,3,...,n\) 的奇数和,其中 \(n≤2^{32}\)
等差数列:当首项为 \(a_1\),末项为 \(a_n\),项数为 \(n\),其前 \(n\) 项和 \(s=\frac{(a_1+a_n)* n}{2}\)

分析:循环肯定TLE,明显存在规律,有\(n\) 为奇数和偶数时有不同情况,分情况讨论;

  1. \(n\) 是奇数的时候,\(s=1+3+5+...+n;\)
    假设有 \(k\) 项元素,则 \(1+(k-1)*2=n\),解出 \(k=\frac{n-1}{2}+1=\frac{n+1}{2}\)
    \(s=\frac{(1+n)*k}{2}=\frac{(n+1)^2}{4}\)

  2. \(n\) 是偶数的时候,\(s=1+3+5+...+n-1;\)
    假设有 \(k\) 项元素,则 \(1+(k-1)*2=n-1\),解出 \(k=\frac{n-1-1}{2}+1=\frac{n}{2}\)
    \(s=\frac{(1+n-1)*k}{2}=\frac{(n)^2}{4}\)
    在程序中,为了 n*n 不爆long long, 我们会进行如下的一些优化写法。

#include <iostream>
using namespace std;

int main() {
    long long n, s; cin >> n;
    if (n % 2) s = ((n + 1) / 2) * ((n + 1) / 2);
    else s = (n / 2) * (n / 2);
    cout << s;
    return 0;
}
  1. 七仙女(seven,1s,512M)
    七仙女总喜欢与 \(7\) 相关的数字,如果一个数是 \(7\) 的倍数,七仙女喜欢,如果一个数至少有一位含有数值 \(7\)(例如 \(71\) 虽然不是7的倍数,但它的十位数是 \(7\)),则七仙女也喜欢。所以 \(7、14,71,117\),都是七仙女喜欢的数,而 \(6,9\) 则不喜欢,输入 \(n\) 个正整数统计七仙女喜欢的数的个数。
    输入第一行一个正整数 \(n\),表示共有多少个数。接下来一行,\(n\) 个正整数。
    输出一行一个数,表示七仙女喜欢的数的个数。
    数据范围:\(n<1000\),每个整数小于$ 232$。
    输入:
7
1 9 21 77 2 107 99

输出:3
输入:

3
1111117 91 20

输出:2

#include <iostream>
using namespace std;

int main() {
    int n, cnt = 0;
    long long a; // unsigned int 也可以
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a;
        if (a % 7 == 0) cnt++, a = 0;
        while (a) {
            if (a % 10 == 7) break;
            a /= 10;
        }
        if (a) cnt++;
    }
    cout << cnt;
    return 0;
}