打字游戏 猜字游戏 二分查找


/*=========================================================================
  工程名称: 练习 
  组成文件: main.c
  功能描述:  小写字母输入测试程式,记录测试时间和正确率,且可以循环测试
  程序分析: getch()与getchar(),前者只接收字符,后者还要接收回车符(即所有标准输入字符)
  维护记录: 2010-09-11 v1.1  add by dxh
=========================================================================*/

#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <math.h>
#include <dos.h>
#define AL  50 //定义测试字母的最大长度

int main(void)
{
 char s[AL] = "";
 char *str = s,*tmp;
 char ch,c;
 int i=0,k,count=0;
 time_t t1,t2;

 tmp = str;
 while(1)
 {
  system("cls");//vc++下调用system();函数实现清屏
  srand((unsigned)time(NULL));//采集当前时间做为随机数rand()的开始
  
  for(k = 0;k<AL;k++)//打印50个英文字符用于测试
  {
   s[k] = (char)((rand() % 26) +97 );//对26求余使得结果不超过26
  }
  
  s[AL] = '\0';//写完字符后补上结束标志位
  
  printf("\n*****************************************");
  printf("\n* 输入过程中无法退出!                   *");
  printf("\n* 请按所给字母敲击键盘!                 *");
  printf("\n* 按任意键开始测试,按下首字母时开始计时!*");
  printf("\n* 输入出错则以 _ 表示                   *");
  printf("\n*****************************************\n\n");
  getch(); //任意键开始游戏
  printf("\n%s\n",str);
  
  t1 = time(NULL);//取开始时间
  for(i=0;i<AL;i++)
  {
   ch = getch();
   if(ch == str[i])
   {
    printf("%c",ch);
    count++;
   }
   else
   {
    printf("_");//打印出错标志
   }
  }
  t2 = time(NULL);//取结束时间
  printf("\n完成输入!\n用时 %d s\n正确率%d %c\n按下Esc退出,空格键继续!\n\n",(t2-t1),(count*100)/AL,'%');
  
  while (1)
  {
   c = getch();

   if(32 == c)
    break;
   if(27 == c)
    return 0;//若为esc退出
  }
  count = 0;  
 }
 return 0;
}

 


/*=========================================================================
  工程名称: 练习 
  组成文件: main.c
  功能描述:  产一个四位随机数,分三个难度(猜测次数)级别猜测,
    将每次猜测范围提示给玩家
  程序分析: 为了便于处理,可以采用字符串进行处理
  维护记录: 2010-09-11 v1.1  add by dxh
=========================================================================*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int  loop=1;

void Exit(void)
{
 loop=0;
}

void Guess_game(void)
{
 char keylev,key;
 char ges_num[4]="0",src_num[4]=" ";
 int  lev[3]={40,25,12};
 int  level,num=0;
 int  rand_num;
 time_t t;
 
 srand( (unsigned int )time(&t) );
 rand_num = rand()%10000; //产生一个四位随机数

 //分离四位随机数,并转换成字符
// src_num[0]=rand_num/1000+'0';
// src_num[1]=rand_num%1000/100+'0';
// src_num[2]=rand_num%100/10+'0';
// src_num[3]=rand_num%10+'0';
 
 src_num[0]=rand_num/1000%10+'0';
 src_num[1]=rand_num/100%10+'0';
 src_num[2]=rand_num/10%10+'0';
 src_num[3]=rand_num/1%10+'0';

 printf("请选择难度级别:1,2,3\n");
 
 keylev=getch();
 level=keylev-'1';
 
 printf("Lev.%d\n", level+1);
 printf("开始游戏。输入数字:\n");

 while(num<lev[level])
 {
  int i;
  scanf("%s", ges_num);

  if(strncmp(src_num, ges_num,4)==0)
  {
   printf("猜对了!!!\n");
   break;
  }
  for(i=0; i<4; i++)
  {
   if(ges_num[i]>src_num[i])
    printf("第%d位大于正确数字。\n", i+1);
   else if(ges_num[i]<src_num[i])
    printf("第%d位小于正确数字。\n", i+1);
   else
    printf("第%d位正确。\n", i+1);
  }

  num++;

  if(num==lev[level])
   printf("失败了!!!\n");
  else
  printf("再次输入数字:\n"); 
 }

 printf("按1  再次进入游戏\n按0  退出\n");
 
 key=getch();

 if(key=='0')
   Exit();

 if(key=='1')
   Guess_game();

}

void Rule(void)
{
 char key;

 printf("猜数字:系统会随机产生一个四位数字,在不同难度\n");
 printf("下你有相应的次数去猜测这个数字。系统会给你提示\n");
 printf("信息,在规定次数内猜对即获胜。\n");
 
 printf("按1  进入游戏\n按0  退出\n");
 
 key=getch();

 if(key=='0')
   Exit();

 if(key=='1')
   Guess_game();
}

int main(void)
{
 char key;
 
 while(loop)
 {
  printf("按1  进入游戏\n按2  查看游戏规则\n按0  退出\n");

  key=getch();

  if(key=='0')
   Exit();

  if(key=='1')
   Guess_game();

  if(key=='2')
   Rule();
 }
}
 

 


/*=========================================================================
  工程名称: 练习 
  组成文件: main.c
  功能描述:  在一个排好序的数据中用二分查找法,找出需要的数据
  程序分析: 首先得从小到大排好序,二分再比较,不等则继续二分,直到高低碰头遍历结束
  维护记录: 2010-09-11 v1.1  add by dxh
=========================================================================*/

#include <stdio.h>

int main(void)
{
 int value;
 int a[10]={0,1,2,3,4,5,6,7,8,9};
 int n;

 while(1)
 {
  printf("\n请输入你要查找的数字:\n");
  scanf("%d",&value);

  n = binary_search(a,value,10);
  
  if(n==-1)
   printf("数字没找到!\n");
  else
   printf("查找数据的下标是:%d\n",n);
 }
}

//二分法对以排好序的数据进行查找
int binary_search(int array[],int value,int size)
{
 int low=0,high=size-1,mid,flag = 0;
 
 while(low<=high)//只要高低不碰头就继续二分查找
 {
  mid=(low+high)/2;
  if(value==array[mid])//比较是不是与中间元素相等
  {
   flag = 1;
   break;
  }
  else if(value > array[mid])//每查找一次,就判断一次所要查找变量所在范围,并继续二分
   low=mid+1; //在高处,就将下限上移一个,上限不变,往高方向二分
  else
   high=mid-1; //往低方向二分
 }
 if(1 == flag)
  return mid;
 else
  return -1;
}

 

 

 

 


 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值