GESP2024年3月C++语言三级答案(均为自己的想法,C++没学太多,有不对的地方欢迎指正)

选择题(每题2分,共30分)

第 1 题 整数-5的16位补码表示是(D)。

A. 1005 B. 1006 C. FFFA D. FFFB

解析:0是FFFF,用0-5(即FFFF-5)得到是FFFB。

第 2 题 如果16位短整数-2的二进制是“FFFE”,则短整数-4的值是(C)。

A. FF04 B. FFFA C. FFFC D. FFFH

解析:FFFF-FFFE=1(2-1),那么FFFF-(4-1)=FFFC

第 3 题 下面C++代码执行后的输出是(C)。

 int main()
 {
     cout << (3|16) << endl;
     cout << endl;
     return 0;
 }

A. 3   B. 16   C. 19   D. 48

解析:3的二进制是11;

     16的二进制是1000;

或以下就是         1011。

(1011)_{2}=(19)_{10},所以选C。

第 4 题 定义整数 int x=-5 ,则执行C++代码 cout<< (x==(x<<1>>1); 输出是(B)。

A. 0     B. 1      C. -5      D. 5 

解析:-5=1101,左移后变为1010,右移后变为1101(算术移位),1101=1101,所以选B。

第 5 题 已知字符'0'的ASCII编码的十进制表示为48,则执行下面C++代码后,输出是(C)。

int main()
 {
    string s="316";
    int n=s.length();
    int x=0;
    for(int i = 0; i < n; i++)
        x += s[i];
    cout << x << endl;
    cout << endl;
    return 0;
 }

A. 10    B. 58    C. 154    D. 316

解析:三位,先用48×3=144,再用144+3+6+1=154,选C。

第 6 题 下⾯C++代码执行后数组中大于0的数的特征是(C)。

 int main()
 {
    int a[20],i;
    for(i = 0; i < 20; i++)
        a[i] = i+1;
    for(int i = 0; i < 20; i++)
        if((a[i]%2)&&(a[i]%3))
            a[i] = 0;
    for(i = 0; i < 20; i++)
        if(a[i])
            cout << a[i] << " ";
    cout << endl;
    return 0;
 }

A. 2的倍数 B. 3的倍数 C. 能被2或3整除的数 D. 能被2和3同时整除的数

解析:运行后得知(我也不知道为什么,求科普)

第 7 题 执行下面C++代码后输出的第一个数是(A)。

int main()
{
    int a[20],i;
    for(i = 0; i < 20; i++)
        a[i] = i+1;
    for( ; i > 0; i--)
        cout << a[i-1] << " ";
    cout << endl;
    return 0;
}

A. 20       B. 19       C. 1      D. 不确定

解析:第一个for后数组内容:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20;

输出(倒着):20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1。

第 8 题 在下列代码的横线处填写(C),可以使得输出是GESP IS INTERESTING。

int main()
{
    string str="gEsP is Interesting";
    int x = str.length();
    for(int i = 0; i < x; i++)
        if ((str[i]>='a') && (str[i]<='z'))
            ________________________;
    cout << str << endl;
    cout << endl;
    return 0;
}

A. str[i]+='a'-'A' B. str[i]+=20 C. str[i]+='A'-'a' D. 无法实现

解析:小写变大写——ch=ch-'a'+'A'或ch+='A'-'a';

第 9 题 假设英文句子由若干词构成。下面C++代码统计输出的词数是(C)。

 int main()
 {
     string str="gEsP is  Interesting  !";
     int x = str.length();
     int nwords = 0;
     for(int i = 0; i < x; i++)
        if (str[i]==' '){
            nwords++;
            while(str[++i]==' ') ;
        }
     cout << nwords << endl;
     cout << endl;
     return 0;
 }

​

A. 1       B. 2       C. 3       D. 4

解析:有3处空格,就相当于有3个词。

第 10 题 C++的字符变量的码值是整数,下面字面量形式的字符码值最大的是(C)。

A. 100 B. 075 C. 0x70 D. 0x60

解析:看大小,(075)_{10}<(100)_{10}<(160)_{16}<(170)_{16}

第 11 题 下面C++程序执行的结果是(D)。

 int main()
 {
     int a[20],i;
     int cnt=0;
     for(i = 0; i < 20; i++)
         a[i] = i+1;
     for( ; i > 1; i--)
         if((a[i-1]+a[i-2])%3)
             cnt++;
     cout << cnt << endl;
     cout << endl;
     return 0;
 }

A. 5      B. 6       C. 10      D. 12

解析:第一次for:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

           调转后:20 19 18 17 16 15 14 13 12 11 10     9     8     7     6     5      4     3     2     1

      a[i-1]+a[i-2]:39 37 35  33 31 29 27 25 23 21 19    17   15   13    11    9     7     5      3

               cnt:     0   1   2    2   3    4  4   5   6   6   7      8     8     9     10   10   11    12    12

第 12 题 定义字符数组 char str[20] = {'G', 'E', 'S', 'P'}; ,则 str 的字符串长度为(A)。

A. 4 B. 5 C. 19 D. 20

解析:有四个字符,其余都是'\0',选A。

第 13 题 定义整型变量 int a=3, b=16 ,则 a|b 的值和 a+b 的关系是(B)。

A. 大于 B. 等于 C.小于 D. 等于或小于

解析:(a)_{2}=00011

           (b)_{2}=10000

       (a|b)_{2}=10011(a|b)_{10}=1913+6=1919=19

第 14 题 小杨的父母最近刚刚给他买了⼀块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是(C)。

A. 小程序       B. 计时器       C. 操作系统      D. 神话人物

第 15 题 中国计算机学会(CCF)在2024年1月27日的颁奖典礼上颁布了王选奖,王选先生的重大贡献是(C)。

A. 制造自动驾驶汽车 B. 创立培训学校 C. 发明汉字激光照排系统 D. 成立方正公司

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

说明

绿色表示对,红色表示错。

------------------------------------------------------------------------------------------------------------

第 1 题 任意整数a的二进制反码与补码都有1位不同。正数的反码和补码与原码相同。

第 2 题 对整型变量 int a = 3,执行C++代码 a<<2 将把2输出到a中。是把a右移2位。

第 3 题 下⾯C++代码可以计算1到100的累加和,采用的是穷举法。不是穷举法!!!

 int main()
 {
     int i,sum=0;
     for(int i = 1; i <= 100 ; i++)
         sum += i;
     cout << sum  << endl;
     cout << endl;
     return 0;
 }

第 4 题 ⼀个 int 类型变量a,执行(a<<2>>2)操作后的值一定是a。你想的好简单!

第 5 题 在C++语言中,(010<<1)执行结果是 100 。是二进制的100!!!

第 6 题 执行下面C++代码后将输出2。

 int main()
 {
     string str="gEsP is Interesting";
     int x = str.find("s");
     cout << x << endl;
     cout << endl;
     return 0;
 }

第 7 题 在C++语言中,字符数组被定义时,它的大小可以调整。想得美!

第 8 题 对定义的数组 int a[7]={2,0,2,4,3,1,6} ,可以⽤简单循环就找到其中最小的整数。

第 9 题 小杨今年春节回奶奶家了,奶奶家的数字电视要设置ip地址并接入到WIFI盒子才能收看节目,那这个WIFI盒子具有路由器的功能。

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

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

字母求和

3.1.1  题面描述

小杨同学发明了⼀种新型密码,对于每⼀个小写英文字母,该小写字母代表了一个正整数,即该字母在字母顺序中的位置,例如字母 a 代表了正整数 1,字母 b 代表了正整数 2;对于每一个⼤大写英文字母,该大写字母代表了一个负整数,即该字母的 ASCII 码的相反数,例如字母 A 代表了正整数 -65。小杨同学利用这种方式对⼀个整数进行了加密 并得到了一个由大写字母和小写字母组成的字符串,该字符串中每个字母所代表数字的总和即为加密前的整数,例 如 aAc 对应的加密前的整数为 1+(-65)+3=-61。 对于给定的字符串,请你计算出它对应的加密前的整数是多少。

3.1.2输入格式

第一行一个正整数n ,表示字符串中字母的个数。

第二行一个由大写字母和小写字母的字符串T ,代表加密后得到的字符串。

3.1.3输出格式

输出一行一个整数,表示加密前的整数。

3.1.4 样例数据

3

aAc

-----------------------

-61

-----------------------

提示:1\leqslant n \leqslant 10^5

3.1.5 参考答案

#include <bits/stdc++.h>
using namespace std;
long long len;
long long sum = 0;
string s;

int main() {
	cin >> len >> s;
	for (int i = 0; i < len; i++) {
		if (isupper(s[i])) {
			sum = sum - int(s[i]);
		} else {
			sum += (s[i] - 'a' + 1);
		}
	}
	cout << sum;
}

完全平方数

3.2.1 题目描述

小杨同学有一个包含n个非负整数的序列a,他想要知道其中有多少对下标组合< i,j> (1 \leqslant i,j \leqslant n ,i \leqslant j,','表示条件并列),使得a_{i}+a_{j}是完全平方数。 如果x是完全平方数,则存在非负整数y使得y\times y=x

3.2.2 输入格式

第一行一个非负整数n,表示非负整数个数。 第二行包含n个非负整数a_{i},表示序列a包含的非负整数。

3.2.3 输出格式

输出一个非负整数,表示和是完全平方数的非负整数对数。

3.2.4 样例

输入:

5

1 4 3 3 5

输出:

3

范围:1 \leqslant n \leqslant 1000, 0\leqslant a_{i} \leqslant 10^5

3.2.5 代码

#include <bits/stdc++.h>
using namespace std;
int n, a[100005];
int cnt;

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
	}
	for (int i = 1; i <= n; i++) {
		for (int j = i; j <= n; j++) {
			int re = a[i] + a[j];
			double x = sqrt(re);
			int b = x;
			if (b == x) {
				cnt++;
			}
		}
	}
	cout << cnt;
}

啊!!!终于整完了!!!

  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值