坚持!认真!

今天学习了内存如何存放东西,学习了指针的用法。

第一题:给定两个整形变量的值,将两个值的内容进行交换


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,则该被除数为这两个数的最大公约数。

今天有好好学习哦~

猜你喜欢

转载自blog.csdn.net/qq_43223415/article/details/82795711
今日推荐