1.交换两个整型变量的值
(1)最简单的:建立临时变量交换
int a = 10, b = 20;
printf("交换前:\na=%d\nb=%d\n", a, b);
int temp;//建立临时变量temp
temp = a;//交换两个变量的值
a = b;
b = temp;
printf("交换后:\n");
printf("a=%d\nb=%d\n", a, b);
(2)不建立临时变量
①将两变量进行代数运算后交换值:以加法为例
a = 10; b = 20;
printf("交换前:\na=%d\nb=%d\n", a, b);
a = a + b;//将和赋值给a
b = a - b;//和-b 的值 即为a赋值给b b现在=a
a = a - b; //和-b 而b此刻=a,则表达式的值为b 即此刻a=b,完成交换
printf("交换后:\n");
printf("a=%d\nb=%d\n", a, b);
②二进制按位异或"^".
进行代数运算虽然实现了两个变量的交换,但是其中的问题在于:
1.无论是和还是积,都可能会出现数据溢出问题。
2.并且进行除法运算的时候要保证除数不能为0。
从计算机的存储方面来看,数据都是以二进制的形式存放在计算机中的。不难想到可以从二进制的运算来考虑。而“异或”就可以实现变量的交换。
a = 10; b = 20;//a:1010;b:10100
printf("交换前:\na=%d\nb=%d\n", a, b);
a = a ^ b;//a=11110
b = a ^ b;//b=01010 即10
a = a ^ b;//a=10100 即20
printf("交换后:\n");
printf("a=%d\nb=%d\n", a, b);
2.求10个整数中的最大值
处理方法:用一维数组来存放这十个数。
源代码:
#include<stdio.h>
int main()
{
int a[10]; //定义存放10个数据的数组
int i;
for (i = 0; i < 10; i++)//用键盘给数组赋值
{
scanf("%d", &a[i]);
}
int max = a[0];//初始化max=数组的第一个元素
for (i = 0; i < 10; i++)
{
if (a[i] >= max) //如果某个元素比max大,或者相等,就把它赋值给max
max = a[i];
}
printf("max=%d", max);
return 0;
}
注意:
1.scanf函数的处理:VS会给它一个警告,表示这个函数可能会不安全。
解决的方法就是:
(1)在最上面定义#define _CRT_SECURE_NO_WARNINGS来消除警告。
(2)将scanf改为scanf_s.
(3)或者在项目里面关闭安全检测选项。
2.控制循环的变量i如果需要多次用到,就必须在for语句外定义。不能写成
for(int i=0;i<10;i++),这样写造成的结果就是第二次使用这个变量的时候会报错:该变量没有声明。
这就牵扯到变量作用域和生命周期的概念。对于这些普通局部变量,它的作用域和生命周期就只是当前代码块,简单粗暴的来讲就是包含该变量的最近一层的大括号。
3.将三个数从大到小输出
冒泡排序法:
#include<stdio.h>
int main()
{
int a[3];
int i, j,temp;
for (i = 0; i < 3; i++)//为数组赋值
scanf("%d", &a[i]);
for(j=0;j<2;j++)//进行比较
for (i = 0; i < 2 - j; i++)
{
if (a[i] < a[i + 1])//如果前一个数小于后一个则交换位置
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
printf("\n排序后:\n");
for (i = 0; i < 3; i++)
printf("%d", a[i]);
return 0;
}
4.求两个数的最大公约数
#include<stdio.h>
int main()
{
int a, b,min, GCD,i;//min表示两个数中的较小的数,GCD表示两个数的最大公约数
printf("请输入a=");
scanf("%d", &a);
printf("\n请输入b=");
scanf("%d", &b);
min = a < b ? a : b;//将两个数的较小者赋值给min
for (i = 1; i <= min; i++)//从1开始直到两个数中的较小者
{
if (a%i == 0 && b%i == 0)//如果两个数均能被同一个数整除,那么这个数就是这两个数的公约数
GCD = i;//利用循环找到公约数中的最大值,并将其赋值给GCD
}
printf("两个数的最大公约数是%d\n", GCD);
return 0;
}