[C语言] 关于数值交换但不使用第三变量

//利用第三变量,交换两变量的值

 
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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值