1. Question & Analysis
- Question: 输入两个数,把它们交换后并输出;
- Analysis: 我目前接触到的题目,有点点难度的就是不允许定义中间临时变量完成两个数进行交换;他们考这些题目的时候一般操作数都是整型数字,我这里想尝试一下浮点数,看能不能准确输出想要的结果!
2.Code Module
-
直接在主函数中创建临时变量完成交换:
#include <stdio.h> int main(int agrc, const char* agrv[]) { double a, b; scanf("a=%lf,b=%lf", &a, &b); double tmp = a; a = b; b = tmp; printf("a=%lf,b=%lf\n", a, b); return 0; }
-
通过指针操作完成交换:
#include <stdio.h> void exchange(double* i, double* j) { double k = *i; *i = *j; *j = k; } int main() { double a, b; scanf("a=%lf,b=%lf", &a, &b); exchange(&a, &b); printf("a = %lf, b = %lf\n", a, b); return 0; }
-
通过位操作符"^",不创建临时变量:
#include <stdio.h> int main(int agrc, const char* agrv[]) { double a, b; scanf("a=%lf,b=%lf", &a, &b); a = a ^ b; // 报错!操作数必须为整型; b = a ^ b; // 同上; a = a ^ b; // 同上; printf("a=%lf,b=%lf\n", a, b); return 0; }
3. Summary
这里提醒一点2.3中位操作符的操作数必须为整型。 说一下我的测试发现,以上2.1&2.2的输入和输出如下:
- 输入:a = 3.1415925, b = 0.6180335
- 输出:a = 0.618034, b = 3.141592
由此可以看出,printf("%lf\n", goal_num); 输出浮点数的时候,默认保留六位小数,且默认遵循"向偶舍入"。
另外,我想,关于交换两个操作数,肯定还有其他比较漂亮的方法,我这里就是抛砖引玉,记录一下,哈哈哈 期待大家能够一起讨论分享。(在此再次感谢上个帖子为我解惑的大佬们,你们的评论真的很有价值!),所以说,逛贴子最有意思的还是看评论区,收获很大。