【习题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); }
新闻热点
疑难解答