整形变量的交换、比较大小等简单代数问题。

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;
}

猜你喜欢

转载自blog.csdn.net/Wz_still_shuai/article/details/84679240