一、问答题
1、阅读以下说明和流程图,填补流程图中的空缺,将解答填入答题纸的对应栏内。
[说明]
下面流程图的功能是:在给定的两个字符串中查找最长的公共子串,输出该公共子串的长度L及其在各字符串中的起始位置(L=0时不存在公共字串)。例如,字符串"The light is not bright tonight"与"Tonight the light is not bright"的最长公共子串为"he light is not bright",长度为22,起始位置分别为2和10。
设A[1:M]表示由M个字符A[1],A[2],…,A[M]依次组成的字符串;B[1:N]表示由N个字符B[1],B[2],…,B[N]依次组成的字符串,M≥N≥1。
本流程图采用的算法是:从最大可能的公共子串长度值开始逐步递减,在A、B字符串中查找是否存在长度为L的公共子串,即在A、B字符串中分别顺序取出长度为L的子串后,调用过程判断两个长度为L的指定字符串是否完全相同(该过程的流程略)。
[流程图]
参考答案:
N或rnin(M,N) M-L+1 N-L+1 L-1 L,I,J
2、阅读以下说明和C函数,填补函数代码中的空缺,将解答填入答题纸的对应栏内。
[说明1]
函数f(double eps)的功能是:利用公式计算并返回π的近似值。
[C函数1] double f(double eps) { double n=1.0, s=1.0, term=1.0, pi=0.0; while ( fabs(term) >=eps ){ pi=pi+term; n= ______; s= ______; term=s/n; } return pi*4; }[说明2]
函数fun(char *str)的功能是:自左至右顺序取出非空字符串str中的数字字符,形成一个十进制整数(最多8位)。例如,若str中的字符串为"iyt?67kp f3g8d5.j4ia2e3p12",则函数返回值为67385423。
[C函数2] long fun(char *str) { int i=0; long num: 0; char *p = str; while ( i<8 && ______) { if ( *p >= '0' && *p <= '9' ) { num= ______ + *p - '0'; ++i; } ______; } return num; }
参考答案:
n+2 -s或-1*s *p!='\0'或等价形式 num*10或等价形式 p++或等价形式
3、阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
下面的程序代码根据某单位职工的月工资数据文件(名称为Salary.dat,文本文件),通过调用函数GetIncomeTax计算出每位职工每月需缴纳的个人所得税额并以文件(名称为IncomeTax.dat,文本文件)方式保存。
例如,有4个职工工资数据的Salary.dat内容如下,其中第一列为工号(整数),第2列为月工资(实数)。
1030001 6200.00
1030002 5800.00
2010001 8500.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
针对工资薪金收入的个人所得税计算公式为:
个人所得税额=应纳税所得额×税率-速算扣除数
其中,应纳税所得额=月工资-三险一金-起征点
税率和速算扣除数分别与不同的应纳税所得额对应,如下表所示。
设三险一金为月工资的19%,起征点为3500元。
例如,某人月工资为5800元,按规定19%缴纳三险一金,那么:
其应纳税所得额X=5800-5800×19%-3500=1198元,对应税率和速算扣除数分别为3%和0元,因此,其个人所得税额为1198×3%-0=35.94元。
[C代码] #include <stdio.h> #define BASE 3500 //起征点 #define RATE 0.19 //三险一金比例 ______; //声明函数GetIncomeTax int main() { int id; double salary; FILE *fin,*fout; fin = fopen("Salary.dat","r"); if (______) return 0; fout = fopen("IncomeTax.dat","w"); if (______) return 0; while (!feof(fin)) { if (fscanf(fin,"%d%if", ______) !=2) break; fprintf(fout,"%d\t%.21f\t%.21f\n",id, salary, ______); } fclose(fin); fclose(fout); return 0; } double GetIncomeTax(double salary) { double yns_sd; yns_sd = ______ - BASE; /*计算应纳税所得额*/ if (yns_sd<=0) return 0.0; else if (yns_sd<=1500) return yns_sd*0.03; else if (yns_sd<=4500) return yns_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; }
参考答案:
double GetIncomeTax(double salary)或double GetIncomeTax(double) !fin或fin=NULL或fin==0 !fout或fout==NULL或fout==0 &id.&salary GetIncomeTax(salary) salary*(1-RATE)或等价形式 注:RATE可替换为0.19
4、阅读以下说明和C函数,填补代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
函数Combine(LinkList La,LinkList Lb)的功能是:将元素呈递减排列的两个含头结点单链表合并为元素值呈递增(或非递减)方式排列的单链表,并返回合并所得单链表的头指针。例如,元素递减排列的单链表La和Lb如图1所示,合并所得的单链表如图2所示。
设链表结点类型定义如下:
typedef Struct Node{ int data; struct Node*next; }Node,*LinkList; [C函数] LinkList Combine(LinkList La,LinkList Lb) { //La和Lb为含头结点且元素呈递减排列的单链表的头指针 //函数返回值是将La和Lb合并所得单链表的头指针 //且合并所得链表的元素值呈递增(或非递减)方式排列 ______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=NULL; while(______) { //pa和pb所指结点均存在(即两个链表都没有到达表尾) //令tp指向pa和pb所指结点中的较大者 if(pa->data>pb->data){ tp=pa; pa=pa->next; } else{ tp=pb; pb=pb->next; } ______ =Lc->next; //tp所指结点插入Lc链表的头结点之后 Lc->next=______; } tp=(pa)?pa:pb; //设置tp为剩余结点所形成链表的头指针 //将剩余的结点合并入结果链表中,pa作为临时指针使用 while (tp) { pa=tp->next; tp->next=Lc->next; Lc->next=tp; ______; } return Lc; }
参考答案:
LinkList pa&&pb tp->next tp tp=pa
5、阅读下列说明和C++代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
设计RGB方式表示颜色的调色板,进行绘图,其类图如下图所示。该程序的C++代码附后。
类图
[C++代码] #include<iostream> #include <stdlib. h> #include <crime> using namespace std; class MyColor { private: int red; int green; int blue; public: MyColor(){red = 0; green = 0; blue = 0; } ~MyColor () { } MyColor(int red, int green, int blue) { this->red = red; this->green = green; this->blue = blue;} void 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++) { delete palette[i]; } ______; } Palette(MyColor** pale, int number) { ______ = number; palette = (MyColor**)malloc(sizeof(MyColor*)*number); memcpy(palette, pale,sizeof(pale)*number); } //其他方法略 void print() { for (int i = 0; i<number; i++) { cout << i << ":"; palette [i] ->print (); } } }; class Drawing{ public: ______ int COLORNUMBER = 16; public: ~Drawing() { } void draw() { Palette* palette; int red, green, blue; MyColor* color[COLORNUMBER]; srand ((unsigned) time (0)); for (int i=0; i<COLORNUMBER; i++) { red=rand() % 256; green = rand() % 256; blue = rand() % 256; color[i] = ______ (red, green, blue); } palette = new Palette (color, COLORNUMBER); palette->print (); for (int i=0; i < COLORNUMBER; i++) delete color[i]; } }; int main () { Drawing * d = ______; d->draw (); delete d; }
参考答案:
free(palette) this->number static const new MyColor new Drawing()
6、阅读以下说明和Java代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
[说明]
设计RGB方式表示颜色的调色板,进行绘图。其类图如下图所示。该程序的Java代码附后。
类图
[Java代码] //颜色类 class MyColor { private int red, green, blue; public MyColor() { red = 0; green = O; blue=0; } public MyColor(int red, int green, int blue) { this.red = red; this.green = green; this.blue = blue; } //其他方法略 public String toString() { return "Red: " + red + "\tGreen: " + green + "\tBlue " + blue; } } //调色板类 class Palette { public int number; //颜色数 private ______ palette; //颜色表 public Palette() { number = 256; palette = new MyColor[number]; } public Palette(MyColor[] palette, int number) ______ = number; ______ = palette; } //其他方法略 public String toString() { String str = ""; for (int i = 0; i < number; i++) { str += i+":" + palette[i] + "\n"; } return str; } } //绘图类 class Drawing { public ______ int COLORNUMBER = 16; public static void main(String[] args) { Palette palette; int red, green, blue; MyColor[] color = new MyColor[COLORNUMBER]; for (int i = 0; i < COLORNUMBER; i++) { red = (int) (Math.random() * 256); green = (int) (Math.random() * 256); blue = (int) (Math.random() * 256); color[i] = ______ (red, green, blue); } palette = new Palette (color, COLORNUMBER); System.out.println (palette); } }
参考答案:
MyColor[] this.number this.palette static final new MyColor
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!