c语言中用函数交换两个变量的值方法是先将变量赋值给中间变量,然后中间变量再赋值给另外一个变量,程序如下:
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的登封网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
#include "Stdio.h"
#include "Conio.h"
void swap(int x,int y)
{
int t,m;
t=x; //变量x赋值给中间变量t
m=y; //变量y赋值给中间变量m
x=m; //中间变量m赋值给变量x,将y的值赋值给了x。
y=t; //中间变量t赋值给变量y,将x的值赋值给了y。
}
main()
{
int a,b;
a=1,b=2;
swap(a,b); //调用交换函数
printf("%d,%d",a,b);
getch();
}
扩展资料:
C语言的语法结构:
1、顺序结构
顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
例如:a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子里面的水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为:c = a; a = b; b = c;执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b =c;则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。
顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三步曲的程序就是顺序结构。
2、选择结构
对于要先做判断再选择的问题就要使用选择结构。选择结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。选择结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的选择语句。
选择结构适合于带有逻辑或关系比较等条件判断的计算,设计这类程序时往往都要先绘制其程序流程图,然后根据程序流程写出源程序,这样做把程序设计分析与语言分开,使得问题简单化,易于理解。程序流程图是根据解题分析所绘制的程序执行流程图。
3、循环结构
循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构,C语言中提供四种循环,即goto循环、while循环、do while循环和for循环。
四种循环可以用来处理同一问题,一般情况下它们可以互相代替换,但一般不提倡用goto循环,因为强制改变程序的顺序经常会给程序的运行带来不可预料的错误。
参考资料来源:百度百科-C语言
void
swap(int
*a,int*
b)
{
int
temp=0;
temp=*a;
*a=*b;
*b=temp;
}
因为是指针,只要更换指针内的内容就可以了;
还有一种是
换指针,就设a指向没存A,b指向内存B,交换后把b指向内存A,把a指向内存B
void
swap(int
*a,int*
b)
{
int
*temp;
temp=a;
a=b;
b=temp;
}
#include stdio.h
void swap_1(int*a,int*b)//方法一,定义临时变量
{
int temp=*a;
*a=*b;
*b=temp;
}
void swap_2(int*a,int*b)//方法二,利用加减法运算
{
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
void swap_3(int*a,int*b)//方法三,利用位运算
{
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;
}
int main()
{
int x,y;
scanf("%d%d",x,y);
printf("x=%d,y=%d\n",x,y);
swap_1(x,y);//或swap_2(x,y);或swap_3(x,y);
printf("x=%d,y=%d\n",x,y);
return 0;
}
方法一:三变量交换。
#includestdio.h
int main(void)
{
int a,b;
scanf("%d%d",a,b);
int t=a;a=b;b=t;
printf("%d %d\n",a,b);
return 0;
}
方法二:加减交换
#includestdio.h
int main(void)
{
int a,b;
scanf("%d%d",a,b);
a=a+b;
b=a-b;
a=a-b;
printf("%d %d\n",a,b);
return 0;
}
方法三:异或交换
#includestdio.h
int main(void)
{
int a,b;
scanf("%d%d",a,b);
a=a^b;b=b^a;a=a^b;//可写成a^=b^=a^=b;
printf("%d %d\n",a,b);
return 0;
}
方法四(黑盒测试下):不交换
#includestdio.h
int main(void)
{
int a,b;
scanf("%d%d",a,b);
printf("%d %d\n",b,a);
return 0;
}
要交换任意变量 那么就只能通过指针来进行
不考虑变量类型,而直接交换值。
需要三个参数,两个变量地址,以及变量所占的空间。
赋值可以用memcpy
代码如下:
void super_swap(void * a, void *b, int size)
{
void *p = malloc(size);
memcpy(p, a, size);
memcpy(a,b,size);
memcpy(b,p,size);
free(p);
}
不知道你要交换的两个变量类型,所以这里以整型数据交换为例,以下swap函数实现了交换两个整型变量值的功能:
#include stdio.h
// 交换给定指针指向整型变量的值。
// 参数:
// a - 指向第一个变量的指针
// b - 指向第二个变量的指针
void swap(int* a, int * b);
int main(int argc, int argv)
{
int a = 3, b = 5;
printf_s("交换前:a = %d, b = %d\n", a, b);
swap(a, b);
printf_s("交换后:a = %d, b = %d\n", a, b);
return 0;
}
// 交换给定指针指向整型变量的值。
// 参数:
// a - 指向第一个变量的指针
// b - 指向第二个变量的指针
void swap(int* a, int* b)
{
// 声明一个临时变量,保存第一个指针指向变量
// 的值。
// 其中 *a 是取出 a 指针指向变量的值
int temp = *a;
// 将 b 指针指向的值赋值给 a 指针指向变量
(*a) = (*b);
// 将临时变量 temp 中保存的 a 指针指向变量的值赋值给
// b 指针指向的变量。
(*b) = temp;
}
以上代码运行结果如下:
以下代码实现了使用宏定义作为模板,声明不同类型交换函数的功能,以下以声明double和float为例:
#include stdio.h
// 声明一个函数代码模板,逻辑参考 swap(int* a, int* b)
#define DEF_SWAP_FUNC(Type) void swap_##Type(Type* a, Type* b) \
{ \
Type temp = (*a); \
(*a) = (*b); \
(*b) = temp; \
}
// 使用模板声明并实现一个 double 类型变量交换函数,函数名为 swap_double
DEF_SWAP_FUNC(double)
// 使用模板声明并实现一个 float 类型变量交换函数,函数名为 swap_float
DEF_SWAP_FUNC(float)
int main(int argc, int argv)
{
// double 类型数据交换
double da = 5.6, db = 3.5;
printf_s("double 交换前:da = %lf, db = %lf\n", da, db);
swap_double(da, db);
printf_s("double 交换后:da = %lf, db = %lf\n", da, db);
// float 类型数据交换
float fa = 3.4, fb = 6.8;
printf_s("float 交换前:fa = %f, fb = %f\n", fa, fb);
swap_float(fa, fb);
printf_s("float 交换前:fa = %f, fb = %f\n", fa, fb);
return 0;
}
运行结果如下: