很显然,第五次和第六次之差没有到10的-4次方(00001),迭代需要继续,代码如下:
#include <stdioh>
#include <mathh>
double t1(double t2,double t3);
double t2(double t1,double t4);
double t3(double t1,double t4);
double t4(double t2,double t3);
double t1_array[2];
double t2_array[2];
double t3_array[2];
double t4_array[2];
int main(int argc, char const argv[])
{
double t1_rel;
double t2_rel;
double t3_rel;
double t4_rel;
int flag1 = 0;
int flag2 = 0;
int flag3 = 0;
int flag4 = 0;
int loop = 0;
int i = 1;
printf("输入初始值: ");
scanf("%lf,%lf,%lf,%lf",&t1_rel,&t2_rel,&t3_rel,&t4_rel);
t1_array[0] = t1_rel;
t2_array[0] = t2_rel;
t3_array[0] = t3_rel;
t4_array[0] = t4_rel;
while(1)
{
t1_array[i] = t1(t2_array[loop], t3_array[loop]);
t2_array[i] = t2(t1_array[i], t4_array[loop]);
t3_array[i] = t3(t1_array[i], t4_array[loop]);
t4_array[i] = t4(t2_array[i], t3_array[i]);
loop++;
if (loop % 2 == 0)
{
loop = 0;
}
i = (loop % 2 == 0)1:0;
if (fabs(t1_array[0] - t1_array[1]) <= 1e-4)
{
flag1 = 1;
}
if(fabs(t2_array[0] - t2_array[1]) <= 1e-4)
{
flag2 = 1;
}
if(fabs(t3_array[0] - t3_array[1]) <= 1e-4)
{
flag3 = 1;
}
if(fabs(t4_array[0] - t4_array[1]) <= 1e-4)
{
flag4 = 1;
}
if (flag1+ flag2 + flag3 + flag4 == 4 )
{
printf("t1 = %lf,t2 = %lf,t3 = %lf,t4 = %lf\n",t1_array[i],t2_array[i],t3_array[i],t4_array[i] );
break;
}
}
}
double t1(double t2,double t3)
{
double temp;
temp = 025(t2 + t3 + 40 + 30);
return temp;
}
double t2(double t1,double t4)
{
double temp;
temp = 025(t1 + t4 + 20 + 30);
return temp;
}
double t3(double t1,double t4)
{
double temp;
temp = 025(t1 + t4 + 30 + 15);
return temp;
}
double t4(double t2,double t3)
{
double temp;
temp = 025(t2 + t3 + 10 + 5);
return temp;
}
include<stdioh>
#include<mathh>
int main()
{
double a;
double x2=0,x1=10;
printf("请输入被开方数:");
scanf("%lf",&a);
for(x1=10;fabs(x2-x1)>1e-10;)
{
x1=x2;
x2=(2x1+a/(x1x130));
}
printf("结果为:%f",x2);
return 0;
}
1:辉三角形(要求打印出10行)
==============================================================
#include<stdioh>
main()
{
long i,j,n,k;
scanf("%ld",&n);
for(i=1;i<=n;i++)
{
k=1;
for(j=1;j<i;j++)
{
printf("%ld ",k);
k=k(i-j)/j;
}
printf("1\n");
}
}
求一个33的矩阵对角线元素之合
==========================================================
直接用两个for循环遍历矩阵
然后用if判断在i=j的时候把该元素加到sum里面
3:什么迭代求法,有什么规则。距离用法(例如3次函数)
==========================================================
迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性 *** 作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。
具体用法:我没太弄明白你说的3次函数具体是个什么意思
是求f(x)=x^3 这样的函数的结果吗?
如果这样利用迭代的话就是得出迭代公式 就是 f(x)=f(x)x
用个循环就可以了 这个思路不难
迭代和递归有区别:迭代比递归的效率要高的多 利用内存占用资源也更少
所以写程序时提倡能用迭代来转换的递归都用迭代来代替
4:最小公倍数和最大公约数的求法;
==================================================================
这个用“辗转相除”法就可以了 相信你们老师已经讲过
迭代:
#include <stdioh>int main()
{
int n,i;
double a,b,c,x;
scanf("%d%lf", &n, &x);
if(n==0) printf("%lf\n",1);
else if(n == 1) printf("%lf\n",x);
else
{
a=1;
b=x;
for(i = 1; i<n; i ++)
{
c=x(2i+1)/(n+1)b - ia/(i+1);
a=b;
b=c;
}
printf("%lf\n",c);
}
}
递归法、
#include <stdioh>double calc(int n, double x)
{
if(n ==0) return 1;
if(n == 1) return x;
return x(2n-1)/(n)calc(n-1,x) - (i-1)calc(n-2, x)/(n);
}
int main()
{
int n;
double x;
scanf("%d%lf", &n, &x);
printf("%lf\n",calc(n,x));
return 0;
}
以上就是关于C语言迭代编程问题全部的内容,包括:C语言迭代编程问题、c语言 用迭代法求解、用C语言迭代函数的调用来计算X-X^3/3!+X^5/5!-X^7/7!+.....等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)