C语言实验题汇总
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
#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-8 int 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题程序:
2题程序:
3题程序:
错误程序:
错误分析:
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语句顺序
<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里面用。
<4>不要用strlen来度量整型数组的长度,方法即<3>中所说。
3题程序:
4题程序:
5题程序:
1题程序:
3题程序: