搜档网
当前位置:搜档网 › 江苏省二级VB 第五章 选择分支与循环嵌套

江苏省二级VB 第五章 选择分支与循环嵌套

江苏省二级VB  第五章 选择分支与循环嵌套
江苏省二级VB  第五章 选择分支与循环嵌套

第五章选择分支与循环嵌套

5.1 分支结构与分支结构语句(2个例子)

5.2 循环结构与循环结构语句(6个例子)

5.3 程序实例(10个例子)

习题练习(11个例子)

5.1 分支结构与分支结构语句

5.1.1 IF-Then-Else-End If 结构语句

结构一般如下:

If e Then

[ A组语句 ]

Else

[ B组语句 ]

End If

e 为判决条件,可以是逻辑变量,关系表达式或逻辑表达式。

当A组语句仅有一个时,可简化为:If e Then < 语句 >

例如,程序代码:If Text1.Text = “” Then

Text1.SetFocus

End If

可以简化为:‘当文本框中文本为空时,则使得文本框成为焦点。

If Text1.Text = “” Then Text1.Setfocus (省去End If)

较为复杂的结构如下:

If e1 Then ‘如果e1为True,则执行A1组语句

A1 组语句

ElseIf e2 Then ‘如果e2为True,则执行A1组语句

A2 组语句

End If

[ 例题5-1 ] 已知三角形的三边长度,设计求此三角形面积的程序。

问题分析:a + b > c & a + c > b & b + c > a , S = sqr(p(p-a)(p-b)(p-c)) , p= (a+b+c)/2

算法设计:开始——输入a、b、c——判断a + b > c & a + c > b & b + c > a,通过则求p,求S,否则提示:“输出数据错误信息”——结束。

设计程序代码如下:

Private Sub Command1?_Click( )

Dim a As single, b As single, c As single

a = Val(Text1.text) ‘Text 属性为字符串型,转为数值型

b = Val(Text2.text)

c = Val(Text3.text)

If a + b > c and a + c > b and b + c > a Then

p = (a+b+c)/2

s = sqr(p*(p-a)*(p-b)*(p-c))

Text4.text = CStr(s) ‘数值型,转为字符串型,不使用,则自动强制转换

Else

Text4.text = “数据错误”

End If

End Sub

Private Sub Command2_Click ( ) ‘结束程序

End

End Sub

Private Sub Command3_Click ( ) ‘清除原有数据

Text1.text = “”

Text2.text = “”

Text3.text = “”

Text4.text = “”

Text1.SetFocus

End Sub

[ 例题5-2 ]一个有多个分支的示例程序数学表达式:,试写出该程序。

程序界面设计:两个文本框和一个命令按钮及相应的说明标签,文本框1中输入测试数据,单击命令按钮,在文6本框2给出测试结果。

Private Sub Command1_Click ( )

Dim x as Integer

x = Val(Text1.Text )

If x < 1 Then

Text2.Text = “这是小于1的数”

ElseIf x < = 10 Then

Text2.Text = “这是1到10之间的数”

End If

End Sub

5.1.2 Select-Case-End-Select 结构语句

一般形式如下:

Select Case e ‘e 为测试表达式

Case c1 ‘c1是测试项,可取(1)具体数值(当表达式为算数表达式时) A组语句(2)连续的数据范围(8 To 20,B To H)

Case c2 ( 3 ) 满足某个判决条件 (Is >20, Is < “P”)

B组语句 ( 4 ) 多个范围的组合

Case Else

n组语句

End Select

例题5-2 的程序代码也可用本结构语句实现:

Private Sub Command1_Click ( )

Dim x as Integer

x = Val(Text1.text)

Select Case x

Case Is < 1

Text2.Text = “这是小于1的数”

Case 1 To 10

Text2.Text = “这是1到10之间的数”

Case Else

Text2.Text = “这是大于10的数”

End Select

End Sub

5.2 循环结构与循环结构语句

循环语句按结构分:当型结构和直到型结构的区别仅仅是False和True 位置交换,下为当型的两种结构:

True

False

True

False

A

A

5.2.1 Do-Loop 循环语句结构

四种结构形式:

(1)Do While e (2) Do

… …

[ Exit Do ] [ Exit Do ]

… …

Loop Loop While e

(3) Do Until e (4) Do

… …

[ Exit Do] [ Exit Do]

… …

Loop Loop Until e

前两种为当型结构,后两种为直到型结构,Do语句Loop语句之间为循环体语句,循环体语句包含一条或多条Exit Do语句,如果程序执行到Exit Do语句,就会直接退出循环,转而执行Loop语句的下一条语句。[ Exit Do] 语句最常用的形式是与If-Then结合,即为:If e Then Exit Do 在执行循环体时,如果条件e被满足,则执行Exit Do语句,直接退出循环。

[ 例题5-3]设计采用欧几里得算法求解两个自然数的最大公约数的程序。

问题分析及界面设计:界面参照例题5-1,算法如下:

@例题 2-1求两个自然数的最大公约数的算法。(辗转相除法)

S1.输入两个自然数M、N;

S2.求M除以N的余数R;

S3.使得M=N,即为N替换M;

S4.使得N=R,即为R替换N;

S5.如果R0,则重复执行S2、S3、S4(循环),否则转S6

S6.输出M,M即为M、N的最大公约数。

程序设计如下:

Private Sub Command1_Click( )

Dim m as Long, n as Long

Dim r as Long

m = Val(Text1.Text) ‘取数据m

n = Val(Text2.Text) ‘取数据n

Basic实现

INPUT m,n

DO

r=m MOD n

m=n

n=r

LOOP UNTIL r=0

PRINT m

END

If m <1 Or n<1 Then ‘检验数据合法性

Text3.Text = “数据错误!”

Else

Do ‘求最大公约数

r = m Mod n

m = n

n = r

Loop Until r = 0

Text3.Text = Csr(m)

End Sub

Private Sub Command3_Click ( ) ‘清除原有数据

Text1.text = “”

Text2.text = “”

Text3.text = “”

Text4.text = “”

Text1.SetFocus

End Sub

Private Sub Command3_Click ()

End

End Sub

5.2.2 For-Next 循环结构语句

如果事先知道循环次数,则可使用For-Next 循环结构语句,它的一般形式如下:

For v = e1 to e2 [ Step e3]

[ Exit For] ‘e1为初值,判别v是否超过e2,若超过,退出循环,执行Next语句的下条。

Next v ‘执行Next语句,系统执行下述操作:v = v+ e3

‘v 是循环控制变量,应为整型或单精度型;e1、e2、e3为控制循环的参数。e1为初值,e2为终值,e3为步长(e1 =1 时可省)。

For-Next 循环的正常循环次序可用下式计算:循环次数= Int((e2-e1)/e3) +1

如下面程序代码:

Private Sub Form_Click()

For i = 1 To 10 Step 2

Print i;

