C语言基础练习题及代码.docx

上传人:b****8 文档编号:10197214 上传时间:2023-02-09 格式:DOCX 页数:46 大小:26.51KB
下载 相关 举报
C语言基础练习题及代码.docx_第1页
第1页 / 共46页
C语言基础练习题及代码.docx_第2页
第2页 / 共46页
C语言基础练习题及代码.docx_第3页
第3页 / 共46页
C语言基础练习题及代码.docx_第4页
第4页 / 共46页
C语言基础练习题及代码.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

C语言基础练习题及代码.docx

《C语言基础练习题及代码.docx》由会员分享,可在线阅读,更多相关《C语言基础练习题及代码.docx(46页珍藏版)》请在冰豆网上搜索。

C语言基础练习题及代码.docx

C语言基础练习题及代码

读前须知:

1.此文档为UP主在为期11周的c语言学习课程中做过的在线测评练习题,题目和UP主自己写的代码都在这里。

2.由于水平有限,所用的算法并不是很简洁,部分题目是暴力循环破解的。

精益求精者请自行思考或XX。

3.由于课业紧张,写的时候几乎没有写注释,排版也比较紧凑,这些可能会给读者的理解带来困难,在此先说一声抱歉。

4.由于老师教的不好,学习过程中不大愉悦,因此用了一些恶趣味的单词作为变量名泄愤,恳请不要在意这些细节…

5.由于学校以在线测评的方式考核,UP主并没有考虑各种人性化的细节例如输入范围限制,输入提示等。

如果程序是写给人用的,请务必考虑这些人性化设置。

6.本文档仅供各位网友参考学习c语言之用,读者擅自用作他途所造成的一切不良后果与UP主无关。

身高预测

【问题描述】

父母都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高因素包括遗传、饮食习惯与体育锻炼等。

小孩成人后的身高与其父母的身高和自身的性别密切相关设fatH为其父身高,motH为其母身高,身高预测公式为

男性成人时身高=(fatH+motH)*0.54cm

女性成人时身高=(fatH*0.923+motH)/2cm

此外,如果喜爱体育锻炼,那么可增加身高2%;如果有良好的卫生习惯,那么可增加身高1.5%。

请编程利用给定公式和身高预测方法对身高进行预测。

【输入】

输入由键盘输入,共5行。

第一行有一个字符sex,代表用户的性别(F或f代表女性,M或m代表男性)

第二行有一个实数fatH,代表父亲身高

第三行有一个实数motH,代表母亲身高

第四行有一个字符spor,代表是否喜爱体育锻炼(Y或y代表喜爱锻炼,N或n代表不喜爱锻炼)

第五行有一个字符diet,代表是否有良好的饮食习惯(Y或y代表饮食习惯良好,N或n代表饮食习惯不好)

【输出】

输出只有1行,为所预测的身高hei(不保留小数),输出格式为Yourfutureheightwillbehei(cm)

【样例输入】

f

176

160

y

y

【样例输出】

Yourfutureheightwillbe167(cm)

【数据范围】

对于fatH,motH,hei,保证100%的数据不超过double类型的范围

对于sex,spor,diet,保证没有非法数据

【注释】

hint1:

数据输入时请考虑\n的影响

hint2:

cms系统将所有warning均视为error

hint3:

main()函数请使用intmain(),否则会提示编译错误。

/*==================================================================*/

#include

intmain()

{

doublefatH,motH,hei,in;

charsex,spor,diet,beyond;

scanf("%c\n%lf\n%lf\n%c\n%c",&sex,&fatH,&motH,&spor,&diet);

in=1.0;

beyond='i';

if((sex=='F')||(sex=='f'))

{

hei=(fatH*0.923+motH)/2;

}

elseif((sex=='M')||(sex=='m'))

{

hei=(fatH+motH)*0.54;

}

elsebeyond='e';

if((spor=='y')||(spor=='Y'))

{

in=in+0.02;

}

elseif((spor=='n')||(spor=='N'))in=in;

elsebeyond='e';

if((diet=='y')||(diet=='Y'))

{

in=in+0.015;

}

elseif((diet=='n')||(diet=='N'))in=in;

elsebeyond='e';

hei=hei*in;

if(beyond!

='e')

printf("Yourfutureheightwillbe%.0lf(cm)",hei);

elseprintf("thedatayouinputiswrong,pleasecheckitoutandinputagain.");

return0;

}

