C语言例程合集(2)

1.编写代码,演示多个字符从两端移动,向中间汇聚。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>

int main()
{
	char arr1[] = "welcome to bit!!!";
	char arr2[] = "#################";
	int left = 0;
	int right = strlen(arr1) - 1;

	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000);//休眠一秒,使用时需引用#include<windows.h>
		system("cls");//清空屏幕,使用时需引用#include<windows.h>
		left++;
		right--;
	}
	printf("%s\n", arr2);
	return 0;
}

也可以用for循环实现

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

int main()
{
	char arr1[] = "welcome to bit!!!";
	char arr2[] = "#################";
	int left = 0;
	int right = strlen(arr1) - 1;

	for (left = 0, right = strlen(arr1) - 1; left <= right; left++, right--)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000);//休眠一秒,使用时需引用#include<windows.h>
		system("cls");//清空屏幕
	}
	printf("%s\n", arr2);
	return 0;
}

 2.编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>

int main()
{
	char key;
	int i = 0;
	char passward[] = { 0 };
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:>");
		scanf("%s", passward);
		if (strcmp(passward, "abcdefg123") == 0)//比较字符是否相同
		{
			printf("登录成功\n");
			break;
		}
		else
		{
			printf("密码错误\n");
		}
	}
	if (i == 3)
	{
		printf("三次密码均错误,已锁定");
	}
	return 0;
}

3.猜数字游戏

//猜数字游戏
//自动生成一个1-100之间的数字
//猜数字
//猜对了,恭喜你,游戏结束
//猜错了:猜大了,猜小了,直到猜对
//游戏一直玩,除非退出游戏

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>

void menu()
{
	printf("********1.play********\n");
	printf("********0.exit********\n");
	printf("**********************\n");
}

void game()
{
	int i = 0;
	int g = 0;
    i = rand() % 100 + 1; //随机生成1-100的数字
	while (1)
	{
		scanf("%d", &g);
		if (i == g)
		{
			printf("猜对了\n");
			break;
		}
		else if (i < g)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("猜小了\n");
		}
	}
}
int main()
{
	int input=0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择:\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("猜数字\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	}while (input);
	return 0;
}

 注意:1.使用rand函数前,需调用srand函数,否则生成的随机数不够随机,使用时添加预处理指令#include<stdlib.h>。

2.srand函数给固定值的时候,每次生成的随机值都一样,因此采用不同的参数值。时间会有对应的时间戳,随着时间的不同时间戳也会不同。

3.利用time函数获取时间戳 time函数返回的类型是time_t类型,也是一种int类型,需要强制转换成srand函数需要的无符号int类型。

4.time函数使用时添加预处理指令#include,不使用time函数的参数,令其参数为空指针NULL。

5.srand函数不用每次都重新设置,否则会导致每次产生的随机数值相差不大, 因此将该语句放入main函数。

4.使数字从小到大输出

int main()
{
	int a=0,b=0,c=0,d=0;
	scanf("%d %d %d", &a, &b, &c);
	if (a < b && a < c)
	{
		if (b < c)
		{
			d = a;
			a = c;
			c = d;
		}
		else
		{
			d = a;
			a = b;
			b = c;
			c = d;
		}
	}
	if (b < a && b < c)
	{
		if (a > c)
		{
			d = b;
			b = c;
			c = b;
		}
		else
		{
			d = a;
			a = c;
			c = b;
			b = d;
		}
	}
	if (c < a && c < b)
	{
		if (a < b)
		{
			d = a;
			a = b; 
			b = d;
		}
	}
	printf("%d %d %d", a, b, c);
	return 0;
}

太复杂了,优化后的代码如下

int main()
{
	int temp = 0;
	int a = 0;
	int b = 0;
	int c = 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);
}

5.求两个数的最大公约数

int main()
{
	int a = 0;
	int b = 0;
	int i = 0;
	int j = 0;
	int f1 = 0;
	int f2 = 0;
	int maxf = 0;
	scanf("%d %d", &a, &b);
	for (i = 1; i < a + 1; i++)
	{
		if (a % i == 0)
		{
			f1 = i;
		}
		for (j = 1; j < b+1; j++)
		{
			if (b % j == 0)
			{
				f2 = j;
			}		
			if (f1 == f2)
			{
				maxf = f1;
			}
		}
	}
	printf("%d ", maxf);

	return 0;
}

代码复杂,多次遍历,但是最大公约数不会大于最小值,利用这个思路优化代码,优化代码如下:

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int maxf = a > b ? b: a;
	while (1)
	{
		if (a % maxf == 0 && b % maxf == 0)
		{
			printf("%d和%d的最大公约数是%d", a, b, maxf);
			break;
		}
		maxf--;
	}
	return 0;
}

 也可以利用辗转相除法找到最大公约数

int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int maxf = b; 
	//do
	//{
		/*maxf = a % b;
		a = b;
		b = maxf;*/
	//} while (maxf);
	//printf("最大公约数是%d", a);
	while (maxf=a % b)
	{
		a = b;
		b = maxf;
	}
	printf("最大公约数是%d", b);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值