首页

软考 - 初级_程序员

类型:
选择方向:
选择考试:
题型:
为你找到 191 个题目。

 (共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分)
    阅读以下说明和流程图,填补流程图中的空缺(1)~(5),将解答填入答题纸的对应栏内。
【说明】
    求连续函数f(x)的根(方程f(x)=0的解)的最简单方法是二分法。为此,首先需要在若干点上检查函数值的符号,如果发现f(a)与f(b)符号相反(a    取该区间的中点m,如果f(m)=0,则根就是m。如果f(a)与f(m)符号相反,则根一定在区间(a, m)中;如果f(m)与f(b)符号相反,则根一定在区间(m, b)中。因此,根的范围缩小了一半。
    依此类推,将区间一半一半地分下去,当区间的长度很小(达到根的精度要求,例如0.001)时,或者当区间中点处的函数值几乎接近于0(即绝对值小于预先规定的微小量,例如0.001)时,近似计算就可以结束了。
    以下流程图描述了用二分法近似计算区间(a, b)中f(x)的根的过程。

【流程图】

 
 
 
 

阅读以下说明和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 descending 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; //学生总数
}

阅读以下说明和C++代码,将应填入n处的语句或语句成分写在答题纸的对应栏内。
【说明】

某数据文件students.txt的内容为100名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前30%的学生。

C++代码】
#include
#include
#include
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 << end1;
}
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%: "<    for(k = 0; k < number * 0.3; k++) {
    testStudent[k].out();
   }
   delete [ ]testStudent;
   return 0;
}

阅读以下说明和C函数,将应填入n处的语句或语句成分写在答题纸的对应栏内。
【说明】
已知单链表L含有头结点,且结点中的元素值以递增的方式排列。下面的函数DeleteList在L中查找所有值大于minK且小于maxK的元素,若找到,则逐个删除,同时释放被删结点的空间。若链表中不存在满足条件的元素,则返回-1,否则返回0。
例如,某单链表如图4-1所示。若令minK为20、maxK为50,则删除后的链表如图4-2所示。

图4-1

图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;
}

阅读以下说明和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)  

阅读以下说明和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至问题4,将解答填入答题纸的对应栏内。
说明】
 下面的流程图中有两个判断条件A>0和B>0。这些判断条件的各种组合情况如下表所示。表中Y表示相应的条件成立,N表示相应的条件不成立。每一列表示一种条件组合,并在列首用相应的序号来表示。

【流程图】

问题1(4分)
当遇到哪几种条件组合时,流程图能执行“1→i”?(写出相应的序号即可)
问题2(4分)
当遇到哪几种条件组合时,流程图能执行“2→j”?(写出相应的序号即可)
问题3(6分)
当遇到哪几种条件组合时,流程图能执行“3→k”?(写出相应的序号即可)
问题4(1分)
该流程图共有多少条实际执行路径?
 

阅读以下说明、图和Java代码,填补Java代码中的空缺(1)~(6),将解答写在答题纸的对应栏内。
【说明】
已知对某几何图形绘制工具进行类建模的结果如图6.1所示,其中Shape为抽象(abstract)类,表示通用图形,Box(矩形)、Ellipse(椭圆)和Line(线条)继承(extends)了Shape类,其中,Circle表示圆(即特殊的椭圆)。

下面的Java代码用于实现图6-1所给出的设计思路,将其空缺处填充完整并编译运行,输出结果为:
    Ellipse
    Circle
    Ellipse
    C
    E

【Java代码】
  (1)  class Shape{
    public Shape(String name){
    this.name= name;
    }
    (2)  void paint( );
    String getName( ){
return this.name;
    }
    final String name;
};
//Box和Line类似下面Ellipse,其代码略
class Ellipse  (3)  {
    public Ellipse(String name){
  super(name);
  System.out.println("Ellipse");
    }
    Void paint( ){  //绘制现状示意代码
    System.out.println(getName( ));
    }
 };
 class Circle (4) {
public Circle(String name){
    super(name);
    System.out.println("Circle");
    }
};
class Diagram{
    private Shape shapes[ ]= new Shape[2];
    public void drawAShape(Shape shape) {
shape.paint( );
    }
    void eraseAShape(Shape shape) {
    //删除形状,代码略
    }
    void drawShapes( ) {
    shapes[0]= new Circle("C”);
    shapes[1]= new Ellipse("E");
    for (int  i=0; i<2;++i)  {
    drawAShap (shapes[i]); //绘制形状
}
 }
void close( ){
    for (int i=0;i<2; ++i)  { //关闭图,删除所绘制图形
   (5)    ;
    }
 }
 public static void main(String[ ] args) {
Diagram diagram=  (6)   ;
diagram.drawShapes( );
diagram.close( );
    }
}

阅读以下说明、图和C++代码,填补C++代码中的空缺(1)~(5),将解答写在答题纸的对应栏内。
【说明】
    已知对某几何图形绘制工具进行类建模的结果如图5.1所示,其中Shape为抽象类(应至少包含一个纯虚拟( virtual)函数),表示通用图形,Box表示矩形,Ellipse表示椭圆,Circle表示圆(即特殊的椭圆),Line表示线条。


图6-1  类图

 下面的C++代码用于实现图5-1所给出的设计思路,将其空缺处填充完整并编译运行,输出结果为:
    Ellipse
    Circle
    Ellipse
    C
    E

【C++代码】
#include
#include
using namespace std;
class Shape{
public:
    Shape(const string& name){
    m_name= name;
    }
~Shape( ){}
    (1)     void paint( ) = 0;
  stringgetName( )const {
    return m_name;
    }
 private;
string m_name;
};
 //Box和 Line类的定义与 Ellipse类似,其代码略
 class Ellipse  (2)  {
 public:
     Ellipse(const string& name) : Shape(name){ cout<<"Ellipse" < void paint( ) { cout<   };
  class Circle  (3)  {
  public:
    Circle(const string& name) : Ellipse(name){ cout<<"Circl"<   };
  class Diagram {
public:
  void drawAShap(Shape* shape){  shape->paint( ); }
  void drawShapes( ) {
  shapes[0] = new Circle("C");
  shapes[l] = new Ellipse("E");
  for (int i=0;i<2; ++i)  {
drawAShap(shapes[i]);
  }
   }
   void close ( ){  /*删除形状,代码略  */ }
 private:
   Shape* shapes[2];
 };
 int main( )
 {
   Diagram* diagram =   (4) ;
diagram->drawShapes( );
   diagram->close ( );
    (5)  diagram;
}

上一页

第 8 页