第五套CCF信息学奥赛c++练习题 CSP-J认证初级组 中小学信奥赛入门组初赛考前模拟冲刺题(阅读程序题)

第五套中小学信息学奥赛CSP-J考前冲刺题

二、阅读程序题

(程序输入不超过数组或字符串定义的范围,判断题正确填√错误填X;除特殊说明外,判断题 1.5分,选择题3分,共计40分)

第一题 递归函数

1 #include<iostream>
2 using namespace std;
3 int p;
4 void fun(int &x,int &y);
5 void func (int &x,int &y){
6	if(y>x)return;
7	x--;y/=2;
8	fun(x,y);
9 }
10 void fun(int &x,int &y){
11	if(x==1)return;
12	x/=2;y+=p;
13	func(x,y);
14 }
15int main(){
16	int x,y;
17	cin>>x>>y>>p;
18	fun(x,y);
19	cout<<x<<' '<<y;
20	return 0;
21 }

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,此程序实现的是一个C++递归函数程序,主要功能是通过递归调用函数来操作输入的两个数x和y,最终输出最终的x和y的值。

  • 程序的主要部分如下: 声明了一个全局变量p
  • 定义了两个函数fun和func
  • 函数fun通过引用参数传递x和y的值,并且检查x是否等于1,如果是,则函数返回
  • 否则,将x除以2,y加上p的值,并调用函数func
  • 函数func通过引用参数传递x和y的值,并且检查y是否大于x,如果是,则函数返回
  • 否则,将x减1,y除以2,并调用函数fun
  • 在主函数main中,首先输入x、y和p的值,然后调用函数fun,并输出最终的x和y的值

判断题

1)、将第 04行的&去除后,程序仍能通过编译

2)、读人的x,y,p为int 范围内任意值时程序均能完成运行

3)、若x=1时,输出的x,y与输人的一致

4)、输出的x必然小于等于输人的x。

答案:1 × 2 × 3 √ 4 ×

答案分析:

1、从程序中可以看出第4行是函数声明,第10行是对应函数的定义,这两行参数应该要保持一致,错误

2、当x、y、p均为-3的时候,程序就进入死循环,错误

3、从程序第11行可以看出,如果输入的x=1,将直接返回,所以输出和输入的xy一致,正确

4、从程序分析可以看出,如果输入的x为负数的时候就不一定了,错误

单选题

5)、输人为7 33 2时,输出为

A、4 31

B、4 35

C、3 31

D、3 35

答案:D

答案分析:从程序分析,然后带入输入对应的值,可以计算得到输出的x和y为:3和35,答案D

6)、输人为33 7 2时,输出为

A、5 3

B、3 5

C、6 4

D、4 6

答案:B

答案分析:从程序分析,然后带入输入对应的值,可以计算得到输出的x和y为:3和5,答案B

第二题 素数判定

1 #include<iostream>
2 using namespace std;
3 #include<cmath>
4
5 bool IsPrime(int num)
6 {
7	for(int i=2;i<=sqrt(num);i++)
8	{
9		if(num%i==0)
10		{
11			return false;
12		}
13	}
14	return true;
15 }
16 int main()
17 {
18	int num=0;
19	cin>>num;
20	if(IsPrime(num))
21	{
22		cout<<"YES"<<endl;
23	}
24	else
25	{
26		cout<<"NO"<<endl;
27	}
28
29	return 0;
30 }

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,此程序实现判断一个给定的数是否为素数

  • 首先,定义了一个名为IsPrime的函数,用于判断一个数是否为素数
  • 该函数接收一个整数参数num
  • 在IsPrime函数内部,使用一个for循环从2开始遍历到sqrt(num),用于判断num是否可以被整除
  • 通过判断num%i是否等于0,如果等于0,则表示num可以被i整除,即num不是素数,返回false
  • 如果循环结束后仍然没有返回false,表示num不能被2到sqrt(num)之间的任意整数整除,即num是素数,返回true
  • 在main函数中,首先定义了一个变量num用于接收用户输入的数
  • 然后通过cin语句从标准输入读取一个整数,存入num变量中
  • 接下来通过调用IsPrime函数判断num是否为素数
  • 如果是素数,则输出"YES",否则输出"NO"
  • 最后返回0,表示程序执行成功

