zoukankan      html  css  js  c++  java
  • 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;
    }
    }
    }
    
    
    
    玩笑图片
    经典代码程序,也是感受面向过程编程的实例。
  • 相关阅读:
    页面适应UIWebView大小,不出现横向滚动条[转]
    switch case 遍历 table表头的时候使用枚举来便利 (switch 不支持字符串类型,用这种方式来达到使用目的)
    Builder 解析 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
    用2个层来显示 table 第一行 定位 效果。 支持ie6/ie7/ff/chrome,两个方向滚动条 ,保证最后一列也能对齐
    FORM 不换行的方法
    table 固定显示第一行 & 动态改变table高度
    select options 排序(保持option 对象完整性)
    JQuery ajax 如何设置同步调用(同时只能触发一个函数) 解决与层显示信息时候的冲突问题
    针对ie6 用层来实现select的title 提示属性 (增加含有滚动条情况的支持)
    定义新对象方法
  • 原文地址:https://www.cnblogs.com/1996jiwei/p/5964268.html
Copyright © 2011-2022 走看看