Next i

Print “i =”; i

End Sub

[ 例题5-4] 求1 ~ 10 这十个数的和与连乘积的程序。

Option Explicit

Private Sub Form_Click()

Dim i As Integer, s As Integer

s = 0

Print "s=";

For i = 1 To 10

s = s + i

If i < 10 Then

Print i; "+";

Else

Print i; "=";

End If

Next i

Print s

f = 1

Print "f=";

For i = 1 To 10

f = f * i

If i < 10 Then

Print i; "*";

Else

Print i; "=";

End If

Next i

Print f

End Sub

[ 例题5-5]一个从由字母、数字组成的字符串中找到所有大写字母并逆序输出。

界面设计:两个文本框,三个按钮,一筛选,一清除,一结束

思路分析:从一个字符串找出符合要求的字符是采取对字符串的每一个字符逐个筛选的方法实现的,利用Mid函数可从字符串中提取单个字符,循环控制处理过程,循环的终值使用Len函数;对于符合要求的字符采用连接运算组成新字符串;逆序输出则是过从后往前逐个提取字符再连接

Option Explicit

Private Sub Cmd1_Click ( )

Dim a as String, d as String, t as String ’

Dim I as Integer

Text1.setFocus

a = Text1.Text ‘前期准备

For I = 1 to Len(a)

If Mid(a , I , 1) > = “A” And Mid(a , I , 1) < = “Z”Then

t = t & Mid( a , I , 1) ‘从字符串a 左边第I个位置开始向右取一个字符 End If

Next I

For I = Len(t)to 1 Step -1

d = d & Mid ( t , I , 1)

Next I

Text2.Text = d

End Sub

Private sub Cmd2_Click ( )

Text1.Text = “”

Text2.Text= “”

Text1.SetFocus

End Sub

Private sub Cmd3_Click ( )

End

End Sub

Private sub Form_Load()

MsgBox “本程序的功能是将一个从由字母、数字组成的字符串中找到所有大写字母并逆序输出”, “示例程序”

End Sub

5.2.3 循环嵌套

大循环套小循环,小循环一定包含在大循环之内,而不得相互交叉。

程序示例:

Private Sub Form_Click ( )

For i = 1 to 9

For j = 1 to 9

Print i ; “*” ; j ; “ =” ; i*j

Next j

Print

Next i

End Sub

[ 例题5-6]一个模拟摇奖器的程序。设有100个人中签,要从中找出中奖人。由机器自动产生1000个1~100间的数据,第1000个随机数据即为中奖人的号码。

问题分析:产生0~1之间随机数的函数Rnd(x), 其中0=

为生成某个范围内的随机整数,可使用下列公式:

Int((upperbroad-lowerbroad+1)*Rnd+lowerbroad),则产生1~100随机数:

Int((100-1+1)*Rnd+1)

界面及算法设计:两个按钮,一产生随机数,一退出,对应一个文本输出Private Sub Comd1_Click()

Dim Im As Integer, i As Integer, j As Integer, a As Integer

Randomize

For i = 1 To 1000 ‘取第1000个随机数

Im = Int(100 * Rnd) + 1 ‘产生1~100之间的随机数

a = 0

For j = 1 To 1000 ‘产生1000次随机数

a = a + 1

Next j

Text1.Text = CStr(Im);

Text1.Refresh ‘刷新前999次,保留最后一次

Next i

Text1.Text = CStr(Im)

End Sub

Private Sub Comd2_Click()

End

End Sub ‘本程序采用两重嵌套的循环

5.3 程序示例

[ 例题5-7] 一个简单的函数计算器程序。

设计思路:一个是设计基本函数程序,包括输入按钮和两个文本边框;一个是设计出错提示,包括未输入值和数据超出定义域的情况。程序中使用的IsNumeric(s)函数用于检测自变量是否是一个可转化成数值的数字串,如果是返回逻辑值True,否则返回False

函数:Exp、Log()、Sqr(求开方)、Sgn(求x的符号)

程序代码如下:

Option Explicit

Dim X as Single

模块模板如下:

Private Sub Cmd1_Click( )

If Text1.Text = ”” Then

MsgBox””

Text1.SetFocus

ElseIf IsNumeric(Text1.Text)Then

X = Val(Text1.Text)

Else

MsgBox”输入数据错误!”, 48 + vbOKOnly,”程序示例”

Text1.Text = ””

End If

End Sub

Private Sub Cmd1_Click( ) ‘求Exp(X)

If Text1.Text = “” Then

MsgBox”请输入X的值!”, 48 + vbOKOnly,”程序示例”

Text1.SetFocus

ElseIf IsNumeric(Text1.Text)Then

X = Val(Text1.Text)

Label2.Caption = “Exp(X) = :”

Text2.Text = Str( Exp(X))

Else

MsgBox”输入数据错误!”, 48 + vbOKOnly,”程序示例”

Text1.Text = “”

End If

End Sub

Private Sub Cmd2_Click( ) ‘求Log(X)

If Text1.Text = “” Then

MsgBox”请输入X的值!”, 48 + vbOKOnly,”程序示例”

Text1.SetFocus

ElseIf IsNumeric(Text1.Text)And Val( Text1.Text) > 0 Then

X = Val(Text1.Text)

Label2.Caption = “Log(X) = ”

Text2.Text = Str(Log(X))

Else

MsgBox”输入数据错误!”, 48 + vbOKOnly,”程序示例”

Text1.Text = “”

Text1.SetFocus

End If

End Sub

Private Sub Cmd3_Click( ) ‘求Sqr (X)

If Text1.Text = “” Then

MsgBox”请输入X的值!”, 16 + vbOKOnly,”程序示例”

Text1.SetFocus

ElseIf IsNumeric(Text1.Text)And Val( Text1.Text) > 0 Then

X = Val(Text1.Text)

Label2.Caption = “Sqr(X) = ”

Text2.Text = Str(Sqr(X))

Else

MsgBox”输入数据错误!”, 48 + vbOKOnly,”程序示例”

Text1.Text = “”

Text1.SetFocus

End If

End Sub

Private Sub Cmd4_Click( ) ‘求Sgn(X)

If Text1.Text = “” Then

MsgBox”请输入X的值!”, 48 + vbOKOnly,”程序示例”

Text1.SetFocus

ElseIf IsNumeric(Text1.Text)And Val( Text1.Text) > 0 Then

X = Val(Text1.Text)

Label2.Caption = “Sgn(X) = ”

Text2.Text = Str(Sgn(X))

Else

MsgBox”输入数据错误!”, 48 + vbOKOnly,”程序示例”

Text1.Text = “”

Text1.SetFocus

End If

End Sub

Private Sub Cmd5_Click( )

Text1.Text = “”

Text2.Text = “”

Label2.Caption = “”

Text1.SetFocus

End Sub

Private Sub Cmd6_Click( )

End

End Sub

