/*=========================================================================
工程名称: 练习
组成文件: 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;
}