判断题

1)、第19行输人 97时,输出为“NO”(不含引号)

2)、第19 行输人 119时,输出为“YES”(不含引号)

3)、若将第7行的“<="改成“<”,程序输出的结果一定不会改变

4)、当程序执行第14行时,i的值为 sqrt(num)。

答案:1× 2 × 3 √ 4 ×

答案分析:

1、从程序分析可以得出97是素数,输出为YES,错误

2、从程序分析可以得出119不是素数,119=7*17,输出为NO,错误

3、从程序分析中可以看出,如果一个数为质数的平方,这时候就会判断出错,错误

4、从for循环中可以看出,要执行14行,必须是for循环全部执行完毕,i的值应该是sqrt(num)+1,错误

单选题

5)、最坏情况下,此程序的时间复杂度是

A、O(num)

B、O(num^2)

C、O(sqrt(num))

D、O(log num)

答案:C

答案分析:从for循环中可以看出,最坏的情况就是i=sqrt(n),所以最坏情况下时间复杂度为O(sqrt(n)),答案C

6)、若输人的num为 20以内的正整数,则输出为“YES"的概率是

A、0.45

B、0.4

C、0.5

D、0.35

答案:A

答案分析:从程序分析中可以看出,20以内的素数有:2、3、5、7、11、13、17、19,共8个,但是如果输入的是1,也会输出YES,所以共有9个数,9/20=0.45,答案A

第三题 数字排序

1 #include<iostream>
2 using namespace std;
3 const int maxn=105;
4 int n,a[maxn],b[maxn];
5 int main()
6 {
7	cin>>n;
8	int x;
9	for(int i=1;i<=n;i++){
10		cin>>x;
11		a[i]=b[i]=x;
12	}
13	
14	for(int i=1;i<=n;i++)
15		for(int j=i+1;j<=n;j++){
16			if (a[i]>a[j]) swap(a[i],a[j]);
17			if (b[i]<b[j]) swap (b[i],b[j]);
18		}
19	
20	for (int i=1;i<=n;i++)cout<<a[i]<<" ";
21	cout<<"\n" ;
22	for (int i=1;i<=n;i++)cout<<b[i]<<" ";
23	cout<<"\n";
24	return 0;
25 }

程序分析

主要考查小朋友们读写程序能力和逻辑思维能力,这段程序实现的功能是对输入的n个数字进行排序,并输出两种排序的结果

  • 程序首先读取输入的n,并声明了两个大小为maxn的数组a和b用于存储输入的数字
  • 程序接着通过for循环将输入的数字依次赋值给a和b数组
  • 然后,程序使用两层嵌套的for循环进行排序
  • 内层的for循环从i+1开始,遍历剩下的数字,通过比较大小来交换位置,使得a[i]的值最小,b[i]的值最大
  • 最后,程序使用两个for循环分别输出a和b数组的元素
  • 时间复杂度分析:  最坏情况下,内层for循环的执行次数为(n-1)+(n-2)+...+1 = (n-1)*n/2,所以时间复杂度为O(n^2)。 因此,整个程序的时间复杂度为O(n^2)。

判斯题

1) 若输人的 X[1],X[2],…,X[N]中有相同的数,程序会陷人死循环

2) 当且仅当输入的X[1],X[2],…,X[N]全部相同时输出的两行结果相同

3) 该算法的原理是基数排序

答案:1× 2√ 3  ×

答案分析:

1、从程序分析可以得出这是实现排序,第一行是从小到大,第二行是从大到小,有相同的数也不影响排序结果,错误

2、从程序分析可以得出只有输入都是一样的时候结果才会相同,正确

3、以上程序的算法原理是选择排序。基数排序是一种非比较排序算法,而选择排序是一种比较排序算法。在基数排序中,根据数字的每一位进行排序;而在选择排序中,通过每次选择最小(或最大)的元素,将其放在已排序部分的末尾。错误

单选题

4) 若输人的X[1],X[2],…,X[N]互不相同,则下列说法正确的是

A、输出的两行结果相同

B、将输出的第一行结果整体翻转后,将与第二行相同

