第五套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.hqwc.cn/news/511262.html

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

相关文章

使用 helm repo add istio添加了一个helm chart repo,如何查看istio的版本呢

1. 添加chart repo helm repo add istio https://istio-release.storage.googleapis.com/charts helm repo update2. 查看版本 helm search repo istio 3. 查看版本详细信息 helm show chart istio/cni 4. 查看某个chart的历史版本 helm search repo <chart-name> --…

适用于 Windows 的7大数据恢复软件解决方案

数据丢失是数字世界中令人不快的一部分&#xff0c;它会在某一时刻影响许多计算机用户。很容易意外删除一些重要文件&#xff0c;这可能会在您努力恢复它们时带来不必要的压力。幸运的是&#xff0c;数据恢复软件可以帮助恢复已删除的文件&#xff0c;即使您没有备份它们。以下…

绝地求生:小团团曝被判8年:地图语音包或将下架,公会和主播被一锅端

这两天大家都在讨论某鱼平台办卡抽奖的事情。这件事发生之后没多久&#xff0c;某鱼平台里面的大量主播在同一时间停播&#xff0c;闲游盒认为大家应该也懂的&#xff0c;这次停播就是因为这些主播也参与了办卡抽奖&#xff0c;都需要接受调查&#xff0c;在两个月左右的调查中…

关于vue创建项目以及关于eslint报错的问题

vue创建完项目以后如果报parsing error no babel config file。。。这样的错误的话&#xff0c;关闭项目&#xff0c;用vscode进入项目中打开项目就可以解决了。 1 代码保存的时候会自动将单引号报错为双引号 导致eslint报错的问题&#xff0c; 解决思路&#xff1a; 在项目根…

STM32自学☞I2C

这里只是大体介绍&#xff0c;具体的可参考STM32数据手册

mysql学习笔记7——数据库查询深入

.sql文件 在实际使用数据库时&#xff0c;常常要对数据库文件进行备份&#xff0c;以便在数据库遭到入侵或者非人为因素导致损坏后&#xff0c;快速恢复数据 .sql文件便提供了这种功能&#xff0c;首先.sql文件是由一串串mysql指令组成的&#xff0c;我们插入.sql文件实际相当…

加密与安全_ 凯撒密码

文章目录 Pre概述Code 实现 凯撒密码字母频率分析攻击Code解密凯撒密码 小结 Pre PKI - 02 对称与非对称密钥算法 概述 凯撒密码是一种简单的替换加密技术&#xff0c;也称为移位密码。它是古典密码学中最早的密码之一&#xff0c;得名于古罗马军队领袖凯撒尤利乌斯&#xff…

『Linux从入门到精通』第 ㉕ 期 - System V 共享内存

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f427;共享内存原理&#x1f427;共享内存相关函数&#x1f426;key 与 shmid 区别 &#x1f427;代码实例 &#x1f490;专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0…

用Arduino中Wire库写I2C驱动-提高篇(IP2368芯片驱动为例)

之前写了一篇文章“用Arduino中Wire库写I2C驱动-入门篇”&#xff0c;链接地址&#xff1a;用Arduino中Wire库写I2C驱动-入门篇_arduino wire库-CSDN博客对I2C驱动编写做了一个简单的介绍&#xff0c;这一篇里&#xff0c;我们将使用IP2368这个芯片为例&#xff0c;详细的讲解一…

Prometheus结合Grafana监控MySQL,这篇不可不读!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

枚举——完美立方算法

枚举 基于逐个尝试答案的一种问题求解策略 例如&#xff1a;求小于N的最大素数 找不到一个数学公式&#xff0c;使得根据N就可以计算出这个素数 N-1是素数吗&#xff1f;N-2是素数吗&#xff1f; …… 判断N-i是否是素数的问题 转化成求小于N的全部素数&#xff08;可以用筛法…

【笔记】Android Telephony 漫游SPN显示定制(Roaming Alpha Tag)

一、功能名词简介和显示规则 Alpha Tag&#xff1a;运营商名称标识符&#xff0c;也是用于标识运营商的一个名称。客户需求描述常用名词&#xff0c;对开发而言都是SPN/PLMN功能模块的内容&#xff0c;状态栏左上角的运营商名称显示。 SPN相关文章&#xff1a; 【笔记】SPN和…