猜数字游戏,二分查找 ,输密码游戏

1.完成猜数字游戏
首先这个代码要先理解他如何猜数字。不可能是在代码中写一个数,你来猜它吧。
所以你得有一个可以产生随机数的函数。
也就是rand();
所以接下来就好写了。只要通过循环比较来告诉它值低了 还是 高了 。
我是通过函数来实现的,一个输出函数,一个游戏函数。结合起来。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void  put(){
	printf("********************************************\n");
	printf(" 1. 开始游戏\n");
    printf(" 2. 游戏结束\n");
	printf("********************************************\n");
}
void game(){
	int i = 1;
	srand((unsigned)time(0));
	int random = rand() % 100 + 1;
	while (1){
	printf("请输入一个数字\n");
		scanf("%d", &i);
		if (i > random){
			printf("高了\n");
		}
		else if (i < random){
		printf("低了\n");
		}
		else if (i == random){
			printf("猜对了\n");
			break;
		}
	}
}
int main(){
	put();
	int choice = 1;
	while (1){
		printf("请选择\n");
		scanf("%d", &choice);
		if (choice == 1){
			game();
		}
		else if (choice == 2){
			printf("游戏结束\n");
			break;
		}
		else{
			printf("你的输入有误,请重输 \n");
		}
	}
	system("pause");
	return 0;

2.写代码可以在整型有序数组中查找想要的数字,
找到了返回下标,找不到返回-1.(折半查找) 。
折半查找简单说就是把数组 根据你输入的值和数组中间值比较,把输入值范围减少一半,依次循环,最后确定了数的位置。但是运用折半查找要注意数组必须是有序的。
接下来,实现我们要先定义俩个变量,去找到数组左边下标和右边下标。确定中间值。
通过while循环去一直改变中间值,去确定你要找的数字位置。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(){
	int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int len = sizeof(a) / sizeof(a[0]);
	int right = len - 1;
	int left = 0;
	int number, mid;
	printf("请输入你想要的数字: ");
	scanf("%d", &number);
	while (left <= right){
		mid = (left + right) / 2;
		if (number > a[mid]){
			left = mid + 1;
		}
		else if (number < a[mid]){
			right = mid - 1;
		}
		else{
			printf("查到了, %d 的下标为%d \n", a[mid], mid);
			break;
		}

	}
	if (left > right){
		printf("无这个值的下标");
	}
	system("pause");
	return 0;
}

3.编写代码模拟三次密码输入的场景。
最多能输入三次密码,密码正确,提示“登录成功”,密码错误,
可以重新输入,最多输入三次。三次均错,则提示退出程序。

在这个游戏中,我们只要知道怎样去比较你输入字符串和密码字符串如何比较,
就OK了。运用strcmp()比较函数。如果字符串相同返回0,反之返回1.

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

int main(){
	char str1[] = {"123456"};
	char str[] = {""};
	int i = 3;
	while(i > 0){
		printf("请输入密码:  ");
	    scanf("%s", str);
		if (strcmp(str, str1) == 0){
			printf("密码正确\n");
			break;
		}
		else{
			--i;
			printf("请重新输入,你还有%d机会\n", i);
		}

	}
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值