-
一、九九乘法表
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(
}
}
请思考:请你用别的编程方法再解此题。
二、说谎
有甲、乙、丙三人,每人或者说真话,或者说假话。
甲说:
“
乙说假话。
”
乙说:
“
甲和丙是同一种人。
”
问甲、乙、丙三人谁说真话,谁说假话?
分析:
①
本题看似漫无边际,
无法入手,
不知道怎么与
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
(真)的情况就是正确的结果。
程序如下:
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
,
8
,
13
,
…
的前
40
项。
本题来自于一个有趣的古典数学问题:有一对
兔子,从出生后
的第
3
个月起每个月都
生一对兔子。
小兔子长到第
3
个月又生
一对兔
子。
如果生下的所有兔子都能成活,
且所有的兔子都不会因年龄大而
老死,问每个月的兔子总数为多少?
分析:
①
此数列的规律是第
1
、
2
p>
项都是
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
枚钱,一只母
鸡卖
3
枚钱
,三只小鸡卖
1
枚钱,用
100
枚钱买
100
只鸡,能买到
< br>公鸡、母鸡、小鸡各多少只?
分析:
①
这是一个不定方程问题。
有
3
个未知数,
2
p>
个方程:
设公鸡、
母鸡、小鸡数分别为
p>
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
,
leave
,
levelChoice
,
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 (
以
下
是
程
序
源
码
-
-
-
-
-
-
-
-
-
上一篇:计算机基础知识面试
下一篇:八下英语第四单元课文翻译