2004年上半年程序员下午试题

考试总分:9分

考试类型:模拟试题

作答时间:60分钟

已答人数:967

试卷答案:有

试卷介绍: 2004年上半年程序员下午试题

开始答题

试卷预览

  • 1. 试题一阅读下列说明、流程图和算法,将应填入__(n)__处的字句写在答题纸的对应栏内.[流程图说明]下面的流程图用N—S盒图形式描述了数组A中的元素被划分的过程.其划分方法是:以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,而大于基准数的元素向高下标端移动.当划分结束时,基准数定位于A[i],并且数组中下标小于i的元素的值均小于基准数,下标大子i的元素的值均大于基准数。设数组A的下界为low,上界为high,数组中的元素互不相同。例如,对数组(4,2,8,3,6),以4为基准数的划分过程如下:[流程图][算法说明]将上述划分的思想进一步用于被划分出的数组的两部分,就可以对整个数组实现递增排序。设函数intp(intA[],intlow,inthigh)实现了上述流程图的划分过程并返回基准数在数组A中的下标。递归函数voidsort(intA[],ihtL,intH)的功能是实现数组A中元素的递增排序。[算法]voidsort(intA[],ihtl,intH){if(L<H){k=p(A,L,R);//p()返回基准数在数组A中的下标sort(__(4)__;//小于基准数的元素排序sortl__(5)__);//大于基准数的元素排序}}[15分]
  • 2. 试题八阅读下列程序说明和C程序,将应填入__(n)__处的字句写在答题纸的对应栏内。[程序8说明]程序8用于计算某公司每个职工应缴纳的个人所得税额和全体职工缴纳的个人所得税总额。职工的当月收入(工资或薪金)通过键盘输入,每次输入一个职工的工号和工资(或薪金)。由于该公司的工资或薪金是不定时发放的,所以输入过程中每个职工的收入会出现多次输入,整个输入以工号小于等于0结束。假设个人所得税法规定;个人收入所得,按月计税,以每月收入总额减除免税金额800元后的余额作为该月的月应纳税所得额,适用税率如下表所示。上表表明,个人收入所得税是按照超额累进的税率来征收的。设一个人的月应纳税所得额为K(元),用下面的公式计算其应缴纳的个人所得税额S(元):若0#defineMaxNum50#defineBASE800/*免税金额基数*/intpaylevel[]={0,500,2000,5000,20000,40000,60000,80000,100000,100000¨:inttaxPrate[]={5,10,15,20,25,30,35,40,45):/*税率表*/typedefstruct{intld;/*职工的工号*/.longSalary;/*职工的工资*/}Info;/*查找工号为Id的职工在数组employee中的下标,返回值为0表示没有*/intfind(intld,Infoemployee[],intm){intj;employee[0]._dj=Id;for(j=m;__(1)__;j--);returnj;}voidmain(void){InfoemployeeCHaxNum+1];longWage;doublesums0,K,S:inti,j,N=0,Code;scanf("M%ld",&Code,&Wage);/*读入职工号、工资或薪金*/while(Code>0){i=find(Code,employee,N);if(i>0)employee[i].Salary+=Wage:else{__(2)__;employee[N].Id=Code;employee[N].Salary=Wage;}scanf("%d%ld",&Code,&Wage):}for(i=1;i0){for(j=1;j<=9;j++)if(__(4)__)/*月应纳税所得额超过第j级*/S=S+(paylevel[j]-paylevel[j-1])*taxPrate[j-1]/100;else{S=S+(__(5)__)*taxPrate[j-1]/100;break;}}printf("职工%d应缴纳的个人所得税额:%10.21f\n",employee[i].Id,S);sum+=S;}printf("全体职工个人所得税总额:%10,21f\n",sum);}[15分]

    A(1)__;j--);returnj;}voidmain(void){InfoemployeeCHaxNum+1];longWage;doublesums0,K,S:inti,j,N=0,Code;scanf("M%ld",&Code,&Wage);/*读入职工号、工资或薪金*/while(Code>0){i=find(Code,employee,N);if(i>0)employee[i].Salary+=Wage:else{__

    B(2)__;employee[N].Id=Code;employee[N].Salary=Wage;}scanf("%d%ld",&Code,&Wage):}for(i=1;i<=N;i++){K=__

    C(3)__;/*计算月应纳税所得额*/S=0;/*月应纳税额赋初值*/if(K>0){for(j=1;j<=9;j++)if(__

    D(4)__)/*月应纳税所得额超过第j级*/S=S+(paylevel[j]-paylevel[j-1])*taxPrate[j-1]/100;else{S=S+(__

    E(5)__)*taxPrate[j-1]/100;break;}}printf("职工%d应缴纳的个人所得税额:%10.21f\n",employee[i].Id,S);sum+=S;}printf("全体职工个人所得税总额:%10,21f\n",sum);}[15分]

  • 3. 试题七阅读以下应用说明、属性设置及VisualBasic程序代码,将应填入__(n)__处的字句写在答题纸的对应栏内。[应用说明7]本应用程序的运行窗口如下图所示:只要用户单击“闪烁”按钮,文字“欢迎光临”就会以0.3秒消失、0.3秒显示反复进行闪烁;单击“停止”按钮时,闪烁停止,恢复图示的初态。在开发过程中,需要设置的属性如下:[属性设置7]在开发过程中,需要编写的程序代码如下;[程序代码7]PrivateSubCmdFClick()Timerl.__(3)__=TrueLabel.Visible=FalseEndSubPrivateSubTimerl_Timer()__(4)__=notLabel.VisibleEndSubPrivateSubCmdTClick()Timerl.Enabled=__(5)__Label.Visible=trueEndSub[15分]
  • 4. 试题九阅读以下应用说明及VisualBasic程序代码,将应填入__(n)__处的字句写在答题纸的对应栏内.[应用说明9]本应用程序的运行窗口如下图所示:窗口中的三个文本框和两个按钮名称分别为Txt_salary、Txt_base、ht_tax、Cmdcompute和Cmd_quit.运行时,文本框Txt_base中存放的是免税金额基数(应扣除的基本费用)。当用户在文本框ht_salary中输入月收入(工资或薪金)并单击“计算”按钮Crud_compute后,Txt_tax框中就显示计算所得的应纳税额。文本框Txt_base和Txt_tax在运行时不接受用户输入,Txt_base的内容以灰色显示。个人工资(或薪金)所得税是按照超额累进的税率来征收的,方法是:以每月收入总额减去免税金额基数后的余额作为该月的月应纳税所得额,再将应纳税所得额按相应级数采用相应的税率进行累进计算.目前的免税金额基数为800元,税率如下表所示:个人工资(或薪金)所得税是按照超额累进的税率来征收的,方法是:以每月收入总额减去免税金额基数后的余额作为该月的月应纳税所得额,再将应纳税所得额按相应级数采用相应的税率进行累进计算.目前的免税金额基数为800元,税率如下表所示:设一个人的月应纳税所得额为K(元),用下面的公式计算其应缴纳的个人所得税额S(元):若00)ThenForj=1To9If__(2)__ThenS=S+(paylevel(j)-paylevel(j-1))*taxPrate(j-1)/100ElseS=S+(__(3)__)*taxPrate(j-1)/100ExitForEndlfNextjEndlf__(4)__=Str$(S)EndSubPrivateSubCmd_quit_C1ick()EndEndSubPrivateSubForm_Load()Txt_tax.Text=""Txt_salary.Text=""Txt_base.Text=800Txt_tax.Locked=TrueTxt_base.Enabled=__(5)__EndSub[15分]

    A(1)__S=0If(K>0)ThenForj=1To9If__

    B(2)__ThenS=S+(paylevel(j)-paylevel(j-1))*taxPrate(j-1)/100ElseS=S+(__

    C(3)__)*taxPrate(j-1)/100ExitForEndlfNextjEndlf__

    D(4)__=Str$(S)EndSubPrivateSubCmd_quit_C1ick()EndEndSubPrivateSubForm_Load()Txt_tax.Text=""Txt_salary.Text=""Txt_base.Text=800Txt_tax.Locked=TrueTxt_base.Enabled=__

    E(5)__EndSub[15分]

  • 5. 试题二阅读下列函数说明和C函数,将应填入__(n)__处的字句写在答题纸的对应栏内。[函数2.1说明]函数palindrome(chars[])的功能是:判断字符串s是否为回文字符串,若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,称该字符串是回文字符串,例如:“LEVEL”是回文字符串,而“LEVAL”不是。[函数2.1]intpalindrome(charS[]){char*pi,*pj;pi=S;pj=s+strlen(S)-1:while(pi<pj&&__(1)__){pi++;pj--;}if(__(2)__)return-1;elsereturn0;}[函数2.2说明]函数f(char*str,chardel)的功能是;将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。例如若str的值为“33123333435”,del的值为‘3’,调用此函数后,将输出三个子字符串,分别为“12”、“4”和“5”。[函数2.2]voidf(char*str,chardel){inti,j,len;len=strlen(str);i=0;while(i<len){while(__(3)__)i++;/*忽略连续的标志字符*//*寻找从str[i]开始直到标志字符出现的一个子字符串*/j=i+1;while(str[j]!=del&&str[j]!='\0')j++;__(4)__="\0";/*给找到的字符序列置字符串结束标志*/printf("%s\t",&str[i]):’__(5)__;}}[15分]

    A(1)__){pi++;pj--;}if(__

    B(2)__)return-1;elsereturn0;}[函数2.2说明]函数f(char*str,chardel)的功能是;将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。例如若str的值为“33123333435”,del的值为‘3’,调用此函数后,将输出三个子字符串,分别为“12”、“4”和“5”。[函数2.2]voidf(char*str,chardel){inti,j,len;len=strlen(str);i=0;while(i<len){while(__

    C(3)__)i++;/*忽略连续的标志字符*//*寻找从str[i]开始直到标志字符出现的一个子字符串*/j=i+1;while(str[j]!=del&&str[j]!='\0')j++;__

    D(4)__="\0";/*给找到的字符序列置字符串结束标志*/printf("%s\t",&str[i]):’__

    E(5)__;}}[15分]

  • 6. 试题三以下是与VisualBasic开发应用有关的5个问题.对每一个问题,请将解答填入答题纸的对应栏内。(1)在VisualBasic中,工程文件、窗体文件和标准模块文件的扩展名是什么?请从下列选项中选择:prg、prj、exe、vbp、rom、frm、win、fra,std、bas、vbs、Vbm(2)设某窗体上有一个命令按钮,其名称为CmdSave,运行时该按钮上显示有“保存(S)”字样的信息。为使热键ALT+S与该命令按钮相关联,应该对按钮CmdSave的Caption属性设置什么样的属性值?(3)设某窗口内有一个图像框Image1,以及两个命令按钮“放大”和“缩小”。单击“放大”按钮就会使该图像框的长和宽都放大10%;单击“缩小”按钮就会使该图像框的长和宽都缩小10%(该图像框的左上角不动)。请分别写出这两个命令按钮的单击事件过程中的程序代码。(4)为使某个单选按钮初始时默认被选中,在开发时应怎样做?(5)若有语句Tmpval=MsgBox(非法操作!,ybOKCancel+vbCritical,"提示"),请简要描述程序运行时弹出的消息框的主要特征。[15分]

    A(1)在VisualBasic中,工程文件、窗体文件和标准模块文件的扩展名是什么?请从下列选项中选择:prg、prj、exe、vbp、rom、frm、win、fra,std、bas、vbs、Vbm

    B(2)设某窗体上有一个命令按钮,其名称为CmdSave,运行时该按钮上显示有“保存(S)”字样的信息。为使热键ALT+S与该命令按钮相关联,应该对按钮CmdSave的Caption属性设置什么样的属性值?

    C(3)设某窗口内有一个图像框Image1,以及两个命令按钮“放大”和“缩小”。单击“放大”按钮就会使该图像框的长和宽都放大10%;单击“缩小”按钮就会使该图像框的长和宽都缩小10%(该图像框的左上角不动)。请分别写出这两个命令按钮的单击事件过程中的程序代码。

    D(4)为使某个单选按钮初始时默认被选中,在开发时应怎样做?

    E(5)若有语句Tmpval=MsgBox(非法操作!,ybOKCancel+vbCritical,"提示"),请简要描述程序运行时弹出的消息框的主要特征。[15分]

  • 7. 试题四阅读以下说明和C代码,将应填入__(n)__处的字句写在答题纸的对应栏内。[说明]函数MultibaseOutput(longn,intB)的功能是:将一个无符号十进制整数n转换成B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:#defineKAXSIZE32typedefstruct{int*elem;/*栈的存储区*/intmax;/*栈的容量,即找中最多能存放的元素个数*/inttop;/*栈顶指针*/}Stack;[C代码]intlnitStack(Stack*S,intn)/*创建容量为n的空栈*/{S->elem=(int*)matloc(n*sizeof(int));if(S->elem==NULL)return-1;S->max=n;__(1)__=0;return0;}intPush(Stack*S,intitem)/*将整数item压入栈顶*/{if(S->top==S->max){printf("Stackisfull!\n");return-1;}__(2)__;item;return0;}intStackEmpty(StackS){return(!S.top)?1;0;)/*判断栈是否为空*/intPop(Stack*S)/*栈顶元素出栈*/{if(!S->top){printf("Popanemptystack!\n");return-1;)return__(3)__;}voidMultibaseOutput(longn,intB){intm;StackS;if(initStack(&S,MAXSIZE)){printf("Failure!\n");return;}do{if(Push(&s,__(4)__)){printf("Failure!\n");return;}n=__(5)__:}while(n!=0);while(!StackEmpty(S)){/*输出B进制的数*/m=Pop(&S);if(m<10)printf("Kd",m);/*小于10,输出数字*/elseprintf("%c,m+55);/*大于或等于10,输出相应的字符*/}printf("\n");}[15分]

    A(1)__=0;return0;}intPush(Stack*S,intitem)/*将整数item压入栈顶*/{if(S->top==S->max){printf("Stackisfull!\n");return-1;}__

    B(2)__;item;return0;}intStackEmpty(StackS){return(!S.top)?1;0;)/*判断栈是否为空*/intPop(Stack*S)/*栈顶元素出栈*/{if(!S->top){printf("Popanemptystack!\n");return-1;)return__

    C(3)__;}voidMultibaseOutput(longn,intB){intm;StackS;if(initStack(&S,MAXSIZE)){printf("Failure!\n");return;}do{if(Push(&s,__

    D(4)__)){printf("Failure!\n");return;}n=__

    E(5)__:}while(n!=0);while(!StackEmpty(S)){/*输出B进制的数*/m=Pop(&S);if(m<10)printf("Kd",m);/*小于10,输出数字*/elseprintf("%c,m+55);/*大于或等于10,输出相应的字符*/}printf("\n");}[15分]

  • 8. 试题五阅读以下应用说明及VisualBasic程序代码,将应填入__(n)__处的字句写在答题纸的对应栏内。[应用说明5.1]本应用程序的窗体中有一个下拉式列表框(名称为Combol)和两个文本框(名称分别为Txtl和Txt2)。运行时,用户从Combol的列表中进行选择,程序就会将选中条目的内容以及编号(从0开始)分别在文本框Txt1和Txt2中显示出来。[程序代码5.1]PrivateSubCombol_C1ick()Txtl.Text=Combol.__(1)__Txt2.Text=Combol.__(2)__EndSub(注:可供(2)处选择的选项:List,Index,Listlndex,ListCount,Number)[应用说明5.2]本应用程序的运行窗口如下图所示:当用户在输入框(名为Txtln)中输入数值数据,并从下拉式列表框(名为CmbOp)中选择所需的运算后,输出框(名为TxtOut)中就会显示运算的结果。用户单击“清除”按钮(名为CmdClear)后,输入框和输出框都清空。开发该应用的部分程序代码如下:[程序代码5.2]PrivateSubCmbOp_Click()DimDataInAsDouble,DataOutasDoubleDataIn=__(3)__SelectCase__(4)__Case"取整数部分"DataOut=Int(Dataln)Case"求平方根"IfDataln<OThenMsgBox$("负数不能开平方!")ElseDataOut=Sqr(Dataln)EndIfCase"取绝对值"DataOut=Abs(Dataln)(TxtOut.Text=str$(DataOut)__5)__EndSub[15分]

    A(1)__Txt2.Text=Combol.__

    B(2)__EndSub(注:可供(2)处选择的选项:List,Index,Listlndex,ListCount,Number)[应用说明5.2]本应用程序的运行窗口如下图所示:当用户在输入框(名为Txtln)中输入数值数据,并从下拉式列表框(名为CmbOp)中选择所需的运算后,输出框(名为TxtOut)中就会显示运算的结果。用户单击“清除”按钮(名为CmdClear)后,输入框和输出框都清空。开发该应用的部分程序代码如下:[程序代码5.2]PrivateSubCmbOp_Click()DimDataInAsDouble,DataOutasDoubleDataIn=__

    C(3)__SelectCase__

    D(4)__Case"取整数部分"DataOut=Int(Dataln)Case"求平方根"IfDataln<OThenMsgBox$("负数不能开平方!")ElseDataOut=Sqr(Dataln)EndIfCase"取绝对值"DataOut=Abs(Dataln)(TxtOut.Text=str$(DataOut)__5)__EndSub[15分]

  • 9. 试题六阅读下列函数说明和C函数,将应填入__(n)__处的字句写在答题纸的对应栏内。[函数6说明]函数DelAInsB(LinkedListLa,LinkedListlb,intkey1,intkey2,intlen)的功能是,将线性表A中关键码为keyl的结点开始的len个结点,按原顺序移至线性表B中关键码为key2的结点之前,若移动成功,则返回0;否则返回-1。线性表的存储结构为带头结点的单链表,La为表A的头指针,Lb为表B的头指针。单链表结点的类型定义为:typedefstructnode{intkey;structnode*next;}*Linkedhist;[函数6]intDelllnsB(LinkedLiStLa,LinkedListLb,intkeyl,intkey2,intlen){LinkedListp,q,S,prep,pres;intk;if(!La->next||!Lb->next||lennext;prep=La;while(p&&p->key!=keyl){/*查找表A中键值为key1的结点*/prep=p;p=p->next;}if(!p)return-1;/*表A中不存在键值为key1的结点*/q=p;k=1;while(q&&__(1)__){/*在表A中找出待删除的len个结点*/__(2)__:k++;}if(!q)return-1;/*表A中不存在要被删除的len个结点*/•S=Lb->next;__(3)__;while(s&&s->key!=key2){/*查找表B中键值为key2的结点*/pres=s;s=s->next;}if(!s)return-1;/*表B中不存在键值为key2的结点*/__(4)__q->next;/*将表A中的len个结点删除*/q->next:__(5)__pres->next=p;/*将len个结点移至表B*/return0;}[15分]

    A(1)__){/*在表A中找出待删除的len个结点*/__

    B(2)__:k++;}if(!q)return-1;/*表A中不存在要被删除的len个结点*/•S=Lb->next;__

    C(3)__;while(s&&s->key!=key2){/*查找表B中键值为key2的结点*/pres=s;s=s->next;}if(!s)return-1;/*表B中不存在键值为key2的结点*/__

    D(4)__q->next;/*将表A中的len个结点删除*/q->next:__

    E(5)__pres->next=p;/*将len个结点移至表B*/return0;}[15分]

相关试卷
相关题库