C语言猜数字游戏

猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手。

老程序猿就不要看了,黑呵呵

源代码1
include stdio.h
include stdlib.h
include time.h
void generate(int a[]);                //4位数随机生成函数
void deal(int num,int b[]);            //对用户所猜数处理
void judge(int a[]);                    //多余函数!!!!
void compare(int a[],int b[],int c[]);    //比较函数,用于进行比较
int main()
{
int i,j;                          //定义变量
int m=0,n=0;                      //m代表相同的位数,n代表不同的位数
int a[4],b[4],c[4];             //a存储随机数,b存储用户猜测数,c存储标志
int num;
generate(a);
printf("已经产生系统随机数,且4位数各个位的数字不相同
");
while(1)
{
printf("1.查看随机数输入1
");
printf("1.进行猜测输入2
");
printf("请输入你的选择:");
scanf("%d",&j);
switch(j)
{
case 1:
{
for(i=0;i {
printf("%d",a[i]);
}
printf("
");
};
break;
case 2:
/*{
printf("请输入你猜测的数:");
scanf("%d",&num);
deal(num,b);
compare(a,b,c);
printf("相同的数位为第:");
for(i=0;i {
if(c[i]==1)
printf("%d ",(i+1));
}
printf("位");
printf("
");
};*/
{
printf("请输入你猜测的数:");
scanf("%d",&num);
deal(num,b);
compare(a,b,c);
for(i=0;i {
if(c[i]==1)
m++;
else
n++;
}
printf("相同的数位有:%d位,不同的数位有:%d位
",m,n);
m=0;
n=0;
};
break;
}
}
return 0;
}
/**********************
*	4位数随机生成函数
*	@para int a[]
*	@return ;
***********************/
void generate(int a[])
{
int i,j;
srand((unsigned)time(0));
for(i=0;i {
a[i]=rand()%10;
for(j=0;j {
if(a[j]==a[i])
{
j=0;
a[i]=rand()%10;
}
}
}
}
/**************************
*	用户所猜数处理
*	@para int a
*	@return int*
***************************/
void deal(int num,int b[])
{
int i;
int flag=1000;
for(i=0;i {
b[i] = num/flag;
num-=num/flag*flag;
flag/=10;
}
}
/**************************
*	比较函数,用于进行比较
*	@para
*	@return
***************************/
void compare(int a[],int b[],int c[])
{
int i;
for(i=0;i {
if(a[i]==b[i])
{
c[i]=1;
}
else
{
c[i]=0;
}
}
}
源代码2
include stdio.h
include cstdlib
/*定义一些必要的数组,用来存放数据*/
int b[10],c[10],d[10],e[10], f[10],w[10];
void fenjie(int n,int s[]){                          //分解函数,用于分解四位数的个、十、百、千位
s[0]=n/1000;
s[1]=n/100-s[0]*10;
s[2]=n/10-s[0]*100-s[1]*10;
s[3]=n%10;
}
int Isequeal(int y,int w[])                      //判断函数,用于判断用户输入的初始被猜数字是否有重复数字
{
w[0]=y/1000;
w[1]=y/100-w[0]*10;
w[2]=y/10-w[0]*100-w[1]*10;
w[3]=y%10;
if(w[0]!=w[1]  && w[0]!=w[2]  && w[0]!=w[3]  && w[1]!=w[2]  && w[1]!=w[3]  &&  w[2]!=w[3] )
{
printf("您输入的被猜的数字符合要求
");
    return 0;
}
else 
{
printf("您输入的被猜的数字中有重复数字,不符合要求,请重新输入:
");
return -1;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(void)                     //主函数
{

int a;            //定义用户输入的被猜数据
int p;	       
printf ("请输入一个需要被猜的数值:
");
   A: scanf("%d",&a);
  if(Isequeal(a,w) ==0)    //如果用户输入的数字符合要求
   {
   fenjie(a,b);
   int cont=0;                          //定义用户猜的次数
while(1){
cont++;
int x;                           //定义用户输入的猜测数据
printf("第%d次猜:    ",cont);
scanf("%d",&x);
fenjie(x,c);                  //分解用户输入的猜测数据
    int j=0, t=0,v=0,i=0;
    for(i=0;i d[i]=1;
e[i]=1;
f[i]=-1;
}
for(i=0;i for(j=0;j if(e[i]==2)
continue;
if(b[i]==c[j]){
if(d[j]){
if(e[i]==1){
t++;
}else{
d[f[i]]=1;
}
d[j]=0;
e[i]=0;
f[i]=j;
}
if(i==j){
v++;
e[i]==2;
}
}
}
}
    printf("系统提示:%d个数字位置相同,%d个数字位置不同
",v,4-v);
if(v==4){
printf("恭喜你猜对了,你一共猜了%d 次
",cont);
break;
}
} 
   printf("您一共猜了%d次",cont);
   }
else 
{
goto A;                                                   //goto语句用于判断是否重复
}
return 0;
}
非系统生成随机数源代码
#include stdio.h
#include stdlib.h
#include time.h
void deal(int num,int b[]);
void compare(int a[],int b[],int c[]);
int main()
{
int i,j,flag=1;
int m=0,n=0;                      
//m代表相同的位数,n代表不同的位数
int a[4],b[4],c[4];             
//a存储随机数,b存储用户猜测数,c存储标志
int num,z;
printf("请输入想要猜的数字:");
scanf("%d",&z);
deal(z,a);
while(1)
{
for(i=0;i {
for(j=i+1;j {
if(a[i]==a[j])
{
flag=0;
}
}
}
if(flag==1)
{
break;
}
else
{
printf("输入的数字不符合规定,请重新输入:");
scanf("%d",&z);
deal(z,a);
flag=1;
}
}
while(1)
{

printf("请输入你猜测的数:");
scanf("%d",&num);
deal(num,b);
compare(a,b,c);
for(i=0;i {
if(c[i]==1)
m++;
else
n++;
}
printf("相同的数位有:%d位,不同的数位有:%d位
",m,n);
m=0;
n=0;
}
return 0;
}
void deal(int num,int b[])
{
int i;
int flag=1000;
for(i=0;i {
b[i] = num/flag;
num-=num/flag*flag;
flag/=10;
}
}
void compare(int a[],int b[],int c[])
{
int i;
for(i=0;i {
if(a[i]==b[i])
{
c[i]=1;
}
else
{
c[i]=0;
}
}
}


玩笑图片
经典代码程序,也是感受面向过程编程的实例。
原文地址:https://www.cnblogs.com/1996jiwei/p/5964268.html