C、将输出的第一行结果的第一项与最后一项交换后,将与第二行相同

D、以上说法都不正确

答案:B

答案分析:程序分析可以得出第一行是从小到大排序,第二行是从大到小排序,答案B

5) 下列说法不正确的是

A、输出的第一行即为将 X[1],X[2],…,X[N]从小到大排序后得到的结果

B、输出的第二行即为将 X[1],X[2],…,X[N]从大到小排序后得到的结果

C、若将“a[i]>a[j]"改为“a[i]>=a[j]”,则程序输出无变化

D、不存在时间复杂度更优的能与本程序达到相同目的算法

答案:D

答案分析:因为输出的结果中有B和C,所以输入的字符串就是S和P,所以答案A

6) 该程序的时间复杂度为

A、O(n)

B、O(n log n)

C、O(n^2)

D、O(n sqrt(n))

答案:C

答案分析:从程序分析可以得出该程序的时间复杂度为C

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720810.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

主要用于工控主板、工业控制器、程序烧录下载器、仿真器、新能源充电桩等众多涉及RS232通讯的产品——D3232

一、应用领域 D3232芯片主要用于工控主板、工业控制器、程序烧录下载器、仿真器、新能源充电桩等众多涉及RS232通讯的产品。 二、基本特性 D3232芯片由两个线路驱动器、两个线路接收器和双电荷泵电路组成&#xff0c;具有HBM>15kV、CDM>2kV的ESD保护能力&#xff0c;并且…

NLP_文本张量表示方法_2(代码示例)

目标 了解什么是文本张量表示及其作用.文本张量表示的几种方法及其实现. 1 文本张量表示 将一段文本使用张量进行表示&#xff0c;其中一般将词汇为表示成向量&#xff0c;称作词向量&#xff0c;再由各个词向量按顺序组成矩阵形成文本表示. ["人生", "该&q…

【力扣 - 盛最多水的容器】

题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾斜容…

【源码】imx6ull实现触摸屏单点实验-移植tslib和qt

一、本实验实验的器材&#xff1a; 1.正点原子imx6ull的阿尔法开发板v2.2 2.屏幕ALIENTEK 4.3 RGBLCD 二、实验已经移植好的文件&#xff1a; 仓库代码&#xff1a;https://gitee.com/wangyoujie11/atkboard_-linux_-driver.git 1.文件说明 arm-qt.tar.bz2&#xff1a;移植好的…

笔记本电脑里回收站删除的文件怎么找回来?这几招帮你恢复

在日常使用笔记本电脑的过程中&#xff0c;我们可能会因为不小心或者误操作&#xff0c;将一些重要的文件删除到回收站&#xff0c;甚至可能直接从回收站中清空。面对这种情况&#xff0c;很多人会感到惊慌失措&#xff0c;不知道如何是好。但其实&#xff0c;即使文件从回收站…

TQ15EG开发板教程:创建运行petalinux2019.1

工程网盘链接&#xff1a;https://pan.baidu.com/s/1vFRpzmbifXt7GypU9aKjeg 提取码&#xff1a;0ylh 首先需要使用与petalinux相同版本的vivado创建工程&#xff0c;与之前不同的是在创建硬件设计时需要勾选上添加bit文件&#xff0c;所以要在生成bit文件之后再创建硬件设计…

如何搭建Nacos集群

1.搭建Nacos集群 众所周知&#xff0c;在实际的工作中&#xff0c;Nacos的生成环境下一定要部署为集群状态 其中包含3个nacos节点&#xff0c;然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。 我们计划的集群结构&#xff1a; 我就直接在本机上开三个Nacos来搭…

Spring(22) Spring中的9种设计模式

目录 一、简单工厂模式&#xff08;Simple Factory&#xff09;二、工厂方法模式&#xff08;Factory Method&#xff09;三、单例模式&#xff08;Singleton&#xff09;四、适配器模式&#xff08;Adapter&#xff09;五、代理模式&#xff08;Proxy&#xff09;七、观察者模…

凌特杯,第二届,数字音频传输。simulink matlab

