【牛客网】C语言入门 - CC3 编写函数实现两数交换(指针方式)
题目描述
题目链接:编写函数实现两数交换(指针方式)
描述
编写一个函数,实现两个整数的交换,要求采用指针的方式实现。
输入描述:
键盘输入2个整数 m 和 n
输出描述:
输出交换后m 和 n 的值,中间使用空格隔开
示例1
输入:23
输出:3 2
解题分析:
这道题使用函数实现交换功能,考察的是传址调用。有三种解题方法:
思路1:利用临时变量。
思路3:不使用临时变量,利用加减运算符。
思路2:不使用临时变量,利用按位异或运算符。
异或运算规则:0 ^ a = a,a ^ a = 0,a ^ b ^ a = b,a ^ b ^ b = a
代码实现:
方法1
#include <stdio.h>
void swap(int* x,int* y)
{//有临时变量int tmp = *x;*x = *y;*y = tmp;
}
int main()
{int m = 0, n = 0;scanf("%d", &m);scanf("%d", &n);swap(&m,&n);printf("%d %d",m,n);return 0;
}
方法2
#include <stdio.h>
void swap(int* x,int* y)
{//无临时变量*x = *x + *y;//m = 8,n = 5*y = *x - *y;//n = 3,m = 8*x = *x - *y;//m = 5,n = 3;//当两个数超级大时,相加的结果可能会有溢出
}
int main()
{int m = 0, n = 0;scanf("%d", &m);//m = 3scanf("%d", &n);//n = 5swap(&m,&n);printf("%d %d",m,n);return 0;
}
方法3
#include <stdio.h>
void swap(int* x,int* y)
{//异或方法,兼容了以上两种,无临时变量,且不会结果溢出//a ^ b ^ b = a,a ^ b ^ a = b//0 ^ a = a, a ^ a = 0*x = *x ^ *y;*y = *x ^ *y;//a ^ b ^ b = a*x = *x ^ *y;//a ^ b ^ a = b
}
int main()
{int m = 0, n = 0;scanf("%d", &m);scanf("%d", &n);swap(&m,&n);printf("%d %d",m,n);return 0;
}
- 非函数实现
#include <stdio.h>
int main()
{int a = 3;int b = 5;printf("before:a = %d,b = %d\n", a, b);//方法1:有临时变量int tmp = 0;tmp = a;a = b;b = tmp;//方法2:无临时变量a = a + b;//a = 8,b = 5b = a - b;//b = 3,a = 8a = a - b;//a = 5,b = 3;//当两个数超级大时,相加的结果可能会有溢出//方法3:异或方法,兼容了以上两种//a ^ b ^ b = a,a ^ b ^ a = b//0 ^ a = a, a ^ a = 0a = a ^ b;b = a ^ b;//a ^ b ^ b = aa = a ^ b;//a ^ b ^ a = b printf("after: a = %d,b = %d\n", a, b);return 0;
}
注意:对于非函数的实现,是主函数内的操作,不需要使用指针操作。
【牛客网】C语言入门 - CC3 编写函数实现两数交换(指针方式)相关推荐
- 牛客网C语言入门刷题(BC1 ~ BC50)
文章目录 BC1 实践出真知 BC2 我是大V BC3 有容乃大 BC6 小飞机 BC7 缩短二进制 BC8 十六进制转十进制 BC9 printf的返回值描述 BC10 成绩输入输出 BC11 学生 ...
- 牛客网C语言题目练习
牛客网C语言专题练习 BC1 实践出真知 BC2 我是大V BC3 有容乃大 BC6 小飞机 BC7 缩短二进制 BC8 十六进制转十进制 BC9 十六进制转十进制 BC11 学生基本信息输入输出 B ...
- 牛客网 编程初学者入门训练 BC133 KiKi说祝福语
题目来源:牛客网 编程初学者入门训练 BC133 KiKi说祝福语 import java.util.Scanner; public class Main {public static void ma ...
- 牛客网 编程初学者入门训练 BC37 网购 Java
题目来源:牛客网 编程初学者入门训练 BC37 网购 import java.util.Scanner; public class Main {public static void main(Stri ...
- 牛客网 编程初学者入门训练 BC3 有容乃大 Java
题目来源:牛客网 编程初学者入门训练 BC3 有容乃大 public class Main {public static void main(String[] args) {System.out.pr ...
- 牛客网c语言刷题130,开篇入门刷题,战胜对编程的恐惧,适合初学者食用。
大一,大二初学者训练题 1. BC1-实践出真知 2. BC2-我是大V 3. BC3-有容乃大 4. BC7-缩短二进制 5. BC19-反向输出一个四位数 6. BC28- 大小写转换 本文所有题 ...
- 牛客网_Go语言相关练习_选择题(2)
注:题目来源均出自牛客网. 一.选择题 Map(集合)属于Go的内置类型,不需要引入其它库即可使用. Go-Map_菜鸟教程 在函数声明中,返回的参数要么都有变量名,要么都没有. C选项函数声明语法有 ...
- 牛客网C语言考试输入输出问题
如果是用C语言考试,且HW的需要自己写输入输出的,请注意. 以下绝对不能用 void main() { return ; } 图省事不写返回值,但是会导致网站一直报错,输出无法正常输出,fflush( ...
- 牛客网刷题 入门篇 基础语法
VL1 四选一多路器 四选一多路器_牛客题霸_牛客网 `timescale 1ns/1ns module mux4_1( input [1:0]d1,d2,d3,d0, input [1:0]sel, ...
最新文章
- [YY题]HDOJ5288 OO’s Sequence
- 初学python的30个操作难点汇总(入门篇)希望对你有帮助
- CMD 一条命令 执行 多条命令
- Python 之 matplotlib (十二) subplot
- linux开机关机命令
- Juce源代码分析(一)Juce的优势
- PL/SQL复合变量
- linux分区知识,Linux硬盘分区知识
- bfs——练习demo2(20届周新杰提供)
- mysql数据结构优化,范式和反范式
- 又涨了?2021 年 3 月程序员工资统计新出炉
- 斗地主AI算法——第十一章の被动出牌(5)
- android 跳转系统通知,android 跳转到应用通知设置界面
- VMware安装Linux(CentOS7)
- 基于Python+tkinter+pygame的音乐播放器完整源码
- leetcode64. 最小路径和
- /etc/apt/sources.list.d/ros-latest.list' permission denied
- 挑战程序竞赛系列(22):3.2弹性碰撞
- Arduino火焰传感器(含代码)
- 什么造成了社会普遍的人情冷漠?