[ 例题5-8] 编写一个按月收入额计算个人收入调节税的应用程序。

计税公式如下:

Tax =

式子中,income 为纳税人的月收入。

界面设计与思路:输入、输出文本框各一个,选择框一个,按钮三个。

设计代码如下:

Option Explicit

Private Sub Command1_Click()

Dim Tax As Single, income As Single

income = Val(Text1.Text)

If Check1.Value = 1 Or income <= 1600 Then

Tax = 0

ElseIf income <= 2100 Then

Tax = (income - 1600) * 0.05

ElseIf income <= 3600 Then

Tax = (income - 1600) * 0.1 - 25

ElseIf income <= 6600 Then

Tax = (income - 1600) * 0.15 - 125

ElseIf income <= 21600 Then

Tax = (income - 1600) * 0.2 - 375

ElseIf income <= 41600 Then

Tax = (income - 1600) * 0.25 - 1375

ElseIf income <= 61600 Then

Tax = (income - 1600) * 0.3 - 3375

ElseIf income <= 81600 Then

Tax = (income - 1600) * 0.35 - 6375

ElseIf income > 101600 Then

Tax = (income - 1600) * 0.45 - 15375

End If

Text2.Text = Tax

End Sub

Private Sub Command2_Click()

Text1.Text = ""

Text2.Text = ""

Text1.SetFocus

End Sub

Private Sub Command3_Click()

Unload Me

End Sub

[ 例题5-9] 编写程序,找出所有三位数水仙花数。所谓水仙花数,是指各位数字的立方和等于该数本身的数。例如:153 = 1+3+5,所以153是一个水仙花数。

改错:Private Sub Command1_Click()

Dim i As integer, a As Integer, b As Integer, c As Integer, e As Long

For i = 100To 999 ‘取三位数

a = Int(Val(i/100))

b = Int(Val(i-a*100)/10)

c = i-a-b

e =a^3+b^3+c^3

If e = i then

Text1.Text = CStr(e)

Next i

Text1.Text = CStr(e)

End Sub

Private Sub Command2_Click()

End

End Sub

方法一:(三位数依次循环)

Private Sub Command1_Click()

Dim i As Long, a As Long, b As Long, c As Long, e As Long, f As String

For i = 100 To 999

a = i \ 100

b = (i - a * 100) \ 10

c = i - a * 100 - b * 10

e = a ^ 3 + b ^ 3 + c ^ 3

If i = e Then

f = I &”=”&”^3+” &b&”^3+”&c&”3”

List1.AddItem f

End If

Next i

End Sub

方法二:(三位数每位循环一次)

Option Explicit

Private Sub Command1_Click()

Dim i As Integer, a As Integer, b As Integer, c As Integer, e As Integer, f As String

For a = 1 To 9

For b = 0 To 9

For c = 0 To 9

e = a ^ 3 + b ^ 3 + c ^ 3

i = 100 * a + 10 * b + c

If i = e Then

f = I &”=”&”^3+” &b&”^3+”&c&”3”

List1.AddItem f

End If

Next c

Next b

Next a

End Sub

[ 例题5-10] 编写程序,利用牛顿迭代法求方程xe -1=0在x=0.5附近的一个根,要精确到10。

算法说明:牛顿迭代法是求一元超越方程的常用算法,设要求解的方程为f(x)=0,并已知一个不够精确的初始末根x,则有x= x-f(x)/f ’ (x) n=0,1,2,3,…

上式称为牛顿迭代公式。利用该式,可一次求出x、x、x等,当时的x即为要求的根。

Option Explicit

Private Sub Command1_Click( )

Dim x as Single, x1 as Single, Eps as Single

x = InputBox(“输入初始值x:”,”牛顿迭代法”)

Eps = InputBox (“输入允许误差Eps:”,”牛顿迭代法”)

Do

x1 = x

x = x1-(x1*Exp(x1)-1)/(Exp(x1)*(x1 +1))

Loop Until Abs(x-1) < = Eps

Text1.Text = Str(x)

End Sub

Private Sub Command2_Click()

End

End Sub

[ 例题5-7] 将一个二进制的原码转化成补码。

Mid函数除可提取字符串的指定位置的字符串之外,还可像变量一样用在赋值语句中其功能是用指定的字符串替换字符串中指定位置的内容。

本题程序如下:

Option Explicit

Private Sub command1_Click( )

Dim source as string, I as Integer

Dim a as String*1

Source = Text1.Text

If Mid(Source,1,1) <> “1” Then

Text2.Text = Source

Else

For i = Len(Source) to 2 Step -1

If Mid(Source,I,1) = “1”Then

Mid(Source,I,1)= ”0”

Else

Mid(Source,I,1)= ”1”

End If

Next i

Text2.Text = Source

a = “1”

For i = Len(Source) to 2 Step -1

If Mid(Source,I,1) = “1” And a =”1”Then

Mid(Source,I,1)= ”0”

D = “1”

ElseIf Mid(Source,I,1)= ”0” And a = “1” Then

Mid(Source,I,1)= ”1”

D = “0”

End If

Next i

Text3.Text = Source

End If

End Sub

Private Sub Command2_Click()

Text1.Text = ""

Text2.Text = ""

Text3.Text = ""

Text1.SetFocus

End Sub

Private Sub Command3_Click()

Unload Me

End Sub

习题解答:

1~11题均为本人所做,程序经过个人检验,现水平有限,如有漏洞,批评指正。

顺序结构选择结构和循环结构的程序设计典型例题分析与解答

