[计算机类试卷]2015年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc
《[计算机类试卷]2015年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]2015年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析.doc(12页珍藏版)》请在麦多课文档分享上搜索。
1、2015年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷及答案与解析 1 阅读以下说明和流程图,填补流程图中的空缺。【说明】 下面流程图的功能是:在给定的两个字符串中查找最长的公共子串,输出该公共子串的长度 L及其在各字符串中的起始位置 (L一 O时不存在公共字串 )。例如,字符串 “Thelight is not bright tonight”与 “Tonight the light is not bri ght”的最长公共子串为 “he light isnot bright”,长度为 22,起始位置分别为 2和 10。 设 A1: M表示由 M个字符 Al,A2, , AM依次组
2、成的字符串; B1: N表示由 N个字符 Bl, B2, ,BN依次组成的字符串, MNl。 本流程图采用的算法是:从最大可能的公共子串长度值开始逐步递减,在 A、 B字符串中查找是否存在长度为 L的公共子串,即在 A、 B字符串中分别顺序取出长度为 L的子串后,调用过程判断两个长度为 L的指定字符串是否完全相同 (该过程的流程略 )。【流程图】2 阅读以下说明和 C函数,填补函数代码中的空缺。【说明 1】函数 f(double eps)的功 能是:利用公式 计算并返回 的近似值。 double f(double eps) double n一 1一 0, s = 1 0, term = 1 0
3、, pi = 0 0; while( fabs(term一eps ) pi=pi+term; n=(1); s=(2); term=s /n; return pi*4; 【说明 2】 函数fun(char *str)的功能是:自左至右顺序取出非空字符串 str中的数字字符,形成一个十进制整数 (最多 8位 )。例如,若 str中的字符串为 “iyt?67kp f398d5 j4ia2e3p12”,则函数返回值为 67385423。 I: C函数 2 long fun(char *str) int i=0; long num=0; char*p=str; while(i 8 &(3) if(*p
4、 = 0 &*p = 9 ) num=(4)+*p一 0; +i; (5); return num; 3 阅读以下说明和 C代码,填补代码中的空缺。【说明】 下面的程序代码根据某单位职工的月工资数据文件 (名称为 Salary dat,文本文件 ),通过调用 函数Get1ncomeTax计算出每位职工每月需缴纳的个人所得税额并以文件 (名称为IncomeTax dat,文本文件 )方式保存。 例如,有 4个职工工资数据的 Salary dat内容如下,其中第一列为工号 (整数 ),第 2列为月工资 (实数 )。 1030001 6200 00 1030002 5800 00 2010001 8
5、500 00 2010010 8000 00 相应地,计算所得IncomeTax dat的内容如下所示,其中第 3列为个人所得税额: 1030001 6200 00 47 20 1030002 5800 00 35 94 2010001 8500 00 233 50 2010010 8000 00 193 00 针对工资薪金收入的个人所得税计算公式为: 个人所得税额 =应纳税所得额 税率一速算扣除数 其中,应纳税所得额 =月工资一三险一金一起征点 税率和速算扣除数分别与不同的应纳税所得额对应,如表 3一 1所示。设三险一金为月工资的 19,起征点为 3500元。 例如,某人月工资为 5800元
6、,按规定 19缴纳三险一金,那么: 其应纳税所得额 X=5800一 5800x19一3500=1198元,对应税率 和速算扣除数分别为 3和 0元,因此,其个人所得税额为 11983一 0=35 94元。【 C代码】 #include stdio h #define BASE 3500 /起征点 #define RATE 0 19 /三险一金比例 (1); /声明函数 GetIncomeTax int main() int id; double salary; FILE *fin, *fout; fin=fopen(“Salary dat“, “r“); if(2)return 0; fout
7、=fopen “IncomeTax dat“, “w“); if(3)return 0; while(!feof(fin) if(fscanf(fin, “ood lf“, (4)!=2)break; fprintf(fout, “ d too 21ft 21fn“, id, salary, (5); fclose(fin); fclose(fout); return 0; double GetIncomeTax(double salary) double yns_sd; yns_sd=(6)一 BASE; /*计算应纳税所得额 */ if(yns_sd =0)return 0 0; else
8、 if(yns sd =1500)return yr cs_sd*0 03; else if(yns sd =4500)return yrs_sd*0 1一 105: else if(yns sd=9000)return yns_sd*0 2一 555; else if(yns sd =35000)return yns_sd*0 25一1005; else if(yns sd =55000)return yns_sd*0 3一 2755; else if(yns_sd=80000)return yns_sd*0 35一 5505; return yns_sd*0 45一 13505; 4 阅读
9、以下说明和 C函数,填补代码中的空缺。【说明】 函数 Combine(LinkList La, LinkList Lb)的功能是:将元素呈递减排列的两个含头结点单链表合并为元素值呈递增 (或非递减 )方式排列的单链表,并返回合并所得单链表的头指针。例如,元素递减排列的单链表 La和 Lb如图 4一 1所示,合并所得的单链表如图 4一 2所示。设链表结点类型 定义如下: typedef struct Node int data; struct Node *nextf Node, *LinkList;【 C函数】 LinkList Combine(LinkList La, LinkList Lb)
10、/La和 Lb为含头结点且元素呈递减排列的单链表的头指针 /函数返回值是将La和 Lb合并所得单链表的头指针 /且合并所得链表的元素值呈递增 (或非递减 )方式排列 (1)Lc, tp, pa, pb; /Lc为结果链表的头指针,其他为临时指针 if(!La)return NULL; pa=La一 next; /pa指向 La链表的第一个元素结点 if(!Lb)return NULL; pb=Lb一 next; /pb指向 Lb链表的第一个元素结点 Lc=La; /取 La链表的头结点为合并所得链表的头结点 Lc一 next=NULLf while(2) /pa和 pb所指结点均存在 (即两个
11、链表都没有到达表尾 )/令 tp指向 pa和pb所指结点中的较大者 if(pa一 data pb一 data) tp=paf pa = pa一 next; else f tp=pb; pb=pb一 next; (3)=Lc一 next; /tp所指结点插入 Lc链表的头结点之后 Lc一 next=(4); tp=(pa)? pa: pb; /设置 tp为剩余结点所形成链表的头指针 /将剩余的结点合并入结果链表中, pa作为临时指针使用 while(tp) pa=tp一 next; tp一 next =Lc一 next; Lc一 next = tp; (5); return Lc; 5 阅读下列
12、说明和 C+代码,填补代码中的空缺。【说明】 设计 RGB方式表示颜色的调色板,进行 绘图,其类图如图 5一 1所示。该程序的 C+代码附后。【 C+代码】 #include iostream #include stdlib h #include ctime using namespace std; class MyColorprivate: int red; int green; int bluefpublic: MyColor()red = 0; green = 0; blue=0; MyColor() MyColor(int red, int green, int blue) this一
13、 red = red; this一 green = green; this一 blue = blue; voici print() cout ”Red: “ red “tGreen: “ green “tBlue “ blue endl; ; class Palette private: int number; MyColor* palette; public: Palette() number = 256; palette =(MyColor*)malloc (sizeof(MyColor*)*number); Palette() for(int i= 0; i number; i+) de
14、lete palettei); (1); Palette(MyColor* pale, int number) (2)= num: ber; palette =(MyColor*)malloc(sizeof(MyColor*)*number); memcpy(palette, pale, sizeof(pale)*number); void print() for(int i = 0; i number; i+) , palette i一 print(); ; class Drawing public: (3)int COLORNUMBER=16; public: Drawing() )voi
15、d draw() Palette* palette; int red, green, blue; MyColor* colorCOLORNUMBER; srand(unsigned)time(0); for(int i=0; iCOLORNUMBER; i+) red=rand() 256; green=rand()00 256; blue=rand()00 256; color i =(4)(red, green, blue); palette=new Palette(color, COLORNUMBER); palette一 print(); for(int i=0; i COLORNUM
16、BER, i+)delete color i; ; int main() Drawing*d=(5); d一 draw(); delete d; 6 阅读以下说明和 Java代码,填补代码中的空缺。【说明】 设计 RGB方式表示颜色的调色板,进行绘图。其类图如图 6一 1所示。该程序的 Java代码附后。【 Java代码】 /颜色类 class MyColor private int red, green, blue; public MyColor() red=0; green=0; blue 0; public MyColor(int red, int green, int blue) th
17、is red=red; this green=green; this blue=blue; /其他方法略 public String toString() return “Red: “+red十 “tGreen: +green+“tBlue“ +blue; /调色板类 class Palette public int number; /颜色数 private(1)palette; /颜色表 public Palette() number=256; palette=new MyColornumberl; public Palette(MyColor palette, int number)(2)
18、=number; (3)=palette; /其他方法略 public String toString() String str= fffll for(int i=0; i number; i+) str += i + : +palettei + n”; return str; /绘图类 class Drawing public(4)int COLORNUMBER=16; public static void main(String args) Palette palette; int red, green, blue; MyColor color一 new MyColor ECOLORNUM
19、BERl; for(int i=0; i COLORNUMBER; i+) red=(int)(Math random()*256); green一(int)(Math random()*256); blue=(int)(Math random()*256); color i = (5)(red, green, blue); palette=new Palette(color, COLORNUMBER); System out print1n(palette)j 2015年上半年软件水平考试(初级)程序员下午(应用技术)真题试卷答案与解析 1 【正确答案】 (1)N或 min(M, N) (2
20、)M一 L+1 (3)N一 L+1 (4)1一 1 (5)L, I, J 【试题解析】 本题考查对算法流程图的理解和绘制能力。这是程序员必须具有的技能 。 本题的算法可用来检查某论文是否有大段抄袭了另一论文。 “The light is not brighttonight”是著名的英语绕口令,它与 “Tonight the light is not bright”大同小异。 由于字符串 A和 B的长度分别为 M和 N,而且 MNl,所以它们的公共子串长度 L必然小于或等于 N。题中采用的算法是,从最大可能的公共子串长度值 L开始逐步递减,在 A、 B字符串中查找是否存在长度为 L的公共子串。因
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 2015 上半年 软件 水平 考试 初级 程序员 下午 应用技术 答案 解析 DOC
