下面的程序如何理解,求详细解释

下面的程序如何理解,求详细解释,第1张

你给出的题目的本身书写上是有误的。

A. 很多地方缺少分号;

B. 第八行 id应为if;

C. 第十行 s/10 应为 s=s/10;

补充上应有的分号以及另两处错误如我所猜想的改过来的话,这段代码含义如下。

1. 有两个方法arrange(long s); sort(int a[],int n);

逻辑上看arrange是程序的入口。

2. sort(int a[],int n)函数对传入的参数数组a[]的前n项(下标为0 ~ n-1)进行冒泡排序。

最终形成一个递增的数列。即 a[0]<=a[1]<=a[2]<=a[3] ... <=a[n]

3. arrange(long s)函数对传入的参数进行一些简单计算,将其按位倒序将其中的奇数数字插入数组b[]中,从而形成一个新的数组。

之后调用sort(int a[], int n)进行排序。

而后将排好序的数组按照从高位到低位的顺序重新组成一个long数字,并返回。

4. %为取模运算,就是取相除之后的余数。

从程序运行结果的角度来看,如下:

arrange(25698741) => 1579

arrange(97531) =>13579

arrange(55779911) =>11557799

arrange(284606) =>0

希望能帮到你,如果还不明白,Text me!

我说点题外的 这里起码要10个函数 你不觉得会把人下走啊啊啊 !! 我的实验内容 就这么多了

/*

包括二叉树的创建和遍历

*/

//头文件

#include "stdio.h"

#include "conio.h"

#include "stdlib.h"

//预定义宏常量

#define OK 1

#define ERROR -1

#define ENDFLAG '#'

typedef char TelemType

typedef int status

//二叉树的存储结构

typedef struct BiTNode{

TelemType data

struct BiTNode *lchild,*rchild

}BiTNode,*BiTree

//全局变量,表示叶子个数

int m=0

//二叉树的创建

status CreateBiTree(BiTree *T)

{// 先序创建

TelemType ch

scanf("%c",&ch)

if(ch==ENDFLAG) *T=NULL

else {

if(!(*T=(BiTNode *)malloc(sizeof(BiTNode))))

{

printf("\nOut of space.")

getch()

exit(0)

}

(*T)->data=ch//生成根结点

CreateBiTree(&((*T)->lchild))//左子树

CreateBiTree(&((*T)->rchild))//右子树

}

return OK

}

//先序遍历

status PreOrderTraverse(BiTree T)

{

if(T)

{

printf("%c",T->data)

PreOrderTraverse(T->lchild)

PreOrderTraverse(T->rchild)

}

return OK

}/*

//中序

status InOrderTraverse(BiTree T)

{

if(T)

{

InOrderTraverse(T->lchild)

printf("%c",T->data)

InOrderTraverse(T->rchild)

}

return OK

}

//后序

status PostOrderTraverse(BiTree T)

{

if(T)

{

PostOrderTraverse(T->lchild)

PostOrderTraverse(T->rchild)

printf("%c",T->data)

}

return OK

}

*/

/*

队列 层次遍历

*/

//存储定义

typedef char QElemType

//typedef int status

typedef struct Queue

{

QElemType data

struct Queue *next

}Queue

//头指针和尾指针

typedef struct

{

Queue *front

Queue *rear

}LinkQueue

//初始化队列

status InitQueue(LinkQueue *q)

{

q->front=q->rear =NULL//----无头结点

return OK

}

/*判断队列是否为空*/

status QueueEmpty(LinkQueue *Q)

{

return (Q->front==NULL)&&(Q->rear==NULL)

/*实际上只须判断队头指针是否为空即可*/

}

//入队

void EnQueue(LinkQueue *q,QElemType e)

{

Queue *p

p=(Queue *)malloc(sizeof(Queue))/*申请新结点*/

p->data=e

p->next=NULL

if(QueueEmpty(q))

q->front=q->rear=p

else {/*x插入非空队列的尾*/

q->rear->next=p /*p链到原队尾结点后*/

q->rear=p/*队尾指针指向新的尾*/

}

}

//出队

QElemType DeQueue(LinkQueue *q)

{

Queue *p

QElemType e

if(QueueEmpty(q))

{

printf("Queue underflow\n")/*下溢*/

exit(1)

}

p=q->front/*指向对头结点*/

e=p->data/*保存对头结点的数据*/

q->front=p->next/*将对头结点从链上摘下*/

if(q->rear==p)/*原队中只有一个结点,删去后队列变空,此时队头指针已为空*/

q->rear=NULL

free(p)/*释放被删队头结点*/

return e/*返回原队头数据*/

}

/*层次遍历思想 递归

a.根结点入队列

b.原队左子树的左右孩子(非空)入队列

c.原队右子数的左右孩子(非空)入队列

*/

//层次遍历入队列

status Arrange(BiTree T,LinkQueue *Q)

{

if(T)

{

EnQueue(Q,T->data)

Arrange(T->lchild,Q)

Arrange(T->rchild,Q)

}

return OK

}

//从队列中输出各元素

status ArrangementTraverse(BiTree T)

{

char e

LinkQueue Q

InitQueue(&Q)

if(T)

{

Arrange(T,&Q)//递归调用

while(!QueueEmpty(&Q))

{

e=DeQueue(&Q)

printf("%c",e)

}

}

return OK

}

//求二叉树的叶结点个数

status NumberLeaves(BiTree T)

{//先序遍历得到叶结点的数目

//m=0

if(T)

{

if(T->lchild==NULL&&T->rchild==NULL) m++

NumberLeaves(T->lchild)

NumberLeaves(T->rchild)

}

return OK

}

int btnodeheight(BiTree b)

{

int lchildh,rchildh

if (b==NULL) return(0)

else

{

lchildh=btnodeheight(b->lchild)

rchildh=btnodeheight(b->rchild)

return (lchildh>rchildh)? (lchildh+1):(rchildh+1)

}

}

/*

//一个比较函数

status Max(int m, int n)

{

if (m >n)

return m

else

return n

}

//获取二叉树的高度

status HighBitree(BiTree t)

{

if (t == NULL)

return 0

else

return 1 + Max(HighBitree(t->lchild), HighBitree(t->rchild))

}*/

//主函数

void main()

{

BiTree T

printf("请创建二叉树:\n")

CreateBiTree(&T)

NumberLeaves(T)

printf("叶节点个数为:")

printf("%d",m)

printf("\n二叉树的高度为:")

printf("%d",btnodeheight(T))

// printf("%d",HighBitree(T))

printf("\n先序遍历:\n")

PreOrderTraverse(T)

/* printf("\n中序遍历:\n")

InOrderTraverse(T)

printf("\n后序遍历:\n")

PostOrderTraverse(T)*/

printf("\n层次遍历\n")

ArrangementTraverse(T)

printf("\n")

}

strcpy 这个函数是把后面那个字符串拷贝到前面那个字符串里面。

a是字符串"nice to meet you!"的首地址,strlen(a)是计算字符串a的长度结果为17。

那么a+strlen(a)/2就是a + 17 / 2就是a + 8,意思是从a后面第8个位置开始接受拷贝。

strcpy(a+8,"you")就相当于把 "you" 接到a后面第8个位置 结果就是nice to you。答案D


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12005508.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存