计算机类专业技术初级资格程序员应用技术

2010年下半年程序员下午试卷

6 题含答案应用技术
共 6 题返回本类
1主观题1 / 6
试题一(共15分)
    阅读以下说明和流程图,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】
    下面的流程图中有两个判断条件A>0和B>0。这些判断条件的各种组合情况如下表所示。表中Y表示相应的条件成立,N表示相应的条件不成立。每一列表示一种条件组合,并在列首用相应的序号来表示。
   
【流程图】
   
【问题1】(4分)
    当遇到哪几种条件组合时,流程图能执行“1→i”?(写出相应的序号即可)【问题2】(4分)
    当遇到哪几种条件组合时,流程图能执行“2→j”?(写出相应的序号即可)【问题3】(6分)
    当遇到哪几种条件组合时,流程图能执行“3→k”?(写出相应的序号即可)【问题4】(1分)
    该流程图共有多少条实际执行路径?
查看答案
【问题1】(4分)
1  或A>0,B>0                                (2分)
2  或A>0,B≤0                              (2分)
以上解答不分次序,多答一个扣2分,多答两个不得分
【问题2】(4分)
2  或 A>0,B≤0                              (2分)
4  或 A≤0,B≤0                              (2分)
以上解答不分次序,多答一个扣2分,多答两个不得分
【问题3】(6分)
1 或A>0,B>0                                  (2分)
3 或A≤0,B>0                                (2分)
4 或 A≤0,B≤0                              (2分)
以上解答不分次序,多答一个扣2分
【问题4】(1分)
    4
2主观题2 / 6
试题二(共15分)
  阅读以下说明和C函数,将应填入 (n) 处的语句或语句成分写在答题纸的对应栏内。
【说明1】
    函数deldigit(char *s) 的功能是将字符串s中的数字字符去掉,使剩余字符按原次序构成一个新串,并保存在原串空间中。其思路是:先申请一个与s等长的临时字符串空间并令t指向它,将非数字字符按次序暂存入该空间,最后再拷贝给s。
【C函数】
void deldigit(char *s)
{
  char *t = (char *)malloc(  (1)  );    /*申请串空间*/
  int i, k = 0;
  if (!t)  return;
  for(i = 0; i < strlen(s); i++)
    if ( !(*(s+i)>='0' && *(s+i)<='9') ) {
    t[k++] =  (2)  ;
    }
    (3)  = '\0';                /*设置串结束标志*/
  strcpy(s,t);
  free(t);
}
【说明2】
    函数reverse(char *s, int len)的功能是用递归方式逆置长度为len的字符串s。例如,若串s的内容为“abcd”,则逆置后其内容变为“dcba”。
【C函数】
void reverse(char *s, int len)
{
  char ch;
  if (  (4)  )
  {
    ch = *s;
    *s = *(s+len-1);
    *(s+len-1) = ch;
    reverse(  (5)  );
  }
}
查看答案
(1)strlen(s)+1                                                   (3分)
    其中,strlen(s)不可缺少,1可用大于1的任何一个整数代替
    若考生解答为strlen(s),则给2分
(2)*(s+i),或s[i],或其等价表示                                    (3分)
(3)*(t+k),或t[k] ,或其等价表示                                   (3分)
(4)len > 1,或len >= 1,或其等价表示                               (3分)
(5)s+1,len-2                                                      (3分)
3主观题3 / 6
试题三(共15分)
    阅读以下说明和C代码,回答问题1和问题2,将解答写在答题纸的对应栏内。【说明1】
    下面代码的设计意图是:将保存在文本文件 data.txt 中的一系列整数(不超过 100个)读取出来存入数组arr[],然后调用函数sort()对数组arr的元素进行排序,最后在显示屏输出数组arr的内容。
【C代码】
    
【问题1】(9分)
    以上C代码中有三处错误(省略部分的代码除外),请指出这些错误所在的代码行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行。
【说明2】
    下面是用C语言书写的函数get_str的两种定义方式以及两种调用方式。
    
    
【问题2】(6分)
    若分别采用函数定义方式1、2和调用方式1、2,请分析程序的运行情况,填充下面的空(1)~(3)。
    若采用定义方式1和调用方式1,则输出为“00000000”。
    若采用定义方式1和调用方式2,则    (1)  。
    若采用定义方式2和调用方式1,则    (2)  。
    若采用定义方式2和调用方式2,则    (3)  。
查看答案
【问题1】(9分)
 
行号修改正确后的完整代码行评分说明
14 FILE  *fp; 行号1分,代码2分若指出第15行出错,则给1分
19 fscanf(fp, “%d”, &arr[num++]);或fscanf(fp, “%d”, arr+num++);行号1分,代码2分 
21sort(arr, num); 行号1分,代码2分
以上解答不分次序
【问题2】(6分)
(1)输出为“00000000”                                      (2分)
        解答中出现“00000000”即给2分
(2)运行异常,无输出  或含义相同的叙述                       (2分)
(3)输出为“testing”                                       (2分)
    解答中出现“testing”即给2分
4主观题4 / 6
试题四(共15分)
    阅读以下说明和C函数,将应填入 (n) 处的语句或语句成分写在答题纸的对应栏内。
