[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷3及答案与解析.doc

上传人:hopesteam270 文档编号:507386 上传时间:2018-11-29 格式:DOC 页数:11 大小:104.50KB
下载 相关 举报
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷3及答案与解析.doc_第1页
第1页 / 共11页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷3及答案与解析.doc_第2页
第2页 / 共11页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷3及答案与解析.doc_第3页
第3页 / 共11页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷3及答案与解析.doc_第4页
第4页 / 共11页
[计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷3及答案与解析.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 3及答案与解析 1 阅读下列说明和流程图,将应填入 (n)的字句写在对应栏内。 【说明】 下列流程图 (如图 4所示 )用泰勒 (Taylor)展开式 sinx=x-x3/3!+x5/5!-x7/7!+( -1)nx2n+1/(2n+1)!+ 【流程图】 计算并打印 sinx 的近似值。其中用 ( 0)表示误差要求。 2 阅读下列程序说明和 C程序,将应填入 (n)处的字句写在对应栏内。【说明】 程序 8用于计算某公司每个职工应缴纳的个人所得税额和全体职工缴纳的个人 所得税总额,职工的当月收入 (工资或薪金 )通过键盘输入,每次输入一个职工的

2、工号和工资 (或薪金 )。由于该公司的工资或薪金是不定时发放的,所以输入过程中每个职工的收入会出现多次输入,整个输入以工号小于等于 0结束。 假设个人所得税法规定:个人收入所得,按月计税,以每月收入总额减除免税金额 800元后的余额作为该月的月应纳税所得额。适用税率如表 2所示。上表表明,个人收入所得税是按照超额累进的税率来征收的。 设一个人的月应纳税所得额为K(元 ),用下面的公式计算其应缴纳的个人所得税额 S (元 ); 若 0 K500,则S=K5%; 若 500 K2000,则 S=5005%+(K-500)10%; 若 2000 K5000,则S=5005%+150010%+(K-2

3、000)15%; 若 5000 K20000,则S=5005%+150010%+300015%+(K-5000)20%; . 例如,某人某月收入总额为4100元,减去 800元后,应纳税所得额为 3300元,其应缴纳的个人所得税额为500*5%+1500*10%+1300*15%=370元。 【程序】 #include stdio.h #define MaxNum 50 #define BASE 800 /*免税金额基数 */ int paylevel=0,500,2000,5000,20000,40000,60000,80000,100000,1000001; int taxPrate=5,

4、10,15,20,25,30,35,40,45; /*税率表 */ typedef struct int ld; /*职工的工号*/ long Salary; /*职工的工资 */ Info; /*查找工号为 ld的职工在数组 employee中的下标,返回值为 0表示没有 */ int find (int ld ,Info employee, int m) int j; employee0. Id=Id; for(j=m;(1);j-); return j; void main(void) Info employeeMaxNum+1; long Wage; double sum=0, K,S

5、; int i,j,N=0,Code; scanf(“%d %Id“, while(Code 0) i=find (Code, empolyee, N ); if(i0)employee i. Salary+=Wage; else(2); employeeN. Id=Code;employeeN. Salary =Wage; scanf(“%d %Id“, for(i=1;i =N;i+) K=(3); /*计算月应纳税所得额 */ S=0; /*月应纳税额赋初值 */ if(K 0) for(j=1;j 9;j+) if (4) /*月应纳税所得 额超过第 j级 */ S=S+(paylev

6、elj-paylevelj-1)*taxPratej-1/100; elseS =S+(5)* taxPratej-1/100; break; printf(“职工 %d应缴纳的个人所得税额: %10.21fn“,employeei.Id,S); sum+=S; printf(“全体职工个人所得税总额: %10.21fn“,sum); 3 阅读下列程序说明和 C代码,将应填入 (n)处的字句写在对应栏内。 【说明】 下面的程序 功能的功能是以行为单位对字符串按下面的条件进行排序。排序条件为:从字符串中间一分为二,右边部分按字符的 ASCII值降序排序,排序后左边部分与右边部分进行交换。如果原字

7、符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上 例如:位置: 0 1 2 3 4 5 6 7 源字符串: h g f e a b c d 则处理后字符串: d c b a h g f e 函数 ReadDat()实现从文件 in.dat中读取数据 (每行字符串长度均小于 80),函数WriteDat()把结果 dat输出到 文件 out.dat中。 #include stdio.h #include siring.h #include conio.h char dat20 80; void jsSort() int i,j,k,strl; char ch; for(i=0;i 2

8、0;i+) strl=strlen(datei); for(j=(1);j strl;j+) /*对 后半部分的字符串进行排序 */ for(k=j+1;k strl;k+) if( (2) ) ch=dati j; doti j=dati k; dati k=ch; for(j=0; (3) j+) /*前后两部分进行交换 */ ch = date i j; dote i j = date i (strl+1)/2+j; dat i (strl+1)/2+j=ch; void main() reodDat(); isSort(); writeDot(); readDat () FILE *

9、in; int i=0; char * p; (4); while(i 20 if(p) *p=0; i+; fclose (in); writeDat() FILE * out; int i; clrscr (); out = fopen(“out. dat“ ,“W“); for(i=0;i 20;i+) printf(“%sn“,dari); printf (5); fclose (out); 4 阅读下列函举说明和 C代码,将应填入 (n)处的字句写在对应栏内。 【说明 4.1】 假设两个队列共享一个循环向量空间 (如图 1-2所示 ),其类型 Queue2定义如下: typedef

10、struct DateType data MaxSize; int front2,rear2; Queue2; 对于 i=0或 1, fronti和 reari分别为第 i个队列的头指针和尾指针。函数 EnQueue (Queue2*Q, int i, DaleType x)的功能是实现第 i个队列的入队操作。 【函数 4.1】 int EnQueue(Queue2 * Q, int i, DateType x) /*若第 i个队列不满,则元素 x入队列,并返回 1;否则,返回 0*/ if(i 0i 1) return 0; if(Q- reari=Q- front(1) return 0;

11、 Q- data(2)=x; Q- reari=(3); return 1; 【说明 4.2】 函数 BTreeEqual(BinTreeNode*T1, BinTtneNode*T2)的功能是递归法判断两棵二叉树是否相 等,若相等则返回 1,否则返回 0。函数中参数 T1和 T2分别为指向这两棵二叉树根结点的指针。当两棵树的结构完全相同,并且对应结点的值也相同时,才被认为相等。 已知二叉树中的结点类型 BinTreeNode定义为: struct BinTreeNode char data; BinTreeNode * left, * right; ; 其中 dau为结点值域, leR和 r

12、isht分别为指向左、右子女结点的指针域, 【函数 4.2】 int BTreeEqual(BinTreeNode * T1, BinTreeNode * T2) if(Ti = NULL /*若一棵为空一棵不为空,则不等 */ else if(5) return 1; /*若根结点值相等并且左、右子树 */ /*也相等,则两 棵树相等,否则不等 */ else return 0; 5 阅读以下应用说明及 Visual Basic程序代码,将应填入 (n)处的字句写在对应栏内。 【说明】 已知窗体上有两个名为 cmdGene和 cmdSort的命令按钮。单击 cmdCene按钮时,随机产生 1

13、0个 1,100范围内的整数并将它们放在数组 intA中;单击 cmdSort按钮时,用选择法排序这 10个数并输出。 【程序代码】 Dim intA(1 To 10)As integer Private Sub cmdGene_Click( ) Dim intl As Integer Randomize For intl = 1 To 10 intA(intl) =(1) Next intl End Sub Private Sub cmdSort_Click( ) Dim intl, intJ,intMin, intTemp As Integer For intl = 1 To 9 intM

14、in = intA(intl) For intJ=(2) To 10 If intA(intJ) intMin Then Temp = intA(intJ) intA(intJ)=(3) intMin = intTemp End If Next intJ (4) (5) For intl = 1 To 10 Print Str(intA(intl)+“ “; Next intl Next lntl Print End Sub 6 阅读以下说明和 C+程序,将应填入 (n)处的字句写在对应栏内。 【说明】 设计一个类模板 SamPle用于对一个有序数组采用二分法查找元素下标。 【 C+程序】 #

15、include iostream. h #define Max 100 /最多元素个数 template class T class Sample T AMax: /存放有序数序 int n: /实际元素个数 public Sample( ) /默认构造函数 Sample(T a ,int i); /初始化构造函数 int seek(T c); void disp( ) for(int i=0;i n;i +) cout Ai “ “; cout endl: template class T Sample T : :Sample(T a ,int i) n=i: for( intj =0;j

16、i;j + ) (1); template class T int Sample T : seek( T c) int low =0,high = n-1 ,mid; while(2) mid = (low + high)/2; if(3) return mid; else if( (4) ) low=mid+|; else (5); return-1; void main( ) char a =“acegkmpwxz“; Sample char s(a, 1); cout “元素序列 :“ ;s. disp( ); cout “元素 g的下标 :“ s. seek(g) endl; 7 阅读

17、以下说明和 Java代码,将解答写入对应栏内。 【说明】 下面的程序是从命令行输入 3个数传递到 public static void main(String args)方法中 (如 java IsTriangle 3 4 5),并判断这 3个数能否构成三角形的 3条边,并显示相应的结果。请在程序的每条横线处填入适当的语句,使程序的功能完整。 注意:请勿改动 main()主方法和其他已有的语句内容,仅在横线处填入适当的语句。 public class IsTriangle public static void main( String args ) int a =new (1) args.(2

18、); for(int i=0;i 3;(3) ai=(4) if(5) System. out. println(a0 +“,“+a1 +“,“+a2“能构成三角形的 3条边 “); else System. out. println(a0 +“,“+a1 +“,“+a2“不能构成三角形的 3条边 ); 软件水平考试(初级)程序员下午(应用技术)模拟试卷 3答案与解析 1 【正确答案】 (1)x*x (2)x- t (3)t: (4)s+2- s (5)(-1) * t* x2/(s* (s-1) 【试题解析】 该题的关键是搞清楚几个变量的含义。很显然变量 t是用来保存多项式各项的值,变量 s

19、和变量 x2的作用是什么呢 ?从流程图的功能上看,需要计算11、 3!、 5!, ,又从变量 s的初值置为 1可知,变量 s主要用来计算这此数的阶乘的,但没有其他变量用于整数自增,这样就以判断 s用来存储奇数的,即 s值依次为 1、 3、 5, 。但 x2的功能还不明确,现在可以不用管它。 (2)空的作用是给 t赋初值,即给它多项式的第一项,因此应填写 “x- t”。 (3)空处需填写循环条件,显然当 t的绝对值小于 ( 0)就表示已经达到误差要求,因此(3)空应填入 “t:”。由变量 s的功能 可知, (4)空应当实现变量 s的增加,因此 (4)空应填入 “s+2- s”。 (5)空应当是求

20、多项式下一项的值,根据多项式连续两项的关系可知,当前一项为 t时,后一项的值为 (-1)*t*x*x/(s*(s-1)。但这样的话,每次循环都需要计算一次 x*x,计算效率受到影响,联想到变量 x2还没用,这时就可以判断 x2就是用来存储 x*x的值,使得每次循环者少进行一次乘法运算。因此 (1)空处应填入 “x*x”, (5)空处应填入 “(-1)*t*x2/(s*(s-1)”。 2 【正确答案】 (1)employeej.Id!=Id (2) +N 或 N+或 N=N+1 (3) employee i. Salary-BASE (4) K paylevelj (5)K-paylevelj-

21、1 【试题解析】 (1)find函数的功能是找到了号为 Id 的职工在数组 employee中的下标。显然,循环进行下去的条件是 employeej Id!=Id。 (2)当 i=0时,表明该职工的信息是第一次录入,所以应当在数组 employee中创建一个新元素,于是此处应填入 N+或其他等价表达式。 (3)K表示该月应纳的所得税额,所以应填入employeei.SalaryBASE。 (4)此处是判断当前职工的工资是否超过第 j级,所以应填入 K paylevelj)。 (5)当前职工的工资不超过第 j级,应当计算它与第 j-1级的差额的所得税,所以应填入 K-paylevelj-1。 3

22、 【正确答案】 (1)(strl+1)/2 (2)datij datik (3)j strl/2 (4)in=fopen(“in. dat“,“r“) (5)out,“% sn“,dati 【试题解析】 程序的思路是:先调用函数 ReadDat()从文件 in.dat中读取 20行数据存放到字符中数组 dat中,然后调用函数 jsSort()对字符串数组 dar按照排序规则进行排序,排序后的结果仍按行重新存入字符串数组 dat中,最后调用函数WriteDat()把结果 dat输出到文件 out.dat中。 (1)、 (2)空所在的两重循环是对一行字符串的后半部分按字符的 ASCII值降序排序,

23、这是一个简单的冒泡排序。考虑到如果原字符串长度为奇数,则最中间的字符不参加排序,因此应从第 (strl+1)/2个元素开始排序,这就是 (1)空所填的内容。由于是按字符的 ASCII值降序排序,因此当 datij datik时就要进行数据交换,这就是 (2)空所填的内容。 (3)空所在的循环是进行前后两部分数据交换,因此,结束条件应为 strl/2,因此空 (3)应填 “j strl/2”。 (4)空所在函数是读取数据函数。在读取数据前先要以只读方式打开数据文件in.dat,因此空 (4)处应填写 “in=fopen(“in.dat“,“r“)”。 (5)空所在函数是写入排序结果函数 。在 (

24、5)空所在行是把 dati一行写入到out.dat中,应此 (5)空处应填写 “out, “%“sn“,dati”。 4 【正确答案】 (1)(i+1)%2(或 1-i) (2)Q- reari (3)(Q- reari+)%Maxsize (4)T1=NULLT2=NULL (5)T1- data=T2- data & BTreeEqual(T1- left,T2- left) & BTreeEqual (T1- right, T2- right) 【试题解析】 这一题共有两个函数,第一个函数是一个循环共享队列入队的的问题,第二个函数是用递归法判断两棵二叉树是否相等的问题。 先分析第一个函数

25、。 (1)空所在 if语句是判断是否能入队,当队列 0入队时,如果队列 0队尾指针与队列 1队头指针相等时,说明队列 0无法入队;当队列 1入队时,如果队列 1队尾指针与队列 0队头指针相等时,说明队列 1 无法入队。因此 (1)空处应填写 “(i+1)%2”或 “1-i”。 (2)、 (3)空是入队操作,其操作步骤是先将元素 x插入队列 i队尾所指的位置,再将队尾 “加 1”。因此 (2)空处 应填写 “Q- reari”;由于是一个循环队列, (3)空处应填写 “(Q- reari+1)%Maxsize”。 再分析第二个函数。这一题比较简单,只需将程序注释转换成 C语言即可得到答案。 (4

26、)空所处理的是若一棵为空,而一棵不为空则不相等,显然 (4)空应填入“TI=NULLT2=NULL”。 (5)空处是一个递归调用,处理若根结点值相等并且左、右子树也相等,则两棵树相等,因此 (5)空应填入 “T1- data= T2 data & BTreeEqual(T1- left, T2- left) &BTreeEqual(Tl- right, T2- right)”及其等价形式。 5 【正确答案】 (1)1+int(rnd*100) (2)intI+1 (3)intMin (4)intA(intI)=intMin (5)Next intI 【试题解析】 根据题意,第一个空应该是产生

27、10个 1, 100范围内的随机整数,因此填 “1+int(rnd*100)”。 选择排序思想是:第 i趟排序开始时,当前有序区和无序区分别为 R1i-1和Rin(1in-1),该 趟排序则是从当前无序区中选出关键字最小的记录 Rk,将它与无序区的第 1个记录 Ri交换,使 R1i和 Ri+1n)分别变为新的有序区和新的无序区。因为每趟排序均使有序区中增加了一个记录,且有序区中的记录关键字均不大于无序区中记录的关键字,即第 i趟排序之后 R1i keysRi +1n keys,所以进行 n-1趟排序之后有 R1n-1 keysRn key。也就是说,经过 n-1趟排序之后,整个文件 R1n递增

28、有序。因此 (2)空填 “intI+1”; If intA(intJ) intMin Then 后的 3条语句是实现数 intA(intJ)与 intMin的交换,因此(3)空填 “intMin”; (4)空是实现最小数与无序区的第 1个数交换,因此填“intA(intI)=intMin”; (5)空是循环结束语句,填 “Next intI”。 6 【正确答案】 (1)Aj=aj (2)low =high (3)Amid=c (4)Amid c (5)high=mid-1 【试题解析】 在主函数中,首先由类模板实例化成 Sample char模板类 。 (1)空所在处为构造函数的声明,将参数中

29、的值赋值到类的成员变量中,所以 (1)空应填入 “Aj=aj”。 成员函数 seek()采用二分法查找元素下标,变量 low 和 high 分别表示查找区间的下标,如果查询到目标,则返回相应的下标,若没有查询到,则其结束的条件即 (2)空的内容为 “low =high”。根据二分法的原理,当中间的元素恰好等于目标元素时,则返回其下标,所以 (3)空应填入 “Amid =c”;若中间的元素小于目标元素时,则 mid+1作为新的查找区间的起始下标,所以 (4)空应填入 “Amid c”;否则mid-1作为新的查找区间的结束下标,所以 (5)空应填入 “high=mid-1”。 7 【正确答案】 (1)int (2)length (3)i+ (4)argsi (5)a0+a1 a2或等价形式 【试题解析】 声明并创建数组,通过 length属性取得参数的长度,循环递增条件,将输入参数逐个传给 ai,构成三角形的条件,两边之和大于第三边或者两边之差小于第三边。

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

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

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