一入代码深似海,从此妹子是路人.
经过一段时间的学习和了解,大家对C语言有了一部分认知和理解,无论是简单的printf输出函数,for循环语句,switch选择语句,数组等等,大家都有了第一印象,那么,这时候就该将理论知识运用到实践中,所以,为大家带来一些相对之前稍难的一些题目.在这里,我们也要慢慢接触到函数这个概念.
(一)猜数字游戏
要求使用C语言编写一个简单的猜数字游戏.
游戏过程为:玩家输入数字,系统判定正确与否,然后做出相应回应,大则提示猜大了,小则提示猜小了,正确则退出程序.
思考过程:
1)首先需要有一个随机数
2)判断大小,让系统能够进行相应的提示
3)循环的建立和跳出条件的设定
int menu(){//菜单函数,给与玩家信息,如何开始如何退出
printf("***************************\n");
printf("**********数字游戏*********\n");
printf("**1:开始游戏***0:退出游戏**\n");
printf("***************************\n");
printf("请输入您的选择\n");
int choice = 0;
scanf("%d", &choice);
return choice;
}
void game(){//game函数,游戏主要部分
int random_num = rand() % 100 + 1;//使用random函数生成一个1~100之间的随机数
int input = 0;
while (1){//简单的逻辑判断,这里不需要过多解释
printf("请输入需要猜的数字:\n");
scanf("%d", &input);
if (input > random_num){
printf("猜大了\n");
}
else if (input < random_num){
printf("猜小了\n");
}
else{
printf("恭喜你猜对了\n");
break;
}
}
}
int main(){
int input = 0;
int choose = menu();
switch (choose)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("请重新输入:\n");
}
system("pause");
return 0;
}
(二)在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
思考过程:首先查找的数组是一个有序数组.要求是如果找到了,就返回下标,找不到返回-1.后面还说到了折半查找,也就是常说的二分查找.每次与数组中间的值进行比较,通过这个逐渐缩短范围.
int main(){
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };//定义有序数组
int to_find = 14;//需要找的值
int left = 0;
int reight = sizeof (arr) / sizeof arr[0] - 1;//数组最后一个成员下标
while (left <= reight){
int mid = (left + reight) / 2;//找到数组中间成员下标
if (to_find == arr[mid]){
printf("找到了,下标是:");
printf("%d\n", mid);
break;
}
if (to_find > arr[mid]){
left = mid + 1;
}
if (to_find < arr[mid]){
reight = mid - 1;
}
}
if (left>reight){
printf("没找到,返回-1\n");
}
system("pause");
return 0;
}
难点:
1)数组中间下标的确定
2)明白逻辑:如果比中间元素小,reight = mid - 1;如果比中间元素大left = mid + 1
(三)模拟三次密码输入的场景。 最多能输入三次密码,密码正确,提示“登录成功”, 密码错误,可以重新输入,最多输入三次。三次均错,则提示退出程序。
思考过程:
1)需要设置一个密码
2)条件判断:正确,输出登陆成功,错误,重新输入
3)错误次数垒加,达到三次则退出程序
int Is_true(){//这里我定义了一个验证函数
int secret = 0;
int sum = 0;//垒加数,防止密码错误次数超过三次
scanf("%d", &secret);//设置密码
printf("请验证您的密码:\n");//提示验证
while (1){
int test_secret = 0;
scanf("%d", &test_secret);
if (test_secret == secret){
return 1;//若密码正确,返回1
}
else{
printf("密码错误,请重新输入:\n");
sum++;
if (sum == 3){
return 0;//若密码错误且错误次数达到三次,返回0
}
}
}
}
int main(){
int secret = 0;
int choice = 0;
printf("请输入设置您的密码:\n");
choice = Is_true();
switch (choice)//根据验证函数返回的值输出对应的语句
{
case 1:
printf("登录成功\n");
break;
case 0:
printf("登录超时\n");
break;
}
system("pause");
return 0;
}
(四)编写一个程序,可以一直接收键盘字符, 如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出。
思考过程:首先需要接受一个键盘字符,然后根据不同的条件作出不同的输出.所以方法如下:
1)接收字符
2)判断:小写字符返回相应的大写字符,大写字符返回相应的小写字符,数字不输出
int main(){
char num = getchar();//从键盘上获取一个字符
printf("%c\n", num);//输出这个字符,验证一下
if (num >= 'a' && num <= 'z'){//小写字符则输出对应的大写字符
printf("%c\n", num - 32);
}
else if (num >= 'A'&&num <= 'Z'){//大写字符则输出对应的小写字符
printf("%c\n", num + 32);
}
else{//不是上两种直接返回0,不输出
return 0;
}
system("pause");
return 0;
}