/*==================================================================*/

猜数游戏1

【问题描述】

编程由计算机生成一个1~100之间的整数请用户猜,若猜对则结束游戏,并输出用户猜测次数(输出格式:

“Right,[猜测次数]time(s)”);若猜错则给出提示——若用户所猜数偏大,则输出“Big”,否则输出“Small”。

一次游戏最多可以猜10次,若经过10次仍未猜中的话,输出“over”,并结束游戏。

【样例过程1】

>50

Big

>25

Small

>30

Small

>40

Small

>45

Big

>42

Big

>41

Right,7time(s)

【样例过程2】

>1

Small

>2

Small

>3

Small

>4

Small

>5

Small

>6

Small

>7

Small

>8

Small

>9

Small

>10

Small

over

【注释】

hint1:

“>”行代表为用户输入

hint2:

请使用“dowhile”循环实现

hint3:

该题为离线评测,程序提交过后不会立即得到成绩,请耐心等待批改

/*=================================================================*/

#include

#include

intmain()

{

intguess,ra,times;

ra=rand()%100;

times=1;

printf("pleaseguessanumberin0~100\n");

do

{

scanf("%d",&guess);

if(guess==ra)

{

printf("Right,%dtime(s)",times);

times=12;

break;

}

elseif(guess

elseprintf("Big\n");

times++;

}while(times<=10);

if(times!

=12)printf("over");

return0;

}

/*==================================================================*/

猜数游戏2

【问题描述】

编程由计算机生成一个1~100之间的整数请用户猜,若猜对则输出用户猜测次数(输出格式:

“Right,[猜测次数]time(s)”);若猜错则给出提示——若用户所猜数偏大,则输出“Big”,否则输出“Small”。

一次游戏最多可以猜10次,若经过10次仍未猜中的话,输出“over”;一轮游戏结束之后,询问用户是否进行下一轮游戏(输出格式:

“continue?

Y||N”),并等待用户响应(若“Y”、“N”输入非法,则重复询问)。

另外,要求程序能够判断非法数据,若用户输入非法,输出“illegalinput”,然后让用户重新输入。

【样例过程1】

>50

Small

>75

Small

>80

Small

>90

Small

>95

Small

>98

Right,6time(s)

continue?

Y||N

>Y

>50

Small

>75

Big

>60

Big

>55

Small

>57

Small

>58

Small

>59

Right,7time(s)

continue?

Y||N

>N

【样例过程2】

>a

illegalinput

>1

Small

>2

Small

>3

Small

>4

Small

>5

Small

>6

Small

>7

Small

>8

Small

>9

Small

>10

Small

over

continue?

Y||N

>a

continue?

Y||N

>N

【注释】

hint1:

“>”行代表为用户输入

hint2:

该题为离线评测,程序提交过后不会立即得到成绩,请耐心等待批改

/*===================================================================*/

#include

#include

intmain()

{

intguess,ra,times,mark;

charc,d;

c='y';

while((c=='y')||(c=='Y'))

{

ra=rand()%100;

times=1;

for(mark=1;mark<=10;mark++)

{

if(scanf("%d",&guess)!

=0)

{

if(guess==ra)

{

printf("Right,%dtime(s)",times);

mark=15;

break;

}

elseif((guess>=0)&&(guess

{

printf("Small\n");

getchar();

times++;

}

elseif((guess<=100)&&(guess>ra))

{

printf("Big\n");

getchar();

times++;

}

else

{

printf("illegalinput\n");

getchar();

mark=times-1;

}

}

else

{

printf("illegalinput\n");

getchar();

mark=times-1;

}

}

if(mark!

=15)printf("over\n");

do

{

printf("continue?

Y||N\n");

scanf("%c",&c);

if((c=='n')||(c=='N')||(c=='y')||(c=='Y'))

d='a';

else

{

printf("illegalinput\n");

d='i';

}

}

while(d=='i');

}

return0;

}

/*==================================================================*/

无重复数字的三位数

【问题描述】

有0、1、2...9十个数字,编程计算这10个数字能组成多少个互不相同且无重复数字的三位数(如:

123,124,125...),并列举所组成的三位数。

【输出】

输出共两行:

第一行为符合条件的三位数个数

第二行从小到大依次输出这些满足条件的三位数,相邻两个数之间用1个空格隔开。

【注释】

hint1:

关注所输出的最后一个满足条件的三位数

/*================================================================*/

#include

intmain()

{

inti,j,k,n,s;

printf("%d\n",10*9*8-9*8);

n=0;

for(i=1;i<=9;i++)

{

for(j=0;j<=9;j++)

{

if(i!

=j)

for(k=0;k<=9;k++)

{

if(i!

=k&&j!

=k&&n==647)

{

s=100*i+10*j+k;

printf("%d",s);

n++;

}

elseif(i!

=k&&j!

=k&&n!

=647)

{

s=100*i+10*j+k;

printf("%d",s);

n++;

}

}

}

}

/*printf("xx\n%d",n);*/

return0;

}

/*==================================================================*/

求最大公约数,从大到小试探法

【问题描述】

编程用试探法(要求从大到小试探)实现函数gcd(m,n),其功能为求解正整数m、n的最大公约数。

【输入】

输入由键盘输入,只有1行

这一行有两个正整数m,n,代表待求最大公约数的两个数,输入格式为“[m],[n]”

【输出】

输出共1行,为m和n的最大公约数,输出格式为“Theresultis[所求最大公约数]!

【样例输入】

2,1

【样例输出】

Theresultis1!

【数据范围】

保证100%的数据在int范围内

【注释】

hint1:

请严格按照题目要求完成任务

/*=============================================================*/

#include

intgcd(intm,intn)

{

inti,s,f;

f=m;

if(f

for(i=f;i>=1;i--)if(m%i==0&&n%i==0){s=i;break;}

returns;

}

intmain()

{

intmm,nn,lzsb;

scanf("%d,%d",&mm,&nn);

lzsb=gcd(mm,nn);

printf("Theresultis%d!

",lzsb);

}

/*==============================================================*/

求最大公约数,辗转相除法

【问题描述】

编程用辗转相除法(不使用递归)实现函数gcd(m,n),其功能为求解正整数m、n的最大公约数。

【输入】

输入由键盘输入,只有1行

这一行有两个正整数m,n,代表待求最大公约数的两个数,输入格式为“[m],[n]”

【输出】

输出共1行,为m和n的最大公约数,输出格式为“Theresultis[所求最大公约数]!

【样例输入】

2,1

【样例输出】

Theresultis1!

【数据范围】

保证100%的数据在int范围内

【注释】

hint1:

请严格按照题目要求完成任务

/*==================================================================*/

#include

intgcd(intm,intn)

{

intillness,kill,death,shit;

illness=m;

if(illness

elsekill=n;

do

{

shit=kill%illness;

kill=illness;

illness=shit;

}while(shit!

=0);

returnkill;

}

intmain()

{

intmm,nn,doubi;

scanf("%d,%d",&mm,&nn);

doubi=gcd(mm,nn);

printf("Theresultis%d!

",doubi);

}

/*=============================================================*/

求最大公约数,递归

【问题描述】

编程用辗转相除法(使用递归调用)实现函数gcd(m,n),其功能为求解正整数m、n的最大公约数。

【输入】

输入由键盘输入,只有1行

这一行有两个正整数m,n,代表待求最大公约数的两个数,输入格式为“[m],[n]”

【输出】

输出共1行,为m和n的最大公约数,输出格式为“Theresultis[所求最大公约数]!

【样例输入】

2,1

【样例输出】

Theresultis1!

【数据范围】

保证100%的数据在int范围内

【注释】

hint1:

请严格按照题目要求完成任务

/*==================================================================*/

#include

intgcd(intm,intn)

{

intdawa,erwa,shit;

dawa=m;

if(dawa

elseerwa=n;

shit=dawa%erwa;

if(shit!

=0)erwa=gcd(erwa,shit);

returnerwa;

}

intmain()

{

intdou,bi,doubi;

scanf("%d,%d",&dou,&bi);

doubi=gcd(dou,bi);

printf("Theresultis%d!

",doubi);

return0;

}

/*==================================================================*/

猴子分桃

[UP主吐槽:

这些天生神力的猴子能一次搬上亿只桃子,请考虑数据超限的问题,题目所说的数据范围不够用。

]

【问题描述】有1堆桃子共m个,由n只猴子分配这些桃子。

每次到达桃子堆放地的猴子只有1只,而且每个猴子都会平均分1次桃子。

第1只到达的猴子将桃子平均分成n等份,但发现多k(k

第2只猴子同样将剩余的桃子又分成n等份,也发现多k个,并同样将多余的k个扔掉,然后拿走其中1份。

之后的每只猴子都这样(将剩余的桃子又分成n等份,也发现多k个,并将多余的k个扔掉,然后拿走其中1份)。

现在假设最后一只猴子分配后至少可以拿走1个桃子,请根据输入的n和k值,编程计算最小的m。

(比如,n=3,k=1,则最小的m是25,最后一只猴子分得3个)

【输入】输入由键盘输入,共1行这一行由两个整数n和k组成,分别代表n只猴子和多余的k个桃子

【输出】输出只有一行,为所计算的m

【样例输入】

31

【样例输出】

25

【数据范围】保证100%数据不超过int范围

/*================================================================*/

#include

intmain()

{

longm,n,k,i,st,ma,ml;

scanf("%ld%ld",&n,&k);

ma=2147483647;

for(st=1;st<=1000000;st++)

{

m=st*n+k;

ml=0;

for(i=2;i<=n;i++)

{

ml=m%(n-1);

if(ml==0)

m=m*n/(n-1)+k;

else{

m=2147483647;

break;

}

}

/*printf("%d\n",m);*/

if(m

}

printf("%d",ma);

return0;

}

/*=============================================================*/

约瑟夫问题

【问题描述】

n个人围成一圈,顺序编号。

从第一个人开始从1到3报数,凡报到3的人退出圈子,编程求解最后留下的人的初始编号。

【输入】

输入由键盘输入,只有一行

这一行有一个正整数n,代表n个人围成一圈

【输出】

输出共一行,为最后留下来的那个人的编号

【样例输入】

5

【样例输出】

4

【数据范围】

保证100%数据2<=n<=200

/*==============================================================*/

#include

intmain()

{

intidiot[201];

inti,san,left,db;

scanf("%d",&db);

for(i=0;i

i=-1;

left=db;

san=0;

while(left!

=1)

{

i++;

if(i==db)i=0;

if(idiot[i]==0)

{

san++;

if(san==3)

{

san=0;

idiot[i]=1;

left--;

}

}

}

for(i=0;i

if(idiot[i]==0)printf("%d",i+1);

return0;

}

/*=================================================================*/

约瑟夫问题,链表法

【问题描述】

n个人围成一圈,顺序编号。

从第一个人开始从1到3报数,凡报到3的人退出圈子,编程求解最后留下的人的初始编号。

(要求用链表法)

【输入】

输入由键盘输入,只有一行

这一行有一个正整数n,代表n个人围成一圈

【输出】

输出共一行,为最后留下来的那个人的编号

【样例输入】

5

【样例输出】

4

【数据范围】

保证100%数据2<=n<=200

/*=================================================================*/

#include

#include

inthollyshit=0;

structfucklb

{

intdata;

structfucklb*nxx;

};

structfucklb*App(structfucklb*head)

{

structfucklb*ppp=NULL,*ppr=hea

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1