2010年软考程序员考试(下午题)模拟试题及答案(1)
编辑特别推荐:
2010年全国计算机软考程序员全真模拟试卷八套答案及解析
计算机软考程序员级冲刺试题
程序员之程序设计知识点置
试题一
【说明】
该程序的功能是从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中,以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后把结果xx输出到文件OUT6.DAT中。
例如:原文:You He Me
I am a student.
结果:Me He You
student a am I
原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。
【函数】
#include
#include
#include
#include
char xx[50][80];
int maxline=0;/*文章的总行数*/
int ReaaDat(void);
void WriteDat(void);
void StrOL(void)
{
char*pl,*p2,t[80];
int i;
for(i=0;i
while(*p1)p1++;
while(p1>=xx[i])
{while(!isalpha(*p1)&&p1!=xx[i])p1--;
p2=p1;
while( (1) )p1--;
if(p1==xx[i])
if(isalpha(*p1))p1--;
else if(!isalpha(*(p1+1)))break;
p2++;
(2) ;
strcat(t,p1+1);
strcat(t," ");
}
strcpy(xx[i],t);
}
}
void main()
{
if( (3) ){
printf("数据文件in.dat不能打开!\n\007");
return;
}
StrOL();
writeDat();
getch();
}
int ReadDat(void)
{
FILE*fp;
int i=0;
char*p;
if((fp=fopen("e:\a\in.dat","r"))==NULL)return 1;
while(fgets(xx[i],80,fp)!=NULL){
p=strchr(xx[i],′\n′);
if(p)*p=0;
i++;
}
maxline= (4)
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE*fp;
int i;
fp=fopen("e:\\a\\out6.dat","w");
for(i=0;i< (5) ;i++){
printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}
【答案】
(1)isalpha(*p1)&&p1!=xx[i]
(2)*p2=0
(3)ReadDat()
(4)i
(5)maxline
阅读下列说明和流程图,将应填入(n)的语句写在答题纸的对应栏内。
【流程图说明】
下面的流程(如图1所示)用N-S盒图形式描述了在一棵二叉树排序中查找元素的过程,节点有3个成员:data,left和right。其查找的方法是:首先与树的根节点的元素值进行比较:若相等则找到,返回此结点的地址;若要查找的元素小于根节点的元素值,则指针指向此结点的左子树,继续查找;若要查找的元素大于根节点的元素值,则指针指向此结点的右子树,继续查找。直到指针为空,表示此树中不存在所要查找的元素。
【算法说明】
【流程图】
将上题的排序二叉树中查找元素的过程用递归的方法实现。其中NODE是自定义类型:
typedef struct node{
int data;
struct node*left;
struct node*right;
}NODE;
【算法】
NODE*SearchSortTree(NODE*tree,int e)
{
if(tree!=NULL)
{
if(tree->data
else if(tree->data
else return tree;
}
return tree;
}
【答案】
(1)p=p->left
(2)p=p->right
(3)return P
(4)return SearchSortTree(tree->left)
(5)return SearchSortTree(tree->right) 试题三
假设以带头结点的单循环链表作非递减有序线性表的存储结构。函数deleteklist(LinkList head)的功能是删除表中所有数值相同的多余元素,并释放结点空间。
例如:链表初始元素为:
(7,10,10,21,30,42,42,42,51,70)
经算法操作后变为:
(7,10,21,30,42,51,70)
【函数1】
void deleteklist(LinkList head)
{
LinkNode*p,*q;
p=head->next;
while(p!=head)
{
q=p->next;
while( (1) )
{
(2) ;
free(q);
q=p->next;
}
p=p->next;
}
}
【说明2】
已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。下面的程
序的功能是:从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。
【函数2】
#include
typedef struct node {
int data;
stuct node leftChild,rightchild;
}BintreeNode;
typedef BintreeNode*BinaryTree;
void ConstrncTree(int T[],int n,int i,BintreeNode*&ptr)
{
if(i>=n) (3) ;∥置根指针为空
else
{
ptr=-(BTNode*)malloc(sizeof(BTNode))
ptr->data=T[i];
ConstrucTree(T,n,2*i+1, (4) );
ConstrucTree(T,n, (5) ,ptr->rightchild);
}
}
main(void)
{/*根据顺序存储结构建立二叉链表*/
Binarytree bitree;int n;
printf("please enter the number of node:\n%s";n);
int*A=(int*)malloc(n*sizeof(int));
for(int i=0;i<n;i++)scanf("%d,A+i);/*从键盘输入结点值*/
for(int i=0;i<n;i++)printf("%d",A[i]);
ConstructTree(A,n,0,bitree);
}
答案:
(1)q!=head &&q->data==p->data
(2)p->next=q->next
(3)ptr=NULL
(4)ptr->leftchild
(5)2*i+2 试题四
阅读下列函数说明和C函数,将应填入 n 处的字句写在答题纸的对应栏内。
[函数2.1说明]
函数strcat(char s[], char t[])的功能是:将字符串t复制连接字符串s的尾部,并返回新
字符串的首地址作为函数值。例如:若s=“abcd”,t=“efg”,则新字符串应该是“abcdefg”。
[函数2.1]
char *strcat(char s[], char t[])
{ char *p;
p = s + strlen(s)-1
while( (1) ) {
(2) ;
}
*p = ‘ ’;
return s;
}
[函数2.2说明]
函数f(char *str, char del)的功能是:将非空字符串str中的指定字符del删除,形成一个
新字符串仍存放在str所指内存单元中。
例如若str的值为“33123333435”,del的值为‘3’,调用此函数后,新字符串为:“1245”。
[函数2.2]
void f(char *str, char del)
{
int i, j, len;
len=strlen(str);
i=j=0;
while(i
(4) = str[i];
i++;
}
(5) ;
} 试题五
阅读以下说明和C代码,将应填入 n 处的字句写在答题纸的对应栏内。
[说明]
下面程序中函数fun的功能是:在含有10 个元素的s数组中查找最大数,及最大数所在位置 (即,下标值),最大数可能不止一个。最大数作为函数值返回,最大数的个数通过指针变量n传回,所在位置由数组pos传回。
例如:
若输入 2 8 5 7 8 4 5 3 2 8
则应输出:
The max: 8
Total: 3 //最大数出现次数
The positions: 1 4 9
#include
#define M 10
int fun(int *a, int *n, int pos[])
{ int i, k, max=-32767;
(1)
for(i=0; i
for(i=0; i
*n=k;
return max;
}
main()
{ int a[M], pos[M], i=0, j, n;
printf("Enter 10 number :");
for(i=0; i
printf("The max: %dn", j);
printf("Total: %d",n);
printf("The position:");
for(i=0; i
}