顺序结构、选择结构和循环结构的程序设计典型例题分析与解答 1 在三种选择结构中,能用2个条件,控制从3个操作中选择一个操作执行的选择结构是______选择结构 【分析】能用1个条件,控制某个操作做或不做的选择结构是单分支结构;能用1个条件,控制从2个操作中选择一个操作执行的选择结构是双分支结构;能用n(n>l)个条件,控制从n+ l个操作中选择一个操作执行的选择结构是多分支结构。【答案】多分支 2 在三种循环结构中,先执行循环操作内容(即循环体),后判断控制循环条件的循环结构是______循环结构。 【分析】当型循环结构是先判断控制循环的条件,条件成立,执行循环体;条件不成立,则退出循环体。次数型循环结构也是先判断是否达到循环次数,没有达到循环次数,执行循环体;达到循环次数的,退出循环。只有直到型循环结构才是先执行循环体,然后再判断控制循环的条件,如果条件成立,进行循环;条件不成立,退出循环。 【答案】直到型 3 使用“getchar( )”函数时,程序的开头必须写一条包含命令为____________。 【分析】凡是使用系统函数的程序,都要在程序的开头写一条包含命令,包含命令中的“头函数.h”是一个文件,其中有关于该系统函数的定义。系统函数“getchar( )”是在名为“stdio.h(标准输入输出函数)”的头函数文件中定义的。【答案】#include"stdio.h"或#include<stdio.h> 4 执行输入语句“scanf("x=%c,y=%d",&x,&y);”,要使字符型变量X的值为'A'、整型变量y的值为12,则从键盘上正确的输入是( ) ①'A'/②A/③x=A/ ④x=A,y=12/ 12/ 12/ y=12/ 说明:备选答案中的"/"表示回车换行键 【分析】输入语句的格式控制符串中的“x=”、“,”、“y=”都是非格式控制符, 在输入时必须原样位置输人,所以只有备选答案④才符合这个要求。【答案】④ 5 设有下列程序段,则执行该程序段后的输出是( ) int i=012; float f=1.234E-2; printf("i=%-5df=%5.3f",i,f); ... ①i=__012f=1.234 ②i=10___f=0.012 ③10___O.012 ④___100.012 注:答案中的_代表一个空格。 【分析】输出语句的格式控制符串中的“i=”、“f=”都是非格式控制符,在输出时必须原样,原位置输出,所以只有备选答案①和②才符合这个要求;格式控制符“%-5d”的格式控制是数据左对齐、宽度为5的整型数据,备选答案①中的数据是右对齐的;此外,该答案中的实数“1.234E-2”应该代表“0.01234”,而不是“1.234”。只有备选答案②符合题意。【答案】② 6 在Turbo C的主屏幕中,将当前编辑的源程序以原名存盘,可以选用___________菜单项,也可以直热键________。 【分析】如果选用“File/Save”菜单项,或者使用热键(f12),当前编辑的源程序将以原来的文件名存盘;如果选用“File /Write to”,当前编辑的源程序将以新的文件名存盘。 【答案】File/Save F2 7 下列各种选择结构的问题中,最适合用if-else语句来解决的是( ) ①控制单个操作做或不做的问题 ②控制两个操作中选取一个操作执行的问题 ③控制三个操作中选取一个操作执行的问题 ④控制10个操作中选取一个操作执行的问题 【分析】if-else语句是专门解决“双分支结构”的,而“双分支结构”的问题就是用单个条件控制从两个操作中选取一个操作来执行的问题。 【答案】② 8 下列程序是输入一个小写字母,转换成对应大写字母的后一个字母输出。例如:'a'将转换成’B’、…、‘y’将转换成’Z’,其中的’Z’将转换成’A’。请填写程序中所缺少的语句。 main() {char ch ; scanf(”%c”,&ch〕; ch=ch- 32+1; ___________________; printf("%c\n",ch); } 【分析】分析程序库中的“ch=ch- 32+ 1;”语句,可知是将字符型变量 ch中的小写字母转换成对应的大写字母(- 32)的后一个字母(+ l)。如果ch中的字母是' a'、' b'、··,'y',转换结果都不会出错,但是,如果 ch中的字母是'Z',则-32后是大写字母'Z',再+l后将不是大写字母了。为了使其转换成'A',需要用一个单分支结构来实现:如果ch的值等于'Z'+ l,则硬性将 ch的值改成'A'。完成这个任务的语句是一条单分支语句,正是所缺少的语句。 【答案】 if (ch=='Z'+l) h='A'; 9不能正确计算下列分段函数的程序段是_________ |-1 x<0 y=|0 x=0 x>0 ① switch(x< 0)② if(x> 0) {case1:y=-1;break; y=1; case 0:switch(x==0)else {casel:y=0;break;if(x==0) case 0: y= l;y=0 } else } &ny=-l ③ y= l;④ y= l; if(x==0)if(x<0) y=0; y =-l; else else y=- l; if(x== 0) y=0; 【分析】先来分析备选答案①:表达式“x<0”的值只有两种可能性,成立值为1、不成立值为on如果“x<0”的值为 1(即 x< 0),则执行“easel:”后的语句“y=-l”后,退出 switch语句,符合分段函数要求。如果“x<0”的值为0(即x>=0),则执行“case 0:”后的switch语句。该switch语句的表达式是“x==0”,结果也有两种:成立为1、不成立为0.如果“x==0”的值为1(即x=0),则执行“case l:”后的语句“y=0”后,退出 switch语句,符合分段函数要求。如果“x==0”的值为0(即x>0),则执行“case 0:”后的语句“y=1”,也符合分段函数要求。再分析备选答案②:这是标准的用嵌套双分支结构来实现三分支的分段函数,结果显然是能求解分段函数的。分析备选答案③:双分支语句的条件是“x==0”,条件成立时,y值为0,符合分段函数的要求,条件不成立时(包含x>0和x<0两种情况),结果y值为-l,显然不符合分段函数的要求,所以本题要选该答案。至于备选答案④,是能正确计算分段函数的,首先置y为1;接着用双分支结构处理“x<0”和“x>=0”的两种情况:前者使得y值为一l;后者再执行一个单分支结构,如果“x==0”则使y值为0,否则不改变y值,保持y的原值1,符合分段函数的要求。 【答案】③ 10 三种循环语句都能解决循环次数已经确定的次数型循环,其中__________循环语句最适合。 【分析】当“for(表达式 1;表达式 2;表达式 3)语句;”中的表达式1为:整型变量 k=l;表达式 2为:整型变量 k<= n;表达式 3为:整型变量 k++;则这个 for循环就是次数为n次的标准次数型循环结构。 【答案】for 11执行下列程序段后的输出是() x=l; while(x<=3) x++,y=x+++x; printf("%d,%d",x,y); ① 6,10 ②5,8 ③4,6 ④3,4 【分析】我们可以使用逐步记录运行结果的方法来获得输出结果,记录如下: x=1; 进入循环,条件满足执行循环体:计算x+十得x为2,计算y=x+++x,得y为4、x为3; 继续循环,条件满足执行循环体:计算x+十得x为4,计算y=x+++x,得y为8、x为5; 继续循环,条件不满足退出循环; 输出x和y的值为5,8。 【答案】② 12 执行下列程序段,其中的do-while循环一共执行_次。 static int x; do x+=x*x; while (x); 【分析】对静态型变量,不赋初值也有值,对整型变量,其值为 0。执行循环语句 do-while 的循环体,x+=x* x是x=x+(x*

分支与循环程序设计实验报告汇总

分支与循环程序设计实 验报告汇总 Company number:【0089WT-8898YT-W8CCB-BUUT-202108】

实验名称分支与循环程序设计实验 指导教师罗志祥 专业班级光电1406 姓名段昳晖学号 U2014***** 联系电话 137******** 一、任务要求 1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。 2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。 二、设计思路 1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。 将外部单元1000H中的X,通过分支判断,分别执行不同的语句,三条语句分别为标记为L1、L2、L3,先比较X与64的大小关系,再判断X与10的大小关系,主要利用比较转移指令CJNE,以及执行CJNE指令后的进位位CY,进一步比较大小,分别跳转至对应语句。将结果存于外部单元的1001H以及1002H。 2.利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD码的形式)。为低电平时开始计时,为高电平时停止计时。设计1s延时子程序(延时误差小于10us,晶振频率12MHz)。

