信息学奥赛初赛天天练-42-CSP-J2020基础题-变量地址、编译器、逻辑运算、逻辑与运算、逻辑或运算、冒泡排序、递归应用

信息学奥赛初赛天天练-42-CSP-J2020基础题-变量地址、编译器、逻辑运算、逻辑与运算、逻辑或运算、冒泡排序、递归应用
PDF文档公众号回复关键字:20240702

2020 CSP-J 选择题

单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)

1.在内存储器中每个存储单元都被赋予一个唯一的序号,称为( )

A.地址

B.序号

C.下标

D.编号

2.编译器的主要功能是( )

A.将源程序翻译成机器指令代码

B.将源程序重新组合

C.将低级语言翻译成高级语言

D.将一种高级语言翻译成另一种高级语言

3.设 x=true, y=true, z=false,以下逻辑运算表达式值为真的是( )

A.(y∨z)∧x∧z

B. x∧(z∨y) ∧z

C. (x∧y) ∧z

D.(x∧y)∨(z∨x)

4.现有一张分辨率为 2048×1024 像素的 32 位真彩色图像。请问要存储这张图像,需要多大的存储空间?( )

A.16MB

B.4MB

C.8MB

D.2MB

5.冒泡排序算法的伪代码如下:

对 n 个数用以上冒泡排序算法进行排序,最少需要比较多少次?( )

A.n^2

B.n-2

C.n-1

D.n

6.设A是介个实数的数组,考虑下面的递归算法:

请问算法XYZ的输出是什么?( )

A.A数组的平均

B.A数组的最小值

C.A数组的中值

D.A数组的最大值

2 相关知识点

1) 内存地址

变量

变量代表内存中具有特定属性的一个存储单元。它是一个地址和一个值的统称

内存地址

C语言地址,是指内存地址的概念。计算机内存中的各个存储单元都是有序的,按字节编码

每个字节有一个唯一的编码

变量地址

获取变量地址,使用&

示例

#include <iostream>
using namespace std;
int main(){
	int a=5;
	cout<<&a<<endl;
	float b=4.15;
	cout<<&b;		
}
/*
输出结果 
0x70fe1c
0x70fe18
*/

2) 编译器

编译器(Compiler)是一种计算机程序,其主要功能是将高级程序语言(如C、C++、Java等)编写的源代码转换为底层可执行的机器代码

3) 逻辑运算

逻辑与运算规则

进行逻辑与运算的两位都是逻辑1,则结果是1;否则,结果是0。

0 与 0 = 0
0 与 1 = 0
1 与 0 = 0
1 与 1 = 1

符号

and

示例

逻辑或运算规则
进行逻辑或运算的两位都是逻辑0,则结果是0;否则,结果是1。

0 或 0 = 0
0 或 1 = 1
1 或 0 = 1
1 或 1 = 1

符号

or

示例

4) 图像存储

分辨率

分辨率是衡量显示系统对细节的分辨能力的指标,它决定了图像的清晰度和质量。分辨率越高,图像中的细节越丰富,存储的像素越多,但同时文件大小也会增加

每个像素需要一点存储空间,一般可以使用8位,16位,32位二进制表示

存储空间=像素个数*位数,单位为bit

计算机存储大多是Byte

1Byte=8bit

5) 递归

递归是一种解决问题的方法,它通过将问题分解为更小的子问题来解决。

一个递归函数会在其定义中直接或间接地调用自身

递归通常包括两个部分:基本情况(Base case)和递归步骤(Recursive step)。

基本情况是指当问题规模变得足够小时,可以直接得到解决方案的情况。

6) 冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端

n个元素的冒泡排序,需要n趟完成,

每趟进行逐一两两比较,进行n-1次比较,把最大(最小)元素比较出来,交换到最后

3 思路分析

1.在内存储器中每个存储单元都被赋予一个唯一的序号,称为( A )

A.地址

B.序号

C.下标

D.编号

分析

C语言地址,是指内存地址的概念。计算机内存中的各个存储单元都是有序的,按字节编码

每个字节有一个唯一的编码,对应一个内存地址

2.编译器的主要功能是( A )

A.将源程序翻译成机器指令代码

B.将源程序重新组合

C.将低级语言翻译成高级语言

D.将一种高级语言翻译成另一种高级语言

分析

编译器(Compiler)是一种计算机程序,其主要功能是将高级程序语言(如C、C++、Java等)编写的源代码转换为底层可执行的机器代码

3.设 x=true, y=true, z=false,以下逻辑运算表达式值为真的是( D )

A.(y∨z)∧x∧z

B. x∧(z∨y) ∧z

C. (x∧y) ∧z

D.(x∧y)∨(z∨x)

分析

//∨按位或 ,∧按位与
x=true,y=true,z=false
A:
(y∨z)=(true∨false)=true
(y∨z)∧x=true∧true=true
(y∨z)∧x∧z=true∧false=false
B:
(z∨y) =false∨true=true
x∧(z∨y)=true∧true=true
x∧(z∨y)∧z=true∧false=false
C:
(x∧y)=(true∧true)=true
(x∧y) ∧z = true∧false=false
D:
(x∧y)=(true∧true)=true
(z∨x)=(false∨true)=true
(x∧y)∨(z∨x)=true∨true = true
所以选D

4.现有一张分辨率为 2048×1024 像素的 32 位真彩色图像。请问要存储这张图像,需要多大的存储空间?( )

A.16MB

B.4MB

C.8MB

D.2MB

分析

分辨率2048*1024像素,每个像素32位,总共需要
2048*1024*32位存储,由于需要单位为字节,因此把位转换为字节
2048*1024*32/8
=2048*1024*4
=1024*1024*4*2
=8MB

5.冒泡排序算法的伪代码如下:

对 n 个数用以上冒泡排序算法进行排序,最少需要比较多少次?( )

A.n^2

B.n-2

C.n-1

D.n

分析

伪代码,一般需要看结构,看主要部分
有代码可以看出,冒泡排序的基本思路,进行n趟排序,每趟两两比较,找出最大的
在一趟中循环为1~k,每次循环通过FLAG-1对k进行赋值,然后FLAG赋值为1,如果前面一轮FLAG值不变则后面一轮循环从1~1不进行循环
考虑一种情况,如果顺序本身就是从小到大排好序的
第1轮排序为1~n-1次,顺序不需要交换,FLAG为1不被改变,则后续while FLAG > 1不满足,退出循环
所以只进行了n-1次循环,所以选C

6.设A是介个实数的数组,考虑下面的递归算法:

请问算法XYZ的输出是什么?( B )

A.A数组的平均

B.A数组的最小值

C.A数组的中值

D.A数组的最大值

分析

递归
取A[n]和A[1]...A[n-1]中最小的,其实从大看这个问题不容易看出
从小范围往大范围看
XYZ(A[1,2]) 比较A[2]和A[1]大小,并返回最小的
XYZ(A[1..3]) 比较A[3]和A[1,2]最小temp,并返回A[3]和temp最小的
XYZ(A[1..4]) 比较A[4]和A[1..3]最小temp,并返回A[4]和temp最小的
XYZ(A[1..n]) 比较A[n]和A[1..n-1]最小temp,并返回A[n]和temp最小的
可以看出返回的是A数组中最小的那个数
所以选B
posted @ 2024-07-02 16:53  new-code  阅读(0)  评论(0编辑  收藏  举报