首页编程c语言编程题及答案?‖c语言怎么用

c语言编程题及答案?‖c语言怎么用

编程之家2026-05-25991次浏览

大家好,今天给各位分享c语言编程题及答案的一些知识,其中也会对‖c语言怎么用进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

c语言编程题及答案?‖c语言怎么用

c语言编程题

对于这种类似于OJ的问题,输入和输出不能含有多余的字符,否则提交就会不通过,要严格按照题目要求进行输入和输出。

第一题分析:这题求平均值,题目没有结束输入的条件(标记),该条件一般有多种形式,例如可以输入某个值结束输入(例如-1),或者先输入一个n,然后再用循环输入n个数。在这里就使用输入-1结束输入来编写代码。

整个题目的思路还是比较清晰。

先求全班人数和平均值,再求高的人数和平均值,再求低的人数和平均值。

这里需要注意最后一行的提示,如果平均值是一个整数,应该输出一个整数,例如平均值为 98.00,则应该输出 98,否则保留两位小数输出。

细节方面就是输入数据的问题。例如如果输入-1,则人数、平均值全为 0。如果输入的分数都相同,则所有人都大于或等于全部平均分,此时低于全班平均分的人数为 0,根据求平均值公式(平均分=总分÷人数),此时出现除数为 0的情况。

c语言编程题及答案?‖c语言怎么用

第一题求解过程:声明一个数组(整型、浮点型都行)用来保存输入的分数。

在输入分数的同时可以累计班级总分和班级人数。

根据班级总分和班级人数求班级平均分。

再循环遍历数组,把高于平均分或低于平均分和相应的人数和分数统计出来。

再求出这两批的平均分。

最后输出数据。

c语言编程题及答案?‖c语言怎么用

第一题测试代码

第一题测试结果

第一题测试代码:#include<stdio.h>

int main()

