C语言思考题

来源:互联网 发布:手机淘宝红包怎么领取 编辑:程序博客网 时间:2024/06/06 06:14

C语言思考题


程序:

#include<stdio.h>#include<math.h>double f1(double a){    a=exp(a);    return a;}double f2(double b){    b=b*b+2*b+1;    return b;}double qiu(double c,double d){    double dx=0.000000001;    c=(c-d)/dx;    return c;}int main(){    double x0,dx=0.000000001,dy1,dy2;    printf("x0=");    scanf("%lf",&x0);    dy1=qiu(f1(x0+dx),f1(x0));    dy2=qiu(f2(x0+dx),f2(x0));    printf("\nf1'(x0)=%.4f\nf2'(x0)=%.4f",dy1,dy2);}
或者:
#include<stdio.h>#include<math.h> #define dx 1e-8int main (){double f1(double);double f2(double);double Derivative(int,double);getchar ();}double f1(double x){double y;y=exp(x);return y;}double f2(double x){double y;y=x*x+2*x+1;return y;}double Derivative (int i,double x){double y;switch (i){case 1:y=(f1(x+dx)-f1(x))/dx;break;case 2:y=(f2(x+dx)-f2(x))/dx;break;default :printf("Wrong");}return y;}



程序1:

程序2:


程序1:


程序2:



错误程序:


错误之处:

1.定义整型数组时一定要初始化!!!

2.由于大小写字母的数字结果均是放在一个数组中,所以差量要注意!!!

譬如:num[temp+25]++;应该时num[temp+26]++; for(i=0;i<=num[c-'A'];i++)因该没有=号,for(i=25;i<=num[ch-'a'+26];i++)亦是如此。

3.需要对没有出现的字母进行判断并不予输出。

4.小写字母的输出不要和整型中的顺序搞混,哪来的什么for(i=25;i<=num[ch-'a'+26];i++)???

修改之后的程序:


另一个版本:


1.程序:

运行结果:


2.程序:


运行结果:


小结: 

<1>在这种近似求解的类型题目中,要精确定义数字类型,比如所有的变量都设为double,调用的函数返回值也设为double,数组也定义为double

<2>注意do…while迭代中的x0=x;…x=x-f/df;这两个语句之间的顺序,千万不能乱,否则会错误判断while的条件,得出错误结果。

<3>这里有一个超高级的技巧(自我感觉)。就是b[3]={-2,2,0},即把导数的二次项系数设为0,这样在调用的函数里面的for循环就可以直接写i<3,而不用分a,b数组两种情况了。或者在main函数里面用sizeof(a)/sizeof(a[0])以及sizeof(b)/sizeof(b[0]),然后再传到函数里面。但是又因为poly的参数只能有两个,这就要求不能放在main里面,而是把这个s设为全局变量,然后再到poly里面用。

<3>不要用strlen来度量整型数组的长度,方法即<2>中所说。

3.程序:


运行结果:


4.程序:


运行结果:


5.程序:


运行结果:




1.程序:


2.程序:


原创粉丝点击