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

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

1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 2及答案与解析 1 阅读下列算法说明和算法,将应填入 (n)处的语句写在答题纸的对应栏内。 【说明】 为了减少直接插入排序关键字的比较次数,本算法使用了二分 (折半 )插入法对一个无序数组 R1.n进行排序。排序思想是对一个待插入元素,先通过二分法 (折半 )找到插入位置,后移元素后将该元素插入到恰当位置 (假设 R中的元素互不相同 )。 【算法】 1变量声明 X: DataType i, j, low, high, mid, R0n) 2每循环一次插入一个 Ri 循环: i以 1为步长,从 2到 n,反复执行 准备 X -Ri; (1);

2、high -i-1; 找插入位置 循环:当 (2)时,反复执行 (3); 若 X.key Rmid.key 则 high -mid-1 否则 (4) 后移 循环: j以 -1为步长,从 (5),反复执行 Rj+1 -Rj 插入 Rlow -X 3算法结束 2 阅读下列函数说明和 C代码,将应填入 (n)处的字句写在对应栏内。 【说明 2.1】 以下 C语言函数用二分插入法实现对整型数组 a中 n个数的排序功能。 【函数 2.1】 void fun1 (int a) int i,j,k,r,x,m; for(i=2;i =n;i+) (1); k=1;r=i-1; while(k =r) m=(

3、k+r)/2; if(x am)r=m-1; else (2); for(j=i-1;j =k;j-) aj+l=aj; (3); 【说明 2.2】 以下程序可以把从键盘上输入的十进制数 (long型 )以二十六进制形式输出。 【程序 2.2】 #include stdio.h main() charb16=0,l,2,3 ,4,5,6,7,8,9,A,B,C,D,E,F; int c64,d,i=0,base; long n; printf(“enter a number:n“); scanf(“%1d“, printf(“enter new basc:n“); scanf(“%d“, do