{

int a[1000]={0}, L= 0, mid= 0, R= 0;

float sum= 0, Lsum= 0, Rsum= 0;

float Laver= 0, aver= 0, Raver= 0;

while(a[mid]!=-1)

{

sum+= a[mid];

scanf("%d",&a[++mid]);

}

if(mid> 1) aver= sum/--mid;

else--mid;

for(int i= 1; i<= mid; i++)

{

if(a[i]< aver)

{

R++;

Rsum+= a[i];

}

}

Lsum= sum- Rsum;

L= mid- R;

if(L> 0) Laver= Lsum/ L;

if(R> 0) Raver= Rsum/ R;

printf("%d", mid);

if(aver==(int)aver) printf("%.f

", aver);

else printf("%.2f

", aver);

printf("%d", L);

if(Laver==(int)Laver) printf("%.f

", Laver);

else printf("%.2f

", Laver);

printf("%d", R);

if(Raver==(int)Raver) printf("%.f

", Raver);

else printf("%.2f

", Raver);

return 0;

}

第二题分析:这题可以完全用数学来解决。能用数学解决的,最好用数学来解决,运行速度快。

变量a表示 0~ 6,也代表星期一~星期日。

变量n是后面的有n天。

a+ 1+n,其实就是总的天数,除以 7的结果就是有多少周,1周有一个星期五,所以除以 7的结果就是能上机的次数。但是考虑到有余数的问题,如果余数是 5或 6,说明还有一次上机的机会。

第二题运算过程:声明变量和输入数据。

int sum= a+ 1+ n求得总的天数。

int cnt= sum/ 7求得上机的次数。

if(sum% 7>= 5) cnt++,求是否还有一次上机的机会。

输出结果。

第二题测试结果

第二题测试代码:

#include<stdio.h>

int main()

{

int a, n;

scanf("%d%d",&a,&n);

int sum= a+ 1+ n;

int cnt= sum/ 7;

if(sum% 7>= 5) cnt++;

printf("%d", cnt);

return 0;

}

急求c语言编程题目

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

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

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

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

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

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

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<malloc.h>

#include<conio.h>

#include<time.h>

#definemaxMShow10//最大下注金额显示字符数,修改该值需要同步修改showDisc函数的格式参数!

typedefstructuser

{

charuName[21];

charpsw[21];

intmoney;//余额

intpay;//历史消费

intwin;//历史赢钱

inttype;//用户类型->0:管理员;1:普通玩家

structuser*next;

}USER;

typedefstructdisc//圆盘数字

{

charflag;//数字前标识

intnum;//圆盘数字

intmoney;//对应下注金额

charmStr[maxMShow+1];//下注金额字符串形式,为了排面整齐,最多显示10个字节

structdisc*next;

}DISC;

voidmeError(void*p);//内存申请失败

DISC*init();//初始化圆盘,生成链表头指针

voidshowDisc(DISC*discHead,USER*logUser);//显示圆盘

DISC*bets(DISC*discHead,USER*user);//下注,成功返回下注节点,失败返回NULL。参数:user:下注人ID;

intregUser(USER**userHead,USER**userTail,char*uName,char*psw,intmoney,inttype);//注册用户,成功返回1,失败返回0。参数:uName:用户名。psw:密码。money:开户金额。type:用户类型0管理员1普通用户

USER*login(USER*userHead,char*uName,char*psw);//登录。登录成功返回用户节点,失败返回NULL

intrecharge(USER*logUser);//充值,成功返回1,失败返回0

voidshowMenu1(DISC*discHead,USER**userHead,USER**userTail);//显示一级菜单

voidshowMenu2(DISC*discHead,USER*logUser,USER*userHead);//显示二级菜单

voidshowMenu3(DISC*discHead,USER*logUser,USER*userHead);//显示三级菜单

introll(DISC*discHead,USER*logUser);//滚动转盘,猜中增加奖金,猜中返回1,没猜中返回0。参数:num=猜的数字,money=下的注

voidreDisc(DISC*discHead);//重置转盘,每次滚动后调用

voidshowUser(USER*userHead,char*uName);//查看指定玩家账户,参数uName传NULL,查看所有玩家账户

voidshowProfit(USER*userHead);//统计赌场盈利状况;

intmain()

{

DISC*discHead=NULL;

USER*userHead=NULL,*userTail=NULL;

srand(time(NULL));

discHead=init();

showMenu1(discHead,&userHead,&userTail);

return0;

}

voidshowMenu1(DISC*discHead,USER**userHead,USER**userTail)//显示一级菜单

{

USER*logUser=NULL;

charuName[21]={0},psw[21]={0};

intn,money=0,type;

while(1)

{

n=0;

memset(uName,0,21);

memset(psw,0,21);

money=0;

type=-1;

system("cls");

printf("1、用户登录

2、用户注册

");

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);

}

}

}

voidshowMenu2(DISC*discHead,USER*logUser,USER*userHead)//显示二级菜单

{

intn;

DISC*disc=NULL;

while(1)

{

n=0;

system("cls");

printf("欢迎登录:%s,余额:%d

",logUser->uName,logUser->money);

printf("1、开始转盘

2、账户充值

3、返回上级菜单

4、后台管理

");

scanf("%d",&n);

if(n==1)

{

showDisc(discHead,logUser);

disc=bets(discHead,logUser);

if(disc)

showDisc(discHead,logUser);

printf("任意键开始滚动圆盘。。。

");

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("对不起!您不是管理员,没有该权限!

按任意键继续。。。

"),getch(),getch();

else

showMenu3(discHead,logUser,userHead);//后台管理

}

}

}

voidshowMenu3(DISC*discHead,USER*logUser,USER*userHead)//显示三级菜单

{

intn;

charuName[21]={0};

while(1)

{

n=0;

system("cls");

printf("1、查看指定玩家

2、查看所有玩家

3、查看赌场盈利状况

4、返回上级菜单

");

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;

}

}

voidshowProfit(USER*userHead)//统计赌场盈利状况

{

intsumPay=0,sumWin=0;

system("cls");

while(userHead->next)

{

sumPay+=userHead->next->pay;

sumWin+=userHead->next->win;

userHead=userHead->next;

}

printf("玩家共下注%d元,获胜者得到%d元,赌场总获利%d元

按任意键继续。。。

",sumPay,sumWin,sumPay-sumWin),getch();

}

voidshowUser(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

",userHead->next->uName,userHead->next->pay,userHead->next->win,userHead->next->money);

if(uName)

break;

}

userHead=userHead->next;

}

printf("按任意键继续。。。

"),getch();

}

USER*login(USER*userHead,char*uName,char*psw)//登录。登录成功返回用户节点,失败返回NULL

{

if(!userHead)

{

printf("错误!无可匹配数据,请先注册!

按任意键继续。。。

");

getch();

returnNULL;

}

while(userHead->next)

{

if(!strcmp(userHead->next->uName,uName)&&!strcmp(userHead->next->psw,psw))

returnuserHead->next;

userHead=userHead->next;

}

printf("用户不存在或密码输入错误!

按任意键继续。。。

");

getch();

returnNULL;

}

intrecharge(USER*logUser)//充值,成功返回1,失败返回0

{

intmoney=-1;

if(!logUser)

return0;

while(money<0)

printf("输入要充值的金额(输入0返回主菜单):"),scanf("%d",&money);

logUser->money+=money;

return1;

}

intregUser(USER**userHead,USER**userTail,char*uName,char*psw,intmoney,inttype)//注册用户,成功返回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("用户名已存在!请重新输入。

按任意键继续。。。

");

getch();

return0;

}

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注册成功!

按任意键继续。。。

",type?"普通用户":"管理员",uName);

getch();

return1;

}

DISC*init()

{

inti;

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;

}

returndiscHead;

}

voidreDisc(DISC*discHead)//重置转盘,每次滚动后调用

{

while(discHead->next)

{

discHead->next->flag='';

discHead->next->money=0;

memset(discHead->next->mStr,0,sizeof(discHead->next));

discHead=discHead->next;

}

}

introll(DISC*discHead,USER*logUser)//滚动转盘,猜中增加奖金,猜中返回1,没猜中返回0。参数:num=猜的数字,money=下的注

{

DISC*discHeadSave=discHead;

inti,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元。

",win);

flag=1;

}

else

{

printf("对不起!本次没有猜中,再接再厉。

");

flag=0;

}

reDisc(discHeadSave);

printf("按任意键继续。。。

");

getch();

returnflag;

}

DISC*bets(DISC*discHead,USER*user)//下注

{

intmoney=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("对不起,您的余额不足,请充值或重新下注!

按任意键继续。。。

");

getch();

returnNULL;

}

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);

returndisc;

}

voidshowDisc(DISC*discHead,USER*logUser)

{

intclo=0;

system("cls");

printf("当前玩家:%s,余额:%d

",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("

");

discHead=discHead->next;

}

}

voidmeError(void*p)//内存申请失败

{

if(p==NULL)

{

printf("异常:内存申请失败!回车结束程序!

");

while(getch()!='

');

exit(0);

}

}

C语言编程题 求解

按照题意,表格使用结构链表实现。其中成员班级或工龄,使用自定义的联合体union(就是题目要求的共用体)。

函数异常不做处理,直接抛出,你需要可以在调用时判断处理异常。

#include<stdio.h>

#include<malloc.h>

typedef union info4

{

char cName[10];//班级名称

int wAge;//工龄

}IO4;

typedef struct stInfo

{

int id;//编号

char name[10];//姓名

int pType;//职业类别:0表示学生,1表示教师

IO4 cwInfo;//对应职业类别的班级或工龄

struct stInfo*next;

}STINFO;

int inputInfo(STINFO**stHead,STINFO**stTail);//输入,调用一次输入一条信息,并生成或加入链表,成功返回1,失败返回0

void prfInfos(STINFO*stHead);//打印链表

int main()

{

STINFO*stHead=NULL,*stTail=NULL;

int n=4;//测试就输入4个,需要自己改

while(n--)

if(!inputInfo(&stHead,&stTail))

{

printf("异常终止!

");

return 1;

}

prfInfos(stHead);

return 0;

}

void prfInfos(STINFO*stHead)//打印链表

{

printf("编号姓名职业班级\\工龄

");

while(stHead->next)

{

printf("%d%9s%s",stHead->next->id,stHead->next->name,stHead->next->pType?"教师":"学生");

if(stHead->next->pType)

printf("%9d

",stHead->next->cwInfo.wAge);

else

printf("%9s

",stHead->next->cwInfo.cName);

stHead=stHead->next;

}

}

int inputInfo(STINFO**stHead,STINFO**stTail)//输入,调用一次输入一条信息,并生成或加入链表,成功返回1,失败返回0

{

static int id=1;

STINFO*head=*stHead,*tail=*stTail,*stNew=NULL;

stNew=(STINFO*)malloc(sizeof(STINFO));

stNew->pType=-1;

stNew->next=NULL;

if(!stNew)//抛出异常

return 0;

stNew->id=id++;

printf("请输入姓名:"),scanf("%9s",stNew->name);

if(getchar()!='

')//抛出异常

return 0;

while(stNew->pType<0|| stNew->pType>1)

printf("请输入职业编号(0:学生,1:教师):"),scanf("%d",&stNew->pType);

switch(stNew->pType)

{

case 0:printf("请输入学生所在班级名称:");

scanf("%9s",stNew->cwInfo.cName);

if(getchar()!='

')//抛出异常

return 0;

break;

case 1:printf("请输入教师的工龄:"),scanf("%d",&stNew->cwInfo.wAge);break;

}

if(head==NULL)

head=(STINFO*)malloc(sizeof(STINFO)),head->next=NULL;

if(head->next==NULL)

head->next=stNew;

else

tail->next=stNew;

tail=stNew;

*stHead=head,*stTail=tail;

return 1;

}

OK,本文到此结束,希望对大家有所帮助。

ai算法包下载 爱即算法,打开“赛博朋克”艺术之门编程java是什么意思(java编程软件)