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

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

1、软件水平考试(初级)程序员下午(应用技术)模拟试卷 36及答案与解析 1 阅读下列说明和流程图,将应填入 (n)处的语句写在对应栏内。 【说明】 下列流程图用泰勒 (Taylor)展开式 y=ex=1+x+x2/2!+x3/3!+x n/n!+ 计算并打印 ex的近似值,其中用 ( 0)表示误差要求。 【流程图】 2 阅读以下函数说明和 C语言函数,将应填入 (n)处的字句写在答题纸的对应栏内。 【函数 2.1说明】 递归函数 sum(int a, int n)的返回值是数组 a的前 n个元素之和。 【函数 2.1】 int sum (int a,int n) if(n 0) return (

2、1); else (2); 【函数 2.2说明】 有 3个整数,设计函数 compare(int a, int b, int c)求其中最大的数。 【函数 2.2】 int compare (int a, int b, int c ) int temp, max; (3) a:b; (4) temp:c; 【函数 2.3说明】 递归函数 dec(int a, int n)判断数组 a的前 n个元素是否是不递增的。不递增返回 1,否则返回 0。 【函数 2.3】 int dec( int a, int n ) if(n =1) return 1; if(a0 a1) return 0; retu

3、rn (5); 3 阅读以下说明和 C语言程序,将应填入 (n)处的字句写在对应栏内。 【说明】 以 字符流形式读入一个文件,从文件中检索出 6种 C语言的关键字,并统计、输出每种关键字在文件中出现的次数。本程序中规定:单词是一个以空格或 t、 n结束的字符串。其中 6种关键字在程序中已经给出。 【程序】 #include stdio.h #include stdlib.h FILE *cp; char fname20, buf100; int NUM; struct key char word10; int count; keyword= “if“, 0, “char“, 0, “int“,