主程序设计三层循环,分别对应时、分、秒,最内层安放一秒延时程序。利用R0、R1、R2计数,R3保存分钟数、R4保存小时数,最内层循环60次,中循环循环1次,中循环60秒,外循环循环1次,外循环循环24次,清零。其中对端口显示的秒数、分钟数、时间数,进行二进制修正。 利用循环来设计延时程序,合理计算语句长度,以及循环次数。 程序运行时修正的值,可以实现暂停计数和继续的功能。 提高部分(选做): 1)实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用状态选择加、减计数方式。 2)利用P3口低四位状态控制开始和停止计数,控制方式自定。 初始化P1、P2,,计数循环中插入一秒延时程序。R1存千百位、R2存个十位,=0时,进行加1计数,取出R2中的数存于A,对A 加1,同时进行十进制修正,存于P2,达到99,则进位对千百位进行加1。=1时,进行减一操作,取出R1中的数存于A,对A减1,同时进行十进制修正,存于P1,达到0,则对P2,对R2进行减一。 计数循环前判断的值,当=1时,开始计数,=0时,原地循环,停止计数,直到 =1,可以实现随时停止与开始。 三、资源分配 1. 设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部RAM单元,请按要求编写完整程序。 X存于片外1000H Y存于片外1001H、1002H 其中,求平方时,低位存于1001H,,高位存于1002H 除二时,商存于1001H,,余数存于1002H

C语言练习2(选择和循环结构)

C语言(分支和循环结构) 一、选择题 1.以下程序输出结果是( ) main() { int m=5; if(m++>5) printf("%d\n",m); else printf("%d\n",m--);} A)7 B)6 C)5 D)4 2以下程序的输出结果为( ) # include main ( ) { int i=0, j=0, a=6; if ((++i>0)&&(++j>0)) a++; printf ("i=%d, j=%d, a=%d\n", i,j,a);} A) i=0, j=0, a=6 B) i=1, j=1, a=7 C) i=1, j=0, a=7 D) i=0, j=1, a=7 3有如下程序 main() { int a=2,b=-1,c=2; if(a

4若i为int型,且有程序如下,则输出结果是( ) i=111; if(i%3==0) printf("####"); printf("****"); A) #### B) **** C) ####**** D) 无输出结果 5若运行时x=12,则运行结果为( ) {int x, y; scanf("%d", &x); y=x>12 ? x+10:x-12; printf("%d\n", y);} A) 0 B) 22 C) 12 D) 10 6以下程序的输出结果是( ) main() { int i=0, j=0, k=6; if ((++i>0)||(++j>0)) k++; printf("%d, %d, %d\n", i, j, k); } A) 0, 0, 6 B) 1, 0, 7 C) 1, 1, 7 D) 0, 1, 7 7若变量都已正确说明,则以下程序段输出为( ) int a=1,b=2,c=3; if(a>b) a=b; b=c; c=a; printf("a=%d b=%d c=%d\n",a,b,c);

【测试】分支循环测试作业(VB第五章测试题)

我的试卷 测试得分: 88.0 分 1. 单选题:(4.0分) 有如下程序: Private Sub Command1_Click() x = InputBox("input value") Select Case x Case Is > 0 y = x + 1 Case Is = 0 y = x + 2 Case Else y = x + 3 End Select Print x; y End Sub 假设运行时从键盘上输入-5,输出结果是_______。 A. -5 -2 B. -5 -4 C. -5 -3 D. -5 -5 解答:A 参考答案: A 2. 单选题:(4.0分) 下列程序段的执行结果是_______。 X = 2 Y = 1 If X * Y < 1 Then Y = Y - 1 Else Y = -1 Print Y - X > 0 A. True

B. False C. -1 D. 1 解答:B 参考答案: B 3. 单选题:(2.0分) 关于语句If x=1 Then y=1,下列说法正确的是_______。 A. x=1和y=1均为赋值语句 B. x=1和y=1均为关系表达式 C. x=1为关系表达式,y=1为赋值语句 D. x=1为赋值语句,y=1为关系表达式 解答:C 参考答案: C 4. 单选题:(2.0分) Select Case 语句结构中,测试项可以有三种形式,以下使用正确的是_______。 A. Case 20>Is B. Case x<=8 ,10 to 25 C. Case Is>9 And Is<25 D. Case Is>x 解答:D 参考答案: D 5. 单选题:(4.0分)

分支与循环程序设计

实验名称分支及循环程序设计成绩 指导教师****** 专业班级****** 姓名白*** 学号******* 联系电话******** 一、任务要求 1.熟练掌握Keil环境下汇编语言程序的调试方法,加深对汇编 语言指令、机器码、寻址方式等基本内容的理解,掌握分支程 序和简单程序的设计及调试方法,了解并行IO口的使用。 2.设有8bits符号数X存于外部RAM单元,按以下方式计算后 的结果Y也存于外部RAM单元,请按要求编写完整程序。 3.利用51系列单片机设计一个24小时制电子时钟,电子时钟 的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩 BCD码的形式)。P3.0为低电平时开始计时,为高电平时停

止计时。设计1s延时子程序(延时误差小于10us,晶振频 率12MHz)。 4.1)实现4位十进制加、减1计数,千位、百位由P1口输出; 十位、个位由P2口输出。利用P3.7状态选择加、减计数方 式。 2)利用P3口低四位状态控制开始和停止计数,控制方式自 定。 二、设计思路 1.先在外部RAM取数,然后判断该符号数是否为负数,若为负 数,则取相反数并存数;若为正数,则接着判断该数是否大于 等于64,若满足,则求平方并存数,先存低位,后存高位; 若小于64,则接着判断该数是否大于10,若满足,则求该数 的一半并存数;若小于等于10,则取相反数并存数。 2.第一步先编可以延时1S的子程序DELAY;接着判断P 3.O 是否满足开始计数条件,若不满足,则重复判断;若满足,则 对时分秒分别赋值,调用延时子程序,判断是否满足计时条件,若不满足,则重复判断直至满足;若满足,则秒钟自加一,循 环,判断秒钟循环满60次后出循环,对分钟自加一,然后继 续循环,最后判断分钟循环满60次后出循环,对时钟自加一,然后判断时钟循环满24则回到初值,时分秒重新赋值并重新 开始循环。

顺序结构、选择结构和循环结构的程序设计

