首页编程c语言编程题经典题目?c语言100经典实例编程

c语言编程题经典题目?c语言100经典实例编程

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

大家好,c语言编程题经典题目相信很多的网友都不是很明白,包括c语言100经典实例编程也是一样,不过没有关系,接下来就来为大家分享关于c语言编程题经典题目和c语言100经典实例编程的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

c语言编程题经典题目?c语言100经典实例编程

c语言编程100题,有没有大神帮帮忙

您好,c语言经典100题:

【程序1】

题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数

都是多少

1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去

掉不满足条件的排列.

c语言编程题经典题目?c语言100经典实例编程

2.程序源代码:

main()

{

int

i,j,k;

printf("\n");

c语言编程题经典题目?c语言100经典实例编程

for(i1;i<5;i++)

/*以下为三重循环*/

for(j1;j<5;j++)

for

(k1;k<5;k++)

{

if

(i!k&&i!j&&j!k)

/*确保i,j,k三位互不相同*/

printf("%d,%d,%d\n",i,j,k);

}

}

【程序2】

题目:企业发放的奖金根据利润提成.利润(i)低于或等于10万元时,奖金可提10%;利润高

于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提

成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于

40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于

100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数

1.程序分析:请利用数轴来分界,定位.注意定义时需把奖金定义成长整型.

2.程序源代码:

main()

{

long

int

i;

int

bonus1,bonus2,bonus4,bonus6,bonus10,bonus;

scanf("%ld",&i);

bonus1100000*0.1;bonus2bonus1+100000*0.75;

bonus4bonus2+200000*0.5;

bonus6bonus4+200000*0.3;

bonus10bonus6+400000*0.15;

if(i<100000)

bonusi*0.1;

else

if(i<200000)

bonusbonus1+(i-100000)*0.075;

else

if(i<400000)

bonusbonus2+(i-200000)*0.05;

else

if(i<600000)

bonusbonus4+(i-400000)*0.03;

else

if(i<1000000)

bonusbonus6+(i-600000)*0.015;

else

bonusbonus10+(i-1000000)*0.01;

printf("bonus%d",bonus);

}

【程序3】

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少

1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后

的结果满足如下条件,即是结果.请看具体分析:

2.程序源代码:

#include

"math.h"

main()