4、 0, “else“, 0, “while“, 0, “return“, 0; char *getword (FILE *fp) int i=0; char c; while(c=getc(fp)!= EOF if(c=EOF) return (NULL); else bufi+=c; while(c=fgetc(fp)!=EOF bufi=0; return(buf); void lookup(char *p) int i; char *q, *s; for(i=0; i NUM; i+) q=(2); s=p; while(*s break; return; void main() int

5、 i; char *word; printf(“lnput file name:“); scanf(“%s“, fname); if(cp=fopen(fname, “r“)=NULL) printf(“File open error: %sn“, fname); exit(0); NUM=sizeof(keyword)/sizeof(struct key); while(5) lookup(word); fclose(cp); for(i=0;i NUM;i+) printf(“keyword:%-20s count=%dn“,keywordi.word,keywordi.count); 4

6、 阅读以下说明和 C语言程序,将应填入 (n)处的字句写在对应栏内。 【说明】 魔方阵,又叫幻方,在我国古代称为 “纵横图 ”。由 1N2 共 N2个自然数构成每行、每列及两对角线上各数之和都相等的 NN方阵,这样的方阵就叫做 N阶魔方阵。顾名思义,奇阶魔方阵就是 N为奇数的幻方。 奇数阶魔方 阵的生成方法如下: (1)第一个位置在第一行正中。 (2)新位置应当处于最近一个插入位置右上方,但如果右上方位置已超出方阵上边界,则新位置取应选列的最下一个位置;如果超出右边界,则新位置取应选行的最左一个位置。 (3)若最近一个插入元素为 N的整数倍,则选下面一行同列上的位置为新位置。本题要求输入一个数

7、据 n,然后打印由自然数 1到 n2的自然数构成的魔方阵 (n为奇数 )。例如,当 n=3时,魔方阵为: 8 1 6 3 5 7 4 9 2 了解其生成方法后,就可以根据此方法来写出程序了。首先设置 int变量 i, j,m, n。其中 i标记魔方阵的行; j标记魔方阵的列; n表示魔方阵的维数,通过输入得到;通过 m递加得到插入的数据。数组 aMAXMAX用于存放魔方阵元素。这里预定义了 MAX的大小,没有采用动态分配,在此设置为 15,即最大求得1515阶魔方阵。 【程序】 #include stdio.h #define MAX 15 void main() int n; int m=1

8、; int i,j; int aMAXMAX; printf(“Please input the rank of matrix:“); scanf(“%d“, i=0; (1) while(2) aij=m; m+; i-; j+; if(m-1)%n=0 if(j (n-1) /超出上界 (4) if(j (n-1) (5) for(i=0;i n;i+) /输出魔方阵 for(j=0;j n;j+) if(aij/10=0) printf(“%d “,aij); /对程序无影响,只是使输出的数每一列对齐 else printf(“%d “,aij); if(j=(n-1) printf(“

9、n“); 5 阅读以下说明和 C+程序,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 本程序用于评选优秀教师和学生。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出来。其类结构如下图所示: 【程序】 #include iostream.h #include stdio. h class base protected: char name8; public: void getname()cout “name:“; cin name; void printname()cout“name:“ name endl; (1) ; class student: (2) int num

10、; public: void getnum() cout “score:“; cin num; bool isgood() return (3) ; class teacher: (2) int num; public: void getnum() cout “paper:“; cin num; bool isgood() return (num 3)?true:false; void main() base *p50; student *pstud; teacher *ptech; char ch; int count=0; do cout “input teacher(t) or stud

11、ent(s):“; cin ch; if(ch=s) pstud=new student; pstud- getname(); pstud- getnum(); pcount+=pstud; else if(ch=t) (4) ptech- getname(); ptech- getnum(); pcount+=ptech; else cout “input is wrong“ endl; cout “continue to iput(y/n)?“; cinch; while(ch=y); for(int i=0;i count;i+) if(5) pi- printname(); 6 阅读以

12、下说明、 Java代码,将应填入 (n)处的字句写在答题纸的对应栏内。 【说明】 IC卡和 200卡都是从电话卡派生的。下面的程序将电话卡定义为抽象类。其中 balance为双精度变量,代表电话卡中的余额; cardNumber是长整型变量,代表电话卡的卡号; password是整型变量,代表电话卡的密码; connectNumber是字符串变量,代表电话卡的接入号码; connected是布尔变量,代表电话是否接通。 performDial()实现各种电话 接通后的扣除费用的操作。其中 200卡每次通话扣除0.5元的通话费用和附加费用; IC卡每次通话扣除 0.9元的通话费。 TimeLef

13、t()方法用于测试电话卡余额还可以拨打电话的次数。 performConnection()用于电话接入操作,如果卡号和密码正确,则接通;否则,接不通。 【程序】 abstract class PhoneCard doubte balace; (1) perfermDial(); double getBalance() return balance; double TimeLeft() double current=balance; int times=0; do (2) times+; white(balance =0); balance=current; return times-1; ab

14、stract class Number_PhoneCard extends PhoneCard long cardNumber: int password; String connectNumber; Boolean connected; Boolean performConnection(long cn, int pw) if(cn=cardNumber return true; else return false; class IC Card (4) boolean performDial() if(balance 0.9) balance-=0.9; return true; else

15、return false; class D200_Card (4) static double additoryFee; static additoryFee=0.1; boolean performDial() if(balance (0,5+additeryFee) (5) return true; else return false; 软件水平考试(初级)程序员下午(应用技术)模拟试卷 36答案与解析 1 【正确答案】 (1)0 (2)0 (3)|t|: (4)s+1 (5)t*x/s 【试题解析】 本题考查程序流程图的内容。 首先让我们来了解一下题目的真正含义,题目要求用泰勒展开式计算

16、 y=ex的近似值。并且给出了误差要求,只要当误差小于 时,就可以输出计算结果了。泰勒展开式的式子是 n项之和,每多加一项,其值就越接近真实值。因此,在程序设计时,每加一项之前,先进行此项与 的比较,来判定计算结果是否已满足题目要求。 从流程图中看到有 S、 y、 t、 x这几个变量。其中 x、 y是公式中的变量,而 S、 t则是中间变量。从 yy+t 语句可以看出, t是每次要加的项, S则是帮助 t改变的变量。在计算开始前,我们应该将 y的值赋为零,因此,第 (2)空答案就为 0;而 S在 t没发生变化的初值也应该是 0,即第 (1)空答案为 0。 第 (3)空处是个条件判断语句,应该是进

17、行该加项与 比较判断,因此第 (3)空的答案是 |t|:。 第 (4)空与第 (5)空要一起考虑。由于 S是帮助 t改变的变量,而 t的每次改变是分母乘以一个加 1的数,而分子乘以 x。这里假设 S是帮助 t改变分母的变量,第 (4)空应填 s+1,那么 第 (5)空应该为 t*x/s。 2 【正确答案】 (1)an-1+sum(a, n-1)或者 a0+sum(a+1, n-1); (2)return 0; (3)temp=(ab)? (4)max=(temp c)? (5)dec(a+1,n-1); 【试题解析】 本题考查 C语言函数和一些基本运算。 下面我们分别来分析这几个函数。在函数

18、2.1中,题目要求用此递归函数求数组前 n个元素之和。递归函数的特点是在函数体中不停地调用函数本身,只是将其函数的参数范围改变。题目中要求 我们求数组前 n个元素之和,我们可以这样理解,即前 n个元素之和等于第 n个元素加上前 n-1个元素之和,现在的问题转化成如何求前 n-1个元素之和。同样的道理,可以将求前 n-1个元素之和转化成求前n-2个元素之和,直到这个数小于 0。从函数 2.1的代码中可以知道,在计算以前,首先判断 n与 0的关系,如果 n小于 0,说明数组中无元素,因此,返回 0值;如果 n大于等于 0,说明数组中有元素,应该返回的结果是第 n个元素加上前n-1个元素之和,而前

19、n-1个元素之和是调用函数本身来计算的。因此,第 (1)空和第 (2)空的答案分别是 an-1)+sum(a, n-1), return()。 在函数 2.2中,题目要求我们在三个数中取最大数,在数学中,我们从三个数中取最大数时,一般是首先拿其中两个数比较,取较大的数再与第三个数比较,再取其较大的数,这个数就是三个数中的最大数。从函数 2.2的代码中知道,三个数a、 b、 c,两个整型变量 temp与 max。根据求三个数中最大数的数学过程和函数中已给出的代码可知,第 (3)空处语句应该为 temp=(a b)?a:b,求得 a、 b中较大数并存放在变量 temp中。第 (4)空处语句为 ma

20、x=(temp c)?temp:c。 在函数 2.3中,题目要求判断数组 a的前 n个元素是否是不递增的。不递增返回 1,否则返回 0。要判断前 n个元素是否是不递增的,需要判断前 n-1个元素是否是不递增的,以及第 n个元素与第 n-1个元素的关系。此处与函数 2.1一样,用的都是递归函数,只是出口不同,在函数 2.1中,只要数组中没有元素了,递归结束,这里只要第 n个元素大于第 n-1个元素,则返回 0,递归结束。又由 if(a0a1)语句可知,在每次调用函数时,都将其数组中的第一个元素与第二个元素比较来作为递归的出口,如果结果为假,就说 明数组的前面两项的关系是不递增的,在下次调用中不用

21、再考虑第一项。因此第 (5)空应该是 dec(a+1,n-1)。 3 【正确答案】 (1)(c= |c=t|c=n) (2) q+; (4) *s=*q (5)(word=getword(cp)!=NULL 【试题解析】 本题考查 C语言对文件中字符串处理的相关知识。 题目要求从文件中检索已经给出的 6种 C语言的关键字,并统计、输出每种关键字在文件中出现的次 数。这需要我们将文件中的字符串与 6种 C语言的关键字匹配,如果匹配成功一次,则记录下相关的内容。 从代码中我们可以分析出,函数 getword()的主要功能是从文件中取出单个单词,并保存在数组 buf中,第 (1)空就在这个函数中,在

22、文件中取单词时,首先要能区别单词的开始和结束标志。题目中规定单词是一个以空格或 t、 n,结束的字符串,再结合函数 getword()的代码我们可以知道,此空应该填 (c= |c=t|c=n)。 函数 lookup()是关键函数,其功能是匹配 文件的字符串与 C语言的关键字,并记录匹配结果。函数 lookup()中的参数指针变量 p是指向 getword()的返回结果的。函数体中 for循环语句下面是分别用其不同的关键字做匹配,在匹配过程中,用指针变量 q和 s分别指向关键字字符串和文件字符串。因此,第 (2)空处的作用是让指针变量 q指向关键字字符串,因此,答案为 (2)m =n*n (3)

23、i=i+2; (4)i=i+n; (5)j=j-n; 【试题解析】 本题考查我们对魔方阵的理解及用 C语言的实现。 题目给出了魔方阵的原理和生成过程,现在要我们往 1515的二维数组中添加元素,使其呈现魔方阵的结构。程序中的变量 i和, i确定增加的元素在数组中的位置,每次增加的元素在原来的基础上加 1,只是位置按魔方阵的原理存放。 下面来看代码,在第 (1)空处,还没有进入增加元素的循环中,应该是赋初值阶 段,而用来确定元素在数组中位置的变量 i已有值, i没有,再根据魔方阵的生成过程的第一条 (第一 个位置在第一行正中 )可知,此空的答案应该是 i=(n+1)/2-1。 第 (2)空处是一

24、个循环条件,结合全过程来看,我们知道这个循环是不停往数组中增加元素,直到添加完 nn个元素。因此,此处是判断要添加的元素应该小于nn。答案为 m =n*n。 第 (3)空前面是个条件选择语句,其条件是判断最近一个插入元素 m是否可以被n整除。根据魔方阵的生成过程的第三条 (若最近一个插入元素为 N的整倍数,则选下面一行同列上的位置为新位置 ),即 i=i+1, i不变。但由于在插入一个元素后,变量 i和 j会分别自动减 1和加 1。因 此,答案为 i=i+2。 第 (4)空前面也是个条件选择语句,其条件是判断是否超出上界,根据魔方阵的生成过程的第二条可以知道,如右上方位置已超出方阵上边界,则新

25、位置取应选列的最下一个位置,因此,此空应该填 i=i+n。 第 (5)空前面是个条件选择语句,其条件是判断是否超出右边界,根据魔方阵的生成过程的第二条可以知道,如超出右边界则新位置取应选行的最左一个位置。因此,此空应该填 j=j-n。 5 【正确答案】 (1)virtual bool isgood()=0; (2)public base (3)(num 90)?true:false; (4)ptech=new teacher; (5)pi- isgood()=true 【试题解析】 本题考查 C+中类的继承、虚函数和其他一些语法结构。 题目要求本题的程序用于评选优秀教师和学生,在输入一系列教师

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

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

28、代码就很容易明白了,此空要完成的任务是动态创建一个 teacher对象, 因此,答案为 ptech=new teacher。 第 (5)空所在的位置是一个条件选择语句的条件,再结合全程序来看,不难发现此时程序还没有实现对优秀学生及教师的姓名的列出,而第 (5)空下面的语句刚好用来列出姓名,那么第 (5)空的功能是判断是否为优秀学生或老师,调用函数isgood()可以实现。因此,此空答案为 pi- isgood()=true。 6 【正确答案】 (1)abstract Boolean (2)performDial(); (3)pw=password (4)extends Number_Phone

29、Card (5)balance-=0.5+additoryFee; 【试题解析】 本题考查 Java对抽象类的定义、继承及电话卡业务的实现。 在 Java程序设计语言中,抽象类是指在类中定义了抽象成员函数的类,程序中把基类 PhoneCard定义为抽象类,其中有一个成员变量和三个成员函数,但是已给出定义的两个函数都不是抽象成员函数。因此,第 (1)空的作用是把成员函数performDial0定义为抽象成员函数,结合后面的程序我们可以知道,函数performDial()的返回类型是布 尔型,因此,此空的答案为 abstract Boolean。 第 (2)空在函数 TimeLeft()中,此函数

30、用于测试电话卡余额还可以拨打电话的次数,要实现此功能应该知道每次电话接通后扣除的费用,函数 performDial()能实现这个功能,此处应该是调用这个函数,因此,此空答案为 performDial()。 第 (3)空在函数 performConnection()中,此函数用于电话接入操作,如果卡号和密码正确,则接通;否则,接不通。结合程序中代码,我们知道此空是要判断密码是否正确,而参数 pw中存放 的是密码,因此,此空答案为 pw=password。 第 (4)空是在派生类的定义时,对派生类继承关系的说明。电话卡的所有属性在抽象类 Number_PhoneCard中都有了完整的定义,那么这两个电话卡的派生类应该继承 Number_PhoneCard抽象类,因此,此空答案为 extends Number_PhoneCard。 第 (5)空在 D200_Card类的 performDial()函数中,这个函数的作用是对 200卡每次通话进行扣费操作。根据题目条件, 200卡每次通话扣除 0.5元,再结合程序 中的内容,我们可以推导出第 (5)空要完成的任务是费用扣除操作,因此,此空答案为 balance-=0.5+additoryFee。

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

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

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