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位數各個位的數字不相同\n");
while(1)
{
printf("1.查看隨機數輸入1\n");
printf("1.進行猜測輸入2\n");
printf("請輸入你的選擇:");
scanf("%d",&j);
switch(j)
{
case 1:
{
for(i=0;i {
printf("%d",a[i]);
}
printf("\n");
};
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("\n");
};*/
{
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位\n",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("您輸入的被猜的數字符合要求\n");
    return 0;
}
else 
{
printf("您輸入的被猜的數字中有重復數字,不符合要求,請重新輸入:\n");
return -1;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(void)                     //主函數
{

int a;            //定義用戶輸入的被猜數據
int p;	       
printf ("請輸入一個需要被猜的數值:\n");
   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個數字位置不同\n",v,4-v);
if(v==4){
printf("恭喜你猜對了,你一共猜了%d 次\n",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位\n",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;
}
}
}


玩笑圖片
經典代碼程序,也是感受面向過程編程的實例。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM