C语言初阶小练习(3)

接上次 C语言小练习(2)http://t.csdn.cn/1gyMK

 

上上次 C语言小练习(1)http://t.csdn.cn/Lw7jl

目录

//用for循环结构编程求输入的两个自然数的最大公约数

<1>更相减损法

<2>辗转相除法 

//用for循环结构编程求输入的两个自然数的最小公倍数数

//用编程打印星型图案

//交换数组

//模拟用户登录


​​​//用for循环结构编程求输入的两个自然数的最大公约数

<1>更相减损法

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int gcb = (a > b ? b: a);
	for (; a % gcb || b % gcb;)//当a % gbc == 0 且 b % gbc == 0 时跳出循环
	{
		gcb--;
	}
	printf("%d\n", gcb);
	return 0;
}

<2>辗转相除法 

我不会……还是用上面比较好理解的方法吧……

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a = 18;
	int b = 24;
	int c = 0;
 
	while(c=a%b)
	{
		a = b;
		b = c;
	}
 
	printf("%d\n", b);
	return 0;
}

//用for循环结构编程求输入的两个自然数的最小公倍数数

这个和上面求最小公约数道理是一样的,只需稍作改动即可~

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int c = (a > b ? a : b);
	for (; c % a || c % b;)//当 c % a ==0 && c % b == 0时跳出循环
	{
		c++;
	}
	printf("%d\n", c);
	return 0;
}

//用编程打印星型图案

这题的思路还是比较简单的哈~

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int i = 0;
	for (i = 0; i < 4; i++)//前4行
	{
		int m = (3 + i);
		int n = (7 - 2 * i);
		for ( ;m>0 ; m--)
		{
			printf(" ");
		}
		for (;n>0; n--)
		{
			printf("*");
		}
		printf("\n");
	}
	for (i = 4; i < 7; i++)//后4行
	{
		int j = (9 - i);
		int k = (2 * i - 5);
		for (; j > 0; j--)
		{
			printf(" ");
		}
		for (; k > 0; k--)
		{
			printf("*");
		}
		printf("\n");
   }
	return 0;
}

//交换数组

思路:先把内容全部交换完,再分别将数组打印出来。不要想着交换一个打印一个,超级麻烦,容易走进死胡同(反正我没弄出来,唉……)。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int arr1[10] = { 0 };
	int arr2[10] = { 0 };
	int i = 0;


	printf("请输入10个数字:>");
	for (i = 0; i < 10; i++)//for循环输入多组数据
	{
		scanf("%d", &arr1[i]);//输入一个数就要空格,否则会看成一个数
	}                         //理解不了问问自己,不空格的话,输入多位数时怎么办??
	printf("请输入10个数字:>");
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr2[i]);
	}
	//交换
	for (i = 0; i < 10; i++)//先全部交换完毕
	{
		int tmp = arr1[i];
		arr1[i] = arr2[i];
		arr2[i] = tmp;
	}
	for (i = 0; i < 10; i++)//再打印
	{
		printf("%d", arr1[i]);
	}
	printf("\n");
	for (i = 0; i < 10; i++)
	{
		printf("%d", arr2[i]);
	}

	return 0;
}

//模拟用户登录

只允许输入三次密码,正确则成功,错误退出 。 

因为不管次数有没有用尽,都要输入一次密码,所以使用do-while循环。我这写的算是很简单了,密码只能由数字组成,以后有能力会再优化的(有字母符号啥的),各位看官有什么建议也可以在评论区留言哦~

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int passwordyes = 123456;
	int password = 0;
	int i = 3;
	printf("用户登录系统,共三次机会\n");
	do
	{
		printf("请输入密码:>");
		scanf("%d", &password);
		if (password == passwordyes)
		{
			printf("密码正确\n");
			break;
		}
		else
			printf("密码错误,还有%d次机会\n", i - 1);
		i--;
		if (i == 0)
		{
			printf("登陆失败\n");
		}
	} while (i > 0);
	return 0;
}

没了,小练习(4)见!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值