{

long

int

i,x,y,z;

for

(i1;i2)/*如果是闰年且月份大于2,总天数应该加一天*/

sum++;

printf("it

is

the

%dth

day.",sum);}

【程序4】

题目:输入某年某月某日,判断这一天是这一年的第几天?

1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊

情况,闰年且输入月份大于3时需考虑多加一天。

2.程序源代码:

main()

{

int

day,month,year,sum,leap;

printf("\nplease

input

year,month,day\n");

scanf("%d,%d,%d",&year,&month,&day);

switch(month)/*先计算某月以前月份的总天数*/

{

case

1:sum0;break;

case

2:sum31;break;

case

3:sum59;break;

case

4:sum90;break;

case

5:sum120;break;

case

6:sum151;break;

case

7:sum181;break;

case

8:sum212;break;

case

9:sum243;break;

case

10:sum273;break;

case

11:sum304;break;

case

12:sum334;break;

default:printf("data

error");break;

}

sumsum+day;

/*再加上某天的天数*/

if(year%4000||(year%40&&year%100!0))/*判断是不是闰年*/

leap1;

else

leap0;

if(leap1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/

sum++;

printf("It

is

the

%dth

day.",sum);}

【程序5】

题目:输入三个整数x,y,z,请把这三个数由小到大输出.

1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,

然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小.

2.程序源代码:

main()

{

int

x,y,z,t;

scanf("%d%d%d",&x,&y,&z);

if

(x>y)

{tx;xy;yt;}

/*交换x,y的值*/

if(x>z)

{tz;zx;xt;}/*交换x,z的值*/

if(y>z)

{ty;yz;zt;}/*交换z,y的值*/

printf("small

to

big:

%d

%d

%d\n",x,y,z);

}

【程序6】

题目:用*号输出字母c的图案.

1.程序分析:可先用'*'号在纸上写出字母c,再分行输出.

2.程序源代码:

#include

"stdio.h"

main()

{

printf("hello

c-world!\n");

printf("

****\n");

printf("

*\n");

printf("

*

\n");

printf("

****\n");

}

【程序7】

题目:输出特殊图案,请在c环境中运行,看一看,very

beautiful!

1.程序分析:字符共有256个.不同字符,图形不一样.

2.程序源代码:

#include

"stdio.h"

main()

{

char

a176,b219;

printf("%c%c%c%c%c\n",b,a,a,a,b);

printf("%c%c%c%c%c\n",a,b,a,b,a);

printf("%c%c%c%c%c\n",a,a,b,a,a);

printf("%c%c%c%c%c\n",a,b,a,b,a);

printf("%c%c%c%c%c\n",b,a,a,a,b);}

【程序8】

题目:输出9*9口诀.

1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列.

2.程序源代码:

#include

"stdio.h"

main()

{

int

i,j,result;

printf("\n");

for

(i1;i<10;i++)

{

for(j1;j<10;j++)

{

resulti*j;

printf("%d*%d%-3d",i,j,result);/*-3d表示左对齐,占3位*/

}

printf("\n");/*每一行后换行*/

}

}

【程序9】

题目:要求输出国际象棋棋盘.

1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格.

2.程序源代码:

#include

"stdio.h"

main()

{

int

i,j;

for(i0;i<8;i++)

{

for(j0;j<8;j++)

if((i+j)%20)

printf("%c%c",219,219);

else

printf("

");

printf("\n");

}

}

【程序10】

题目:打印楼梯,同时在楼梯上方打印两个笑脸.

1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数.

2.程序源代码:

#include

"stdio.h"

main()

{

int

i,j;

printf("\1\1\n");/*输出两个笑脸*/

for(i1;i<11;i++)

{

for(j1;j<i;j++)

printf("%c%c",219,219);

printf("\n");

}

}

【程序11】

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月

后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少

1.程序分析:

兔子的规律为数列1,1,2,3,5,8,13,21....

2.程序源代码:

main()

{

long

f1,f2;

int

i;

f1f21;

for(i1;i<20;i++)

{

printf("%12ld

%12ld",f1,f2);

if(i%20)

printf("\n");/*控制输出,每行四个*/

f1f1+f2;

/*前两个月加起来赋值给第三个月*/

f2f1+f2;

/*前两个月加起来赋值给第三个月*/

}

}

【程序12】

题目:判断101-200之间有多少个素数,并输出所有素数.

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,

则表明此数不是素数,反之是素数.

2.程序源代码:

#include

"math.h"

main()

{

int

m,i,k,h0,leap1;

printf("\n");

for(m101;m<200;m++)

{

ksqrt(m+1);

for(i2;i<k;i++)

if(m%i0)

{leap0;break;}

if(leap)

{printf("%-4d",m);h++;

if(h%100)

printf("\n");

}

leap1;

}

printf("\nthe

total

is

%d",h);

}

C语言经典题目

1.正确的算法:

如果n=3,过河时间为A+B+C

如果n<=2,好算,不费口舌了

如果n>=4,这个是重点:

每次优先考虑把最慢两人送过河

把n人中最快两人记为A,B,最慢两人记为C,D(过河时间A<B<C<D), n人问题实质上转换为4人过河问题,参考到4人过河时的优化,

记AB过河, A回, CD过河, B回,为方法X,实质是利用最快两人进行优化,耗时A+2B+D

记AD过河, A回, AC过河, A回,为方法y,实质是利用最快一人来过河,耗时2A+C+D

每次比较这两个方法,如果x快,使用x方法,如果y快,则用y,并且,一旦某次使用y方法后,以后都不用比较了,全部使用y方法过河

2.算法正确性证明:

为什么每次先让最慢两人过河?因为他们迟早要过河...早过晚过一样,而晚过的话,有可能时间不能被优化,所以选择最先过

为什么是两人,不是三人?因为这船一次只能两人,三人问题和两人问题的优化一样,所以一次考虑三人毫无意义,同理,三人以上不加考虑

为什么某次用y过河后不用再比较xy了?

先看这个例子:

1 99 100 101

用x方法是99+1+101+99= 300

y方法是 101+1+100+1= 203

y比x快的原因是2A+C+D< A+2B+D,即 A+C<2B

容易想到,从此以后A+C都会小于2B了(因为C越来越小)

3.补充:

算法分析就到这里了,至于具体的程序...楼主既然是ACMer,这个应该不困难

当然,如果楼主需要的话,也可以给出程序

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

}

}

如果你还想了解更多这方面的信息,记得收藏关注本站。

deepseek ai智能助手 DeepSeek 保姆级使用指南:一文解锁高效智能助手少儿编程课程内容,少儿编程课程收费标准