【计算机类职业资格】初级程序员下午试题-59及答案解析.doc

上传人:proposalcash356 文档编号:1330119 上传时间:2019-10-17 格式:DOC 页数:7 大小:57KB
下载 相关 举报
【计算机类职业资格】初级程序员下午试题-59及答案解析.doc_第1页
第1页 / 共7页
【计算机类职业资格】初级程序员下午试题-59及答案解析.doc_第2页
第2页 / 共7页
【计算机类职业资格】初级程序员下午试题-59及答案解析.doc_第3页
第3页 / 共7页
【计算机类职业资格】初级程序员下午试题-59及答案解析.doc_第4页
第4页 / 共7页
【计算机类职业资格】初级程序员下午试题-59及答案解析.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、初级程序员下午试题-59 及答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分数:15.00)1.【说明】 计算三角函数 sinx 给定精度 e 和 n,若第 k 步后的结果为 sin1,第 k+1 步后的结果为sin2,若|sin1sin2|e,则返回 sin1 的值。若没有达到精度 e,但是步骤达到 n 步,则返回第 n 步后的值。其流程图如下所示: (分数:15.00)_二、B试题二/B(总题数:1,分数:15.00)2.【程序 2.1 说明】求所有满足如下条件的三位数:它除以 11 得的商等于它各位数字的平方和。例如 550,除以 11 商为50,50=

2、5 2+52+02。【程序 2.1】void main()int i, j,n,s;for(i=100;i=999;i+)n=i;j=n/11;s=0;while(U (1) /U)U(2) /Un/=10;if(U (3) /U)printf(“%d/t“,i);【程序 2.2 说明】本程序输入一字符串,将其中的大写字母改变成小写字母。【程序 2.2】void main()int i=0;char s120;scanf(“%s“,s);while(U (4) /U)if(U (5) /U)si=si- A+a;i+;printf(“%s/n“,s);(分数:15.00)_三、B试题三/B(总

3、题数:1,分数:15.00)3.【说明】 设有 3n+2 个球互连,将自然数 13n+2 分别为这些球编号,使相连的两球编号之差的绝对值正好是数列 1,2,3n+1 中的各数,如下图所示: (分数:15.00)_四、B试题四/B(总题数:1,分数:15.00)4.【说明】 计算 n 的合数。一个整数 n 可以有多种划分,使其划分的一列整数之和为 n。例如,整数 5的划分为: 5 4 1 3 2 3 1 1 2 2 1 2 1 1 1 1 1 1 1 1 共有 7 种划分。这种划分的程序如下所示。 【程序】 #include stdio.h int n1000,m,k; void output

