猜數字游戲,各式各樣的實現方式,我這邊提供一個實現方式,希望可以幫到新手。
老程序猿就不要看了,黑呵呵
源代碼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;
}
}
}
玩笑圖片
經典代碼程序,也是感受面向過程編程的實例。