2023江苏职教高考计算机技能考试--填空题解析

/*---------------
【程序填空】
-----------------
题目:验证任意一个大于1的正整数都可以找到
一串连续奇数,它们的和等于该整数的立方。
例如:4的立方等于64,64=1+3+5+7+9+11+13+15程序运行结果如下:3的立方等于27, 27=7+9+114的立方等于64, 64=1+3+5+7+9+11+13+156的立方等于216, 216=7+9+11+13+15+17+19+21+23+25+27+29
------------------------------------------------------------------------
注意:在填空标志处填写答案,并删除填空标志,勿改动程序中的其他部分。
----------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <string.h>int check(int n)
{int i,j,k,sum,p;k=n*n*n;for(i=1; i<k/2; i+=2){j=i;
/*************SPACE************/for(sum=0;【?】;j=j+2)sum=sum+j;if(sum==k)return i;}if(i>=k/2) printf("error!");        
}int main(void)
{int s[3]= {3,4,6};int i,sum,cu,p;for(i=0; i<3; ++i){p = check(s[i]);cu = s[i]*s[i]*s[i];printf("%d的立方等于%d,\t%d=",s[i],cu,cu);sum=p; 
/*************SPACE************/while(【?】){printf("%d+",p);p+=2;sum+=p;}printf("%d\n",p);}return 0;
}

答案:

=======(答案1)=======

sum<k

k>sum

sum<n*n*n

n*n*n>sum

=======(答案2)=======

sum!=cu

sum<cu

cu>sum

cu!=sum

s[i]*s[i]*s[i]!=sum

sum!=s[i]*s[i]*s[i]

s[i]*s[i]*s[i]>sum

sum<s[i]*s[i]*s[i]

解析:

这个序列数肯定能找到,下面证明。

假设s为大于1的奇数,可找到一个数p=s*s,以p为中点,在p的左右两各找(s-1)/2个连续的奇数,这s个奇数分别为:p-s+1, p-s+3, …, p-2, p, p+2, …,  p+s-1。例如,设s=7, p=s*s=49, 以49为中点,在49左边找3个连续奇数分别是43、45、47,在49的右边找3个连续奇数分别是51、53、55,这7个连续的奇数之和等于7的立方。

(p-s+1) + … +  (p-2) + p + (p+2) + … + (p+s-1) = s*p=s^3

同理,假设s为大于1的偶数,找到第一个数p=(s*s-2s+2)/2,然后依次找出2s-1个奇数,则这2s个奇数之和等于s的立方。

p+(p+2)+...+(p+2s-2)=2sp+2s*s-2s

=s(s*s-2s+2)+2s*s-2s = s*s*s

由此证明可知check函数会正常返回结果。

问题

1. 第1个空,如果填写【sum!=k && j<k/2】,这个答案正确吗?另外,只要能设置一个能结束循环的条件,都能让程序找出正确的结果,比如【sum!=k && j<k】。但在阅卷时,答案是否正确依据的是程序的逻辑是否正确,显然,第1个答案是正确的,但第2个答案是错误的,因为它与第35行的逻辑冲突。

2. 第2个空,如果填写【sum+p<cu】对吗?从逻辑上说,答案是正确的。

3. 这道题存在的问题。

(1) 两个空的答案太相似,如果考生懂一个,另一个也懂。

(2) 35行语句无用且不完整,假使条件成立,它除了输出”error"然后返回什么呢?完整的语句应该是:

if(i>=k/2) {printf("error!");  exit(1);
}

条件成立,直接输出“error",然后结束程序的运行。

/*-----------
【程序填空】
-------------
题目:整型数组s中有N个正整数,程序将数组按升序排列。程序运行结果如下:
原数组为:61 87 34 40 69 64 58 98 22 84
排序后数组为:22 34 40 58 61 64 69 84 87 98------------------------------
注意:在填空标志处填写答案,并删除填空标志,勿改动程序中的其他部分。
----------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <string.h>
#define N 10
int main()
{int i,j,x,s[N]= {61,87,34,40,69,64,58,98,22,84};printf("原数组为:\n" );for(i=0; i<N; i++)printf("%3d", s[i]);i=N-2;while(i>=0){x=s[i];j=i+1;/******SPACE*********/while(s[j]<x&& 【?】){s[j-1]=s[j];j++;}/*****SPACE*********/s[【?】] =x;i--;}printf("\n排序后数组为:\n" );for(i=0; i<N; i++)printf("%3d", s[i]);printf("\n");return 0;
}

答案:

=======(答案1)=======

j<N

N>j

j<=N-1

N-1>=j

