C语言基础练习

1.整形变量交换

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int x, y, z;
	printf("输入x,y的值空格隔开\n");
	scanf("%d%d", &x, &y);
	z = x;
	x = y;
	y = z;
	printf("交换后:x=%d y=%d", x, y);
	system ("pause");
	return 0;
}

定义中间变量z,n用于存放交换数该程序较为简单。
2.无临时变量进行变量交换

  #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    	int x, y;
    	void s();
    	printf("方法1:输入x,y的值空格隔开\n");
    	scanf("%d%d", &x, &y);
    	x= x + y;
    	y = x-y;
    	x = x - y;
    	printf("交换后:x=%d y=%d\n", x, y);
    	s();
    	system("pause");
    	return 0;
    }
    void s()
    {
    	int a, b;
    	printf("方法2:输入x,y的值空格隔开\n");
    	scanf("%d%d", &a, &b);
    	a = a^b;
    	b = a^b;
    	a = a^b;
    	printf("交换后:x=%d y=%d", a, b);
    }

方法一:利用数学方法
	x= x + y;(先将x与y的和值赋予x)
	y = x-y;(用和值减去y则为x的数值赋予y)
	x = x - y;(用和值减去y(此时大小为x的值)赋予x)
这样便进行了数值交换。
方法二:c语言异或(半加运算)
	a = a^b;
	b = a^b;
	a = a^b;
异或也叫半加运算,运算法则相当于不带进位的二进制加法,二进制下1代表真,0代表假。0异或0为0,0异或1为1,1异或1为0,运算法则与加法相同只是不带进位。
**3.输入一组数求最大值
**#include <stdio.h>
#include <stdlib.h>
int main()
{
	int a[10],i,x;
	x = a[0];
	printf("输入数组空格隔开:");
	for (i = 0; i <= 9; i++)
	{
			scanf("%d", &a[i]);
	}
	for (i = 0; i < 10; i++)
	{
		if (a[i]>x)
			 x=a[i] ;	
	}
		printf("最大值:%d",x);
	system("pause");
	return 0;
}****
解题思路:
	for (i = 0; i < 10; i++)
	{
		if (a[i]>x)
			 x=a[i] ;	
	}

首先定义中间变量x,将该组数第一个数值赋予x,应用for循环依次比较该组数值与x的大小,当遇到大于x数时将这个数a[i]赋予x,然后在继续比较直到求得最大数。
4.输入一组数从大到小输出

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int a[10], i,j,k;
	printf("输入数组空格隔开:");
	for (i = 0; i <= 9; i++)
	{ 
		scanf("%d", &a[i]);
	}
	for (i = 0; i < 10; i++)
		for (j = i+1; j<10; j++)
		{
			if (a[j] > a[i])
			{
				k = a[i];
				a[i] = a[j];
				a[j] = k;
			}
		}
       	for (i = 0; i <= 9; i++)
	{
		printf("%d ", a[i]);
	}
	system("pause");
	return 0;
}
    解题思路:冒泡法
for (i = 0; i < 10; i++)
	for (j = i+1; j<10; j++)
	{
		if (a[j] > a[i])//取a[0]依次比较该组数据
		{
			k = a[i];//条件成立则将该数与a[0]交换
			a[i] = a[j];
			a[j] = k;
		}
	}

首先定义一个数组a[10]存放一组数,取该组数第一个数a[0]依次与其后面的数作比较,当遇到大于该数时与该数交换,以此得到a[0]为最大值。经过这样n次比较后会得到一组从大到小排列的数据。
5.求两个数的最大公约数

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int a, b, i, x;
	printf("输入两个数空格隔开\n");
	scanf("%d%d", &a, &b);
	if (a > b)
		x = b;
	else
		x = a;
	for (i = x; i >= 1; i--)
	{
		if (a%i == 0 && b%i == 0)
		{
			printf("最大公约数:%d", i);
			break;
		}
	}
	system("pause");
	return 0;
}
解题思路:
	if (a > b)
		x = b;
	else
		x = a;//求出输入两个数最小值赋予x
	for (i = x; i >= 1; i--)//从大到小循环
	{
		if (a%i == 0 && b%i == 0)//当这两个数同时取某个数进行取余操作结果为0时,说明这个数为这两个数的公约数,又因为这个数由大到小排列所以当满足该条件时的第一个数应为最大公约数。
		{
			printf("最大公约数:%d", i);
			break;当取到符合数时跳出循环
	  }
	}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值