题库 题库
🏠 天天查询 > 题库 > 程序员应用技术

程序员应用技术

简答题 试题二(共15分)阅读以下说明和C函数,将应填入(n)处字句写在答题纸的对应栏内。
【说明1】
      函数Counter(int n, int w[])的功能是计算整数n的二进制表示形式中1的个数,同时用数组w记录该二进制数中1所在位置的权。
        例如,十进制数22的二进制表示为10110。对于该二进制数,1的个数为3,在w[0]中存入2(即21)、w[1]中存入4(即22)、w[2]中存入16(即24)。
【C函数1】
int Counter(int n, int w[])
      {    int i=0, k=1;
while(  (1)  ){
                    if (n%2)  w[i++]=k;
                    n=n/2;    (2)    ;
            }
            return I;
      }
【说明2】函数Smove(int A[], int n)的功能是将数组中所有的奇数都放到所有偶数之前。其过程为:设置数组元素下标索引i(初值为0)和j(初值为n-1),从数组的两端开始检查元素的奇偶性。若A[i]、A[j]都是奇数,则从前往后找出一个偶数,再与A[j]进行交换;若A[i],A[j]都是偶数,则从后往前找出一个奇数,再与A[i]进行交换;若A[i]是偶数而A[j]是奇数,则交换两者,直到将所有的奇数都排在所有偶数之前为止。
【C函数2】
void Smove(int A[],int n)
{ int temp, i=0, j=n-1;
  if(n<2)return;
  while(i<j){
      if(A[i]%2==1&&A[j]%2==1){  (3)  ;}
      else if(A[i]%2==0&&A[j]%2==0){  (4)  ;}
        else{
                if(  (5)  ){
                  temp=A[i];A[i]=A[j];A[j]=temp;
                }
                  i++,j--;
            }
    }
}
查看答案
简答题 试题三(共15分)阅读以下说明、C函数和问题,将解答写入答题纸的对应栏内。
【说明1】函数test fl (int m,int n)对整数m、n进行某种运算后返回一个整数值。
【C函数1】
int test_fl (int m, int n)
{  int k;
    k=m>n?m:n;
    for(;(k%m!=0)||(k%n!=0);k++);
    return k;

【问题1】(5分)
            (1)请写出发生函数调用test_fl(9,6)时,函数的返回值;
            (2)请说明函数test_fl的功能。
【说明2】设在某C系统中为每个字符分配1个字节,为每个指针分配4个字节,sizeof(x)计算为x分配的字节数。函数test_f2()用于测试并输出该C系统为某些数据分配的字节数。
【C函数2】
void test_f2()
{  char str[]="NewWorld";  char *p=str;    char i='\0';
void *ptr=malloc(50);
    printf("%d\t",sizeof(str));        printf("%d\n",sizeof(p));
    printf("%d\t",sizeof(i));          printf("%d\n”,sizeoqptr)),
}
【问题2】(4分)
            请写出函数test_f2()的运行结果。
【说明3】函数test_f3(char s[])的功能是:将给定字符串s中的所有空格字符删除后形成的串保存在字符数组tstr中(串s的内容不变),并返回结果串的首地址。
【C函数3】
char *test_f3 (const char s[])
{  char tstr[50]={'\0'};  unsigned int i,k=0;
    for(i=0;i<strlen(s);i++)
        if(s[i]!= ' ')tstr[k++]=s[i];
    return tstr;

【问题3】(6分)
            函数test_f3()对返回值的处理有缺陷,请指出该缺陷并说明修改方法。
查看答案
简答题 试题四(共15分)阅读以下说明和C函数,将解答填入答题纸的对应栏内。
【说明】函数del_substr(S,T)的功能是从头至尾扫描字符串S,删除其中与字符串T相同的所有子串,其处理过程为:首先从串S的第一个字符开始查找子串T,若找到,则将后面的字符向前移动将子串T覆盖掉,然后继续查找子串T,否则从串S的第二个字符开始查找,依此类推,重复该过程,直到串S的结尾为止。该函数中字符串的存储类型SString定义如下:
    typedef struct{
        char *ch;                /*串空间的首地址*/
        int length;                /*串长*/
}SString;
【C函数】
void del substr(SString*S, SString T)
{
int i, j;
          if(S->length<1||T.length<1||S->length<T.length)
                  return;
        i=0;                          /* i为串S中字符的下标 */
          for(;;){
              j=0;                      /* j为串T中字符的下标 */
            while(i<S->length&&j<T.length){
/* 在串S中查找与T相同的子串 */
                    if(S->ch[i]==T.ch[j]){
                              i++; j++;
                      }
                      else{
                            i=  (1)  ;  j=0;
/* i值回退,为继续查找T做准备*/
                      }
              }
            if(  (2)  ){          /* 在S中找到与T相同的子串 */
                    i=  (3)    ;      /* 计算S中子串T的起始下标 */
                    for(k=i+T.length; k<S->length; k++)
    /* 通过覆盖子串T进行删除 */
                          S->ch[  (4)  ]=S->ch[k];
                        S->length=  (5)  ; /* 更新S的长度*/
              }
            else break;              /* 串S中不存在子串T */
      }
查看答案
简答题 试题五(共15分)阅读以下说明和C++代码,将应填入(n)处字句写在答题纸对应栏内。
【说明】
        已知类LinkedList表示列表类,该类具有四个方法:addElement()、lastElement()、numberOfElement()以及removeLastElement()。四个方法的含义分别为:
        void addElement(Object):在列表尾部添加一个对象;
        Object lastElement():返回列表尾部对象;
        int numberOfElement():返回列表中对象个数;
        void removeLastElement():删除列表尾部的对象。
        现需要借助LinkedList来实现一个Stack栈类,C++代码1和C++代码2分别采用继承和组合的方式实现。
【C++代码1】
class Stack :public LinkedList{
public:
    void push(Object o){addElement(o);};      //压栈
    Object peek(){return  (1) ;};             //获取栈顶元素
    bool isEmpty(){                              //判断栈是否为空
        return numberOfElement()==0;
    };
    Object pop() {                              //弹栈
        Object o=lastElement();
              (2) ;
          return o;
    };
};
【C++代码2】
class Stack{
private:
      (3) ;
public:
    void push(Object o){                      //压栈
        list.addElement(o);
    };
    Object peek(){                              //获取栈顶元素
        return list. (4) ;
    };
    bool isEmpty() {                          //判断栈是否为空
        return list.numberOfElement()==0;
    };
    Object pop(){                              //弹栈
        Object o=list.lastElement();
        list.removeLastElement();
        return o;
    };
};
【问题】
        若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)?  (5)  (A.继承B.组合)
查看答案
简答题 试题六(共15分)阅读以下说明和Java代码,将应填入(n)处字句写在答题纸对应栏内。
【说明】
        已知类LinkedList表示列表类,该类具有四个方法:addElement()、lastElemen()、numberOfElement()以及removeLastElement()。四个方法的含义分别为:
      void addElement(Object):在列表尾部添加一个对象;
        Object lastElement():返回列表尾部对象;
        int numberOfElement():返回列表中对象个数;
        void removeLastElement():删除列表尾部的对象。
        现需要借助LinkedList来实现一个Stack栈类,Java代码1和Java代码2分别采用继承和组合的方式实现。
【Java代码1】
public class Stack extends LinkedList{
    public void push(Object o){                 //压栈
          addElement(o);
    }
    public Object peek(){                      //获取栈顶元素
          return  (1)  ;
    }
    public boolean isEmpty(){                      //判断栈是否为空
          return numberOfElement()=0;
    }
    public Object pop(){                          //弹栈
          Object o=lastElement();
              (2)  ;
            return o;
    }

【Java代码2】
public class Stack{
    private  (3)  ;
    public Stack(){
        list=new LinkedList();
    }
    public void push(Object o){
          list.addElement(o);
    }
    public Object peek{                          //获取栈顶元素
        return list.  (4)  ;
    }
    public boolean isEmpty(){                  //判断栈是否为空
        return list.numberOfElement()==0;
    }
    public Object pop(){                          //弹栈
        Object o=list. lastElement();
        list.removeLastElemento;
        return o;
    }

【问题】
若类LinkedList新增加了一个公有的方法removeElement(int index),用于删除列表中第index个元素,则在用继承和组合两种实现栈类Stack的方式中,哪种方式下Stack对象可访问方法removeElement(int index)?  (5)  (A.继承B.组合)
查看答案
简答题 试题一(共15分)
    阅读以下说明和流程图,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】
    下面的流程图旨在统计指定关键词在某一篇文章中出现的次数。
    设这篇文章由字符A(0),…,A(n-1)依次组成,指定关键词由字符B(0),…,B(m-1)依次组成,其中n>m≥1。注意,关键词的各次出现不允许有交叉重叠。例如,在“aaaa”中只出现两次“aa”。
    该流程图采用的算法是:在字符串A中,从左到右寻找与字符串B相匹配的并且没有交叉重叠的所有子串。流程图中,i为字符串A中当前正在进行比较的动态子串首字符的下标,j为字符串B的下标,k为指定关键词出现的次数。
【流程图】
   
查看答案
简答题 试题二(共15分)
    阅读以下问题说明、C程序和函数,将解答填入答题纸的对应栏内。
【问题1】
    分析下面的C程序,指出错误代码(或运行异常代码)所在的行号。
【C程序】
    
【问题2】
    函数inputArr(int a[], int n)的功能是输入一组整数(输入0或输入的整数个数达到n时结束)存入数组a,并返回实际输入的整数个数。函数inputArr可以成功编译。但测试函数调用inputArr后,发现运行结果不正确。
    请指出错误所在的代码行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行,使之符合上述设计意图。
【C函数】
   
查看答案
简答题 试题三(共15分)
    阅读以下说明和C函数,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】
    基于管理的需要,每本正式出版的图书都有一个ISBN号。例如,某图书的ISBN号为“978-7-5606-2348-1”。
    ISBN号由13位数字组成:前三位数字代表该出版物是图书(前缀号),中间的9个数字分为三组,分别表示组号、出版者号和书名号,最后一个数字是校验码。其中,前缀号由国际EAN提供,已经采用的前缀号为978和979;组号用以区别出版者国家、地区或者语言区,其长度可为1~5位;出版者号为各出版者的代码,其长度与出版者的计划出书量直接相关;书名号代表该出版者该出版物的特定版次;校验码采用模10加权的算法计算得出。
    校验码的计算方法如下:
    第一步:前12位数字中的奇数位数字用1相乘,偶数位数字用3相乘(位编号从左到右依次为13到2);
    第二步:将各乘积相加,求出总和S;
    第三步:将总和S除以10,得出余数R;
    第四步:将10减去余数R后即为校验码V。若相减后的数值为10,则校验码为0。
    例如,对于ISBN号“978-7-5606-2348-1”,其校验码为1,计算过程为:
    S=9×1+7×3+8×1+7×3+5×1+6×3+0×1+6×3+2×1+3×3+4×1+8×3=139
    R = 139 mod 10 = 9
    V = 10 – 9 = 1
    函数check(char code[])用来检查保存在code中的一个ISBN号的校验码是否正确,若正确则返回true,否则返回false。例如,ISBN号“978-7-5606-2348-1”在code中的存储布局如表3-1所示(书号的各组成部分之间用“-”分隔):
    
    在函数check(char code[])中,先将13位ISBN号放在整型数组元素tarr[0]~tarr[12]中(如表3-2所示,对应ISBN号的位13~位1),由tarr[0]~tarr[11]计算出校验码放入变量V,再进行判断。
    
【C函数】
    bool check(char code[])
    {
    int i, k = 0;
    int S = 0, temp = 0;
    int V;
    int tarr[13] = {0};
    if (strlen(code) < 17)    return false;
    for( i=0; i<17; i++ )    /* 将13位ISBN号存入tarr */
    if ( code[i]!= '-' )
    tarr[  (1)  ] = code[i] - '0' ;
    for( i=0;    (2)  ; i++ )  {
    if ( i%2 )
    S +=    (3)  ;
    else
    S +=    (4)  ;
    }
    V = (    (5)    == 0 )? 0 : 10 - S %10;
    if ( tarr[12] == V)
    return true;
    return false;
    }
查看答案
简答题 试题四(共15分)
    阅读以下说明和C程序,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】
    某旅游服务应用程序运行时,根据输入的两个城市名查找其间的距离。各城市间的距离如表4-1所示。表格中的第一行和第一列表示城市名,表中的每个元素是一个整数,代表该元素所在行和列对应的城市之间的距离(单位:km)。
    
    在程序中,城市名用一维全局数组cityTable存储,城市之间的距离矩阵用二维全局数组kmTable表示,并用相应的值对这两个数组进行初始化。
    #define NCities 8    /* 城市个数 */
    #define TRUE 1
    static char * cityTable[NCities] = { /* 城市名按字典序升序排列 */
    "Beijing",
    ......      /* 其他城市名略去 */
    "Sanya",
    };
    static int kmTable[NCities][NCities] = {
    {0, 1697, 2695, 937, 1784, 1356, 926, 2543},
    {1697, 0, 313, 1840, 533, 940, 1409, 1505},
    ......      /* 剩余元素的初始值略去 */
    };
    程序执行时,首先按提示输入两个城市名,然后在cityTable中查找与城市名对应的下标,最后用该下标在kmTable中找到这两个城市之间的距离。
    程序中定义的函数FindCityInSortedArray和GetCity说明如下:
    (1)函数FindCityInSortedArray的功能是用二分查找法在全局数组cityTable中查找城市名所对应的下标值。
    (2)函数GetCity的功能是读入城市名,调用函数FindCityInSortedArray来获取城市所对应的下标值。如果该城市名不存在,则提示用户重新输入。
【C程序】
int main() {
    int city1, city2;
    city1 = GetCity("输入第1个城市名: ");
    city2 = GetCity("输入第2个城市名: ");
    printf("%s和%s之间的距离为: %d km.\n", cityTable[city1], cityTable[city2],
    kmTable[city1][city2]);
    return 0;
}
static int GetCity(char * prompt) {
    char * cityName;
    int index;
    cityName = (char *)malloc(20*sizeof(char));
    while ( TRUE ) {
    printf("%s", prompt);
    gets(cityName);    /* 获取输入字符串 */
    index = FindCityInSortedArray(cityName);
    if (  (1)  ) break;
    printf("城市名不存在,请重新输入。\n");
    }
    free(cityName);
    return    (2)  ;
}
static int FindCityInSortedArray(char * key) {
    int lh, rh, mid, cmp;
    lh = 0;
    rh = NCities - 1;
    while (  (3)  ) {
    mid = (lh + rh) / 2;
    cmp = strcmp(  (4)  );    /* 比较两个城市名是否相同 */
    if (cmp == 0) return    (5)    ;    /* 两个城市名相同 */
    if (cmp < 0) { rh = mid - 1; }
    else { lh = mid + 1; }
    }
    return (-1);    /* 城市名不存在时返回-1 */}
查看答案
简答题 试题五(共15分)
    阅读以下说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】
    现需要统计某企业员工的月平均工资,即该企业本月发给员工的工资总和除以员工数。假设企业本月发给员工的工资总和为sumSalary,该企业的员工总数为employeeNumber,下面的程序代码计算该企业员工本月的平均工资,其中需要处理employNumber为0的情况。【C++代码】
#include <iostream>
using namespace std;
class Department{
protected:
  float average(float x, int y){
    if (y ==0 ) throw    (1)  ;
    return x/y;
  }
public:
  void caculate(void){
    float sumSalary;
    int employeeNumber;
    try{
    cout << "请输入当月工资总和与员工数:" << endl;
    cin >> sumSalary >> employeeNumber;
    float k = average(sumSalary,employeeNumber);
    cout << "平均工资:"<< k << endl;
    }
    (2)  (int e){
    if(e == 0){
    cout << "请重新输入当月工资总和与员工数:" << endl;
    cin >> sumSalary >> employeeNumber;
    float k = average(sumSalary,employeeNumber);
    cout << "平均工资:"<< k << endl;
    }
    }
  }
};

void main(){
    try  {
    (3)  ;
    d.caculate();
    }
    (4)  (int e){
    if ( e == 0)
    cout << "程序未正确计算平均工资!" << endl;
    }
}
【问题1】
    程序运行时,若输入的员工工资总和为6000,员工数为5,则屏幕输出为:
    请输入当月工资总和与员工数:
    6000  5
    (5)
【问题2】
    若程序运行时,第一次输入的员工工资总和为6000,员工数为0,第二次输入的员工工资总和为0,员工数为0,则屏幕输出为:
    请输入当月工资总和与员工数:
    6000  0
    (6)
    0  0
    (7)
查看答案
简答题 试题六(共15分)
    阅读以下说明和Java代码,将应填入 (n) 处的字句写在答题纸的对应栏内。【说明】
    现需要统计某企业员工的月平均工资,即该企业本月发给员工的工资总和除以员工人数。假设企业本月发给员工的工资总和为sumSalary,该企业的员工总数为employeeNumber,下面的程序代码计算该企业员工本月的平均工资,其中需要处理employNumber为0的情况。【Java代码】
import java.util.Scanner;
public class JavaMain {
    static float average(float x, int y) throws Exception{
    if (y ==0 ) throw new Exception(  (1)  );
    return x/y;
    }
    static void caculate() throws Exception{
    float sumSalary;
    int employeeNumber;
    Scanner sc = new Scanner(  (2)  );
    try{
    System.out.println("请输入当月工资总和与员工数:");
    sumSalary = sc.nextFloat();    //从标准输入获得工资总和
    employeeNumber = sc.nextInt();    //从标准输入获得员工数
    float k = average(sumSalary,employeeNumber);
    System.out.println("平均工资:" + k);
    }
    (3)  (Exception e){
    if(e.getMessage().equalsIgnoreCase("zero")){
    System.out.println("请重新输入当月工资总和与员工数:");
    sumSalary = sc.nextFloat();
    employeeNumber = sc.nextInt();
    float k = average(sumSalary,employeeNumber);
    System.out.println("平均工资:" + k);
    }
    }
    }
    public static void main(String[] args) {
    try  {
    caculate();
    }
    (4)    (Exception e){
    if ( e.getMessage().equalsIgnoreCase("zero"))
    System.out.println("程序未正确计算平均工资!" );
    }
    }
}
【问题1】
    程序运行时,若输入的员工工资总和为6000,员工数为5,则屏幕输出为:
    请输入当月工资总和与员工数:
    6000  5
    (5)
【问题2】
    若程序运行时,第一次输入的员工工资总和为6000,员工数为0,第二次输入的员工工资总和为0,员工数为0,则屏幕输出为:
    请输入当月工资总和与员工数:
    6000  0
    (6)
    0  0
(7)
查看答案
简答题 试题一(共15分)
    阅读以下说明和流程图,回答问题1至问题4,将解答填入答题纸的对应栏内。【说明】
    下面的流程图中有两个判断条件A>0和B>0。这些判断条件的各种组合情况如下表所示。表中Y表示相应的条件成立,N表示相应的条件不成立。每一列表示一种条件组合,并在列首用相应的序号来表示。
   
【流程图】
   
【问题1】(4分)
    当遇到哪几种条件组合时,流程图能执行“1→i”?(写出相应的序号即可)【问题2】(4分)
    当遇到哪几种条件组合时,流程图能执行“2→j”?(写出相应的序号即可)【问题3】(6分)
    当遇到哪几种条件组合时,流程图能执行“3→k”?(写出相应的序号即可)【问题4】(1分)
    该流程图共有多少条实际执行路径?
查看答案
简答题 试题二(共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)  );
  }
}
查看答案
简答题 试题三(共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)  。
查看答案
简答题 试题四(共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;
    }
查看答案
简答题 试题五(共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;
}
查看答案
简答题 试题六(共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; //学生总数
}
查看答案