索鸟网

  1. 首页
  2. 实现两个数的交换

实现两个数的交换




//1,给定两个整形变量的值,将这两个值的内容进行交换
//方法一
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
 int num1 = 2, num2 = 5, temp = 0;
 printf("未交换之前:\n");
 printf("num1 = %d, num2 = %d\n", num1, num2);
 temp = num1;
 num1 = num2;
 num2 = temp;
 printf("交换之后:\n");
 printf("num1 = %d, num2 = %d\n", num1, num2);
 getchar();
 return 0;
}

//1,给定两个整形变量的值,将这两个值的内容进行交换
//方法二
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void swap(int *x, int *y)
{
 int temp = 0;
 temp = *x;
 *x = *y;
 *y = temp;
}
int main()
{
 int num1 = 2, num2 = 5;
 printf("未交换之前:\n");
 printf("num1 = %d, num2 = %d\n", num1, num2);
 printf("交换之后:\n");
 swap(&num1, &num2);
 printf("num1 = %d, num2 = %d\n", num1, num2);
 getchar();
 return 0;
}

//2,不允许创建临时变量,交换两个数的内容(附加题)
//方法一
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
 int num1 = 3, num2 = 6;
 printf("未交换之前:\n");
 printf("num1 = %d, num2 = %d\n", num1, num2);
 printf("交换之后:\n");
 num1 = num1 - num2;//保存两个数差的关系,防止溢出
 num2 = num2 + num1;//若用乘除关系保存关系时,注意0
 num1 = num2 - num1;
 printf("num1 = %d, num2 = %d\n", num1, num2);
 getchar();
 return 0;
}

//2,不允许创建临时变量,交换两个数的内容(附加题)
//方法二  可读性差,不推荐使用
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
 int num1 = 3, num2 = 6;
 printf("未交换之前:\n");
 printf("num1 = %d, num2 = %d\n", num1, num2);
 printf("交换之后:\n");
 num1 = num1 ^ num2;//利用位运算,保存两数的关系
 num2 = num2 ^ num1;//两二进制数异或:相同为‘0’,不同为‘1’
 num1 = num2 ^ num1;
 printf("num1 = %d, num2 = %d\n", num1, num2);
 getchar();
 return 0;
}
//3,求10个整数中的最大值
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
 int i = 0, max = 0, a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 for (i = 0; i < 10; i++)
 {
  printf("%3d", a[i]);
 }
 printf("\n");
 max = a[0];//若给定max=0,用max开始比较时若数组都为负数,则输出0,并非数组里面的最大值
 for (int j = 1; j < 10; j++)
 {
  if (max < a[j])//if(a[i]>a[0])
   max = a[j];//a[0]=a[i];若用这种方法,则会改变 a[0]的值
 }
 printf("其中最大的数是:%d\n", max);
 getchar();
 return 0;
}

//4,将三个数按从大到小输出
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
 int i = 0, j = 0, temp, a[3] = { 3, 6, 12 };
 printf("未排序前:\n");
 for (i = 0; i < 3; i++)
 {
  printf("%3d", a[i]);
 }
 printf("\n");
 for (i = 0; i < 3; i++)
 {
  for (j = 1; j < 3; j++)
  {
   if (a[j]>a[j - 1])
   {
    temp = a[j];
    a[j] = a[j - 1];
    a[j - 1] = temp;
   }
  }
 }
 printf("由大到小打印这3个数:\n");
 for (i = 0; i < 3; i++)
 {
  printf("%3d", a[i]);
 }
 getchar();
 return 0;
}
//4,将三个数按从大到小输出
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Swap(int *pa,int *pb)
{
 int temp = 0;
 temp = *pa;//*pa,解引用操作,找到pa所指空间的值
 *pa = *pb;
 *pb= temp;
}
int main()
{
 int i = 0, j = 0, a= 3,b= 6,c= 12 ;
 printf("未排序前:");
 printf("a=%d,b=%d,c=%d",a,b,c);
 printf("\n");
 if (a < b)//将a,b中较大的值保存在a中
 {
  Swap(&a, &b);
 }
 if (a < c)//实现将a,c中的较大值保存在a中
 {
  Swap(&a, &c);
 }
 if (b < c)//实现将b,c中较大值保存在b中
 {
  Swap(&b, &c);
 }
 printf("由大到小打印这3个数:\n");
 printf("a=%d, b=%d ,c=%d", a,b,c);
 fflush(stdin);
 getchar();
 return 0;
}

//5,求两个数的最大公约数
//方法一,相除法
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
 int a = 0, b = 0, c = 0, temp = 0;
 printf("请输入两个数");
 scanf("%d", &a);
 scanf("%d", &b);//不用判断大小,第一次循环时自动将值改变
 while (b%a != 0)
 {
  c = b%a;
  b = a;
  a = c;
 }
 printf("她们的最大公约数是%2d", a);
 fflush(stdin);
 getchar();
 return 0;
}
//5,求两个数的最大公约数
//方法二,相减法
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
 int a = 18, b = 45, c = 0;
 while (a != b)
 {
  if (a < b)
  {
   c = b-a;
   b = c;
  }
  else
  {
   c = a - b;
   a = b;
   b = c;
  }
 }
 printf("她们的最大公约数是%2d", b);
 system("pause");
 return 0;
}

来源地址:http://blog.csdn.net/misszhoudandan/article/details/78233307 版权归作者所有!