关键词不能为空

当前您在: 主页 > 英语 >

c语言趣味题

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-03 12:48
tags:

-

2021年3月3日发(作者:reminder)



一、九九乘法表




1*1=1


1*2=2 2*2=4


1*3=3 2*3=6 3*3=9


1*4=4 2*4=8 3*4=12 4*4=16


1*5=5 2*5=10 3*5=15 4*5=20 5*5=25


1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36


1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49


1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64


1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72


9*9=81



分析:






这需要编写一个循环结构的程序。






需要循环嵌套。外循环控制打印第 几行,内循环控制打印某


一行的若干个等式。




程序如下:



main( )


{ int m,n;



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



{ for (n=1;n<=m;n++)



printf(



printf(



}


}



请思考:请你用别的编程方法再解此题。




二、说谎



有甲、乙、丙三人,每人或者说真话,或者说假话。




甲说:


< p>
乙说假话。





乙说:



甲和丙是同一种人。





问甲、乙、丙三人谁说真话,谁说假话?




分析:






本题看似漫无边际,


无法入手,


不知道怎么与


C


语言程序设


计挂钩。但只要和








、逻辑表达式联系起来,脉 络就清晰起


来。






这里用整型变量

< br>a



b



c


表示甲、乙、丙三人说话的真假,


当变量值为


1


时表示此人说真话,变量值为


0

< br>时表示此人说假话。




甲说:



乙说假话。



这有两种可能:甲说的是真话,而乙确实说


假话,即:



a==1&&b==0


等价于


a&&!b



或者甲说的是假话,而乙说真话,即:



a==0&&b==1


等价于


!a&&b



由此可得逻辑表达式:



a&&!b||!a&&b



乙说:



甲和丙是同一种人。


这有两种可能:乙说真话,而甲和


丙确是同一种人,即:



b==1&&a==c


等价于


b&&a==c



或者乙说的是假话,而甲和丙不是同一种人,即:



b==0&& a!=c


等价于


!b&& a!=c



由此可得逻辑表达式:



b&&a==c||!b&& a!=c



上述两个逻辑表达式是





的关系(因为该满足的条件都要满











< br>系



,最


得到







话的








(a&&!b||!a&&b)&&( b&&a==c||!b&& a!=c)





穷举每个人说真话或说假话的各种情况,用上述表达式测


试,使 上述表达式的值为


1


(真)的情况就是正确的结果。

< p>



程序如下:



main( )


{



int a,b,c;



for(a=0;a<=1;a++)



for(b=0;b<=1;b++)



for(c=0;c<=1;c++)



{if((a&&!b||!a&&b)&&( b&&a==c||!b&& a!=c))



printf(



}


}



运行结果为:



a=0,b=1,c=0


a=1,b=0,c=0



请思考:如果题目中加入


丙说:


?


甲说假话。

< p>
?”


,则程序如何编


写?运行结果又是什么?



三、兔子繁殖问题



Fibonacci


数列:


1< /p>



1



2



3



5

< p>


8



13




的前


40


项。




本题来自于一个有趣的古典数学问题:有一对 兔子,从出生后


的第


3


个月起每个月都 生一对兔子。


小兔子长到第


3


个月又生 一对兔


子。


如果生下的所有兔子都能成活,

且所有的兔子都不会因年龄大而


老死,问每个月的兔子总数为多少?




分析:






此数列的规律是第


1



2


项都是


1


,从第


3


项开始,都是其


前两项之和,并且有固定循环次数,因此可以用


for


循环实现。






这里用到的是什么算法呢?是迭代算法。迭代算法的基本思


想是:


不断地用新值取代变量的旧值,


或由旧值递推出变量的新值。








程序如下:



main( )


{



long int f1,f2;



int i;



f1=1;f2=1;



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



{



printf(


每次输出两项


*/



if(i%2==0) printf(



f1=f1+f2;



f2=f2+f1; /*


求出两项


*/



}


}


四、百钱与百鸡



我国古代数学家张丘 建在《算经》中提出了著名的



百钱百鸡问





鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买


百鸡,翁、母、雏各几何?



意思是说:一只公鸡卖


5

< p>
枚钱,一只母


鸡卖


3


枚钱 ,三只小鸡卖


1


枚钱,用


100


枚钱买


100


只鸡,能买到

< br>公鸡、母鸡、小鸡各多少只?




分析:






这是一个不定方程问题。



3


个未知数,


2


个方程:


设公鸡、


母鸡、小鸡数分别为


i



j



k


,则有


i+j+k=100

< br>,


i*5+j*3+k/3=100


。需


要让计算机去一一测试是否符合条件,


找出所有可能的答案。

< br>由于价


格的限制,如果只是一种鸡,则公鸡最多为


19< /p>


只(由于共


100


只鸡

< br>的限制,不能等于


20


只)


,母 鸡最多


33


只,小鸡最多


99


只。






这里用到的是穷举算法。穷举算法 的基本思想是:对问题的


所有可能答案一一测试,直到找到正确答案或测试完全部可能的 答


案。




程序如下:



main( )


{



int i,j,k;



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



for(j=1;j<=33;j++)



for(k=3;k<=99;k=k+3)



{ if((i+j+k==100)&&(i*5+j*3+k/3==100))



printf(



}


}



运行结果为:



i=4,j=18,k=78


i=8,j=11,k=81


i=12,j=4,k=84



请思考:还有没有别的编程方法?



五 、


该程序在


TC3.0


环境下编译通过 ,共有


9


个函数。分别是


printS creen



start


< p>
leave



levelChoice

< p>


newWord



mo ving



wordHit



result



main




其功能分别是:



printScreen


:刷新屏幕输出的图像。



Start


:用户进入程序时选择开始,退出和求助。



Leave


:用户离开程序事提示感谢使用< /p>



levelChoice


:用户开始之 前选择等级



newWord


:生成一 个新的字母并将其置于首行。



moving

< br>:将屏幕上的所有字母向下移动一行



wordHit< /p>


:判断用户是否输入字母,如果输入,


且屏幕上有该字母则将该字 母所在位置置空。



result


:判 断该用户的得分,提示其是否进入下一等级。



main


:总体控制以上各函数,判断其是否运行。




压缩包下载:



打字游戏



------------ -------------------------------------------------< /p>


---------------------------------------- ------------


#include


#include


#include


#include


#include


#define xLine 70


#define yLine 20


#define full 100


#define true 1


#define false 0


/*----------------------------------- ----------------------------------*/


void printScreen(int level,int right,int sum,char p[yLine][xLine])/*


刷新屏幕的输出图像



*/


{




int i,j;




clrscr();




printf(








Press 0 to exit;1 to


pause








score:%d/%dn< /p>


输出现在的等级,击中数和现在已下


落总数



*/




printf (







-


-


-


-


-


-


-


-



本文更新与2021-03-03 12:48,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/700050.html

c语言趣味题的相关文章