今天学习了内存如何存放东西,学习了指针的用法。
第一题:给定两个整形变量的值,将两个值的内容进行交换
int main()
{
int a = 5;
int b = 6;
int tmp = a;
a = b;
b = tmp;
printf("a = %d b = %d",a,b);
return 0;
}
第二题:不允许创建临时变量,交换两个数的内容
这里运用原码补码的计算方法来交换两个数的位置。
也可用两数相加来换位置,但是存在溢出会有限制。
int main()
{
int a,b;
printf("请输入两个整数分别表示a和b\n");
scanf("%d %d",&a,&b);
a=a^b;
b=a^b;
a=a^b;
printf("a = %d\n",a);
printf("b = %d\n",b);
system("pause");
return 0;
}
第三题:求10 个整数中最大值
int main()
{
int a[9];
int i = 0;
int max = 0;
printf("请输入十个整数:\n");
for(i = 0;i < 10;i++)
{
scanf("%d",&a[i]);
}
max=a[0];//假设第一个值为最大值依次比较,如果设最大值为零的话负数之间就不能比较了。
for (i = 1;i < 10;i++)
{
if (max<a[i])//这里加了分号(;)每次只输出最后一个数
max=a[i];
}
printf("max=%d\n",max);
system("pause");
return 0;
}
第四题 :将三个数按从大到小输出。
如果多个数排序输出就要使用排序算法了。(目前不太会)
void swap(int* pa,int* pb)
{
int tmp = *pa;
*pa = *pb;
*pb = tmp;
}
int main()
{
int a,b,c;
printf("请输入三个整数:\n");
scanf("%d %d %d",&a,&b,&c);
if(a<b)
{
swap(&a,&b);
}
if(a<c)
{
swap(&a,&c);
}
if(b<c)
{
swap(&b,&c);
}
printf("%d %d %d",a,b,c);
return 0;
第五题:求两个数的最大公约数。
int main()
{
int a,b,tmp;
printf("请输入两个整数:\n");
scanf("%d %d",&a,&b);
if(a<b)
{
tmp = b;
b = a;
a = tmp;
}
while(a%b!=0)
{
a = b;
b = a%b;
}
printf("最大公约数为:%d",b);
return 0;
}
这里使用了辗转相除法另外还有相减法和穷举法:
辗转相除法:取两个数中最大的数做被除数,较小的数做除数,用最大的数除以较小数,如果余数为0,则较小数为这两个数的最大公约数,如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。
相减法:取两个数中的最大的数做被减数,较小的数做减数,用最大的数减去小数,如果结果为0,则被减数就是这两个数的最大公约数,如果结果不为0,则继续用这两个数中最大的数减较小的数,直到结果为0,则最大公约数为被减数。
穷举法:将两个数作比较,取较小的数,以这个数为被除数分别和输入的两个数做除法运算,被除数每做一次除法运算,值减少1,直到两个运算的余数都为0,则该被除数为这两个数的最大公约数。
今天有好好学习哦~