2010年下半年程序员考试下午真题

程序员 责任编辑:YLM 2017-08-16

添加老师微信

备考咨询

加我微信

摘要:以下是由希赛网整理的2010年下半年程序员考试下午真题,希望对备考程序员考试的考生有所帮助。

2010年下半年程序员考试下午真题:

>>>点击进入软考初级程序员历年真题下载

● __(1)__

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

【流程图】
2.png

问题1(4分)

当遇到哪几种条件组合时,流程图能执行“1→i”?(写出相应的序号即可)

问题2(4分)

当遇到哪几种条件组合时,流程图能执行“2→j”?(写出相应的序号即可)

问题3(6分)

当遇到哪几种条件组合时,流程图能执行“3→k”?(写出相应的序号即可)

问题4(1分)

该流程图共有多少条实际执行路径?

● __(2)__
阅读以下说明和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) );

}

}

● __(3)__阅读以下说明和C代码,回答问题1和问题2,将解答写在答题纸的对应栏内。
【说明1】
下面代码的设计意图是:将保存在文本文件data.txt中的一系列整数(不超过100个)读取出来存入数组arr[],然后调用函数sort__(4)__对数组arr的元素进行排序,最后在显示屏输出数组arr的内容。
3.png
【说明2】
4.png5.png
【问题1】(9分)

以上C代码中有三处错误(省略部分的代码除外),请指出这些错误所在的代码行号,并在不增加和删除代码行的情况下进行修改,写出修改正确后的完整代码行。

【说明2】

6.png

7.png

【问题2】(6分)

若分别采用函数定义方式1、2和调用方式1、2,请分析程序的运行情况,填充下面的空(1)~(3)。

若采用定义方式1和调用方式1,则输出为“00000000”。

若采用定义方式1和调用方式2,则 (1) 。

若采用定义方式2和调用方式1,则 (2) 。

若采用定义方式2和调用方式2,则 (3) 。

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

}

● __(5)__
阅读以下说明和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;

}

● __(6)__
阅读以下说明和Java代码,将应填入 (n) 处的语句或语句成分写在答题纸的对应栏内。
【说明】
某数据文件students.txt的内容为100名学生的学号和成绩,下面的程序将文件中的数据全部读入对象数组,按分数从高到低进行排序后选出排名前30%的学生。

【Java代码】

import jav

(6)A.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; //学生总数

}

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

软考备考资料免费领取

去领取