终于比赛进入了尾声&#xff0c;最为指导老师也是非常的激动。接下来进入了论文写作阶段和视频拍摄阶段。 第二届凌特杯规定的硬件是ADI的Pluto&#xff0c;成本在2k以内&#xff0c;能支持MATLAB&#xff0c;它能够流畅的实时播放接收到的音乐数据&#xff0c;并把数据保存成…

家居EDI:La-Z-Boy EDI 项目案例

家居行业市场规模庞大&#xff0c;总规模稳定增长。随着信息技术的发展以及全球化进程的加快&#xff0c;许多家居行业的老牌企业在全球范围内广泛扩展其供应链体系&#xff0c;产业链较长&#xff0c;从原材料生产供应、生产制造到销售运输&#xff0c;如何高效、准确地处理这…

CH582F核心板入门:RGB灯点亮与蓝牙上报功能实战

文章目录 一、前言二、硬件1.原理图2.实物图3.实物连接图 三、软件1.初始化2.显示部分3.输出部分&#xff08;打印和蓝牙上报&#xff09;4.结果4.1 打印结果4.2 蓝牙上报4.2.1 打开手机蓝牙调试助手&#xff0c;找到ble_test_XXXX4.2.2 点击CONNECT4.2.3 找到Unknown Service服…

STM32(15)USART编程

使用USART实现STM32与电脑之间的通信 中介&#xff1a;USB转TTL模块 闭合总开关&#xff0c;外部时钟才会传输到分频器 c8t6手册里面写了&#xff0c;usart最大支持4.5MHz&#xff0c;所以选10 重映射时记得开启AFIO的时钟

python网络爬虫教程笔记(1)

系列文章目录 文章目录 系列文章目录前言一、爬虫入门1.爬虫是什么&#xff1f;2.爬虫工作原理3.爬虫基本原理4.工作流程5.HTTP请求6.HTTP响应7.HTTP原理&#xff1a;证书传递、验证和数据加密、解密过程解析8.Urllib.request库的使用9.TCP3次握手&#xff0c;4次挥手过程 总结…

PCB电路中每个层是什么?有什么作用

在电子工程领域中&#xff0c;印刷电路板&#xff08;PCB&#xff09;是不可或缺的组件&#xff0c;它承载着电子元件之间的连接与通信&#xff0c;而PCB并非单层结构&#xff0c;是由多个层次构成&#xff0c;每层都有其特定的功能和作用&#xff0c;下面我们一起来聊聊。 1、…

计算机网络实验一 网线制作

实验目的与要求&#xff1a; 实验目的 了解以太网网线&#xff08;双绞线&#xff09;和制作方法 实验内容 了解网线和水晶头 学习网线制作方法 实验环境和要求 网线 水晶头 压线钳 剥线钳 网线测试器 方法、步骤&#xff1a; 步骤一 准备工具和材料 步骤二 剥掉双绞线的外…

基于 Vue3打造前台+中台通用提效解决方案(下)

47、通用组件 - 倒计时组件 特惠部分存在一个倒计时的功能,所以我们需要先处理对应的倒计时模块,并把它处理成一个通用组件。 那么对于倒计时模块我们又应该如何进行处理呢? 所谓倒计时,其实更多的是一个时间的处理,那么对于时间的处理,此时我们就需要使用到一个第三方…

libigl 网格平均曲率计算

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 根据 Laplace-Beltrami 算子与平均曲率法向的关系: 又根据余切 Laplace-Beltrami 算子的定义: 其中 Ai 为该点邻域面积,取 Voronoi cell 面积如下: 得到

uniapp制作--简单的tab切换

一、实现思路 在UniApp中&#xff0c;可以使用v-if来控制Tab栏并进行切换。 创建一个方法来控制点击时的效果。 二、实现步骤 ①view部分展示 <!-- tab选项 --><view class"select-area"><view class"select-top"><view clas…

基于Python+Flask实现一个TODO任务管理系统网站

随着科技的进步&#xff0c;数字化的任务清单逐渐成为生活中不可或缺的一部分。它们不仅可以帮助我们跟踪日常任务&#xff0c;还可以提高效率。但是&#xff0c;你是否考虑过自己制作一个任务管理系统呢&#xff1f; 好消息是&#xff0c;使用Python和Flask&#xff0c;我们可…