4、sum() int j; for(j=0;nj!=0;j+) printf(“%d/t“,nj); printf(“/n“); void sum(int i) if(m-nini) m=m-ni; U(1) /U i+; ni+1=0; else U (2) /U m-=ni; i+; if(m!=ni) sum(i); else output_sum(); if(ni1) ni-; U(3) /U else while(ni=1) U (4) /U if(i!=0) U (5) /U sum(i); void main() int i; scanf(“%d“, m=k=n0; for(i=1

5、;i=k;i+) ni=0; while(n0!=1) n0-; i=0; sum(0); m=k; (分数:15.00)_五、B试题五/B(总题数:1,分数:15.00)5.【说明】 本程序用于评选优秀教师和学生。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出来。其类结构如下图所示: (分数:15.00)_六、B试题六/B(总题数:1,分数:15.00)6.【说明】 本程序输出 10000 之内的所有完全数。完全数是指等于其所有因子和(包括 1,但不包括这个数本身)的数。例如:6=123,6=1+2+3,则 6 是一个完全数。 【程序】 public class PerfectN

6、um Public static void main(String args) int count=1; for(int i=1; i10000; i+) int y=0; for(int j=1; ji; j+) if(U (1) /U) y=U (2) /U if(U (3) /U) System.out.print(U (4) /U+String.valueOf(/t); U(5) /U If(count%3=0) System.out.printin(); (分数:15.00)_初级程序员下午试题-59 答案解析(总分:90.00,做题时间:90 分钟)一、B试题一/B(总题数:1,分

7、数:15.00)1.【说明】 计算三角函数 sinx 给定精度 e 和 n,若第 k 步后的结果为 sin1,第 k+1 步后的结果为sin2,若|sin1sin2|e,则返回 sin1 的值。若没有达到精度 e,但是步骤达到 n 步,则返回第 n 步后的值。其流程图如下所示: (分数:15.00)_正确答案:()解析:(1)i=n for(i=100;i=999;i+)n=i;j=n/11;s=0;while(U (1) /U)U(2) /Un/=10;if(U (3) /U)printf(“%d/t“,i);【程序 2.2 说明】本程序输入一字符串,将其中的大写字母改变成小写字母。【程序

8、2.2】void main()int i=0;char s120;scanf(“%s“,s);while(U (4) /U)if(U (5) /U)si=si- A+a;i+;printf(“%s/n“,s);(分数:15.00)_正确答案:()解析:(1)n (2)s=s+(n%10)*(n%10); (3)j=s (4)si (5)si=A (3)a1n+1=k; (4)m=n+1; (5)a0m-2*i-1=k; 分析 本题考查 C 语言中具体算法的实现。 题目中要求将 3n+2 个球互连,并用自然数 13n+2 分别为这些球编号,使相连的两球编号之差的绝对值正好是数列 1,2,3n+1

9、 中的各数。题目中还给出了具体的填自然数的思想。我们要完成的工作就是用 C 语言描述出题目中给出的思想。首先我们需要对其思想有个正确的认识,这是关键所在。 下面,我们来分析代码。结合整段程序代码,我们可以分析出,二维数组 a 用来存放我们要填的数字,第一维表示行数,总行数应该是 3。第二维表示列数,总列数应该是 n+2。其中的第(1)空所在的位置是表示一个条件判断语句的条件,在这之前已经对第 1 列的中间 1 个进行了填数,那么根据“先自左向右,第 1 列中间 1 个填数,然后第 2 列上、下 2 个填数,每次 2 列”的思想,再结合下面的填数程序语句,我们可以知道,此语句就是用来实现在先第

10、1 列中间 1 个填数后,对第 2 列上、下 2 个进行填数,每次 2 列这个思想的。因此,第(2)空的答案就出来了,是对第 2 列下(第 3 行)进行填数,因此,答案为“a22*i+1=k”。因为条件判断语句下面是进行了 2 次填数,因此可以判断 n 应该是个奇数,因为若 n 为偶数,最后 1 次只排第 1 列中间一个数,就不需要这个操作了。因此,第(1)空的作用应该是用来判断 n 是奇数,所以此空答案为 (n%2=1)。 第(3)空所在的位置在条件 n%2=1 成立的情况下才执行,条件 n%2=1 成立表明 n 是奇数,根据若 n 是奇数,再右第 2 列中间填数的思想,我们可以知道,此处应

11、该是对右第 2 列中间填数,因此,答案为 a1n+1=k。 第(4)空所在的位置是条件 n%2=1 不成立的情况下才执行,在上面我们知道 n%2=1 是用来判断 n 是否为奇数,如果 n 不是奇数,我们不做什么,但为了方便后面的操作,应该将 n+1 的值保存起来,因此,此空的答案为 m=n+1。 根据思想:若 n 是奇数,再右第 2 列中间填数。然后依次右第 1 列上、下 2 个填数,再右第 2 列中间 1 个填数,直到左第 2 列为止。在前面程序中,我们已经完成了前面部分,第(5)空所在的循环体就是用来完成后面部分的,在循环体中已经实现了对中、下进行填数,缺一个对上进行填数的代码,因此,第(

12、5)空要完成的任务就是对上行进行填数,因此,答案为 a0m-2*i-1=k。四、B试题四/B(总题数:1,分数:15.00)4.【说明】 计算 n 的合数。一个整数 n 可以有多种划分,使其划分的一列整数之和为 n。例如,整数 5的划分为: 5 4 1 3 2 3 1 1 2 2 1 2 1 1 1 1 1 1 1 1 共有 7 种划分。这种划分的程序如下所示。 【程序】 #include stdio.h int n1000,m,k; void output sum() int j; for(j=0;nj!=0;j+) printf(“%d/t“,nj); printf(“/n“); void

13、 sum(int i) if(m-nini) m=m-ni; U(1) /U i+; ni+1=0; else U (2) /U m-=ni; i+; if(m!=ni) sum(i); else output_sum(); if(ni1) ni-; U(3) /U else while(ni=1) U (4) /U if(i!=0) U (5) /U sum(i); void main() int i; scanf(“%d“, m=k=n0; for(i=1;i=k;i+) ni=0; while(n0!=1) n0-; i=0; sum(0); m=k; (分数:15.00)_正确答案:(

14、)解析:(1)ni+1=m; (2)ni+1=ni; (3)sum(i); (4) m+=ni; (5)ni-; 分析 本题考查 C 语言中计算 n 合数方法的实现。 题目要求计算 n 的合数,我们首先来了解一下什么是 n 的合数。在正整数 n的所有不同的划分中,将最大加数 n1 不大于 m 的划分个数记作 q(n,m)。可以建立 q(n,m)的如下递推关系。(1)q(n,1)=1,n1 当最大数 n1 不大于 1 时,任何正整数只有一种划分形式,就是全 1。 (2)q(n,m)=q(n,n),mn 最大加数 n1 实际上不能大于 n。因此,q(1,m)=1。 (3)q(n,n)=1+q(n,

15、n-1) 正整数 n 的划分由 n1=n 的划分和 n1n-1 的划分组成。 (4)q(n,m)=q(n,m-1)+q(n-m,m),nm1 正整数 n 的最大加数 n1 不大于 m 的划分由 n1=m 的划分和 n1m-1 的划分组成。要想求出所有解,只有递归到最底层即全为 1 为止。 知道了上述特性,下面我们来看代码。在代码中首先声明一个数组和两个全局变量 k,m。结合程序可以看出,其中数组 ni中存放的是当前划分的最大加数,而 m 中存放的是当前被划分的数。程序代码中有三个函数,一个是主函数、一个 output_sum()函数和一个 sum()函数,函数 output_sum()的功能很

16、简单,就是输出一次划分结果,在 sum()函数中被调用。 经过分析不难发现,函数 sum()的作用是实现整数的划分。在函数体中,首先是一个条件判断语句,其作用是判断当前被划分的数 m 是否小于当前最大加数的两倍,如果条件成立,说明数被划分为两个数后,其最大加数大于另一个数,而另一个数应该存放在数组中。此时执行语句 m=m-ni来求出另一个数,接下来应该是保存这个数到数组中的下个位置,第(1)空就用来完成这个任务,因此,答案为 ni+1=m。 第(2)空所在的位置是条件不成立的情况下运行的语句,条件不成立,说明数被划分为两个数后,其最大加数小于另一个数,数可以有更大的最大加数,因此,将当前的最大

17、加数保存到数组中的下个位置,此空答案为 ni+1=ni。 第(3)空也在一个条件选择语句下面,此条件语句用于判断当前最大加数是否大于 1,如果大于 1,则需要接着划分,因此要调用函数 sum(),其参数是 i,所以此空答案为 sum(i)。 第(4)空是条件不成立即当前最大加数为 1 的情况下执行的语句,当最大加数为 1 时,说明递归到了最底层,此时,递归应该往回走了,这需要还原当前最大划分数 m(为这个数的其他划分做准备),因此,这个空的答案为 m+=ni。 第(5)空是在条件 i!=0 为真的情况下执行的语句,如果条件为真,说明递归还没有回到最上层,应该求当前被划分数在当前最大加数变小后的

18、其他划分情况,因此,此空答案为 ni-。五、B试题五/B(总题数:1,分数:15.00)5.【说明】 本程序用于评选优秀教师和学生。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出来。其类结构如下图所示: (分数:15.00)_正确答案:()解析:(1)virtual bool isgood()=0; (2)public base (3)(num90)?true:false; (4)ptech=new teacher; (5)pi-isgood()=true 分析 本题考查 C+中类的继承、虚函数和其他一些语法结构。 题目要求本题的程序用于评选优秀教师和学生,在输入一系列教师或学生的

19、记录后,能将优秀学生及教师的姓名列出来。根据题目中的图,对于学生来说,只要拿其考试成绩与 90 比较大小就可;对于老师来说,只要一年内发表的论文超过 3 篇就可以。 下面我们来分析代码。代码给出了三个类的定义和一个主函数,类 base 是类 student 和类 teacher 的基类。 第(1)空处在基类 base 的定义里面,结合题目中的要求,我们知道类 base 中需要定义一个 isgood()虚函数,但在类 base 的代码中并没有看到对虚函数 isgood()的定义,因此,第(1)空应该是定义虚函数 isgood()。在 C+中定义虚函数的方法是在函数的定义前加一个关键字 virtu

20、al,所以,此空应填 virtual bool isgood()=0。 第(2)空处的作用很明显,是用在继承类的定义时,表明其对父类的继承方式,由继承类中继承父类的成员方法 getname()仍然是公有的可以知道,子类对父类的继承方式是公有继承。所以,此空答案为 public base。 第(3)空处的作用是在类 student中重新定义虚函数 isgood(),其要完成的任务在上面分析中已经知道,拿学生的考试成绩与 90 比大小,如果大于 90 返回 true,否则返回 false。因此,此空答案为(num90)?true:false。 在做第(4)空时,我们如果结合前面那个订语句下面的代码

21、就很容易明白了,此空要完成的任务是动态创建一个 teacher 对象,因此,答案为 ptech=new teacher。 第(5)空所在的位置是一个条件选择语句的条件,再结合全程序来看,不难发现此时程序还没有实现对优秀学生及教师的姓名的列出,而第(5)空下面的语句刚好用来列出姓名,那么第(5)空的功能是判断是否为优秀学生或老师,调用函数 isgood()可以实现。因此,此空答案为 pi-isgood()=true。六、B试题六/B(总题数:1,分数:15.00)6.【说明】 本程序输出 10000 之内的所有完全数。完全数是指等于其所有因子和(包括 1,但不包括这个数本身)的数。例如:6=12

22、3,6=1+2+3,则 6 是一个完全数。 【程序】 public class PerfectNum Public static void main(String args) int count=1; for(int i=1; i10000; i+) int y=0; for(int j=1; ji; j+) if(U (1) /U) y=U (2) /U if(U (3) /U) System.out.print(U (4) /U+String.valueOf(/t); U(5) /U If(count%3=0) System.out.printin(); (分数:15.00)_正确答案:(

23、)解析:(1)i%j=0 (2)y+j; (3)y=i (4)i (5)count+; 分析 本题考查用 Java 语言的语法、结构及算法的具体实现。 题目要求我们输出 10000 之内的所有完全数,而完全数是指等于其所有因子和数。要想求出 1 到 10000 中的所有完全数,我们需要从 1 开始对每个数进行求解,在判断一个数是否是完全数时,首先要求出其所有因子,再求其因子的和,从而通过判断因子的和与该数是否相等来确定该数是否为完全数。一个数的因子是指能被该数整除的数。 下面我们来看代码,定义了一个类 PerfectNum 来实现输出 10000 之内的所有完全数。在类中有一个主入口函数,在函

24、数体中首先声明了一个整型变量 count 并赋初值 1,接下来是一个循环语句,其作用是用来对从 1 到 10000 之间的数逐个求解。在这个循环体里面又有一个循环,结合我们的分析和程序来看,此循环的功能是求得每个数的所有因子并计算其和,第(1)空就是在这个循环体下面,是一个条件语句的判断条件,其作用是判断变量 i 中的数值是否是变量 i 中数的因子,判断是否是因子的方法是取余,看结果是否为 0。因此,第(1)空的答案是 i%j=0。 第(2)空是紧接着第(1)空来的,如果变量 i 中的数值是变量 i 中数的因子,则执行此空,那肯定是对因子求和,其和存放在变量 y 中,那么此空答案是 y+1。 第(3)空也是一个条件语句的判断条件,结合后面的程序,我们可以知道,此处是判断该数因子的和是否等于该数,如果是,则执行后面的输出语句:不是,则进入下一个循环。因此,此空答案是 y=i。 第(4)空在输出语句中,这考查我们对 Java 语言中输出语句的熟悉情况,如果熟悉的话,此空很简单,答案是 i 或 y。 第(5)空是用来记录从 1 到 10000 之间完全数的个数,有一个记录的变量 count,在每次输出一个完全数后只要我们对变量 count 加 1 即可。因此,此空答案为count+。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1