顺序结构、选择结构和循环结构的程序设计 请写出switch语句的一般格式及注意事项。 一般格式: Switch(表达式) {case常量表达式1:语句组1;break; Case常量表达式2:语句组2;break; …… Case常量表达式n:语句组n;break; Default:语句组n+1;}1switch中表达式可以是任意类型,常用的是字符或整型。2每个常量表达式的值不能相同。3语句组可以为任意语句。4break可以省略,然后执行完本组语句后紧接着执行其后的i+1组语句。5多个case可以用一组执行语句。6break的作用是跳出switch,执行switch下面的语句。 试说明while语句和do-while语句的异同:二者相同点在于都可以进行次数确定的循环体的次数。不同点在于do-while现执行循环中的语句,然后再判断条件是否为真,若为真则继续循环;若为假则终止循环。因此,do-while循环至少要执行一次循环语句。而while则是先判断条件后执行循环体简述for语句的执行过程及注意事项: 计算机表达式1 表达式2非0? 执行语句s 计算机表达式3 循环结束,执行下面的语句 注意事项:for语句中的3个表达式可以省略但后面的分号不能省略。 试说明continue语句和break语句的作用及区别:break的功能是跳出本层循环(对多层循环而言),接着执行下面的语句。continue语句的作用是执行continue时,循环体中continue下面的语句都不执行,重新进行循环判断以决定是否继续进行下次循环。Break和continue的区别在于:continue C 有一段程序为:while(表达式) 语句1;语句2; …… do-while语句中while 在C C C C C C语言中,语句x=!a==b 3个关于C语言的结论:可以用while语句实现的循环一定可以用for语句实现;可以用for语句实现的循环一定可以用while语句实现;可以用do-while C语言程序中,continue C语言中,if和switch C语言中,语句while C语言中,关于scanf C语言中,与语句while(!E C语言程序中,for循环语句中的表达式2为一非零常数且循环体内无break语句及goto 设i是int scanf(“i=%d,f=%f”,&i,&f);为了把100和765.12分别赋给i和 f

第2章 顺序结构、选择结构和循环结构的程序设计 习题答案

第二章顺序结构、选择结构和循环结构的程序设计 一、简答 1. 参考书上23页 2. while先判断,后执行,do while先执行,后判断,循环体至少执行一次 3. 参考书上29页 4. continue,结束本次循环 break,结束循环 区别在于,continue只结束本次循环重新进行下次循环,而break结束整个循环 二、填空题 1. 顺序结构,选择结构,循环结构 2. if else 和switch 3. 语句1 ,语句2 4. 零 5. break ,continue 6. 7 ,0 7. ? : ,双目 三、单选 1-5 ABDCC 6-10 DBACA 11-15 CBCDA 16-20 ACBAD 21-25 ADCBB 26-29 BCCA 四、程序分析题 1. end 1end 2. num%10 max = t 3. j%3 4. 99 五、编程题 1. #include int main(){ char str[100] ; gets(str) ; int n1 , n2 , n3 , n4 , i ; n1 = n2 = n3 = n4 = 0 ; for(i = 0 ; str[i] != '\0' ; ++i) { if(str[i] >= 'A' && str[i] <= 'Z') ++n1 ; else if(str[i] >= 'a' && str[i] <= 'z') ++n2 ; else if(str[i] >= '0' && str[i] <= '9') ++n3 ; else

} printf("大写字母:%d\n" , n1) ; printf("小写字母:%d\n" , n2) ; printf("数字字符:%d\n" , n3 ) ; printf("其他字符:%d\n" , n4) ; return 0; } 2. #include #include int main(){ int array[4] , min , max , i ; for(i = 0 ; i < 4 ; ++i) scanf("%d" , &array[i]) ; min = max = array[0] ; for(i = 1 ; i < 4 ; ++i) { if(array[i] < min) min = array[i] ; else if(array[i] > max) max = array[i] ; } printf("min = %d , max = %d\n" , min , max) ; return 0; } 3. #include int main(){ float money , lixi ; int year ; scanf("%f %d" , &money , &year) ; switch(year) { case 1 : lixi = money * 0.63 / 100 ;

C语言习题:顺序、选择、循环

顺序结构程序设计 2.3.1 要点导读 () 与scanf()语句。 printf() 与scanf()语句是最通用的输入输出函数,它们可以在程序设计者的控制下以各种格式分别实现数据的输出和输入操作。它们位于库文件中。 2.字符数据的输入输出。 最简单的字符输入输出函数是getchar()和putchar()。两者分别从键盘读一个字符或向显示屏写一个字符。 2.3.2 经典例题分析 1.下列程序运行后输出的结果是。 #include <> void main() 、 { int a=0,b=0; a=10; b=20; printf(“a+b=%d”,a+b); } 分析:printf( )是输出函数,它的括号内由两部分组成: 1)控制字符串,是用双引号括起来的字符串,它包括两种信息: (1) 格式说明。由”%”和格式字符组成,如:%d、%f、%c等。它的作用是将输出 的数据转换成指定的格式输出。 (2) 普通字符。需要原样输出的字符。 - 2)”输出表列”是需要输出的一些数据,可以是表达式。 题目中a的值是10,b的值是20,在 printf(“a+b=%d”,a+b); 格式说明输出表列 中,”a+b= “是普通字符,需原样输出。输出表列是一个表达式,它的结果以整型输出。 答案:a+b=30。 2.下列程序运行后输出的结果是。

#include <> void main() { int a=732; ) printf(“%d\n”,a); printf(“%2d\n”,a); printf(“%10d\n”,a); printf(“%-10d\n”,a); } 分析:d格式符,用来输出十进制整数。其中%d,按整型数据的实际长度输出。%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 printf(“%d\n”,a);把a的值按原样输出:732。printf(“%2d\n”,a);结果占2列,但732占3列大于2列,所以按实际位数输出:732。printf(%10d\n”,a);结果占10列,但732占3列小于10列,所以左端补7个空格。printf(“%-10d\n”,a); 结果占10列,“-”表示把数值放到左端,732占3列小于10列,所以右端补7个空格。 答案:732 732 □□□□□□□732 /*□表示空格*/ , 732□□□□□□□ 3.已知char a=‘\103’;则语句printf(“%3d”,a);执行后的输出结果为(□表示空格)。 A)□67B)’c’C)67□D)103 分析:’\103’是一个转义字符,表示一个八进制数所代表的字符,转换为十进制为67。printf(“%3d”,a);把’\103’转换为十进制数输出,结果占3列。但67占2列,小于要求的3列,所以左补空格,即□67。 答案:C。 4.下列程序运行后结果是。 #include <> #define a void main() { printf(“%f\n”,a); @ printf(“%e\n”,a); printf(“%4.2f\n”,a); printf(“%3.1f\n”,a); printf(“%10.3f\n”,a); printf(“%-10.3f\n”,a); } 分析:f格式符,用来输出实数,以小数形式输出,小数点后输出6位。所以printf(“%f\n”,a);输出结果为。 %是指,要输出的数占m列,同时小数点保留n位(四舍五入),如果输出的数大于m,

顺序、选择、循环三种基本结构程序设计.

