首页 > 软考
题目内容 (请给出正确答案)
[主观题]

●试题二 阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 函数pri

●试题二

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

函数print(BinTreeNode*t;DateType &x)的功能是在二叉树中查找值为x的结点,并打印该结点所有祖先结点。在此算法中,假设值为x的结点不多于一个。此算法采用后序的非递归遍历形式。因为退栈时需要区分右子树。函数中使用栈ST保存结点指针ptr以及标志tag,Top是栈顶指针。

【函数】

void print(BinTreeNode*t;DateType &x){

stack ST;int i,top;top=0;∥置空栈

while(t!=NULL &&t->data!=x‖top!=0)

{while(t!=NULL && t->data!=x)

{

∥寻找值为x的结点

(1) ;

ST[top].ptr=t;

ST[top].tag=0;

(2) ;

}

if(t!=Null && t->data==x){∥找到值为x的结点

for(i=1; (3) ;i++)

printf("%d",ST[top].ptr->data);}

else{

while((4) )

top--;

if(top>0)

{

ST[top].tag=1;

(5) ;

}

}

}

查看答案
答案
收藏
如果结果不匹配,请 联系老师 获取答案
您可能会需要:
您的账号:,可能还需要:
您的账号:
发送账号密码至手机
发送
安装优题宝APP,拍照搜题省时又省心!
更多“●试题二 阅读下列函数说明和C代码,将应填入(n)处的字句写…”相关的问题
第1题
●试题二 阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明2.1】 L为

●试题二

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明2.1】

L为一个带头结点的循环链表。函数deletenode(LinkList L,int c)的功能是删除L中数据域data的值大于c的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。

【函数2.1】

LinkList deletenode(LinkList L,int c)

{

LinkList Lc,p,pre;

pre=L;

p= (1) ;

Lc=(LinkList)malloc(sizeof(ListNode));

Lc->next=Lc;

while(p!=L)

if(p->data>c)

{

(2) ;

(3) ;

Lc->next=p;

p=pre->next;

}

else

{

pre=p;

p=pre->next;

}

return Lc;

}

【说明2.2】

递归函数dec_to_k_2(int n,int k)的功能是将十进制正整数n转换成k(2≤k≤9)进制数,并打印。

【函数2.2】

dec_to_k_2(int n,int k)

{∥将十进制正整数n转换成k(2≤k≤9)进制数

if(n!=0)

{

dec_to_k_2((4) ,k);

printf("%d", (5) );

}

}

点击查看答案
第2题
●试题四 阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 函数Qui

●试题四

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

函数QuickSort是在一维数组A[n]上进行快速排序的递归算法。

【函数】

void QuickSort(int A[],int s,int t)

{int i=s,j=t+1,temp;

int x=A[s];

do{

do i++;while (1) ;

do j--;while(A[j]>x);

if(i<j){temp=A[i]; (2) ; (3) ;}

}while(i<j);

A[a]=A[j];A[j]=x;

if(s<i-1) (4) ;

if(j+1<t) (5) ;

}

点击查看答案
第3题
●试题八 阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 以下程

●试题八

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换为大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。

【程序】

#include<stdio.h>

main()

{FILE*fp;

charstr[100];inti=0;

if((fp=fopen("text.txt" (1) ))==NULL)

{printf("can't open this file.\n");exit(0);}

printf("input astring:\n");gest(str);

while(str[i])

{if(str[i]>=′a′ && str[i]<=′z′)

str[i]= (2) ;

fputc(str[i], (3) );

i++;

}

fclose(fp);

fp=fopen("test.txt", (4) );

fgets(str,100,fp);

printf("%s\n",str);

(5) ;

}

点击查看答案
第4题
●试题一 阅读下列函数说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。 【函数1.1说明】

●试题一

阅读下列函数说明和C代码,把应填入其中n处的字句写在答卷的对应栏内。

【函数1.1说明】

函数strcpy(char*to,char*from)将字符串from复制到字符串to。

【函数1.1】

void strcpy(char*to,char*from)

{while((1 ) );}

【函数1.2说明】

函数merge(int a[ ],int n,int b[ ],int m,int *c)是将两个从小到大有序数组a和b复制合并出一个有序整数序列c,其中形参n和m分别是数组a和b的元素个数。

【函数1.2】

void merge(int a[ ],int n,int b[ ],int m,int *c)

{ int i,j;

for(i=j=0;i<n && j<m;)

*c++=a[i]<b[j]? a[i++]:b[j++];

while((2) )*c++=a[i++];

while((3) )*c++=b[j++];

}

【函数1.3说明】

递归函数sum(int a[ ],int n)的返回值是数组a[ ]的前n个元素之和。

【函数1.3】

int sum(int a[ ],int n)

{ if(n>0)return (4) ;

else (5) ;

}

点击查看答案
第5题
●试题二 阅读以下说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 函数Multiba

●试题二

阅读以下说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:

#define MAXSIZE 32

typedef struct{

int *elem;/*栈的存储区*/

int max; /*栈的容量,即栈中最多能存放的元素个数*/

int top;/*栈顶指针*/

}Stack;

【代码】

int InitStack(Stack *S,int n)/*创建容量为n的空栈*/

{S->elem=(int*)malloc(n *sizeof(int));

if(S->elem==NULL)return-1;

S->max=n; (1) =0;return 0;

}

int Push (Stack *s,int item)/*将整数item压入栈顶*/

{if(S->top==S->max){printf(″Stack is full!\n″);return-1;}

(2) =item;return 0;

}

int StackEmpty(Stack S){return(! S.top)?1∶0;}/*判断栈是否为空*/

int Pop(Stack *S)/*栈顶元素出栈*/

{if(! S->top){printf(″Pop an empty stack!\n″);return -1;}

return (3) ;

}

void MultibaseOutput(long n,int B)

{int m;Stack S;

if(InitStack(&S,MAXSIZE)){printf(″Failure!\n″);return;}

do {

if(Push(&S, (4) )){printf(″Failure!\n″);return;}

n= (5) ;

}while(n !=0);

while(! StackEmpty(S)){/*输出B进制的数*/

m=Pop(& S);

if(m<10)printf(″%d″,m);/*小于10,输出数字*/

else printf(″%c″,m+55);/*大于或等于10,输出相应的字符*/

}

printf(″\n″);

}

点击查看答案
第6题
●试题三 阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 函数dif

●试题三

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

函数diff的功能是:根据两个由整数(都大于-32768)按升序构成的单链表L1和L2(分别由A,B指向)构造一个单链表L3(由*r指向),要求L3中的所有整数都是L1,并且不是L2中的整数,还要求L3中的所有整数都两两不等。

【函数】

#include<mallo

C.h>

typedef struct node{

int d;

struct node *next

}Node;

void diff(Node *A,Node *B,Node **r)

{

int lastnum;

Node*p;

*r=NULL;

if(!A)return;

while((1) )

if(A->d<B->d)

{

lastnum=A->d;

p=(Node*)malloc(sizeof(Node));

p->d=lastnum;

p->next=*r; (2) ;

do

A=A->next;

while((3) );

}

else if(A->d>B->d)

B=B->next;

else{

(4) ;

lastnum=A->d;

while (A && A->d==lastnum)A=A->next;

}

while(A)

{

lastnum=A->d;

p=(Node*)malloc(sizeof(Node));

p->d=lastnum;

(5) ;

*r=p;

while (A && A->d==lastnum) A=A->next;

}

}

点击查看答案
第7题
●试题三 阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 设有一

●试题三

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次L.Locate(x)操作时,令元素值x的结点的访问频度freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。

【函数】

void Locate(int &x)

{<结点类型说明>

*p=first->next;

while(p!=frist && (1) )P=P->next;

if (p!=first)/*链表中存在x*/

{ (2) ;

<结点类型说明>

*current=p;/*从链表中摘下这个结点*/

Current->prior->next=current->next;

Current->next->prior=current->prior;

P=current->prior;/*寻找重新插入的位置*/

While(p!=first && (3) )p=p->prior;

Current->next= (4) ;/*插入在P之后*?

Current->prior=P;

P->next->prior=current;

P->next= (5) ;

}

else printf("Sorry.Not find!\n");/*没找到*/

}

点击查看答案
第8题
●试题二 阅读下列函数说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。 【函数2.1说明】

●试题二

阅读下列函数说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。

【函数2.1说明】

函数palindrome(char s[])的功能是,判断字符串s是否为回文字符串,若是,则返回0,否则返回-1。若一个字符串顺读和倒读都一样时,称该字符串是回文字符串,例如:"LEVEL"是回文字符串,而"LEVAL"不是。

【函数2.1】

int palindrome(char s[])

{char*pi,*pj;

pi=s;pj=s+strlen(s)-1;

while(pi<pj && (1) ){

pi++;pj--;

}

if((2) )return -1;

else return 0;

}

【函数2.2说明】

函数f(char*str,char del)的功能是:将非空字符串str分割成若干个子字符串并输出,del表示分割时的标志字符。

例如若str的值为"33123333435",del的值为"3",调用此函数后,将输出3个子字符串,分别为"12"、"4"和"5"。

【函数2.2】

void f(char*str,char del)

{int i ,j ,len;

len=strlen(str);

i=0;

while(i<len){

while((3) )i++;/*忽略连续的标志字符*/

/*寻找从str[i]开始直到标志字符出现的一个子字符串*/

j=i+1;

while(str[j]!=del && str[j]!=′\0′)j++;

(4) =′\0′;/*给找到的字符序列置字符串结束标志*/

printf(″%s\t″,&str[i]);

(5) ;

}

}

点击查看答案
第9题
试题五(共 15 分) 阅读下列说明、图和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。[说明]

试题五(共 15 分)

阅读下列说明、图和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。

[说明]

已知对某载客车辆(Car)进行类建模,如图 5-1所示,其中类 Engine 表示发动机引擎,类 Wheel 表示车轮,类 Body 表示车身,类 Driver 表示司机,类 Passenger 表示乘客。

试题五(共 15 分) 阅读下列说明、图和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内

[C++代码]

const int (1) = 7; //定义最多载客数

const int MAX_WHEELS = 5; //定义最多轮胎数

class Body{ //此处代码省略 }; //车身类

class Passenger{ //此处代码省略 }; //乘客类

class Wheel{ //此处代码省略 }; //车轮类

class Driver{ //司机类

public:

string name; //表示第几路公交车司机

Driver(string driverName):name((2) ){}; //构造函数

};

class Engine{ //引擎类

public:

string engineNo; //引擎编号

Engine(string engineNo){ (3) ->engineNo = engineNo; } //构造函数

};

class Car{ //汽车类

protected:

Engine * engine; Driver * driver; Body body;

Wheel * wheels[MAX_WHEELS]; Passenger * passengers[MAX_PASSENGERS];

public:

Car(Driver *driver){ //构造函数

this->driver = driver;

engine = new Engine("TX6536 型号引擎");

for (int index = 0; index < MAX_WHEELS; index++){

wheels[index] = new Wheel();

}

for (int index = 0; index < MAX_PASSENGERS; index++){

passengers[index] = NULL;

}

}

virtual ~Car(){ //析构函数

for (int index=0; index < MAX_WHEELS; index++)

delete wheels[index];

delete (4) ;

}

int getPassengerNumber(){ //获取车上乘客数量

//此处代码省略

}

void getOnPassenger(Passenger * aPassenger ){ //乘客上车

//此处代码省略

}

void run(){ //开车

if(driver == NULL){ cout << "司机尚未上车!"; return; }

//此处代码省略

}

};

void main(){

Driver driver("第五路公交车司机");

Car car((5) );

Passenger passengers[MAX_PASSENGERS];

for (int index = 0 ; index < MAX_PASSENGERS; index ++) //乘客上车处理

car.getOnPassenger(&passengers[index]);

car.run();

}

点击查看答案
第10题
试题二(共15分) 阅读以下说明和C函数,回答问题 l至问题 3,将解答写在答题纸的对应栏内。 【说明1】

试题二(共15分)

阅读以下说明和C函数,回答问题 l至问题 3,将解答写在答题纸的对应栏内。

【说明1】

函数substring(const char str[],int index,int length)的功能是求出字符串str中指定序号index开始且长度为length的子串,并返回所取出的子串。以字符串“China today”为例,其第一个字符“C”的序号为1(而其在字符数组str中的下标为0),从序号 5开始且长度为 3的子串为“at”。

试题二(共15分) 阅读以下说明和C函数,回答问题 l至问题 3,将解答写在答题纸的对应栏内。 【说

【问题1】(6分)

函数substring 中有两处错误,请指出这些错误所在代码的行号,并在不增加和删除 代码行的情况下进行修改,写出修改正确后的完整代码行(有注释时,注释可省略)。

试题二(共15分) 阅读以下说明和C函数,回答问题 l至问题 3,将解答写在答题纸的对应栏内。 【说

【说明2】

在C函数 2中,reverse(unsigned intn的功能是求出并返回n的反序数。例如,1234 的反序数是4321,其求解过程如下:

(1)由1234除以 10得到商123和余数4,O乘以10再加上 4得到 4;

(2)由123除以10得到商12和余数 3,4乘以10再加上 3得到43;

(3)由12除以10得到商 l和余数2,43乘以10 再加上2得到432;

(4)由 1除以 10得到商 0和余数 1,432乘以10再加上 1得到4321。

【C函数2】

unsigned int reverse(unsigned int n)

{

unsigned int result=0;

while((1) ){

result= result *10+ n%10;

n= (2)__;

}

retum result,

}

【问题2] (6分)

请根据说明2,填充C函数 2中的空缺(1)和(2)。

【问题3](3分)

用567,1234,56781234,62354879643分别作为实参调用函数reverse,对应的返回值分别

为765,4321,43218765,1357400630。请说明以62354879643作为实参调用函数 reverse

时返回结果出错的原因。

点击查看答案
退出 登录/注册
发送账号至手机
密码将被重置
获取验证码
发送
温馨提示
该问题答案仅针对搜题卡用户开放,请点击购买搜题卡。
马上购买搜题卡
我已购买搜题卡, 登录账号 继续查看答案
重置密码
确认修改