索鸟网

  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 版权归作者所有!

相关教程

  • 用函数实现两个数的交换(指针)

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> void swap(int *pa, int *pb) { int tmp = *pa; *pa= *pb; *pb = tmp; &n
  • 求两个数的最大公因数和最小公倍数

    package com.zmj.nineNine; import java.util.Scanner; public class NineXNine { /** * 使用辗转相除法求得最大公因数 * 两个数相乘,结果除以最大公因数 得到的就是最小公倍数 * @param args */ public sta
  • 使用java求两个数最大公约数

    最近有同学问java求最大公约数的问题,个人查了一下维基百科,发现竟有一个如此精辟的解法... /** * 辗转相除法求最大公约数 * @param a 被除数 * @param b 除数 * @return 最大公约数 */ public static int getGCD(int a, int b)
  • 将两个数组合并为一个数组并排序

    将两个数组合并为一个数组并排序 #include<stdio.h> void fun(int a[]){ int i,j,temp; for(i=0;i<19;i++){ for(j=0;j<19-i;j++){ if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j&
  • 三层交换实现VLAN互通

    三层交换技术:二层交换技术+三层转发技术。它解决了局域网中网段划分之后,网段中子网必须依赖路由器进行管理的局面,解决了传统路由器低速、复杂所造成的网络瓶颈问题。实验需求:C1和C4属于VLAN10,C2、C3属于VLAN20;三层交换实现PC间互通;R2配置静态路由实现全网互通;实验步骤:实验所用 :Cisco GNS31.SW1配置SW1#confi t   &nbs
  • div+css实现两列布局实例

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>两列布局实例</title> <style> .mainBox{ width: 960px; height:
  • 数据结构-Python实现「交换类排序」

    运行环境:python 2.7.12 学习课程来源:算法与数据结构C++精解 分类: 1.冒泡排序 2.快速排序 1. 冒泡排序 def bubble_sort(arr, n): swapped = True while swapped: swapped = False for i in xrange(1, n)
  • java 计算器 (非图形,两个数的简单四则预算,集合框架之前的知识做

    学到集合框架,可以把字符串类型的数字装化为基本数据类型,就产生了做个简单的计算器的想法。可是在网上查了半天代码,最简单的都已经实现了图形界面。而我的这个代码目前只能实现两个数运算,这还是最简单的项目,差距就这么大。实在是有点受打击。 而且更受打击的是,只能进行一步运算。期待大神的指点。 上代码: 父类,省略了set/get方法; private String n