昆明理工大学信息工程与自动化学院学生实验报告 (2012 —2013 学年第一学期) 课程名称:结构化程序设计与C语言开课实验室:系机房444 2012 年10月21日 一、实验的目的 1、学习在VC++环境下编辑调试C语言程序的方法。 2、掌握在C语言中的各种数据类型,以及如何定义整型、实型、字符型的变量,并进 行赋值的方法。 3、掌握顺序程序的思路,特别是赋值语句的使用方法。 4、掌握各种类型数据的输入输出方法的正确应用,熟悉各种格式控制符的作用。 5、学会在选择结构中正确应用关系表达式及逻辑表达式。 6、熟练掌握if语句和switch语句的使用。 7、学会选择结构问题算法的编制与调试应用。 8、熟练掌握while语句、do-while语句和for语句实现循环的方法。 9、学会循环问题的编制与调试、运行。 二、实验内容与要求 本实验涵盖顺序、选择、循环三部分程序设计的应用,要求每部分完成两个问题的源代码的编辑、编译、连接与运行,最终产生相关的运行结果,按规定要求提交相应的实验报告。具体要求完成的问题如下:(注意:在模板中给出了题的页数与题号,请写正式报告时将书上的题目内容代替页数与题号) (1)P82/2 (2)P84/6 (3)P112/6 (4)P113/9 (5)P140/5 (6)P141/16 三、算法设计思想或程序流程图 (1)设:五年期,三年期,二年期,一年期,活期存款分别为:r5,r2,r3,r0; 第一种,第二种,第三种,第四种,第五种五年期存款的本息和分别为

p1,p2,p3,p4,p5。 则有: p1=p*((1+r5)*5); 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); 存活期存款。活期利息每一季度结算一次 再将所得数据一一输出即可。 (2) 先分别把c1,c2,c3,c4,c5分别赋初值为c,h,I,n,a. 想要让它们的字母分别增加四位。只需将它们的ASCII码增加4个数就可以。便有 c1=c1+4; c2=c2+4 c3=c3+4; c4=c4+4; c5=c5+4;再将所得值以字符型输出便可 (3)输入x,用if语句判断X的值的范围。X<1将x的值赋给y并输出。 除此情况之外(x>1)再进行分类。若x<10则y=2*x-1。除此情况之外,y=3*x-11. (4)先判断它的位数。如果这个数大于9999则输出5;排除这种情况,大于999则输出4…以此类推。 分别输出每一位数字:几位数字便除以此位数的最小值。如9999便除以1000,由于都是整型,便得到9。依次除下去。得到的各位整数在赋给各个变量,反序输出。 (5)用tn=tn+a语句代表赋值后的tn为i个 a组成数的值 用 sn=sn+tn语句代表赋值后的sn为多项式前i项之和 用while语句实现在I #include int main() {float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); p2=p*(1+2*r2)*(1+3*r3); p3=p*(1+3*r3)*(1+2*r2); p4=p*pow(1+r1,5); p5=p*pow(1+r0/4,4*5); printf("p1=%f\n",p1); printf("p2=%f\n",p2); printf("p3=%f\n",p3); printf("p4=%f\n",p4);

C语言习题顺序选择循环

2.3顺序结构程序设计 231要点导读 1. printf()与scanf()语句。 printf()与scanf()语句是最通用的输入输出函数,它们可以在程序设计者的控制下以各种格式分别实现数据的输出和输入操作。它们位于stdio.h库文件中。 2?字符数据的输入输出。 最简单的字符输入输出函数是getchar()和putchar()。两者分别从键盘读一个字符或向显 示屏写一个字符。 2.3.2经典例题分析 1?下列程序运行后输出的结果是 _____________ 。 #in clude void mai n() { int a=0,b=0; a=10; b=20; printf( “+b=%d ”,a+b); } 分析:printf()是输出函数,它的括号内由两部分组成: 1) 控制字符串,是用双引号括起来的字符串,它包括两种信息: (1) 格式说明。由”%”和格式字符组成,如:%d、%f、%c等。它的作用是将输出 的数据转换成指定的格式输出。 (2) 普通字符。需要原样输出的字符。 2) ”输出表列”是需要输出的一些数据,可以是表达式。 题目中a的值是10,b的值是20,在 printf( a+b=%d”,a+b); I I 格式说明输岀表列 中,”a+b=是普通字符,需原样输出。输出表列是一个表达式,它的结果以整型输出。 答案:a+b=30。 2. ___________________________________ 下列程序运行后输出的结果是。 #in clude

void mai n() int a=732; printf( %d\n”,a); printf( %2d\n ”,a); printf( %10d\n ”,a); printf( %-10d\n ”,a); } 分析:d格式符,用来输出十进制整数。其中%d ,按整型数据的实际长度输出。%md, m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按 实际位数输出。 printf( %d\n”,a);把a 的值按原样输出:732。printf( %2d\n”,a);结果占2 列,但732 占3 列大于2列,所以按实际位数输出:732。printf(%10d\n ”,a);结果占10列,但732占3列小 于10列,所以左端补7个空格。printf( %-10d\n”,a);结果占10列,表示把数值放到左端,732占3 列小于10列,所以右端补7个空格。 答案:732 732 □ □□□□□□732* E表示空格*/ 732 □□□□□□□ 3?已知char a=\103则语句printf( “ %3d执行后的输出结果为( □表示空格) _______________ 。 A) □ 67 B)'C)67 □D)103 分析:'03是一个转义字符,表示一个八进制数所代表的字符,转换为十进制为67。printf( %3d”,a);把'03转换为十进制数输出,结果占3列。但67占2列,小于要求的3 列, 所以左补空格,即口67 答案:C。 4?下列程序运行后结果是 ____________。 #in elude #define a 3345.67 void mai n() { printf( %f\n ”,a); printf( %e\n",a); printf( %4.2f\n ”,a); printf( %3.1f\n ”,a); printf( %10.3f\n ”,a); printf( %-10.3f\n ”,a); } 分析:f格式符,用来输出实数,以小数形式输出,小数点后输出6位。所以printf( %f\n ”,a); 输出结果为3345.670000。 %m.nf是指,要输出的数占m列,同时小数点保留n位(四舍五入),如果输出的数大于m,则原样输出,同时小数点保留n位(四舍五入)。如果小于m,则左补空格,同时小 数点保留n位(四舍五入)。printf( %4.2f\n ”,a);输出结果为3345.67。 printf( %3.1f\n ”,a);输出结果为3345.7。

江苏省二级VB 第五章 选择分支与循环嵌套

