欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:63861147       资源大小:77.50KB        全文页数:31页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    读前须知:1. 此文档为UP主在为期11周的c语言学习课程中做过的在线测评练习题,题目和UP主自己写的代码都在这里。2. 由于水平有限,所用的算法并不是很简洁,部分题目是暴力循环破解的。精益求精者请自行思考或百度。3. 由于课业紧张,写的时候几乎没有写注释,排版也比较紧凑,这些可能会给读者的理解带来困难,在此先说一声抱歉。4. 由于老师教的不好,学习过程中不大愉悦,因此用了一些恶趣味的单词作为变量名泄愤,恳请不要在意这些细节5. 由于学校以在线测评的方式考核,UP主并没有考虑各种人性化的细节例如输入范围限制,输入提示等。如果程序是写给人用的,请务必考虑这些人性化设置。6. 本文档仅供各位网友参考学习c语言之用,读者擅自用作他途所造成的一切不良后果与UP主无关。身高预测【问题描述】父母都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高因素包括遗传、饮食习惯与体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关设fatH为其父身高,motH为其母身高,身高预测公式为男性成人时身高=(fatH+motH)*0.54 cm女性成人时身高=(fatH*0.923+motH)/2 cm此外,如果喜爱体育锻炼,那么可增加身高2%;如果有良好的卫生习惯,那么可增加身高1.5%。请编程利用给定公式和身高预测方法对身高进行预测。【输入】输入由键盘输入,共5行。第一行有一个字符sex,代表用户的性别(F或f代表女性,M或m代表男性)第二行有一个实数fatH,代表父亲身高第三行有一个实数motH,代表母亲身高第四行有一个字符spor,代表是否喜爱体育锻炼(Y或y代表喜爱锻炼,N或n代表不喜爱锻炼)第五行有一个字符diet,代表是否有良好的饮食习惯(Y或y代表饮食习惯良好,N或n代表饮食习惯不好)【输出】输出只有1行,为所预测的身高hei(不保留小数),输出格式为Your future height will be hei(cm)【样例输入】f176160yy【样例输出】Your future height will be 167(cm)【数据范围】对于fatH,motH,hei,保证100%的数据不超过double类型的范围对于sex,spor,diet,保证没有非法数据【注释】hint1: 数据输入时请考虑n的影响hint2: cms系统将所有warning均视为errorhint3: main()函数请使用int main(),否则会提示编译错误。/*=*/#include<stdio.h>int main()double fatH,motH,hei,in;char sex,spor,diet,beyond;scanf("%cn%lfn%lfn%cn%c",&sex,&fatH,&motH,&spor,&diet);in=1.0;beyond='i'if (sex='F')|(sex='f')hei=(fatH*0.923+motH)/2;else if (sex='M')|(sex='m')hei=(fatH+motH)*0.54;else beyond='e'if (spor='y')|(spor='Y')in=in+0.02;else if (spor='n')|(spor='N') in=in;else beyond='e'if (diet='y')|(diet='Y')in=in+0.015;else if (diet='n')|(diet='N') in=in;else beyond='e'hei=hei*in;if (beyond!='e')printf("Your future height will be %.0lf(cm)",hei);else printf("the data you input is wrong,please check it out and input again.");return 0;/*=*/猜数游戏1【问题描述】编程由计算机生成一个1100之间的整数请用户猜,若猜对则结束游戏,并输出用户猜测次数(输出格式:“Right, 猜测次数 time(s)”);若猜错则给出提示若用户所猜数偏大,则输出“Big”,否则输出“Small”。一次游戏最多可以猜10次,若经过10次仍未猜中的话,输出“over”,并结束游戏。【样例过程1】>50Big>25Small>30Small>40Small>45Big>42Big>41Right, 7 time(s)【样例过程2】>1Small>2Small>3Small>4Small>5Small>6Small>7Small>8Small>9Small>10Smallover【注释】hint1: “>”行代表为用户输入hint2: 请使用“do while”循环实现hint3: 该题为离线评测,程序提交过后不会立即得到成绩,请耐心等待批改/*=*/#include<stdio.h>#include<stdlib.h>int main()int guess,ra,times;ra=rand()%100;times=1;printf("please guess a number in 0100n");doscanf(" %d",&guess);if (guess=ra)printf("Right,%d time(s)",times);times=12;break;else if (guess<ra) printf("Smalln");else printf("Bign");times+; while (times<=10);if (times!=12) printf("over");return 0;/*=*/猜数游戏2【问题描述】编程由计算机生成一个1100之间的整数请用户猜,若猜对则输出用户猜测次数(输出格式:“Right, 猜测次数 time(s)”);若猜错则给出提示若用户所猜数偏大,则输出“Big”,否则输出“Small”。一次游戏最多可以猜10次,若经过10次仍未猜中的话,输出“over”;一轮游戏结束之后,询问用户是否进行下一轮游戏(输出格式:“continue? Y | N”),并等待用户响应(若“Y”、“N”输入非法,则重复询问)。另外,要求程序能够判断非法数据,若用户输入非法,输出“illegal input”,然后让用户重新输入。【样例过程1】>50Small>75Small>80Small>90Small>95Small>98Right, 6 time(s)continue? Y | N>Y>50Small>75Big>60Big>55Small>57Small>58Small>59Right, 7 time(s)continue? Y | N>N【样例过程2】>aillegal input>1Small>2Small>3Small>4Small>5Small>6Small>7Small>8Small>9Small>10Smallovercontinue? Y | N>acontinue? Y | N>N【注释】hint1: “>”行代表为用户输入hint2: 该题为离线评测,程序提交过后不会立即得到成绩,请耐心等待批改/*=*/#include<stdio.h>#include<stdlib.h>int main()int guess,ra,times,mark;char c,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,%d time(s)",times);mark=15;break;else if (guess>=0)&&(guess<ra) printf("Smalln"); getchar(); times+; else if (guess<=100)&&(guess>ra) printf("Bign"); getchar(); times+; else printf("illegal inputn"); getchar(); mark=times-1; else printf("illegal inputn"); getchar(); mark=times-1; if (mark!=15) printf("overn"); do printf("continue?Y|Nn"); scanf(" %c",&c); if (c='n')|(c='N')|(c='y')|(c='Y') d='a' else printf ("illegal inputn"); d='i' while (d='i'); return 0;/*=*/无重复数字的三位数【问题描述】有0、1、2.9十个数字,编程计算这10个数字能组成多少个互不相同且无重复数字的三位数(如:123,124,125.),并列举所组成的三位数。【输出】输出共两行:第一行为符合条件的三位数个数第二行从小到大依次输出这些满足条件的三位数,相邻两个数之间用1个空格隔开。【注释】hint1: 关注所输出的最后一个满足条件的三位数/*=*/#include<stdio.h>int main()int i,j,k,n,s;printf("%dn",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+; else if (i!=k&&j!=k&&n!=647) s=100*i+10*j+k; printf("%d ",s); n+; /*printf("xxn%d",n);*/return 0;/*=*/求最大公约数,从大到小试探法【问题描述】编程用试探法(要求从大到小试探)实现函数gcd(m,n),其功能为求解正整数m、n的最大公约数。【输入】输入由键盘输入,只有1行这一行有两个正整数m,n,代表待求最大公约数的两个数,输入格式为“m,n”【输出】输出共1行,为m和n的最大公约数,输出格式为“The result is 所求最大公约数!”【样例输入】2,1【样例输出】The result is 1!【数据范围】保证100%的数据在int范围内【注释】hint1: 请严格按照题目要求完成任务/*=*/#include<stdio.h>int gcd(int m,int n)int i,s,f;f=m;if (f<n) f=n;for (i=f;i>=1;i-) if (m%i=0&&n%i=0) s=i;break;return s;int main()int mm,nn,lzsb;scanf("%d,%d",&mm,&nn);lzsb=gcd(mm,nn);printf("The result is %d!",lzsb);/*=*/求最大公约数,辗转相除法【问题描述】编程用辗转相除法(不使用递归)实现函数gcd(m,n),其功能为求解正整数m、n的最大公约数。【输入】输入由键盘输入,只有1行这一行有两个正整数m,n,代表待求最大公约数的两个数,输入格式为“m,n”【输出】输出共1行,为m和n的最大公约数,输出格式为“The result is 所求最大公约数!”【样例输入】2,1【样例输出】The result is 1!【数据范围】保证100%的数据在int范围内【注释】hint1: 请严格按照题目要求完成任务/*=*/#include<stdio.h>int gcd(int m,int n)int illness,kill,death,shit;illness=m;if (illness<n) illness=n;kill=m;else kill=n;do shit=kill%illness; kill=illness; illness=shit; while (shit!=0);return kill;int main()int mm,nn,doubi;scanf("%d,%d",&mm,&nn);doubi=gcd(mm,nn);printf("The result is %d!",doubi);/*=*/求最大公约数,递归【问题描述】编程用辗转相除法(使用递归调用)实现函数gcd(m,n),其功能为求解正整数m、n的最大公约数。【输入】输入由键盘输入,只有1行这一行有两个正整数m,n,代表待求最大公约数的两个数,输入格式为“m,n”【输出】输出共1行,为m和n的最大公约数,输出格式为“The result is 所求最大公约数!”【样例输入】2,1【样例输出】The result is 1!【数据范围】保证100%的数据在int范围内【注释】hint1: 请严格按照题目要求完成任务/*=*/#include<stdio.h>int gcd(int m,int n)int dawa,erwa,shit;dawa=m;if (dawa<n) dawa=n;erwa=m;else erwa=n;shit=dawa%erwa;if (shit!=0) erwa=gcd(erwa,shit);return erwa;int main()int dou,bi,doubi;scanf("%d,%d",&dou,&bi);doubi=gcd(dou,bi);printf("The result is %d!",doubi);return 0;/*=*/猴子分桃 UP主吐槽:这些天生神力的猴子能一次搬上亿只桃子,请考虑数据超限的问题,题目所说的数据范围不够用。 【问题描述】 有1堆桃子共 m 个,由 n 只猴子分配这些桃子。每次到达桃子堆放地的猴子只有1只,而且每个猴子都会平均分 1 次桃子。第1只到达的猴子将桃子平均分成 n 等份,但发现多 k ( k < n )个,于是,将多余的k个扔掉,然后拿走其中的1份。第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 【样例输入】 3 1 【样例输出】 25 【数据范围】 保证100%数据不超过int范围/*=*/#include<stdio.h>int main()long m,n,k,i,st,ma,ml;scanf("%ld %ld",&n,&k);ma=;for (st=1;st<=;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=; break; /*printf("%dn",m);*/ if (m<ma) ma=m; printf("%d",ma);return 0;/*=*/约瑟夫问题【问题描述】n个人围成一圈,顺序编号。从第一个人开始从1到3报数,凡报到3的人退出圈子,编程求解最后留下的人的初始编号。【输入】输入由键盘输入,只有一行这一行有一个正整数n,代表n个人围成一圈【输出】输出共一行,为最后留下来的那个人的编号【样例输入】5【样例输出】4【数据范围】保证100%数据 2<=n<=200/*=*/#include<stdio.h>int main()int idiot201;int i,san,left,db;scanf("%d",&db);for (i=0;i<db;i+) idioti=0;i=-1;left=db;san=0;while(left!=1)i+;if (i=db) i=0;if (idioti=0)san+;if (san=3)san=0;idioti=1;left-;for (i=0;i<db;i+)if (idioti=0) printf("%d",i+1);return 0;/*=*/约瑟夫问题,链表法【问题描述】n个人围成一圈,顺序编号。从第一个人开始从1到3报数,凡报到3的人退出圈子,编程求解最后留下的人的初始编号。(要求用链表法)【输入】输入由键盘输入,只有一行这一行有一个正整数n,代表n个人围成一圈【输出】输出共一行,为最后留下来的那个人的编号【样例输入】5【样例输出】4【数据范围】保证100%数据 2<=n<=200/*=*/#include<stdio.h>#include<stdlib.h>int hollyshit=0;struct fucklbint data;struct fucklb *nxx;struct fucklb *App(struct fucklb *head)struct fucklb *ppp=NULL , *ppr=head;int data;ppp=(struct fucklb *)malloc(sizeof(struct fucklb);if (ppp=NULL) exit(0);if (head=NULL) head=ppp;elsewhile(ppr->nxx !=NULL) ppr=ppr->nxx;ppr->nxx=ppp;ppp->data=hollyshit;ppp->nxx=NULL;return head;int main()int mmd,nmb;struct fucklb *ass=NULL , *hole=NULL;/*读入与初始化*/scanf("%d",&mmd);for (nmb=1;nmb<=mmd;nmb+)hollyshit+;ass=App(ass);/*把链表首尾相接*/hole=ass;while(hole->nxx!=NULL) hole=hole->nxx;hole->nxx=ass;/*寻踪阶段,每三个节点删掉一个直到删去mmd-1个*/nmb=0;while(mmd!=1)nmb+;if (nmb=2)nmb=0;hole=ass->nxx;ass->nxx=ass->nxx->nxx;free(hole);mmd-;ass=ass->nxx;printf("%d",ass->data);return 0;/*=*/求1n之间所有素数之和【问题描述】编程求解1到n之间所有素数之和【输入】输入由键盘输入,只有1行这一行只有一个正整数n,代表需要计算1到n之间所有素数之和【输出】输出共1行,这一行只有一个整数,代表1n之间所有素数之和【样例输入】100【样例输出】1060【数据范围】保证100%数据,1<=n<=【注释】hint1: 请使用函数实现素数判定,定义函数原型:int isprime(int k);/*=*/#include<stdio.h>#include<math.h>long isprime(long k)long j,ax,mark; mark=0; /*scanf("%d",&k);/*/ ax=sqrt(k)/1; if (k%2!=0) for (j=3;j<=ax;j+) if (k%j=0) mark=1;break; else mark=1;if (k=2) mark=0;/*printf("%d-k,%d-j,%d-ax,%d-markn",k,j,ax,mark);/*/return mark;int main()long sum,a,b;sum=0;scanf("%ld",&a);for (b=2;b<=a;b+)if (isprime(b)=0) sum=sum+b;printf("%ld",sum);return 0;/*=*/检验幻方矩阵【问题描述】对一个5*5的正整数矩阵,判断该矩阵是否为幻方矩阵。所谓幻方矩阵,是每一行、每一列、每条对角线上元素之和都相等的矩阵例如矩阵:17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9就是一个幻方矩阵【输入】输入由键盘输入,共5行,为待判断的矩阵(每行两个数字之间仅有一个空格,由于排版所以此处并没严格按一个空格来显示)【输出】输出共1行,为判断结果,若原矩阵是幻方矩阵,输出“It is a magic square!”;若原矩阵非幻方矩阵,输出“It is not a magic square!”【样例输入1】17 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9【样例输出1】It is a magic square!【样例输入2】2 24 1 8 1523 5 4 14 164 6 13 20 2210 11 19 21 311 18 1 2 9【样例输出2】It is not a magic square!/*=*/#include<stdio.h>int main()int fb55;int i,j,s,mark;for (i=0;i<=4;i+)scanf("%d %d %d %d %d",&fbi0,&fbi1,&fbi2,&fbi3,&fbi4);mark=0;/*check dialogo n*/s=fb00+fb11+fb22+fb33+fb44;if (s!=fb04+fb13+fb22+fb31+fb40) mark=1;/*printf("%d",mark);/*/for (j=0;j<=4;j+)if (s!=fb0j+fb1j+fb2j+fb3j+fb4j) mark=1;/*printf("%d",mark);/*/if (s!=fbj0+fbj1+fbj2+fbj3+fbj4) mark=1;/*printf("%d",mark);/*/if (mark=0) printf("It is a magic square!");else if (mark=1) printf("It is not a magic square!");return 0;/*=*/斐波那契数列平均值【问题描述】求斐波那契数列前n项的平均值,要求将斐波那契数列的每一项存入数组中。【输入】输入由键盘输入,只有1行这一行有一个正整数n,为待运算的斐波那契数列的项数【输出】输出共1行,为计算所得平均数(保留小数点后3位),格式:“the average:平均数”【样例输入】10【样例输出】the average:14.300【数据范围】保证100%的数据,0<n<=50请使用long long声明数组,用%lld输出long long数据类型/*=*/#include<stdio.h>int main()long long fb51;long n,i;double a,s;fb0=0;fb1=1;scanf("%ld",&n);s=0;for (i=2;i<=n;i+)fbi=fbi-1+fbi-2;/*if (i%5=0) printf("%lldn",fbi);*/for (i=1;i<=n;i+) s=s+fbi;if (n!=0) a=s/(n*1.00);else a=0;printf("the average:%.3lf",a);return 0;/*=/*=*/*-*/*-以下为课后小习题部分-*/*-

    注意事项

    本文(C语言基础练习题及代码.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开