=======(答案2)=======

j-1

-1+j

--j

解析:

本题采用插入排序方法对无序数进行排序,但其排序方法与平时学的方法有点不一样,差别就是平时我们把第一个元素看作是有序序列,然后从第2个元素开始到最后一个元素,依次将它们插入到有序表中。本题是假定最后一个元素是有序的,然后从倒数第二个元素开始到第一个元素,依次插入到有序表中。如果对算法熟悉,这个题不难。

问题

第1个空,如果填写【s[j+1]!=0】对否?这个答案肯定不对,原因是程序运行时系统或正常运行结束,或出现异常,完全由系统运行环境决定。因为当i的值为N-2时,31行的j被赋值为N-1,33行若s[j]<x,那么要判断s[j+1]!=0,但j+1等于N,对于数组s来说,数组越界,在以后的判断中,若x总是比已排序的数据都大,总会遇到j+1等于N,所以这个答案存在风险!在我们调试程序时,若在该数组之后正好是0时,程序运行结果正确,否则程序运行结果就是错误的。

为了验证这个答案是错的,可以再设两个数组s1[1]={1}和s2[1]={2},将其放在s数组两侧,然后运行。下面是在Dev C++中调试的结果。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <string.h>
#define N 10
int main()
{int i,j,x,s1[1]={1},s[N]= {61,87,34,40,69,64,58,98,22,84},s2[1]={2}; printf("原数组为:\n" );for(i=0; i<N; i++)printf("%3d", s[i]);i=N-2;while(i>=0){x=s[i];j=i+1;/******SPACE*********/while(s[j]<x&& s[j+1]!=0){s[j-1]=s[j];j++;}/*****SPACE*********/s[j-1] =x;i--;}printf("\n排序后数组为:\n" );for(i=0; i<N; i++)printf("%3d", s[i]);printf("\n");return 0;
}

程序运行结果如下:

图片

显然,程序运行结果是错的。

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

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

相关文章

linux磁盘,分区,挂载等等

1. 修改磁盘分区的标签 例如&#xff1a;733be18b-7baf-d84c-879d-ca3db465f179太长了&#xff0c;修改一下。 linuxchenxiao:/media/linux/733be18b-7baf-d84c-879d-ca3db465f179$ 先 sudo blkid sudo blkid 找到你想修改的UUID(唯一标识符) /dev/sda1: UUID"733be…

Pytorch从零开始实战17

Pytorch从零开始实战——生成对抗网络入门 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——生成对抗网络入门环境准备模型定义开始训练总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytorch1.8cpu&#xf…

【Linux】更新python版本并设置默认版本

文章目录 1.查看目前python的版本2.添加软件源并更新3.选择你想要下载的版本4.设置默认版本 网上有很多教程都是教导小白去官方下载之后编译安装。但是&#xff0c;小白连cmake是什么都不知道&#xff0c;这种教导方式实在是误人子弟。这里作者介绍了一种十分简洁的更新方法。 …

YOLOv8改进:RepBiPAN结构 + DETRHead检测头,为YOLOv8目标检测使用不一样的检测头,用于提升检测精度

💡本篇内容:YOLOv8全新Neck改进:RepBiPAN 结构升级版,为目标检测打造全新融合网络,增强定位信号,对于小目标检测的定位具有重要意义 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 💡本文改进 Neck部分和DETRHead系列检测头…

8.2摆动序列(LC376-M)

算法&#xff1a; 其实动态规划和贪心算法都能做 但是动态规划的时间复杂度是O(n^2) 贪心算法的时间复杂度是O(n) 所以学习贪心算法 到底为什么用贪心&#xff1f;&#xff08;分析局部最优和全局最优&#xff09; 局部最优&#xff1a;删除单调坡度上的节点&#xff08;不…

第一篇【传奇开心果系列】beeware开发移动应用:轮盘抽奖移动应用

系列博文目录 beeware开发移动应用示例系列博文目录一、项目目标二、开发传奇开心果轮盘抽奖安卓应用编程思路三、传奇开心果轮盘抽奖安卓应用示例代码四、补充抽奖逻辑实现五、开发传奇开心果轮盘抽奖苹果手机应用编程思路六、开发传奇开心果轮盘抽奖苹果手机应用示例代码七、…

如何配置Pycharm服务器并结合内网穿透工具实现远程开发

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;…

NLP深入学习(五):HMM 详解及字母识别/天气预测用法

