题目描述

题目链接:编写函数实现两数交换(指针方式)

描述
编写一个函数,实现两个整数的交换,要求采用指针的方式实现。
输入描述:
键盘输入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 编写函数实现两数交换(指针方式)相关推荐

  1. 牛客网C语言入门刷题(BC1 ~ BC50)

    文章目录 BC1 实践出真知 BC2 我是大V BC3 有容乃大 BC6 小飞机 BC7 缩短二进制 BC8 十六进制转十进制 BC9 printf的返回值描述 BC10 成绩输入输出 BC11 学生 ...

  2. 牛客网C语言题目练习

    牛客网C语言专题练习 BC1 实践出真知 BC2 我是大V BC3 有容乃大 BC6 小飞机 BC7 缩短二进制 BC8 十六进制转十进制 BC9 十六进制转十进制 BC11 学生基本信息输入输出 B ...

  3. 牛客网 编程初学者入门训练 BC133 KiKi说祝福语

    题目来源:牛客网 编程初学者入门训练 BC133 KiKi说祝福语 import java.util.Scanner; public class Main {public static void ma ...

  4. 牛客网 编程初学者入门训练 BC37 网购 Java

    题目来源:牛客网 编程初学者入门训练 BC37 网购 import java.util.Scanner; public class Main {public static void main(Stri ...

  5. 牛客网 编程初学者入门训练 BC3 有容乃大 Java

    题目来源:牛客网 编程初学者入门训练 BC3 有容乃大 public class Main {public static void main(String[] args) {System.out.pr ...

  6. 牛客网c语言刷题130,开篇入门刷题,战胜对编程的恐惧,适合初学者食用。

    大一,大二初学者训练题 1. BC1-实践出真知 2. BC2-我是大V 3. BC3-有容乃大 4. BC7-缩短二进制 5. BC19-反向输出一个四位数 6. BC28- 大小写转换 本文所有题 ...

  7. 牛客网_Go语言相关练习_选择题(2)

    注:题目来源均出自牛客网. 一.选择题 Map(集合)属于Go的内置类型,不需要引入其它库即可使用. Go-Map_菜鸟教程 在函数声明中,返回的参数要么都有变量名,要么都没有. C选项函数声明语法有 ...

  8. 牛客网C语言考试输入输出问题

    如果是用C语言考试,且HW的需要自己写输入输出的,请注意. 以下绝对不能用 void main() { return ; } 图省事不写返回值,但是会导致网站一直报错,输出无法正常输出,fflush( ...

  9. 牛客网刷题 入门篇 基础语法

    VL1 四选一多路器 四选一多路器_牛客题霸_牛客网 `timescale 1ns/1ns module mux4_1( input [1:0]d1,d2,d3,d0, input [1:0]sel, ...

最新文章

  1. [YY题]HDOJ5288 OO’s Sequence
  2. 初学python的30个操作难点汇总(入门篇)希望对你有帮助
  3. CMD 一条命令 执行 多条命令
  4. Python 之 matplotlib (十二) subplot
  5. linux开机关机命令
  6. Juce源代码分析(一)Juce的优势
  7. PL/SQL复合变量
  8. linux分区知识,Linux硬盘分区知识
  9. bfs——练习demo2(20届周新杰提供)
  10. mysql数据结构优化,范式和反范式
  11. 又涨了?2021 年 3 月程序员工资统计新出炉
  12. 斗地主AI算法——第十一章の被动出牌(5)
  13. android 跳转系统通知,android 跳转到应用通知设置界面
  14. VMware安装Linux(CentOS7)
  15. 基于Python+tkinter+pygame的音乐播放器完整源码
  16. leetcode64. 最小路径和
  17. /etc/apt/sources.list.d/ros-latest.list' permission denied
  18. 挑战程序竞赛系列(22):3.2弹性碰撞
  19. Arduino火焰传感器(含代码)
  20. 什么造成了社会普遍的人情冷漠?

热门文章

  1. 热烈祝贺五行和合酒成功挂牌
  2. echarts is not defined解决方案
  3. 预测赢家_云的赢家和输家?
  4. 宝塔搭建织梦网站迁移到旗鱼云梯平台教程
  5. 织梦将建好网站上传到空间
  6. Burpsuite抓取安卓模拟器的包实现app抓包
  7. 浙江农林大学本科毕业论文答辩和论文选题PPT模板
  8. hgame202301 week1 web writeup
  9. Spring嵌入式数据库示例
  10. 23个PR导出视频渲染设置PR预设(Adobe Premiere Pro Media Encoder导出预设)