【说明】
    已知单链表 L 含有头结点,且结点中的元素值以递增的方式排列。下面的函数DeleteList在L中查找所有值大于minK且小于maxK的元素,若找到,则逐个删除,同时释放被删结点的空间。若链表中不存在满足条件的元素,则返回-1,否则返回0。
    例如,某单链表如图4-1所示。若令minK为20、maxK为50,则删除后的链表如图4-2所示。
      
    链表结点类型定义如下:
    typedef struct Node{
    int data;
    struct Node *next;
    }Node, *LinkList;
【C函数】
    int DeleteList (LinkList L, int minK, int maxK)
    {  /*在含头结点的单链表L中删除大于minK且小于maxK的元素*/
    (1)  *q = L, *p = L->next;  /*p指向第一个元素结点*/
    int delTag = 0;
    while ( p )
    if  ( p->data <= minK )
    { q = p;  p =  (2)  ;  }
    else
    if ( p->data < maxK )  {  /*找到删除满足条件的结点*/
    q->next =  (3)  ;  free(p);
    p =  (4)  ;  delTag = 1;
    }
    else  break;
    if (  (5)  )  return -1;
    return 0;
    }
查看答案
(1)Node                                                     (3分)
(2)p->next                                                  (3分)
(3)p->next                                                  (3分)
(4)q->next                                                  (3分)
(5)!delTag,或delTag==0,或delTag!=1                         (3分)
5主观题5 / 6
试题五(共15分)
    阅读以下说明和 C++代码,将应填入 (n) 处的语句或语句成分写在答题纸的对应栏内。
【说明】
    某数据文件students.txt的内容为100名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前30%的学生。【C++代码】
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Student {
    private:
    string sNO;    //学号
    int credit;      //分数
    public:
    Student(string a,int b) { sNO = a; credit = b;}
    Student(){}
    int getCredit();
    void out();
};
  (1)  ::getCredit() {
    return credit;
}
  (2)  ::out() {
    cout << "SNO: " << sNO << ", Credit=" << credit << endl;
}
class SortStudent {
    public:
    void sort(Student *s, int n);
    SortStudent(){}
};
void SortStudent::sort(Student *s,int n) {
    for(int i = 0; i < n-1; i++) {
    for(int j = i+1; j < n; j++) {
    if(s[i].  (3)  < s[j].  (4)  )    {
    Student temp = s[i];    s[i] = s[j];    s[j] = temp;
    }
    }
    }
}
int main(int argc, char* argv[])
{
    const int number = 100;    //学生总数
    ifstream students;
    students.open("students.txt");
    if(!students.is_open()) {
    throw 0;
    }
    Student *testStudent =  (5)  [number];
    int k = 0;
    string s;
    while (getline(students,s,'\n')) {    //每次读取一个学生的学号和成绩
    Student student(s.substr(0,s.find(',')), atoi(s.substr(s.find(',')+1).c_str()));
    testStudent[k++] = student;
    }
    students.close();
    (6)  ;
    ss.sort(testStudent,k);
    cout <<"top 30%: "<<endl;
    for(k = 0; k < number * 0.3; k++) {
    testStudent[k].out();
    }
    delete []testStudent;
    return 0;
}
查看答案
(1)int Student                                  (3分)
(2)void Student                                 (2分)
(3)getCredit()                                  (2分)
(4)getCredit()                                  (2分)
(5)new Student                                  (3分)
(6)SortStudent ss                               (3分)
6主观题6 / 6
试题六(共15分)
    阅读以下说明和Java代码,将应填入 (n) 处的语句或语句成分写在答题纸的对应栏内。
【说明】
    某数据文件students.txt的内容为100名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前30%的学生。【Java代码】
import java.io.*;
class Student {
    private String sNO;    //学号
    private int Credit;    //分数
    public int getCredit(){
    return Credit;
    }
    public String toString() {
    return "sNO = " + this.sNO + ", Credit = " + this.Credit;
    }
    Student(String sNO, int Credit){
    (1)  = sNO;
    (2)  = Credit;
    }
}
public class SortStudent {
    void sort(Student[] s) { //Sort the array s[] in decending order of Credit
    for (int i = 0; i < s.length-1; i++) {
    for (int j = i+1; j < s.length; j++) {
    if (s[i].  (3)  < s[j].  (4)  ) {
    Student tmp = s[i];
    s[i] = s[j];
    s[j] = tmp;
    }
    }
    }
    }
    public static void main(String argv[]) {
    Student[] testStudent = new Student[size];
    try {
    BufferedReader in = new BufferedReader(new FileReader("students.txt"));
    boolean done = false;
    int i = 0;
    while (!done) {
    String s = in.readLine();  //每次读取一个学生的学号和成绩
    if (s != null) {
    String tmp[] = s.split(",");
    testStudent[i++] =  (5)  (tmp[0], Integer.parseInt(tmp[1]));
    } else
    done = true;
    }
    in.close();
    (6)  = new SortStudent();
    ss.sort(testStudent);
    System.out.println("top 30%:");
    for (int j = 0; j < size * 0.3; j++)
    System.out.println(testStudent[j]);
    } catch (IOException e) {
    System.out.println("io error!");
    }catch (NumberFormatException e) {
    System.out.println("not a number!");
    }
    }
    (7)  int size = 100; //学生总数
}
查看答案
(1)this.sNO                           (2分)
(2)this.Credit                        (2分)
(3)getCredit()                        (2分)
(4)getCredit()                        (2分)
(5)new Student                        (3分)
(6)SortStudent ss                     (2分)
(7)static,或static final             (2分)
← 上一卷下一卷 →