信息学奥赛初赛天天练-42-CSP-J2020基础题-变量地址、编译器、逻辑运算、逻辑与运算、逻辑或运算、冒泡排序、递归应用
信息学奥赛初赛天天练-42-CSP-J2020基础题-变量地址、编译器、逻辑运算、逻辑与运算、逻辑或运算、冒泡排序、递归应用
PDF文档公众号回复关键字:20240702
![](https://img2022.cnblogs.com/blog/404484/202211/404484-20221123185906168-1425738362.png)
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
作者:newcode 更多资源请关注纽扣编程微信公众号
从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习