A. 谢谢 试编写算法,计算i!*2i的值并存入数组a
不用那么复杂。我的程序:
#include <stdio.h>
#define arrsize 10
#define maxint 10000
main () {
int i, j;
int result;
int tmp;
int a[arrsize];
tmp = 1;
for (i=1; i<=arrsize; i++) {
tmp *= i;
result = tmp * 2 * i;
if (result >= maxint)
break;
else
a[i-1] = result;
}
for (j=0; j<i-1; j++)
printf ("a[%2d] = %5d\n", j, a[j]);
getch();
}
B. 试编写算法求一元多项式
float Polynomial(int n, int a[], float x)
/* 求一元多项式的值P(x)。 */
/* 数组a的元素a[i]为i次项的系数,i=0,...,n */
{ int i;
float b=1.0, P=a[0];
if(n==0) P=a[0];
else {
for(i=1;i<=n;i++)
{ b=b*x;
P=P+a[i]*b;
}
} return P;
}
C. 试编写算法求一元多项式Pn(x)=a0+a1x+a2x2+a3x3+…anxn的值Pn(x0),
//下面是参数显式传递法计算多项式的值,全局变量的隐式传递留给你了。
#include<stdio.h>
constintMAXSIZE=60;//多项式项数
doublefx(doublean[],doublex,intn){
doubleFnx=0;
while(--n>=0)Fnx=Fnx*x+an[n];
returnFnx;
}
intmain(){
intn=0;
doublex,an[MAXSIZE];
printf("输入多项式系数('q'tofinish):");
while(scanf("%lf",&an[n])==1&&n<MAXSIZE){
++n;
printf("输入多项式系数('q'tofinish):");
}
fflush(stdin);
printf("x=");
scanf("%lf",&x);
printf("f(%lf)=%lf ",x,fx(an,x,n));
return0;
}
D. 试编写算法,计算i!×2^i的值并存入数组
编写算法计算i!×2^i的值步骤如下:
1,打开Visual Studio 2012后,单击左上角的“新建项目”。
E. 试编写一个算法,计算带头结点的循环单链表的长度
int length(struct list * head)
{
int i = 0;
struct list *tmp;
if( head == NULL)
return 0;
if( head -> next == head)
return 1;
tmp = head->next;
while(tmp != head)
{
i++;
tmp = tmp -> next;
}
return i;
}
F. 试编写一个算法 将升序的二叉排序树变为降序的二叉排序树
将一棵根为root的升序二叉排序树转为降序二叉排序树,算法思路是:
(1) 如果树root为空,算法结束;
(2) 将root的左子树转为降序二叉排序树,将root的右子树转为降序二叉排序树;
(3) 将root的左右孩子进行交换,即左孩子变为右孩子,右孩子变为左孩子。
在C语言下,用二叉链表表示二叉排序树,实现该算法的过程如下:
typedef char datatype;
typedef struct _node{
datatype data;
_node *lchild, *rchild;
}TNode, *PNode, BitTree, *PBitTnode, *PSearchTree;
void ChangeDescen(PSearchTree root) {//将根为root的升序二叉排序树转换为降序
PNode tmp;
if(root == NULL) return;
ChangeDescen(root->lchild);
ChangeDescen(root->rchild);
tmp = root->lchild;
root->lchild = root->rchild;
root->rchild = tmp;
}
G. 试编写一个算法,把单链表改变成循环链表
将单链表改成循环链表只需将单链表最后一个结点的指针指向头结点,即p->next = head。
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。其数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。
循环链表也是一种链式存贮结构。和单链表相比,循环链表中最后一个结点的指针域指向头结点,整个链表形成一个环。
H. 试编写一个递归算法,由正整数序列w1,w2,...wn构造哈夫曼树
给出一个原则性的算法吧:
哈夫曼算法:
一、对给定的n个权值{W1,W2,W3,...,Wi,...,Wn}构成n棵二叉树的初始集合
F={T1,T2,T3,...,Ti,...,Tn},其中每棵二叉树Ti中只有一个权值为Wi的根结点,它的左右子树均为空,并以Ti的权值Wi的升序排列。
二、在F中选取两棵根结点权值最小的树作为新构造的二叉树的左右子树,新二叉树的根结点的权值为其左右子树的根结点的权值之和。
三、从F中删除这两棵树,并把这棵新的二叉树同样以升序排列加入到集合F中。
四、重复二和三两步,直到集合F中只有一棵二叉树为止。