第五章选择分支与循环嵌套 5.1 分支结构与分支结构语句(2个例子) 5.2 循环结构与循环结构语句(6个例子) 5.3 程序实例(10个例子) 习题练习(11个例子) 5.1 分支结构与分支结构语句 5.1.1 IF-Then-Else-End If 结构语句 结构一般如下: If e Then [ A组语句 ] Else [ B组语句 ] End If e 为判决条件,可以是逻辑变量,关系表达式或逻辑表达式。 当A组语句仅有一个时,可简化为:If e Then < 语句 > 例如,程序代码:If Text1.Text = “” Then Text1.SetFocus End If 可以简化为:‘当文本框中文本为空时,则使得文本框成为焦点。 If Text1.Text = “” Then Text1.Setfocus (省去End If) 较为复杂的结构如下: If e1 Then ‘如果e1为True,则执行A1组语句 A1 组语句 ElseIf e2 Then ‘如果e2为True,则执行A1组语句 A2 组语句 … End If [ 例题5-1 ] 已知三角形的三边长度,设计求此三角形面积的程序。 问题分析:a + b > c & a + c > b & b + c > a , S = sqr(p(p-a)(p-b)(p-c)) , p= (a+b+c)/2 算法设计:开始——输入a、b、c——判断a + b > c & a + c > b & b + c > a,通过则求p,求S,否则提示:“输出数据错误信息”——结束。 设计程序代码如下: Private Sub Command1?_Click( ) Dim a As single, b As single, c As single a = Val(Text1.text) ‘Text 属性为字符串型,转为数值型 b = Val(Text2.text)

分支与循环程序设计实验报告

实验名称 分支与循环程序设计实验 指导教师 罗志祥 专业班级 光电1406 姓名 段昳晖 学号 U2014***** 联系电话 137******** 一、任务要求 1. 设有8bits 符号数X 存于外部RAM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写完整程序。 2 64/2 106410 X X Y X X X X ?≥? =<

2. 利用51系列单片机设计一个24小时制电子时钟,电子时钟的时、分、秒数值分别通过P0、P1、P2端口输出(以压缩BCD 码的形式)。P 3.0为低电平时开始计时,为高电平时停止计时。设计1s 延时子程序(延时误差小于10us ,晶振频率12MHz )。 主程序设计三层循环,分别对应时、分、秒,最内层安放一秒延时程序。利用R0、R1、R2计数,R3保存分钟数、R4保存小时数,最内层循环60次,中循环循环1次,中循环60秒,外循环循环1次,外循环循环24次,清零。其中对端口显示的秒数、分钟数、时间数,进行二进制修正。 利用循环来设计延时程序,合理计算语句长度,以及循环次数。 程序运行时修正P3.0的值,可以实现暂停计数和继续的功能。 提高部分(选做): 1)实现4位十进制加、减1计数,千位、百位由P1口输出;十位、个位由P2口输出。利用P3.7状态选择加、减计数方式。 2)利用P3口低四位状态控制开始和停止计数,控制方式自定。 初始化P1、P2,,计数循环中插入一秒延时程序。R1存千百位、R2存个十位,P3.7=0时,进行加1计数,取出R2中的数存于A ,对A 加1,同时进行十进制修正,存于P2,达到99,则进位对千百位进行加1。P3.7=1时,进行减一操作,取出R1中的数存于A ,对A 减1,同时进行十进制修正,存于P1,达到0,则对P2,对R2进行减一。 计数循环前判断P3.0的值,当P3.0=1时,开始计数,P3.0=0时,原地循环,停止计数,直到P3.0=1,可以实现随时停止与开始。 三、资源分配 1. 设有8bits 符号数X 存于外部RAM 单元,按以下方式计算后的结果Y 也存于外部RAM 单元,请按要求编写完整程序。 264/2 106410 X X Y X X X X ?≥? =<

C语言习题:顺序、选择、循环

2.3顺序结构程序设计 2.3.1 要点导读 1.printf() 与scanf()语句。 printf() 与scanf()语句是最通用的输入输出函数,它们可以在程序设计者的控制下以各种格式分别实现数据的输出和输入操作。它们位于stdio.h库文件中。 2.字符数据的输入输出。 最简单的字符输入输出函数是getchar()和putchar()。两者分别从键盘读一个字符或向显示屏写一个字符。 2.3.2 经典例题分析 1.下列程序运行后输出的结果是。 #include void main() { int a=0,b=0; a=10; b=20; printf(“a+b=%d”,a+b); } 分析:printf( )是输出函数,它的括号内由两部分组成: 1)控制字符串,是用双引号括起来的字符串,它包括两种信息: (1) 格式说明。由”%”和格式字符组成,如:%d、%f、%c等。它的作用是将输出 的数据转换成指定的格式输出。 (2) 普通字符。需要原样输出的字符。 2)”输出表列”是需要输出的一些数据,可以是表达式。 题目中a的值是10,b的值是20,在 printf(“a+b=%d”,a+b); 格式说明输出表列 中,”a+b= “是普通字符,需原样输出。输出表列是一个表达式,它的结果以整型输出。 答案:a+b=30。 2.下列程序运行后输出的结果是。 #include void main()

{ int a=732; printf(“%d\n”,a); printf(“%2d\n”,a); printf(“%10d\n”,a); printf(“%-10d\n”,a); } 分析:d格式符,用来输出十进制整数。其中%d,按整型数据的实际长度输出。%md,m为指定的输出字段的宽度。如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。 printf(“%d\n”,a);把a的值按原样输出:732。printf(“%2d\n”,a);结果占2列,但732占3列大于2列,所以按实际位数输出:732。printf(%10d\n”,a);结果占10列,但732占3列小于10列,所以左端补7个空格。printf(“%-10d\n”,a); 结果占10列,“-”表示把数值放到左端,732占3列小于10列,所以右端补7个空格。 答案:732 732 □□□□□□□732 /*□表示空格*/ 732□□□□□□□ 3.已知char a=…\103?;则语句printf(“%3d”,a);执行后的输出结果为(□表示空格) A)□67B)?c?C)67□D)103 分析:?\103?是一个转义字符,表示一个八进制数所代表的字符,转换为十进制为67。printf(“%3d”,a);把?\103?转换为十进制数输出,结果占3列。但67占2列,小于要求的3列,所以左补空格,即□67。 答案:C。 4.下列程序运行后结果是。 #include #define a 3345.67 void main() { printf(“%f\n”,a); printf(“%e\n”,a); printf(“%4.2f\n”,a); printf(“%3.1f\n”,a); printf(“%10.3f\n”,a); printf(“%-10.3f\n”,a); } 分析:f格式符,用来输出实数,以小数形式输出,小数点后输出6位。所以printf(“%f\n”,a);输出结果为3345.670000。 %m.nf是指,要输出的数占m列,同时小数点保留n位(四舍五入),如果输出的数大于m,则原样输出,同时小数点保留n位(四舍五入)。如果小于m,则左补空格,同时小数点保留n位(四舍五入)。printf(“%4.2f\n”,a);输出结果为3345.67。 printf(“%3.1f\n”,a);输出结果为3345.7。 e格式符,以规范化指数的形式输出,所以printf(“%e\n”,a);3.345670e+03。 答案:3345.670000

相关主题