【C语言】猜数游戏,有序数组中找数,模拟登陆,字符输入

C语言习题:(编译环境为:VS2013)

 

1.完成猜数字游戏。 

2.写代码可以在整型有序数组中查找想要的数字, 找到了返回下标,找不到返回-1.(折半查找) 


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

4.编写一个程序,可以一直接收键盘字符, 
如果是小写字符就输出对应的大写字符, 
如果接收的是大写字符,就输出对应的小写字符, 
如果是数字不输出。 

 

今天的代码中我们要用到的新的函数:

1:strcmp字符串比较函数,

      要使用此函数,在头文件中我们就要加上#include <string.h>,然后我们就可以具体调用这个库中的一些函数了,比如strcmp,strlen,strcpy等等,我们用到了strcmp,关于这个函数的用法,请大家参考这里,在我们学习过程中最好是在这种权威的网站上查找自己不会的东西.

2:time函数

     下文有具体解释

 

下面是几道题的代码以及要注意的点:

1.完成猜数字游戏。

这道题我们的基本思想是:

1.搞一个入口菜单(开始游戏/结束游戏)
2.生成一个随机数
3.进行一局具体的游戏

注意:在进行选择的时候并不推荐大家使用switch语句,因为switch语句比较复杂容易出错.

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int menu()
{
	printf("*********************************\n");
	printf("************1.开始游戏************\n");
	printf("************0.退出游戏************\n");
	printf("*********************************\n");
	int choice = 0;
	printf("请输入您的选择:\n");
	scanf("%d", &choice);
	return choice;
}
void start()
{
	int sj = 0;    //生成一个随机数
	int count = 1;
	sj = rand() % 100 + 1;
	while (count)
	{
		printf("请输入一个数[1-100]\n");
		int c = 0;     //输入一个自己猜的数
		scanf("%d", &c);
		if (c > sj)
		{
			printf("猜大了\n");
		}
		else if (c < sj)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了^_^\n");
			break;
		}
	}
}
int main()
{
	//搞一个入口菜单(开始游戏/结束游戏)
	//生成一个随机数
	//进行一局具体的游戏
	while (1)
	{
		int xz = menu();
		if (xz == 1)
		{
			start();
		}
		else
		{
			printf("再见^_^\n");
			break;
		}
	}
	system("pause");
	return 0;
}

     

   代码在这里,可是当这个代码运行后,我们可以发现,当开始一局新的游戏的时候,你输入上一次猜中的结果,他会直接显示猜中了,所以这个代码他是不严谨的,他会记录住你上次生成的那个随机数,所以我们要在代码中间加一行代码,即srand((unsigned int )time(0));  它是一个种子,这时候你发现你输入上次猜中的那个结果后,它不会直接提示你输入正确了,那么要用到这句代码我们要注意两点:

 1)要在time前面加上(unsigned int),这是因为time函数返回的是time_t , time_t其实是一个unsigned long long 的一个typedef,

换句话说,time_t其实是一个8个字节的无符号整数,但是srand生成的是一个4个字节的无符号整数,所以我们要把time_t强制转换成一个4个字节的无符号整数.

2)要使用time函数我们就得在头文件中加上#include <time.h>

 

修改后的代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int menu()
{
	printf("*********************************\n");
	printf("************1.开始游戏************\n");
	printf("************0.退出游戏************\n");
	printf("*********************************\n");
	int choice = 0;
	printf("请输入您的选择:\n");
	scanf("%d", &choice);
	return choice;
}
void start()
{
	int sj = 0;    //生成一个随机数
	int count = 1;
	sj = rand() % 100 + 1;
	while (count)
	{
		printf("请输入一个数[1-100]\n");
		int c = 0;     //输入一个自己猜的数
		scanf("%d", &c);
		if (c > sj)
		{
			printf("猜大了\n");
		}
		else if (c < sj)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了^_^\n");
			break;
		}
	}
}
int main()
{
	//搞一个入口菜单(开始游戏/结束游戏)
	//生成一个随机数
	//进行一局具体的游戏
	srand((unsigned int )time(NULL));
	while (1)
	{
		int xz = menu();
		if (xz == 1)
		{
			start();
		}
		else
		{
			printf("再见^_^\n");
			break;
		}
	}
    system("pause");
    return 0;
}

这样的话这个程序就可以正确运行了.

2.写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找) 
   这道题是一道相对简单的题,要注意的有:

  1)使用折半查找也叫二分查找,就是先比较最中间的数,然后决定往左边走还是往右边走,直到比较完为之.

  2)当区间发生变化的时候,我们可以给mid+1或者-1,是因为,我们用的是闭区间,当mid已经比过之后我们就不用它上次所存的那个数了,所以给它加一或者减一来确定新的区间.

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int serch()
{
	int a[11] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
	int number;
	int L = 0, R = 10, M = 0;
	printf("请输入要查找的数:");
	scanf("%d", &number);
	while (L <= R)
	{
		M = L + (R - L) / 2;
		if (a[M] == number)
		{
			return M;
		}
		else if (a[M] > number)
		{
			R = M - 1;
		}
		else if (a[M] < number)
		{
			L = M + 1;
		}
	}
	return -1;
}
int main()
{
	int x = 0;
	x = serch();
	if (x != -1)
	{
		printf("找到了,下标为%d\n",x);
	}
	else
	{
		printf("找不到\n");
	}
	system("pause");
	return 0;
}

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

   这个程序要注意的函数strcmp在开头已经提到.

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	char str[10] = {0};
	for (int i = 1; i < 4; ++i)
	{
		printf("please input the password:\n");
		scanf("%s", str);
		if (strcmp(str, "q123456") == 0)
		{
			printf("Log in\n");
			break;
		}
		if (i == 3)
		{
			printf("three incorrect input,exit");
		}
	}
	printf("\n");
	system("pause");
	return 0;
}


 4.编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。 

这个程序要注意的就是:

1)大小写的转换,小写转换成大写-32,大写转换小写+32,那么在这里其实是Ascll码的转换.点这里可以查看Ascll表

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
 int main()
{
	char c;
	int t;
	while ((c = getchar()) != EOF)
	{
		if (c >= 'a'&& c <= 'z')
		{
			t = c - 32;
			printf("%c\n", t);
		}
		if (c >= 'A'&& c <= 'Z')
		{
			t = c + 32;
			printf("%c\n", t);
		}
	}
	system("pause");
	return 0;
}

今天就分享这些给大家,谢谢观看^_^

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值