以下内容为本人学习笔记,若有错误,欢迎指正
今天看到一个有趣的题目给定两个整形变量的值,将这两个值的内容进行交换方法一:借助中间变量#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);
return 0;
}
方法二:将方法一包装成函数
#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);
return 0;
}
2,不允许创建临时变量,交换两个数的内容
方法一:利用两个数之间的和的结果保存两个数的结果
#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);
return 0;
}
方法二 : 利用数字存储是按二进制序列存储
#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);
return 0;
}
3,求10个整数中的最大值
#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++)
{//用打擂台的方法,逐一比较max和当前值,比较大的为新擂主
if (max < a[j])
max = a[j];
}
printf("其中最大的数是:%d\n", max);
return 0;
}
4,将三个数按从大到小输出
方法一
#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]);
}
return 0;
}
方法二:
#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\n", a,b,c);
return 0;
}
5,求两个数的最大公约数
方法一:相除法
#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\n", a);
return 0;
}
方法二:相减法
#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\n", b);
return 0;
}
完。