算法初步复习课
算法的基本特点
1、有穷性
一个算法应包括有限的操作步骤,能在执行有穷的操作步骤之后结束。
2、确定性
算法的计算规则及相应的计算步骤必须是唯一确定的,既不能含糊其词,也不能有二义性。
3、可行性
算法中的每一个步骤都是可以在有限的时间内完成的基本操作,并能得到确定的结果 。
一、算法的概念
广义地讲 算法是为完成一项任务所应当遵照的一步一步的规则的、精确的、无歧义的描述,它的总步数是有限的。
狭义地讲 算法是解决一个问题采取的方法和步骤的描述。
一、用自然语言表示算法
二、传统流程图
处理框
起止框
I/P框
判断框
流程线
1、传统流程图中的基本符号
开始
输入系数a,b,c
求X1、X2
输出X1、X2
结束
求一元二次方程ax2+bx+c=0(a?0)的根
顺序结构
任意给定3个正实数,设计一个算法,判断分别以这3个数为三边边长的三角形是否存在.画出这个算法的程序框图.
开始
输入a,b,c
a+b>c,a+c > b,
b+c > a是否同
时成立?
存在这样的
三角形
不存在这样
的三角形
结束
否
是
条件结构
例3 设计一算法,求和:1+2+3+…+100
结束
i = i + 1
Sum=Sum + i
i<100?
输出Sum
否
是
i=0:Sum=0
开始
结束
输出Sum
i=0:Sum=0
开始
i = i + 1
Sum=Sum + i
i>=100?
否
是
循环结构
直到型结构
当型结构
语句 一般格式 主要功能 是否有计算功能
输入语句
输出语句
赋值语句
INPUT “提示文字”;变量
PRINT “提示内容”;变量
变量=表达式
可对程序中的变量赋值
可输出表达式的值,计算
可对程序中的变量赋值,计算
无
有
有
INPUT “A,B=”;A,B
t=A
A=B
B=t
PRINT “A,B=”;A,B
END
(运行时从键盘输入3,7)
A=-1000
A=A+100
PRINT “A=”;A
END
将一个变量的值赋给另一个变量,前一个变量的值保持不变;可先后给一个变量赋多个不同的值,但变量的取值总是最近被赋予的值 。
A=-900
A,B =7 3
p=(2+3+4)/2
s=SQR(p*(p-2)*(p -3)*(p-4))
输出s
结束
开始
p=(2+3+4)/2
s=SQR(p*(p-2)*(p -3)*(p-4))
PRINT “三角形的面积等于”;s
END
条件语句
IF 条件 THEN
语句1
ELSE
语句2
END IF
IF 条件 THEN
语句
END IF
或
INPUT a,b,c
IF a+b>c AND a+c>b AND b+c>a THEN
PRINT “存在这样的三角形.”
ELSE
PRINT “不存在这样的三角形.”
END IF
END
任意给定3个正实数,设计一个算法,判断分别以这3个数为三边边长的三角形是否存在.写出这个算法的程序语句.
INPUT “a,b,c=”;a,b,c
IF b > a THEN
t = a
a = b
b = t
END IF
IF c > a THEN
t = a
a = c
c = t
END IF
IF c > b THEN
t = b
b = c
c = t
END IF
PRINT a,b,c
END
相应的QBASIC程序:
开始
t=a,a=b,b=t
t=a,a=c,c=t
t=b,b=c,c=t
输入a,b,c
输入a,b,c
b>a?
c>a?
c>b?
结束
是
是
否
否
是
否
对应的流程图
循环结构的程序框图
条件成立?
循环体
否
是
条件成立?
循环体
否
是
程序语句表示
WHILE 条件
循环体
WEND
DO
循环体
LOOP UNTIL 条件
根据下面的程序框图写出相应的QBASIC程序
结束
i = i + 1
Sum=Sum + i
i<100?
输出Sum
否
是
i=0,Sum=0
开始
i = 0
sum = 0
WHILE i<100
i = i + 1
sum = sum + i
WEND
PRINT sum
END
当型语句
结束
输出Sum
i=0,Sum=1
开始
i = i + 1
Sum=Sum*i
i>=100?
否
是
根据下面的程序框图写出相应的QBASIC程序
i = 0
sum = 0
DO
i = i + 1
sum = sum + i
LOOP UNTIL i>=100
PRINT sum
END
直到型语句
一、逻辑运算符(3个)
1、“AND”表示条件同时成立时才符合条件
2、“OR”表示至少要有一个条件成立时才符合条件
3、“NOT”表示与条件相反时才符合条件
例:“IF 9<x AND x<100 THEN”
表示前后的两个条件必须同时成立可以执行THEN后语句
“IF 9<x OR x<100 THEN”
表示前后的两个条件只需有一个成立可以执行THEN后语句
“IF NOT x<100 THEN”
表示当x=>100时符合条件可以执行THEN后语句
在编写QBASIC程序中值得注意的几个问题???
二、关系运算符
有如下运算符:
1、〈(小于)2、〉(大于)3、=(等于)
4、〉=(大于或等于)5、〈=(小于或等于)
三、算术运算符
1、+ 2、- 3、* 4、/
在编写QBASIC程序中值得注意的几个问题???
i = 1
f = 1
WHILE i<=n
i = i + 1
f= f *i
WEND
PRINT f
END
INPUT n
i = 1
sum= o
WHILE i<=n
i = i + 1
sum= sum+(i+1)/i
WEND
PRINT sum
END
INPUT n
INPUT x
IF x<1 THEN
y=x
END IF
IF x>=1 AND x<10 THEN
y=2*x-1
END IF
IF X>=10 THEN
y=3*X-11
END IF
PRINT y
END
INPUT a,n
t=0
s=0
i=I
WHILE i<=n
t= t+a
s=s+t
a=a*10
i=i+1
WEND
PRINT s
END
INPUT "please input a letter"; x$
IF x$ = "C" THEN
PRINT "G"
END IF
IF x$ = "h" THEN
PRINT "l"
END IF
IF x$ = "i" THEN
PRINT "m"
END IF
IF x$ = "n" THEN
PRINT "r"
END IF
IF x$ = "a" THEN
PRINT "e"
END IF
IF x$ <> "C" OR x$ <> "h" OR x$ <> "i" OR x$ <> "a" OR x$ <> "n" THEN
PRINT "?"
END IF
END
开始
输出提出:“输入
第一个方程的系数”
“x的系数是”:a1
“y的系数是”:b1
“常数项是”:c1
输出“x=”;x
“y=”;y
方程有无数多组解
a1*b2-a2*b1≠0
x=(c2*b1 -c1*b2)/(a1*b2 -a2*b1)
y=(c2*b1 -c1*b2)/(a1*b2 -a2*b1)
结束
输出提出:“输入
第二个方程的系数”
“x的系数是”:a2
“y的系数是”:b2
“常数项是”:c2
N
Y
c1=c2
方程无解
INPUT "请输入第一个方程的系数a1,b1,c1:"; a1, b1, c1
INPUT "请输入第二个方程的系数a2,b2,c2:"; a2, b2, c2
IF a1 * b2 - a2 * b1 <> 0 THEN
x = (c2 * b1 - c1 * b2) / (a1 * b2 - a2 * b1)
y = (c1 * a2 - c2 * a1) / (a1 * b2 - a2 * b1)
PRINT "x="; x
PRINT "y="; y
ELSE
IF c1=c2 THEN
PRINT "方程组有无数多组解"
ELSE
PRINT "方程组无解"
END IF
END IF
END
INPUT " 请输入你的出生月份和出生日:"; x
IF x >= 3.21 AND x <= 4.19 THEN
PRINT "你的星座是白羊座"
END IF
IF x >= 4.2 AND x <= 5.2 THEN
PRINT "你的星座是金牛座"
END IF
IF x >= 5.21 AND x <= 6.21 THEN
PRINT "你的星座是双子座"
END IF
IF x >= 6.22 AND x <= 7.22 THEN
PRINT "你的星座是巨蟹座"
END IF
IF x >= 7.23 AND x <= 8.22 THEN
PRINT "你的星座是狮子座"
END IF
IF x >= 8.23 AND x <= 9.22 THEN
PRINT "你的星座是处女座"
END IF
IF x >= 9.23 AND x <= 10.22 THEN
PRINT "你的星座是天秤座"
END IF
IF x >= 10.23 AND x <= 11.21 THEN
PRINT "你的星座是天蟹座"
END IF
IF x >= 11.22 AND x <= 12.21 THEN
PRINT "你的星座是射手座"
END IF
IF x >= 12.22 AND x <= 1.19 THEN
PRINT "你的星座是魔羯座"
END IF
IF x >= 1.2 AND x <= 2.18 THEN
PRINT "你的星座是水瓶座"
END IF
IF x >= 2.19 AND x <= 3.2 THEN
PRINT "你的星座是双鱼座"
END IF
END
INPUT "输入一个正整数:"; x
IF x > 6 THEN
x = x MOD 7
END IF
IF x = 0 THEN
p$ = "Sunday"
END IF
IF x = 1 THEN
p$ = "Monday"
END IF
IF x = 2 THEN
p$ = "Tuesday"
END IF
IF x = 3 THEN
p$ = "Wednesday"
END IF
IF x = 4 THEN
p$ = "Thursday"
END IF
IF x = 5 THEN
p$ = "Friday"
END IF
IF x = 6 THEN
p$ = "Saturday"
END IF
PRINT p$
END
开始
x1=20
x2=21
f(x)=1.3x3-26.013x2+0.975x-19.50975
x1=m
x2=m
m=(x1+x2)/2
x1=m
x2=m
f(m)=0
f(x1)f(m)>0
|x1-x2|<0.005
结束
输出所求的近似根m
m=(x1+x2)/2
y
n
n
y
n
y
INPUT "n="; n
s1 = 0
s2 = 0
s = 0
i = 1
DO
s1 = s1 + n
n = n / 2
s2 = s2 + n
s = s + s1 + s2
i = i + 1
LOOP UNTIL i > 10
PRINT "s1="; s1
PRINT "n10="; n
PRINT "s="; s
END
程序说明:
S1为向下运动经过的路程;
S2为向上运动经过的路程;
n10为第10次着地后反弹的高度;
S为全程经过的路程。