//利用第三变量,交换两变量的值
int a=10;int b=20;int tmp;{
tmp=a; a=b; b=tmp;
}
//不使用第三变量,交换两变量的值
(1)
int a=10;
int b=20;
{
a=a-b;
b=b+a;
a=b-a;
}
int b=20;
{
a=a-b;
b=b+a;
a=b-a;
}
(2)
int a=10;
int b=20;
{
a=a+b;
b=a-b;
a-=b;
}
int b=20;
{
a=a+b;
b=a-b;
a-=b;
}
不使用第三变量交换数值,如(1)、(2)所示,不用担心溢出问题,
即使a=100000000;b=200000000;不影响最后结果,结果正确。
(3)有一个分数数列 2/1,3/2,5/3,8/5,13/8,21/13……求出这个数列的前二十项和
#include<stdio.h>
double Fraction(int n)
{ double a=2; //分子
double b=1; //分母
double sum=0;
for(int i=1;i<=n;i++)
{ sum+=a/b;
a+=b; 等同于---> //{int tmp;
b=a-b; // tmp=a;
} // a=a+b;
return sum; // b=tmp; }
}
int main()
{
printf("%f\n",Fraction(1)); //测试用例,检测结果是否正确
printf("%f\n",Fraction(2)); //测试用例,检测结果是否正确
printf("%f\n",Fraction(20));
return 0;
}
double Fraction(int n)
{ double a=2; //分子
double b=1; //分母
double sum=0;
for(int i=1;i<=n;i++)
{ sum+=a/b;
a+=b; 等同于---> //{int tmp;
b=a-b; // tmp=a;
} // a=a+b;
return sum; // b=tmp; }
}
int main()
{
printf("%f\n",Fraction(1)); //测试用例,检测结果是否正确
printf("%f\n",Fraction(2)); //测试用例,检测结果是否正确
printf("%f\n",Fraction(20));
return 0;
}