您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 理学 > C语言趣味程序百例精解大全
C语言趣味题关于此书第一章-最简单的问题与算法1.绘制余弦曲线2.绘制余弦曲线和直线3.绘制圆4.歌星大奖赛5.求最大数6.高次方数的尾数7.阶乘尾数零的个数8.借书方案知多少9.杨辉三角形10.数制转换第二章-生活中的数学问题11.打鱼还是晒网12.抓交通肇事犯13.该存多少钱14.怎样存钱利最大15.捕鱼和分鱼16.出售金鱼17.平分七筐鱼第三章-整数趣题18.有限5位数19.8除不尽的自然数20.一个奇异的三位数21.4位反序数22.求车速23.由两个平方三位数获得三个平方二位数24.阿姆斯特朗数25.完全数26.亲密数27.自守数28.回文数29.求具有abcd=(ab+cd)*(ab+cd)性质的四位数第四章-素数的家族30.求素数31.歌德巴赫猜想32.可逆素数33.回文素数34.要发就发35.素数幻方第五章-不定方程求整数解36.百钱百鸡问题37.爱因斯坦的数学题38.换分币39.年龄几何40.三色球问题41.马克思手稿中的数学题第六章-分数趣题42.最大公约数和最小公倍数43.分数比较44.分数之和45.将真分数分解为埃及分数46.列出真分数序列47.计算分数的精确值第七章-逻辑推理与判断48.新娘和新郞49.委派任务50.谁在说谎51.谁是窃贼52.黑与白53.谜语博士的难题(1)54.谜语博士的难题(2)55.哪个大夫哪天值班56.区分旅客国籍57.谁家孩子跑最慢第八章-数字0到9的奇妙变化58.拉丁方阵59.填表格60.用1到9组成3个3位数,且三者之比为1:2:361.1-9组成三个3位的平方数62.由8个整数形成奇特的立方体63.减式还原64.乘式还原(1)65.乘式还原(2)66.除式还原(1)67.除式还原(2)68.九位累进可除数第九章-数的变换69.魔术师的猜牌术(1)70.魔术师的猜牌术(2)71.约瑟夫问题72.邮票组合73.和数能表示1-23的5个正整数74.可称1-40磅的4块砝码75.10个小孩分糖果76.小明买书77.波松瓦的分酒趣题第十章-定理与猜想78.求π的近似值(1)79.求π的近似值(2)80.奇数平方的一个有趣性质81.角谷猜想82.四方定理83.卡布列克常数84.尼科彻斯定理85.回文数的形成第十一章-智力游戏86.自动发牌87.青蛙交换88.常胜将军89.抢3090.搬山游戏91.人机猜数游戏(1)92.人机猜数游戏(2)93.汉诺塔第十二章-其他趣味程序94.兔子产子95.将阿拉伯数字转换为罗马数字96.选美比赛97.满足特异条件的数列98.八皇后问题99.超长正整数的加法100.数字移动《C语言趣味程序百例精解》CHMV1.0ABCAmberCHMConverter7.19Trialversion原书作者:陈朔鹰,陈英出版社:北京理工大学出版社电子书版本号:V1.0完成时间:2007年9月电子书作者:cool8jayE-Mail:cool8jay@qq.com讨论论坛:(近期不支持游客浏览,见谅)本电子书所有代码均在WindowsXPSP2,MicrosoftVisualC++6.0环境下测试通过。在电子书制作过程中,本人得到了CSDN以下网友的热心帮助,特此感谢!他们是gfxiang,lihui_shine,raincatss。如果发现任何错误,包括错别字,程序问题,请立即指出,以便修正。书中有一些题目尚未完全解答出来,恳请高手指点。2.绘制余弦曲线和直线16.出售金鱼思考题35.素数幻方思考题44.分数之和思考题46.列出真分数序列思考题47.计算分数的精确值思考题55.哪个大夫哪天值班思考题61.1-9组成三个3位的平方数思考题62.由8个整数形成奇特的立方体思考题65.乘式还原(2)思考题68.九位累进可除数思考题76.小明买书思考题77.波松瓦的分酒趣题思考题87.青蛙交换思考题88.常胜将军思考题89.抢30思考题90.搬山游戏思考题92.人机猜数游戏(2)思考题96.选美比赛思考题98.八皇后问题思考题99.超长正整数的加法思考题100.数字移动思考题1.绘制余弦曲线在屏幕上用“*”显示0-360度的余弦函数cos(x)曲线。*问题分析与算法设计如果在程序中使用数组,这个问题十分简单。但若规定不能使用数组,问题就变得不容易了。关键在于余弦曲线在0-360度的区间内,一行中要显示两个点,而对一般的显示器来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行。为了获得本文要求的图形就必须在一行中一次输出两个“*”。为了同时得到余弦函数cos(x)图形在一行上的两个点,考虑利用cos(x)的左右对称性。将屏幕的行方向定义为x,列方向定义为y,则0-180度的图形与180-360度的图形是左右对称的,若定义图形的总宽度为62列,计算出x行0-180度时y点的坐标m,那么在同一行与之对称的180-360度的y点的坐标就应为62-m。程序中利用反余弦函数acos计算坐标(x,y)的对应关系。使用这种方法编出的程序短小精炼,体现了一定的技巧。*程序代码与注释#include#includevoidmain(){doubley;intx,m;for(y=1;y=-1;y-=0.1)//y为列方向,值从-1到1,步长为0.1{m=(int)(acos(y)*10);//计算出y对应的弧度m,乘以10为图形放大倍数for(x=0;x#includevoidmain(){doubley;intx,m;for(y=1;y=-1;y-=0.1)//y为列方向,值从-1到1,步长为0.1{m=(int)(acos(y)*10);//计算出y对应的弧度m,乘以10为图形放大倍数for(x=0;x#includevoidmain(){doubley;intx,m;for(y=1;y=-1;y-=0.1){m=(int)(asin(y)*10);if(y0){for(x=1;x#includevoidmain(){doubley;intx,m;for(y=1;y=-1;y-=0.1){m=(int)(asin(y)*10);for(x=0;x2.绘制余弦曲线和直线在屏幕上显示0-360度的cos(x)曲线与直线f(x)=45*(y-1)+31的迭加图形。其中cos(x)图形用“*”表示,f(x)用“+”表示,在两个图形相交的点上则用f(x)图形的符号。*问题分析与算法设计本题可以在上题的基础上进行修改。图形迭加的关键是要在分别计算出同一行中两个图形的列方向点坐标后,正确判断相互的位置关系。为此,可以先判断图形的交点,再分别控制打印两个不同的图形。*程序注释与说明#include#includevoidmain(){doubley;intx,m,n,yy;for(yy=0;yy#includevoidmain(){doubley;intx,m,n;for(y=1;y=-1;y-=0.1){m=(int)(asin(y)*10);n=(int)(acos(y)*10);for(x=0;x3.绘制圆在屏幕上用“*”画一个空心的圆。*问题分析与算法设计打印圆可利用图形的左右对称性。根据圆的方程:R*R=X*X+Y*Y可以算出圆上每一点行和列的对应关系。*程序说明与注释#include#includevoidmain(){doubley;intx,m;for(y=10;y=-10;y--){m=(int)(2*sqrt(100-y*y));//计算行y对应的列坐标m,2是屏幕纵横比调节系数因为屏幕的行距大于列距,不进行调节显示出来的将是椭圆for(x=1;x#includevoidmain(){doubley;intx,m;for(y=10;y=-10;y--)//对于第一个y坐标进行计算并在一行中打印图形{m=30+(int)(2*sqrt(100-y*y));for(x=0;x#includevoidmain(){doubley;intx,m,n;for(y=10;y=-10;y--)//对于第一个y坐标进行计算并在一行中打印图形{m=30+(int)(2*sqrt(100-y*y));if((int)y=0)n=30+(int)(2*sqrt(y));elsen=-1;//y=0时,n=30被留下来,会影响图形,故做此处理for(x=0;x4.歌星大奖赛在歌星大奖赛中,有10个评委为参赛的选手打分,分数为1-100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。*问题分析与算法设计这个问题的算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。*程序说明与注释#include#includevoidmain(){inti,a,min=100,max=0,sum=0;floataver;for(i=0;ia)min=a;if(max#includevoidmain(){inti,a[10],min=100,max=0,sum=0,just,unjust;doubleaver;for(i=0;ia[i])min=a[i];if(maxfabs((double)(unjust)-aver))unjust=a[i];if(fabs((double)a[i]-aver)5.求最大数问555555的约数中最大的三位数是多少?*问题分析与算法设计根据约数的定义,对于一个整数N,除去1和它自身外,凡能整除N的数即为N的约数。因此,最简单的方法是用2到N-1之间的所有数去除N,即可求出N的全部约数。本题只要求取约数中最大的三位数,则其取值范围可限制在100到999之间。*程序说明与注释#include#includevoidmain(){inti,j;longa;printf(Inputaintegerthatisgreaterthan100:\n);scanf(%ld,?if(a6.高次方数的尾数求13的13次方的最后三位数。*问题分析与算法设计解本题最直接的方法是:将13累乘13次方截取最后三位即可。但是由于计算机所能表示的整数范围有限,用这种“正确”的算法不可能得到正确的结果。事实上,题目仅要求最后三位的值,完全没有必要求13的13次方的完整结果。研究乘法的规律发现:乘积的最后三位的值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。利用这一规律,可以大大简化程序。*程序说明与注释#include#includevoidmain(){intx,y,i,last=1;printf(InputXandY(X**Y):);scanf(%d**%d,?for(i=0;i7.阶乘尾数零的个数100!的尾数有多少个零?*问题分析与算法设计可以设想:先求出100!的值,然后数一下末尾有多少个零。事实上,与上题一样,由于计算机所能表示的整数范围有限,这是不可能的。为了解决这个问题,必须首先从数学上分析在100!结果值的末尾产生零的条件。不难看出:一个整数若含有一个因子5,则必然会在求100!时产生一个零。因此问题转化为求1到100这100个整数中包含了多少个因子5。若整数N能被25整除,则N包含2个因子5;若整数N能被5整除,则N包含1个因子5。*程序说明与注释#include#includevoidmain(){inta,count=0;for(a=5;a#includevoidmain(){inta,i,b,j=0,count=0;printf(Inputaninteger:\n);scanf(%d,?for(i=1;(int)(pow(5,i))0;j--)//循环次数较少的放外层{for(b=a;b0;b-=1)//步长也要修改{if(!(b%((int)(pow(5,j)))))++count;}}printf(Thenumberof0intheendof%d!is:%d.\n,a,count);}8.借书方案知多少小明有五本新书,要借给A
本文标题:C语言趣味程序百例精解大全
链接地址:https://www.777doc.com/doc-4628052 .html