练习题目4

1>猜数游戏
思路:需要一个随机种子在每次游戏时产生一个随机数,然后和用户输入的数字进行比较.
代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//菜单:选择进入还是退出游戏
void menu(){
 printf("1:play\n");
 printf("0:exit\n");
}
//游戏
void game(){
 int num = 0;
 int guessnum = rand() % 100 + 1;
 while (1){
  printf("请输入一个1-100整数:");
  scanf("%d", &num);
  if (num > guessnum){
   printf("您输入的数高了\n");
  }
  else if (num < guessnum){
   printf("您输入的数低了\n");
  }
  else if (num == guessnum){
   printf("您猜对了\n");
   break;
  }
 }
}
int main(void){
 //time  当前的时间戳
 //随机种子
 //返回从1970.01.01到现在的系统时间,经过的时间。参数为null,表示不保存返回值
 srand((unsigned int)time(NULL));
 int input = 0;
 do{
  menu();
  printf("请选择0或1:\n");
  scanf("%d", &input);
 switch (input){
 case 0:
  printf("退出游戏\n");
   break;
 case 1:
  game();
      break;
 default:
  printf("您的输入有误,请重新输入:\n");
 }
 } while (input);
  system("pause");
 return 0;
}

在这里插入图片描述
2>写代码可以在整形有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
思路:只能对有序数组进行二分查找,每次可以缩小一半范围.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//二分查找 arr[]为所给的有序数组,key为要查找的元素,size为arr[]的长度
//若找到要查找的元素,返回其下标.若没找到,返回-1
int binary_search(int arr[],int key,int size){
 if (size < 1){
  return -1;
 }
 int left = 0; 
 int right = size - 1;
 while (left <= right){
  int mid = (left + right) / 2;
  if (key < arr[mid]){
   right = mid - 1;
  }
  else if (key > arr[mid]){
   left = mid + 1;
  }
  else{
   return mid;
  }
 }
 return -1;
}
int main(void){
 printf("请输入你想查找的元素: \n");
 int key = 0;
 int size = 0;
 scanf("%d", &key);
 int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
 size = sizeof(arr) / sizeof(arr[0]);
 int result=binary_search(arr, key, size);
 printf("%d\n", result);
 system("pause");
 return 0;
}

在这里插入图片描述

在这里插入图片描述
3>编写代码模拟三次密码输入的场景.
最多能输入三次密码,密码正确,提示“登录成功”.密码错误,可以重新输入,最多输三次.三次均错,则提示退出程序
思路:使用strcmp()进行字符串比较.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void){
 int i = 0;
 for (i = 0; i < 3; ++i){
  char password[20] = { 0 };
  printf("请输入密码:");
  scanf("%s", password);
  if (strcmp(password, "123abc") == 0){
   break;
  }
 }
  if (i == 3){
   printf("您的机会已用完,禁止登录。\n");
  }
  else{
   printf("登录成功\n");
  }
 system("pause");
 return 0;
}

在这里插入图片描述
在这里插入图片描述
4>编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出.
思路:使用ch = getchar()从键盘读入数据,转换大小写字符使用ascii码.

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44779696/article/details/88808675