鱼C论坛

 找回密码
 立即注册
查看: 452|回复: 1

为什么直接输出的值和带入后输出的值不一样

[复制链接]
发表于 2023-12-2 22:09:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在这段代码里,x在代入后无变化,但y在带入后就不一样了,有的符号都变了,下面是我的一些测试代码
  1. #include<iostream>
  2. #include<math.h>
  3. using namespace std;
  4. void changeXY(int i,int j,const int sw[],const double v[],double &x,double &y){
  5.         double v_k=1;
  6.         double v_c=0;
  7.         for(int k=i-1;k<=j-1;k++){
  8.                 if(sw[k]==1){
  9.                         v_k*=v[k];
  10.                 }else{
  11.                         v_c+=v[k];
  12.                 }
  13.         }
  14.         cout<<"------------"<<endl;
  15.         printf("%f %f\n",(x * cos(v_c) - y * sin(v_c)) * v_k,(x * sin(v_c) + y * cos(v_c)) * v_k);
  16.         cout << fixed << (x * cos(v_c) - y * sin(v_c)) * v_k << " "
  17.             << (x * sin(v_c) + y * cos(v_c)) * v_k << endl;
  18.     x=(x * cos(v_c) - y * sin(v_c)) * v_k;
  19.     y=(x * sin(v_c) + y * cos(v_c)) * v_k;
  20.     cout<<x<<" "<<y<<endl;
  21.         cout<<"------------"<<endl;
  22. }
  23. int main(){
  24.         int n,m;
  25.         cin>>n>>m;
  26.         int sw[n];
  27.         double v[n];
  28.         for(int k=0;k<n;k++){
  29.                 cin>>sw[k]>>v[k];
  30.         }
  31.         int i,j;
  32.         double x[m],y[m];
  33.         for(int k=0;k<m;k++){
  34.                 cin>>i>>j>>x[k]>>y[k];
  35.                 changeXY(i,j,sw,v,x[k],y[k]);
  36.         }
  37.         cout<<"***************"<<endl;
  38.         for(int k=0;k<m;k++){
  39.                 printf("%f %f\n",x[k],y[k]);
  40.         }
  41.         return 0;
  42. }
复制代码

下面还有题目给的测试数据:
输入:
10 5
2 0.59
2 4.956
1 0.997
1 1.364
1 1.242
1 0.82
2 2.824
1 0.716
2 0.178
2 4.094
1 6 -953188 -946637
1 9 969538 848081
4 7 -114758 522223
1 9 -535079 601597
8 8 159430 -511187
输出:
-1858706.758 -83259.993
-1261428.46 201113.678
-75099.123 -738950.159
-119179.897 -789457.532
114151.88 -366009.892
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-2 22:09:46 | 显示全部楼层
在代码中,x和y都是被传入函数的参数,并且在函数的声明中没有发生任何变化。所以无论在函数内部怎么修改它们的值,都不会影响到函数外部的变量。

但是,在`changeXY`函数中,有一个`&`符号修饰的参数`y`,表示使用的是引用传递。所以修改`y`的值会直接影响到函数外部的变量。

而对于`x`变量,虽然在函数内修改它的值,但是由于没有使用引用传递,所以函数内部的修改不会影响到函数外部的变量。

以下是一个测试代码示例,演示了函数内部修改`y`的值,并且函数外部变量跟随改变:
  1. #include <iostream>
  2. using namespace std;
  3. void changeXY(int i, int j, const int sw, const double v, double &x, double &y){
  4.     x = i;
  5.     y = j;
  6. }
  7. int main(){
  8.     double x = 0;
  9.     double y = 0;
  10.     cout << "初始值 x = " << x << ", y = " << y << endl;
  11.     changeXY(10, 20, 30, 40.5, x, y);
  12.    
  13.     cout << "函数调用后 x = " << x << ", y = " << y << endl;
  14.     return 0;
  15. }
复制代码

运行结果:
  1. 初始值 x = 0, y = 0
  2. 函数调用后 x = 10, y = 20
复制代码

希望以上解答能够帮到您!如有更多问题,请随时提问。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-1 02:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表