《C语言程序设计 王新萍 趣味程序实例.docx》由会员分享,可在线阅读,更多相关《C语言程序设计 王新萍 趣味程序实例.docx(17页珍藏版)》请在第一文库网上搜索。
1、C语言趣味程序实例1歌星大奖赛在歌星大奖赛中,有10个评委为参赛的选手打分,分数为oo分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。请编写一个程序实现。* 问题分析与算法设计这个问题的算法十分简单,但是要注意在程序中判断最大、最小值的变量是如何赋值的。* 程序说明与注释#inc1udestdio.h,intmain()(intinteger,i,max,min,sum;max=-32768;运行结果Inputnumber1=90Inputnumber2=91Inputnumber3=93Inputnumber4=94Inputnumber5=90Inputnumber6
2、=99Inputnumber7=97Inputnumber8=92Inputnumber9=91Inputnumber10=95Cance1edmaxscore:99Cance1edminscore:90Averagescore:92*思考题题目条件不变,但考虑同时对评委评分进行裁判,即在10个评委中找出最公平(即评分最接先假设当前的最大值max为C语言整型数的最小值*/min=32767;/*先假设当前的最小值min为C语言整型数的最大值*/SUm=0;/*将求累加和变量的初值置为0*/for(i=1;imax)max=integer;/*通过比较筛选出其中的最高分*/if(integerm
3、in)min=integer;/*通过比较筛选出其中的最低分*/)printf(,Cance1edmaxscore:%dnCance1edminscore:%dn,max,min);printf(nAverage8限(111”,(511111-1)加11)/8);/*输出结果*/1返平均分)和最不公平(即与平均分的差距最大)的评委,程序应该怎样实现?C语言趣味程序实例2打鱼还是晒网中国有句俗语叫“三天打鱼两天晒网”。某人从1990年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。* 问题分析与算法设计根据题意可以将解题过程分为三步:(1)计算从1990年1月
4、1日开始至指定日期共有多少天;(2)由于“打鱼”和“哂网”的周期为5天,所以将计算出的天数用5去除;(3)根据余数判断他是在“打鱼”还是在“晒网”;若余数为1,2,3,则他是在“打鱼”否则是在“晒网”在这三步中,关键是第一步。求从1990年1月1日至指定日期有多少天,要判断经历年份中是否有闰年,二月为29天,平年为28天。闰年的方法可以用伪语句描述如下:如果(年能被4除尽且不能被100除尽)或能被400除尽)则该年是闰年;否则不是闰年。C语言中判断能否整除可以使用求余运算(即求模)*程序与程序注释#inc1ude,stdio.h,structdateintyear;intmonth;intda
5、y;1;voidmain()(structdatetoday,term;intyearday,year,day;printf(nEnteryear/month/day:);scanf(,%d%d%d,1,fetoday.year,fetoday.monthtoiay.day);*输入日期*/term.month=12;*设置变量的初始值:月*/term.day=31;/*设置变量的初始值:日*/for(yearday=0,year=1990;year0&day4)printf(hewasfishingatthatday.n);*打印结果*/e1seprintf(Hewass1eepingatt
6、hatday.nu);1intdays(structdateday)(staticintday_tab213H0,31,28,31,30,31,30,31,31,30,31,30,31,*平均每月的天数*/0,31,29,31,30,31,30,31,31,30,31,30,31,),);inti,1p;1p=day.year%4=0&day.year%100!=0day.year%400=0;*判定year为闰年还是平年,IP=O为平年,非O为闰年*/for(i=1;iday.month;i+)/*计算本年中自1月1日起的天数*/day.day+=day_tab1pi;returnday.d
7、ay;)* 运行结果Enteryear/month/day:19911025Hewasfishingatthatday.Enteryear/month/day:19921025Hewass1eepingatthatday.* 思考题请打印出任意年份的日历。C语言趣味程序实例3抓交通肇事犯一辆卡车违反了交通规则,撞人后逃逸。现场三人目击该事件,但都没有记住车号,只记住了一些特征。甲说:车号的前两位数字是相同的;乙说:车号的后两位数字是相同的,但与前两位不同;丙说:4位车号正好是一个整数的平方。请根据上述特征编写程序协助警方找出肇事车牌号码。* 问题分析与算法设计按照题目的要求造出一个前两位数相同
8、、后两位数相同且相互间又不同的整数,然后判断该整数是另一个整数的平方。*程序说明与注释#inc1udemath.hmain()inti,j,k,c;for(i=1;i=9;i+)for(j=1j=9+)if(i!=j)k=i*IOOO+i*1OO+j*IO+j;for(c=31;c*ck;c+);if(c*c=k)printf(,1orry-No.is%d.n,k);*运行结果1orry-No.is7744.*思考题模拟机动车选号。C语言趣味程序实例4新娘和新郎三对情侣参加婚礼,三个新郎为A、B、C,三个新娘为X、Y、Zo有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的:
9、A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。这人听后知道他们在开玩笑,全是假话。请编程找出谁将和谁结婚。* 问题分析与算法设计将A、B、C三人用1、2、3表示,将X和A结婚表示为“X=1”,将Y不与A结婚表示为“Y!=1”。按照题目中的叙述可以写出表达式:X!=1A不与X结婚X!=3X的未婚夫不是CZ!=3C不与Z结婚题意还隐含着X、Y、Z三个新娘不能结为配偶,则有:X!=Y且X!=Z且Y!=Z穷举各种可能情况,代入上述表达式中进行推理运算,若假设的情况使上述表达式计算的结果均为“真”,则假设情况就是正确的结果。* 程序与程序注释intx,y,z;for(x=1;x=3;x+)fo
10、r(y=1;y=3;y+)for(z=1;z=3;z+)main()/*穷举X的全部可能配偶*/*穷举Y的全部可能配偶*/*穷举Z的全部可能配偶*/if(x!=1&x!=3&z!=3&x!=y&x!=z&y!=Z)/*判断配偶是否满足题意*/printf(,Xwi11marryto%cn,A+x-1);/*打印判断结果*/printf(Ywi11marryto%c.n,A,+y-1);printf(Zwi11marryto%c.n,A+z-1);*运行结果Xwi11marrytoB.(X与B结婚)Ywi11marrytoC.Zwi11marrytoA.(Y与C结婚)(Z与A结婚)C语言趣味程序
11、实例5谁家孩子跑最慢张、王、李三家各有三个小孩。一天,三家的九个孩子在一起比赛短跑,规定不分年龄大小,跑第一得9分,跑第二得8分,依次类推。比赛结果各家的总分相同,且这些孩子没有同时到达终点的,也没有一家的两个或三个孩子获得相连的名次。已知获第一名的是李家的孩子,获得第二的是王家的孩子。问获得最后一名的是谁家的孩子?*问题分析与算法设计按题目的条件,共有1+2+3+9=45,每家的孩子的得分应为15分。根据题意可知:获第一名的是李家的孩子,获得第二的是王家的孩子,则可推出:获第三名的一定是张家的孩子。由“这些孩子没有同时到达终点的”可知:名次不能并列,由“没有一家的两个或三个孩子获得相连的名次
12、”可知:第四名不能是张家的孩子。程序中为了方便起见,直接使用分数表示。* 程序与程序注释intscore44;main()inti,j,k,who;score111=7;/*按已知条件进行初始化:SCOre1:张家三个孩子的得分*/score21=8;score31J=9;for(i=4;i6;i+)for(j=4;j7;j+)for(k=4;i!=j&k7;k+)if(k!=i&k!=j*score:王家三个孩子的得分*/*score3:李家三个孩子的得分*/*i:张家孩子在4到6分段可能的分数*/*j:王家孩子在4到6分段可能的分数*/*k:李家孩子在4到6分段可能的分数*/*分数不能并列
13、*/&15-i-score11!=15-j-score21&15-i-scoreI1!=15-k-score31&15-j-score2IJ!=15-j-score31)(scored2=i;score13=15-i-7;*将满足条件的结果记入数组*/score22=j;score23=15-j-8;score32=k;score33=15-k-9;)for(who=0,i=1;i=4;i+,printf(n)fbr(j=1;j=3;j+)(printf(%d,scoreij);*输出各家孩子的得分情况*/if(scoreij=1)/*记录最后一名的家庭序号*/who=i;)if(who=1)/*输出最后判断的结果*/printf(The1astonearrivedtoendisachi1dfromfami1yZhang.n);e1seif(who=2)printf(,The1astonearrivedtoendisachi1dfromfami1yWangAn);e1seprintf(The1astonearrivedtoendisachi1dfromfami1y1i.n);* 运行结果7 538 619 42The1astonearrivedtoendisachi1dfromfam