首页 > 学院 > 开发设计 > 正文

<Fundamentals of Data Structures in C> 1.2 算法描述

2019-11-06 07:00:02
字体:
来源:转载
供稿:网友

【习题2】

霍纳规则 Horner's method:

用来简化朴素多项式的求值,在中国叫秦九韶算法。霍纳规则是一种将一元n次多项式求值问题转化为n个一次式算法。其大大简化了计算过程,即使在现代,利用计算机解决多项式的求值问题时,霍纳规则依然是最优的算法规则。霍纳规则是采用最少的乘法运算策略,求多项式A(x) = anxn+ an-1xn-1+...+ a1x + a0在x0处的值,该规则是A(x0)=(...((anx0+ an-1)x0+...+ a1)x0+ a0)
#include <stdlib.h>#include <stdio.h>#include <time.h> #define MAX_SIZE 101 float horner(float [], int, int, float); int main(){    float coefficient[MAX_SIZE];     /*输入多项式的项数*/    PRintf("Enter the number of polynomial terms to generate: ");    int n;    scanf_s("%d", &n);    /* VS2013等版本中使用scanf_s(),VC6.0中使用scanf(),下同*/    if(n < 1 || n > MAX_SIZE)    {        fprintf(stderr, "Improper value of n/n");        exit(EXIT_FAILURE);    }      srand((unsigned)time(NULL));    int i;    for(i = 0; i < n; i++)    {        /*随机生成n个系数并存在数组coefficient里*/        coefficient[i] = rand() / (float)(RAND_MAX / 100);        printf("%lf/t", coefficient[i]);    }      /*输入多项式的自变量值*/    printf("/nEnter the value of x: ");    float x;    scanf_s("%f", &x);      /*多项式结果*/    double result = 0;    result = horner(coefficient, n, 0, x);    printf("/nResult of this polynomial in %f is %f/n", x, result);    return 0;}  float horner(float list[], int n, int i, float x){    if(i == n - 1)        return list[n-1]; /*递归出口*/    else        return horner(list, n, i + 1, x) * x + list[i]; /*递归过程*/}【习题3】取巧:假设有n个布尔变量,那就直接把大于零且不大于2^n的整数,按二进制输出,就是所有可能,1代表真,0代表假。但目的是要练习递归函数。下面这个例子是找个地方先存起来,递归完毕了统一打印。
#include <stdio.h>#define Max_size 100 /*最多可以使得n=100 */void value(char *, int i, int n);void main(void){int n, k;char list[Max_size]; /*用字符数组存储字符,‘T’代表true, ‘F’代表false*/printf("input the number of Booleans: /n");scanf("%d", &n);if (n<1 || n>Max_size){   printf("/nImproper number n!/n");   exit(1);}for(k=0; k<n; k++){   list[k] = 'T';}value(list, 0, n-1);}void value (char *list, int i, int n){int j;if (i==n+1) /*已经递归完毕, 输出序列*/{   for (j=0; j<=n; j++)   {    printf("%c", list[j]);   }   printf("     ");}else {   list[i] = 'T';   value(list, i+1, n);   list[i] = 'F';   value(list, i+1, n);}}【习题4】有递归什么事情么?
#include "stdio.h"int main(){    int x,y,z,max,min;    scanf("%d%d%d",&x,&y,&z);    if(x>y){        max=x;        min=y;    }    if(z>max) max=z;    if(min>z) min=z;    y=x+y+z-max-min;    x=max;    z=min;    printf("从大到小排序:%d %d %d/n",x,y,z);       }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表