文章目录 0. 引言1. 什么是 HMM2. HMM 的例子2.1 字母序列识别2.2 天气预测 3. 参考 0. 引言 前情提要&#xff1a; 《NLP深入学习&#xff08;一&#xff09;&#xff1a;jieba 工具包介绍》 《NLP深入学习&#xff08;二&#xff09;&#xff1a;nltk 工具包介绍》 《NLP深入…

JS的数据类型和运算符

typeof()方法&#xff1a;检测数据类型 JS中的基本数据类型 基本数据类型 1.number 数字 2.string 字符串 3.boolean 布尔 4.null 代表空值&#xff08;typeof方法检测出来的数据类型是object类型&#xff09; 5.underfined 未定义&#xff1b;变量已声明但是未赋值 6.…

QT Model/View 设计模式中 selection 模型

1. QT 的 selection 模型是用来做什么的&#xff1f; Qt的selection模型用于管理TableView中的选择操作。它允许用户选择和操作特定的数据。 2. Selection 模型用途的例子&#xff1f; 当使用Qt的TableView时&#xff0c;可以使用selection模型来实现以下用途&#xff1a; …

vue路由-全局前置守卫

1. 介绍 详见&#xff1a;全局前置守卫网址 使用场景&#xff1a; 对于支付页&#xff0c;订单页等&#xff0c;必须是登录的用户才能访问的&#xff0c;游客不能进入该页面&#xff0c;需要做拦截处理&#xff0c;跳转到登录页面 全局前置守卫的原理&#xff1a; 全局前置…

KubeSphere 核心实战之二【在kubesphere平台上部署redis】(实操篇 2/4)

文章目录 1、登录kubesphere平台2、redis部署分析3、redis容器启动代码4、kubesphere平台部署redis4.1、创建redis配置集4.2、创建redis工作负载4.3、创建redis服务 5、测试连接redis 在kubesphere平台上部署redis应用都是基于redis镜像进行部署的&#xff0c;所以所有的部署操…

2022-ECCV-Adaptive Face Forgery Detection in Cross Domain

一、研究背景 1.伪造视频是逐帧生成的&#xff0c;因此会造成时间维度上的伪影。而鲁棒的检测模型需要对同一身份的不同帧有一致的检测结果。 1.利用频率线索进行deepfake检测效果良好&#xff0c;但也会导致帧间不一致问题&#xff0c;即不同帧检测结果不同。 2.以往方法中固定…

【JavaScript】面向后端快速学习 笔记

文章目录 JS是什么&#xff1f;一、JS导入二、数据类型 变量 运算符三、流程控制四、函数五、对象 与 JSON5.1 对象5.2 JSON5.3 常见对象1. 数组2. Boolean对象3. Date对象4. Math5. Number6. String 六、事件6.1 常用方法1. 鼠标事件2. 键盘事件3. 表单事件 6.2 事件的绑定**1…

【咕咕送书 | 第八期】羡慕同学进了大厂核心部门,看懂这本书你也能行!

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 写在前面参与规则 ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论…

VMware虚拟机设置NAT网络模式

查看本地服务器网卡ip10.9.158.77 设置vmNet8虚拟网卡ip10.9.58.177&#xff0c;不需要在同一网段 3.点击VMware设置“虚拟网络编辑器”&#xff0c;点击“NAT设置”所有设置的ip网段需要与第二步的VMNet8网卡的网一致

LeetCode 2788. 按分隔符拆分字符串

一、题目 1、题目描述 给你一个字符串数组 words 和一个字符 separator &#xff0c;请你按 separator 拆分 words 中的每个字符串。 返回一个由拆分后的新字符串组成的字符串数组&#xff0c;不包括空字符串 。 注意 separator 用于决定拆分发生的位置&#xff0c;但它不包含…

算法 动态分析 及Java例题讲解

动态规划 动态规划&#xff08;英语&#xff1a;Dynamic programming&#xff0c;简称 DP&#xff09;&#xff0c;是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的&#xff0c;通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适…

day-15 按分隔符拆分字符串

思路 依次对words的每个字符进行split(),然后将非空的加入List 解题方法 String arr[]s.split(ss);利用split()方法将words的每个字符串划分为String数组 if(arr[i]!“”) //将非空的加入 list.add(arr[i]); String ss“”separator; //使用转义字符 时间复杂度&#xff1a;…

HCIA——18实验:NAT

学习目标&#xff1a; NAT 学习内容&#xff1a; NAT 1.要求——基本的 2.模型 3.IP分配、规划、优化 1&#xff09;思路 R2为ISP路由器&#xff0c;其上只能配置ip地址&#xff0c;不得冉进行其他的任何配置—ospf配置 认证 、汇总、沉默接口、加快收敛、缺省路由 PC1-PC2…