ImageVerifierCode 换一换
格式:DOC , 页数:13 ,大小:88KB ,
资源ID:507382      下载积分:2000 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
如需开发票,请勿充值!快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
注意:如需开发票,请勿充值!
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【http://www.mydoc123.com/d-507382.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文([计算机类试卷]软件水平考试(初级)程序员下午(应用技术)模拟试卷36及答案与解析.doc)为本站会员(lawfemale396)主动上传,麦多课文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知麦多课文库(发送邮件至master@mydoc123.com或直接QQ联系客服),我们立即给予删除!

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

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