4、 ci=(4); i+; n=n/base; while(n!=0); printf(“transmite new base:n“); for(-i;i =0;-i) d=ci; printf(“%c“,(5); 3 阅读下列说明和 C代码,将应填入 (n)处的字句写在对应栏内。 【说明】 本题给出四个函数,它们的功能分别是: 1 int push(PNODE*top, int e)是进栈函数,形参 top是栈顶指针的指针,形参 e是入栈元素。 2 int pop(PNODE*top, int*e)是出栈函数,形参 top是栈 顶指针的指针,形参 e作为返回出栈元素使用。 3 int enQu

5、eue(PNODE*tail, int e)是入队函数,形参 tail是队尾指针的指针,形参 e是入队元素。 4 int deQueue(PNODE*tail, int*e)是出队函数,形参 tail是队尾指针的指针,形参 e作为返回出队元素使用。 以上四个函数中,返回值为。表示操作成功,返回值为 -1表示操作失败。 栈是用链表实现的;队是用带有辅助结点 (头结点 )的单向循环链表实现的。两种链表的结点类型均为: typedef struct node int value; struct node * next; NODE, * PNODE; 【函数 1】 int push(PNOOE * t

6、op,int e) PNODE p = (PNODE) malloc (sizeof (NODE); if (! p) return-1; p- value=e; (1); *top=p; return 0; 【函数 2】 int pop (PNODE * top,int * e) PNODE p = * top; if(p = NULL) return-1; * e = p- value; (2); free(p); return 0; 【函数 3】 int enQueue (PNODE * tail,int e) PNODE p,t; t= *tail; p = (PNODE) mallo

7、c(sizeof(NODE); if(!p) return-1; p- value=e; p- next=t- next; (3); * tail = p; return 0; 【函数 4】 int deQueue(PNODE * tail,int * e) PNODE p,q; if( * tail)- next = * tail) return-1; p= (* tail)- next; q = p - next; * e =q - value; (4)=q- next; if(,tail=q) (5); free(q); return 0; 4 【说明】 下面程序的功能是:在含有 10个

8、元素的数组中查找最大数,及最大数所在位置(即下标值 ),最大数可能不 止一个。 例如:若输入 2 8 5 7 8 4 8 3 2 8 则应输出 The max: 8 Total: 4 /最大数出现次数 The positions: 1 4 6 9 【函数】 #include stdio.h #define M 10 int fun(int* a,int * n,int pos ) int i, k max = - 32767; (1) for(i=0;i M;i+) if(2)max=ai; for(i=0;i M;i+) if(3)posk+=i; *n=k; return max; mai

9、n() int aM,posM,i=0j,n; printf(“Enter 10umber:“) for(i=0,i M;i+)scanf(“%d“,(4); j=fun(5); printf(“The max:%dn“,j); printf(“Total: %d“, n); printf(“The position:“) for (i=0; i n;i+) printf (“%4d“, posi); printf(“n“); 5 阅读以下应用说明及 Visual Basic程序代码,将应填入 (n)处的字句写在对应栏内。【说明 】 本应用程序的运行窗口如图 2所示。 窗口中的 3个文本框和两

10、个按钮名称分别为 Txt_salary、 Txt_base、 Txt_tax、 Cmd_compute和 Cmd_quit。运行时,文本框 Txt_base存放的是免税金额基数 (应扣除的基本费用 co)当用户在文本框 Txt_salary中输入月收入 (工资或薪金 )并单击 “计算 ”按钮 Cmd_compute后,Txt_tax框中就显示计算所得的应纳税额。文本框 Txt_base和 Txt_tax在运行时不接受用户输入, Txt_base的内容以灰色显示。 个人工资 (或薪金 )所得税是按照超额累进的税率来征收的,方法是:以每月收入总额减去免税金额基数后的余额作为该月的月应纳税所得额,再

11、将应纳税所得额按相应级数采用相应的税率进行累进计算。目前的免税金额基数为 800元,税率如表 1所示。设一个人的月应纳税所得额为 K(元 ),用下面的公式计算其应缴纳的个人所得税额 S (元 ); 若 0 K500,则 S=K5%; 若 500 K2000,则 S=5005%+(K-500)10%; 若 2000 K5000,则 S=5005%+150010%+(K-2000)15%;若 5000 K20000,则 S=5005%+150010%+300015%+(K-5000)20%; 例如,某人某月工资总额为 4100元,减去 800元后,应纳税所得额为 3300元,其应缴纳的个人所得税额

12、为 500*5%+1500*10%+1300*15%=370元。 在开发过程中,需要编写的程序代码如下; 【程序】 Option Base 0 Private Sub Cmd_compute_Click( ) Dim paylevel,taxPrate paylevel = Array(0,500,2000,5000,20000,40000,60000,80000,100000, _1000001) taxPrate = Array (5,10,15,20,25,30,35,40,45) K=(1) S=0 If(K 0) Then For j = 1 To 9 If (2) Then S =

13、 S + (paylevel(j) - paylevel(j -1) ) * taxPrate(j - 1)/100 Else S=S+(3)*taxPrate(j-1)/100 Exit For End If Next j Ent If (4)=Str (S) End Sub Private Sub Cmd_quit_Click( ) End End Sub Private Sub Form_Load() Txt_tax. Text =“ “ Txt_salaw. Text =“ “ Txt_base. Text = 800 Txt_tax. Locked = True Txt_base.

14、Enabled =(5) End Sub 6 阅读以下应用说明及 Visual Basic部分程序代码,将应填入 (n)处的字句写在对应栏内 。 【说明】 单击窗体上的 “测试 ”(cmdTest)按钮,出现一个输入框,要求输入一串字符,将该字符串中的非字母字符删除后,显示在窗体中的一个文本框 (txtShow)中。 【程序代码】 Private Sub cmdTest_Click( ) Dim strT1 ,strT2 As String Dim strCh As (1) Dim intL As Integer Dim intl As Integer strT1 =(2) (“请输入一串字符

15、 “, “字符串输入 “) intL =(3) strT2 = “ “ For intl = I To intL strCh = Mid ( strT1, intl, 1 ) If(strCh “A“And (4) ) Or (strCh “a“ And suCh “z“ )Then strT2 = strT2 + strCh End If Next intl txtShow. Text=(5) End sub 7 阅读以下说明和 C+程序,将应填入 (n)处的字句写在对应栏内。 【说明】 设计一个日期类 Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减

16、去天数、两日期相差的天数等。 在 Date类中设计如下重载运算符函数: Date operator + (int days) : 返回某日期加上天数得到的日期。 Date operator - (int days) : 返回某日期减去天数得到的日期。 int operator - (Date /day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年 class Date int year, month, day /年,月,日 int leap(int); /判断是否闰年 int dton(Date month = m; day = d; void setday(intd)day

17、= d; void setmonth(int m) month = m; void setyear(int y) year =y; int getday() return day; int getmonth() return month: int getyear() return yea; Date operator + (int days) /+运算符重载函数 static Date date; int number =(1) date = ntod(number) return date Date operator - (int days) /-运算符重载函数 staffs Date da

18、te; int number=(2); number - = days; date = ntod(number) return date; int operator - (Date return days; void disp() cout year “.“ month “. “ day endl; ; int Date: :leap( int year) if(4) /是闰年 return 1; /不是闰年 else return0: int Date: dton( Date for(y=1;y =d. year;y+) if(5)days+ =366; /闰年时加 366天 else da

19、ys + = 365; /非闰年时加 365天 for(m =0;m d. month-1;m+) if(6) days += day_tab1 m; else days +=day_tab0 m; days + = d. day; return days; Date Date:ntod(intn) /将从元 0年 0月 0日的天数转换成日期 int y=1,m = 1,d,rest = n,lp; while(1) if(leap(y) if(rest = 366) break; else rest - = 366; else /非闰年 if(rest = 365 ) break; else

20、 rest-=365; y+; y-; Ip = leap(y); while(1) if(lp) /闰年 if(rest day_tab1 m - 1) rest -= day_tab1 m-1; else break; else /非闰 if(rest day_tab0 m -1) rest -= day_tab0 m-1; else break; m+; d = rest; return Date(y;m,d); void main() Date now(2003,10,1) ,then(2005,6,5); cout “ now:“;now. disp(); cout “ then:“

21、;then. disp(); cout “相差天数 :“ (then-now) endl; Date dl = now + 1000,d2 = now - 1000; cout “now + 1000:“ ;d1. disp(); cout “ now - 1000:“ :d2. disp(); 8 阅读以下说明和 Java代码,将解答写入对应栏内。 【说明】 下面的程序的功能是利用实现 Runnable接口的方法来创建线程,并利用它来执行响应的一些操作。最后使得 m的执行结果: 100,如图 3。 注意:请勿改动 main()主方法和其他已有的语句内容,仅在下划线处填入适当的语句。 clas

22、s ClassName (1) Runnable int n; (2) try Thread. sleep (2000); n=100; catch( (3) e) public static void main(String args) try ClassName a = new ClassName( ); (4) threadl. (5) (); threadl, join( ); int m=a.n; System. out. println(“m=“ + m); catch( (3) e) 软件水平考试(初级)程序员下午(应用技术)模拟试卷 2答案与解析 1 【正确答案】 (1)low

23、 -1 (2) low high (3)mid -int(low+high)/2) (4)low -mid+1 (5)i-1到 low 【试题解析】 这是一个通过自然语言描述二分插入排序的过程。整个过程由一个大循环来完成,在大循环中又包含两个循环,第一个循环是一个二分查找过程,第二循环是后移过程。 查找过程是在有序序列 R1 Ri-1中查找 Ri的过程,这是一个典型的折半查找过程。初始时指针 low 指向第一个元素,即 R 1,指针 hish 指向第后一个元素,因此 (1)空处应填写 “low-1”。要查找 Ri,先与中间元素进行比较,中间元素使用 mid 指向,因此, (3)空处应填入 “m

24、id -int(low+high)/2)”。当 Ri Rmid时,则在前半部分查找,将 high -mid-1,如果 Ri Rmid时,则在后半部分查找,因此 (4)空处应填 “low -mid+1”。那什么时候结束呢 ?显然,一种情况是已经找 该元素,由于题目中已经假设元素互不相同,这种情况不会发生,二是没有找到该元素,即指针 low 和指针 high 之间的没有元素了,所以 (2)空处应填写“lowhigh”。 (5)空所在循环是进行数据移动,结合下面语句,可以判断循环是从i-1开始,到什么时候结束呢 ?通过分析,可以知道,最终要把 Ri放在 Rlow的位置,循环要到 low时结束,因此

25、(5)空处应填写 “i-1到 low”。 2 【正确答案】 (1)x=ai (2)ak=x (3)k=m+1 (4) n% base (5)bd 【试题解析】 函数 3.1的思想是依次将数组中的每一个元素插入到有序段中,使有序段的长度不断地扩大。对于待插入元素,先用二分查找法找出应该插入的位置。然后将元素插入。对数组来说,就是将该位置以后的元素依次后移,然后将待插入元素放到移出来的空位中。 程序 3.2用的思想是除 base(base在二十六进制之间 )取余法求得相应进制数,然后再转换输出。 3 【正确答案】 (1)p- next=*top (2)*top=p- next或 * top=(*t

26、op)- next (3)t- next=p或 (*tail)- next=p (4)p- next或 (*tail)- next- next (5)*tail=p或 *tail=(*tail)- next 【试题解析】 (1)插入结点 p后, p应当指向插入前头结点,所以填入 p -next=*top。 (2)出栈后,头指针应指向它的下一结点,所以填入 *top=p- next或*top=(*top)- next。 (3)入队时,需要将结点插入队尾,所以应当填入 (*tail)-next=p 或 t- next=p(t 也指向尾结点 )。 (4)出队时,需要删除队头结点,通过(*tail)-

27、 next可以得到对队头结点的引用。 (4)处是正常删除队头结点的情况,空格处应填入头结点指向下一结点的指针,即 p- next或 (*tail)- next- next。 (5)处是需要考虑的特殊情况,即队列中最后一个元素出队后,要更新队尾指针,即填入 *tail=p或 *tail=(*tail)- next。 4 【正确答案】 (1)k=0 (2)ai max (3)ai=max (4)a+i或 &ai (5)a,&n,pos 【试题解析】 先分析 (4)、 (5)空。 (4)空所在语句是从键盘中读入数据并存放在数组 a之中,循环变量为 I。 (4)空处应填写存放地址,循环变量有两种表示方

28、法,一种是 “a+i”,另一种是 “&ai”。 (5)空处需要填写调用函数 fun()的实参,从函数fun()的形参可以看出,第 1个参数是要处理的数组 a,第 2个参数要返回的最大元素的个数 n,第 3个参数最大元素的下标数组 pos。因此 (5)空处应填写“a,&n,pos”。 再来分析 (1)-(3)空。 (1)、 (3)空所在函数是找最大数,并将其下标存放在数组 pos中,其实现的思路 是先遍历一次数组,从数组中找出最大数 max,再将遍历一次数组,依次将这些最大数的下标存放在数组 pos中。 (2)空所在的循环就是找最大数 max,因此 (2)空处应填写 “ai max”。 (3)空

29、所在的循环是将这些最大数的下标存放在数组 pos中,因此 (3)空处应填写 “ai=max”。 (1)空应填写什么呢 ?从语句“posk+)=i”和 “*n=k”可知,变量 k是用来指出当前要存放在数组 pos中的位置,但这个变量要进行初始化,因此 (1)空处应填写 “k=0”。 5 【正确答案】 (1)Val(Txt_salary.Text)-Val(Txt_base.Text) (2)K paylevel(j) (3)K-paylevel(j-1) (4)Txt_tax.Text (5)false 【试题解析】 (1)K表示该月应纳的所得税额,即文本框 Txt_salary 和 Txt_b

30、ase的值之差,所以此处填入 Val(Txt_salary.Text)-Val(Txt_ base.Text),其中函数 Val将字符转换成数字型。 (2)此处是判断当前职工的工资是否超过第 j级,所以应填入 K paylevel(j)。 (3)当前职工的工资不超过第 j级,计算它与第 j-1级的差额的所得税,所以应填入 K-paylevel(j-1)。 (4)此处输出计算的结果,所以应填入Txt_tax. Text。 (5)由于免税金额不可修改,所以应该将它的 Enabled 属性设置为false。 6 【正确答案】 (1)String (2)InputBox (3)Len(strT1) (

31、4)strCh “Z” (5)strT2 【试题解析】 VB 中字符和字符串属于同一类型,所以 (1)空填 “String”。 (2)空应填 VB 的输入 对话框函数 “InputBox”。根据题意, (3)空是求输入的字符串长度,故用 “Len(strT1)”。 (4)空处的条件是判断是否是字母字符,所以填 strCh “Z”;删除非字母字符后的结果在 strT2 中,而题意是要显示在窗体中的文本框 (txtShow)中,故 (5)空填 “strT2”。 7 【正确答案】 (1)dton(*this)+days (2)dton(*this) (3)dton(*this)-(dton(b)-1

32、 (4)year%4 = 0 & year%1O0! = 0year%400 =0 (5)leap(y) (6)leap(d.year) 【试题解析】 本题程序中对运算符进行重载。其中运算符 +表示某日期加上若干天后的日期,第一个 “-”表示某日期减去若干天后的日期,第二个 “-”表示两日期相差的天数。 函数 leap()判断指定的年份是否为闰年,闰年的条件有两个,一是能被 4整除,但不能被 100整除,或者既能被 100整除,又能被 400整除,所以 (4)空应填入“year%4=0&year%1001=0“year%400=0”。 函数 dton()将指定的日期转 换成从 0年 0月 0日

33、起的天数, (5)、 (6)空用来判断当前的年份是否为闰年,调用函数 leap(),所以分别填入 “leap(y)”和 “leap(d.year)”。函数 ntod将指定的 0年 0月 0日起的天数转换成对应的日期。 “+”运算符重载时,先将当前日期转换为从 0年 0月 0日起的天数,再加上要加的天数,最后将天数再转换成对应的日期。所以 (1)空应填入 “dton(*this)+days”。 第 个 “-”运算符重载时,先将当前日期转换为从 0年 0月 0日起的天数,再减去要减的天数,最后将天数再转换成对应的日期 。而天数的相减由语句 “number-=days”完成,所以 (2)空应填入 “dton(*this)”。 第二个 “-”运算符重载时,先将两个比较的日期都转换为从 0年 0月 O日起的天数,再相减,所以 (3)空应填入 “dton(*this)-dton(b)-1”。 8 【正确答案】 (1)implements (2)ClassName (3)Exception (4)ClassName threadl=new ClassName(); (5)start 【试题解析】 此处为实现接口关键字。 此处应填类 ClassName的构造函数名,即 ClassName。此处应填异常类名Exception。定义并初始化刘象 threadl。线程的启动函数。

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

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

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