1.给定两个整形变量的值,将两个值的内容进行交换。
#include<stdlib.h>
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
printf("输入a =\n");
printf("输入b =\n");
scanf("%d%d", &a, &b);
c = a;
a = b;
b = c;
printf("\na = %d,b = %d", a, b);
system("pause");
return 0;
}
2. 不允许创建临时变量,交换两个数的内容
(1)通过加法来实现
int main()
{
int a = 0;
int b = 0;
printf("输入a =\n");
printf("输入b =\n");
scanf("%d%d", &a, &b);
a = a + b;
b = a - b;
a = a - b;
printf("\na = %d,b = %d", a, b);
system("pause");
return 0;
}
(2)通过异或来实现
通过异或计算时,会将整数转换为二进制数,a^ b时,二进制上各位数相互比较,相同为0,不同为1。例如二进制数 a = 011 b= 110 , a^b=101。
int main()
{
int a = 0;
int b = 0;
printf("输入a =\n");
printf("输入b =\n");
scanf("%d%d", &a, &b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("\na = %d,b = %d", a, b);
system("pause");
return 0;
}
3.求10 个整数中最大值。
int main()
{
int arr[10] = { 0 };
int i = 0;
int max = 0;
printf("请输入10个数\n");
for (i = 0; i < 10; i++)
{
printf("arr[%d]=", i);
scanf("%d", &arr[i]);
printf("\n");
}
max = arr[0];
for (i = 0; i < 10; i++)
{
if (arr[i]>max)
max = arr[i];
}
printf("max is = %d", max);
system("pause");
return 0;
}
4.将三个数按从大到小输出。
将数从大到小依次传给a,b,c最终输出a,b,c得到结果。
int main()
{
int a = 0;
int b = 0;
int c = 0;
int temp = 0;
scanf("%d%d%d" ,&a, &b, &c);
if (a < b)
{
temp = a;
a = b;
b = temp;
}
if (a < c)
{
temp = a;
a = c;
c = temp;
}
if (b < c)
{
temp = b;
b = c;
c = temp;
}
printf("%d %d %d", a, b, c);
system("pause");
return 0;
}
在写这个代码是遇到的问题:
在输入环节scanf,曾将代码写成
scanf("%d %d %d " ,&a, &b, &c);
这时发现在输入三个数字后 仍需要再输入一个数字,才会显示结果
随意输入一个数后却能得到正确结果
这是因为在下面这段代码中,%d和%d之间输入了空格,前面的两个空格对输入似乎不会影响,
但最后一个空格会使输入增加一次。
scanf("%d %d %d " ,&a, &b, &c);
将这段代码改成下图后,即去掉%d之间的逗号可以得到:
scanf("%d%d%d" ,&a, &b, &c);
只去除最后一个%d后面的空格
scanf("%d %d %d" ,&a, &b, &c);
其结果一样!
5.求两个数的最大公约数。
算法:用a%b得到c在用b模c知道结果为0 为止
在语句while (c=a%b)不仅仅是判断a%b是否为0 ,同时也将a%b的值赋给了c
若改成while(a%b)将陷入死循环!
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
printf("enter two number\n");
scanf("%d%d", &a, &b);
while (c=a%b)//小数模大数余小数的值
{
a = b;
b = c;
}
printf("%d", b);
system("pause");
return 0;
}