⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 历届试题 - 一九九八年度高级程序员级 下午试卷.htm

📁 几套关于程序员初级和高级的试题和答案
💻 HTM
📖 第 1 页 / 共 3 页
字号:
            <BR><BR>       x=70,y=70   x=70,y=90   x=70,y=70   x=90,y=70 
            <BR><BR>                        x=70,y=90   x=70,y=75 
            <BR><BR>                                 x=75,y=90 
            <BR><BR>                                 x=75,y=80 
            <BR><BR>                                 x=70,y=90 <BR><BR>试题三 
            <BR><BR>  阅读以下说明和流程图,回答问题1至问题2,将解答写在答卷的对应栏内。 <BR><BR>[说明] 
            <BR><BR>  本流程图描述了某种字符序列的变换过程。变换前的字符序列以字符“#”结尾,它存放在数组old中,变换后的字符序列存放在数组new中,它不包含结束标志“#”。流程图按下列规则进行变换: 
            <BR><BR>1.删除字符序列中的注解。注解用一对“!”字符分隔,注解中可出现除“#”外的任何字符。 
            <BR><BR>2.字符常数完整地保留。字符常数用一对“&”字符分隔,字符常数中可出现、外的任何字符。 
            <BR><BR>  值得注意的是:当字符“&”需要出现在字符常数中时,通常用二个连续的“&”表示,在 
            <BR><BR>  保留字符常数时,这二个连续的“&”都被保留。此外,作为字符常数分隔符的一对“&” <BR><BR>  也被保留。 
            <BR><BR>3.除字符常数和注解外,出现在其它地方的连续多个空格压缩成一个空格,但字符序列中先导 
            <BR><BR>  的空格则全部删除。 <BR><BR>4.注解和字符常数之外的非空格字符均保持不变。 
            <BR><BR>  本流程图对原字符序列从左到右扫描,根据遇到的当前字符来搜索连续空格、注解或字符常 
            <BR><BR>  数,然后按上述变换规则变换。若遇到的当前字符是“!”,则寻找下一个“!”字符(若 
            <BR><BR>  找不到则作出错处理),这二个“!”间的字符全部看作为注解。若当前字符是“&”字符 
            <BR><BR>  则寻找与之配对的下一个“&”字符(若找不到则作出错处理),其间的字符全部看作为字 <BR><BR>  符常数。 
            <BR><BR>  例如: <BR><BR>  原字符序列: 
            <BR><BR>  └┘└┘a└┘└┘└┘b&cd&&└┘└┘!e&f└┘└┘ g!h& └┘└┘!└┘└┘j# 
            <BR><BR>  变换后的字符序列:a└┘bdcd&&└┘└┘!e&f└┘g└┘j 
            <BR><BR>  本流程图假定在数组old中一定存在“#”字符。 <BR><BR>[问题1] 
            <BR><BR>  填充流程图中的①~⑤,把解答写在答卷的相应位置上。 <BR><BR>[问题2] 
            <BR><BR>  当原字符序列中汪解的前后均是连续空格时,本流程图将注解前后的连续空格分别压缩成一个空格,删除注解后,将导致变换后的新字符序列出现二个连续的空格。如; 
            <BR><BR>           g└┘└┘!h&└┘└┘i!└┘└┘j <BR><BR>本流程图将变换成g└┘└┘j。 
            <BR><BR>  为使变换后的新序列中除字符常数外没有连续的空格,图中的虚线框需作何改动(只需画出修改后的流程图) 
            <BR><BR>试题四 
            <BR><BR>  在COMET型计算机上可以使用试卷上所附的CASL汇编语言。阅读以下程序说明和CASL程序,将应填入_(n)_处的字句,写在答卷的对应栏内。 
            <BR><BR>[程序说明] <BR><BR>  本程序是统计字符串中数字字符“0”至“9”的出现次数。 
            <BR><BR>  字符串中的每个字符是用ASCII码存贮。一个存贮单元存放两个字符,每个字符占8位二进位。 
            <BR><BR>  程序中,被统计的字符串从左至右存放在STR开始的连续单元中,并假定其长度不超过200,字符串以‘·’符作为结束。NCH开始的10个单元存放统计结果。<BR><BR>   START 
            MIN <BR>MIN  LEA GR2,9 <BR><BR>   LEA GR0,0 <BR><BR>L1  _(1)_ 
            <BR><BR>   LEA GR2,-1,GR2 <BR><BR>   LEA GR4,0 <BR><BR>   LEA GR1,0 
            <BR><BR>L2  LD GR2,STR,GR1 <BR><BR>   EOR GR4,C1 <BR><BR>   JNZ RL 
            <BR><BR>   _(2)_ <BR><BR>RL  SRL GR2,8 <BR><BR>   LEA GR3,0,GR2 
            <BR><BR>   SUB BR3,C9 <BR><BR>   JNZ L4 <BR><BR>L3  LEA GR3,0,GR2 
            <BR><BR>   SUB GR3,CO <BR><BR>   JM1 L5 <BR><BR>   LEA GR2,1 
            <BR><BR>   _(3)_ <BR><BR>   _(4)_ <BR><BR>L4  GR4 0,GR4 
            <BR><BR>   JNZ L2 <BR><BR>   _(5)_ <BR><BR>   JMP L2 <BR><BR>L5  SUB 
            GR2,C <BR><BR>   JNZ L4 <BR><BR>   EXIT <BR><BR>C1  DC 1 <BR><BR>C 
              DC '·' <BR><BR>C0  DC &#390;' <BR><BR>C9  DC 9 <BR><BR>STR  DS 200 
            <BR><BR>NCH  DS 10 <BR><BR>   END <BR><BR><BR>试题五 
            <BR><BR>  阅读以下程序说明和C程序,将应填入_(n)_处的字句,写在答卷的对应栏内。 <BR><BR>[程序说明] 
            <BR><BR>  这里给出的程序逐一从指走课程成绩文件中读入学生的学号和成绩,对同一学生汇总他的总成绩,并按以下格式输出名次(按总成绩由高到低的顺序)、总成绩、同一名次的学生人数、同一名次学生的学号(按学号由小到大的顺序)。 
            <BR><BR>  程序约定学生学习课程不超过30种,课程成绩文件的第一个数字就是课程号,统计过程中,同一课程号的成绩文件不能重复输入。 
            <BR><BR>  程序采用链表结构存储学生有关信息,链表中的每个表元对应一位学生。程序在数据输入过程中,形成一个按学生学号从小到大顺序链接的有序链表。当数据输入结束后,程序按总成绩从高到低,学号从小到大的顺序对链表排序。程序最后按指定格式输出链表中的信息。程序的输出格式如下例所示:<BR><BR>名 次 
            总成绩 人 数 学 号     <BR>1 470 2 12 25   <BR>3 450 3 15 24 50 <BR>6 430 1 
            14     <BR>7 401 3 13 18 45 <BR>    …       
            <BR><BR>[程序]<BR><BR>#include 〈stdio.h〉 <BR><BR>#define M 30 
            <BR><BR>#define NLEN 10 <BR><BR>typedef struct node {int 
            cur_s/*最近输入成绩的科目 */ <BR><BR>          char no[NLEN];int score; 
            <BR><BR>          stuction node *next; <BR><BR>           }NODE; 
            <BR><BR>N0DE*bubblesort(N0DE*head) <BR><BR>{NODE 
            *q,*tail,*p=(MODE*)malloc(sizeof(NODE); 
            <BR><BR> p→next=head;head=p;tail=NULL; <BR><BR> while 
            (tail!=___(1)___) <BR><BR> {p=head;q=p→next; <BR><BR>  while 
            (q→enxt!=tail) <BR><BR>  {if (p→next→score→〈q→next→score|| 
            <BR><BR>     p→next→scor==q→next→score&& <BR><BR>     
            strcmp(p→next→no,q→next→no)〉0) 
            <BR><BR>   {p→next=_(2)_,/*两相邻表元链接关系前后颠倒*/ 
            <BR><BR>    _(3)_=q→next→next;p→next→next=q; <BR><BR>   } 
            <BR><BR>   p=p→next;/*调整p和q*/ q=_(4)_; <BR><BR>  } <BR><BR>  tail=q; 
            <BR><BR> } <BR><BR> p=head→next;free(head);return p; <BR><BR>} 
            <BR><BR>int s[M],sp; <BR><BR>main() <BR><BR>{FILE*fp; 
            <BR><BR> NODE*h,*u,*v*p; <BR><BR> int ss,,mark,order,c; 
            <BR><BR> char fname[80],no[NLEN],ans; <BR><BR> for(h=NULL,sp=0;;) 
            <BR><BR> {print(''输入科目成绩文件名(输入aaaa表示强行结束)。\n"); <BR><BR>  while (1) 
            <BR><BR>  {scanf("%s",fname); 
            <BR><BR>   if(strcmp(fname,"aaaa")==0)break; 
            <BR><BR>   if((fp=fopen(fname,"r"))==NULL) 
            <BR><BR>    printf("不能打开文件%s,请重新输入科目文件名。\n,fname); <BR><BR>   else 
            break; <BR><BR>  } <BR><BR>  if(strcmp(fname,"aaaa")==0)break; 
            <BR><BR>  fscanf(fp,"%d",&ss);/·输入科目号·/s[sp]=ss; 
            <BR><BR>  for(i=0;s[i]!=ss;i++); <BR><BR>  if(i<SP) <br> 
            <BR>  {printf("该科目的成绩已输入,请输入别的科目成绩文件。\n"); <BR><BR>   continue; 
            <BR><BR>  } <BR><BR>  sp++; 
            <BR><BR>  while(fscanf(fp,"%s%d",no,&mark)==2) 
            <BR><BR>  {/*在链表中寻找最近输入的学号*/ <BR><BR>   for(v=h;v!=NULL,&& 
            strcmp(v→no,no)<0;u=v,v=v→next); <BR><BR>   if(v!=NULL && 
            strcmp(v→no,no)==0) <BR><BR>   {if (v→cur_s!==ss) 
            <BR><BR>    {v→score+=mark;v→cur_s=ss; 
            <BR><BR>    }/*同一科目成绩的重复输入,后输入成绩被忽略*/ <BR><BR>   }else 
            {p=(NODE*)malloc(sizeof(node);/*一位新的学生*/ 
            <BR><BR>       strcpy(p→no,no);p→score=mark;p→cur_s=ss; 
            <BR><BR>       p→next=v; <BR><BR>       if(v==h) h=p;else u→next=p; 
            <BR><BR>      } <BR><BR>  } fclose(fp); 
            <BR><BR>  printf("还有科目成绩文件要输入吗?(Y/N)");scanf("%c",&amp;ans); 
            <BR><BR>  if(anns=='N'||ans=='n')break; <BR><BR> } 
            <BR><BR> h=bubblesort(h); <BR><BR> printf("名次 总成绩 人数 
            学号\n");/*以下按格式要求输出*/ <BR><BR> v=h;order=1; <BR><BR> while(v!=NULL) 
            <BR><BR> {for (c=1,u=v→next;u!NULL 
            &amp;&amp;u→score==v→score;c++,u=u→next); 
            <BR><BR>  printf("%4d%7d%8d ",order,v→score,c); 
            <BR><BR>  for(order+=c,i=1;_(5)_;v=v→next,i++) <BR><BR>  {if (i>1 && 
            i%5==1) printf("\n%23c",''); <BR><BR>   printf("%s",v→no); 
            <BR><BR>  }printf("\n"); <BR><BR> } <BR><BR>} <BR><BR><BR>试题六 
            <BR><BR>  阅读以下程序说明和FORTRAN程序,将应填入_(n)_处的字句,写在答卷的对应栏内。 <BR><BR>[程序说明] 
            <BR><BR>  本程序用以将m+n个元素的数组A中的前m个元素(A(1)-A(m))与后n个元素(A(m+l)-A(m+n))互换位置,并保持其各自原有的内部顺序。 
            <BR><BR>  程序中把数组的各元素看成首尾相连的序列,并将数组元素分成G组(G为m和n的最大公因子),每组中的元素序列是从数组某元素起由间隔为m的元素组成,再将每组元素依次循环向左传送,即得所需结果。 
            <BR><BR>  例如原数组A为: <BR><BR>              <BR><BR>  由m=4,n=2,求得 
            G=2,将A中的元数分成两组。按上述说明,第一组元素序列依次为A(1)、A(5)、A(3),将它们循环向左传送后的结果为<BR><BR>8 
            9 7 2 6 4 
            <BR><BR>  第二组元素序列依次为以A(2)、A(6)、A(4),将它们循环向左传送后的结果为<BR><BR>8 4 7 9 6 
            2 <BR><BR>即得所需结果。<BR><BR>   INTEGET A(1000), G,H 
            <BR><BR>   READ(*,*)M,N <BR><BR>   READ(*,*)(A(1),1=1,M+N) 
            <BR><BR>   G=M <BR><BR>   H=N <BR><BR>20  IF (G,NE,H)THEN 
            <BR><BR>    IF(G,GT,T)THEN <BR><BR>     G=G-H <BR><BR>    ELSE 
            <BR><BR>     H=H-G <BR><BR>    ENDIF <BR><BR>    GOTO 20 
            <BR><BR>   ENDIF <BR><BR>   DO 100 I=_(1)_ <BR><BR>    TEMP=A(1) 
            <BR><BR>    K=1 <BR><BR>30   J=_(2)_ <BR><BR>    IF(J,NE,1)THEN 
            <BR><BR>     A(K)=_(3)_ <BR><BR>     K=J <BR><BR>     _(4)_ 
            <BR><BR>    ELSE <BR><BR>     A=K=_(5)_ <BR><BR>    ENDIF 
            <BR><BR>100  CONTINUE <BR><BR>   WRITE(*,200)(A(I),I=1,M+N) 
            <BR><BR>200  FORMANT(1016) <BR><BR>   END <BR><BR><BR>试题七 
            <BR><BR>  阅读以下程序说明和C程序,将应填入_(n)_处的字句,写在答卷的对应栏内。 <BR><BR>[程序说明] 
            <BR><BR>  本程序的函数 <BR><BR>     sum(int,i int total,int sigma,int 
            rear,int d[],int n) 
            <BR><BR>用来从已知数组d的前n个元素中找出所有部分元素序列之和等于total的元素序列,约定数组d的元素都是正整数,且都小于等于total。 
            <BR><BR>  函数sum使用递归方法找出全部解答。参数i表示递归函数当前考虑元素d[i],参数sigma是调用前已选取的部分序列的元素和,参数rear是后面还未考虑的那部分元素的元素和。 
            <BR><BR>  函数对元素d[i]有两种可能的选择方案: 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -