《VB第4章分支与循环结构课件》由会员分享,可在线阅读,更多相关《VB第4章分支与循环结构课件(48页珍藏版)》请在金锄头文库上搜索。
1、p 分支结构分支结构p 程序示例程序示例p 循环结构循环结构第四章第四章 VBVB的基本控制结构的基本控制结构p 程序控制结构:是语句排列和控制转移方向的描述,程序控制结构:是语句排列和控制转移方向的描述,决定了程序执行的顺序。决定了程序执行的顺序。p 三种基本控制结构:顺序、选择、循环三种基本控制结构:顺序、选择、循环p 顺序结构:最基本、最简单的结构,按语句出现的先顺序结构:最基本、最简单的结构,按语句出现的先后顺序依次执行。后顺序依次执行。4.1 4.1 顺序结构顺序结构 先对条件先对条件测试测试,根据测试的结果选择执行不同的分支,根据测试的结果选择执行不同的分支1.If1.If条件语句
2、条件语句2.Select Case 2.Select Case 结构结构4.2 4.2 选择结构选择结构ooIf If 语句的三种形式:If条件语句条件语句1. IfThen1. IfThen 结构结构结构结构 (单分支)(单分支)(单分支)(单分支)2. IfThenElse2. IfThenElse 结构(双分支)结构(双分支)结构(双分支)结构(双分支)3 3 3 3. IfThenElseIf. IfThenElseIf 结构(多分支)结构(多分支)结构(多分支)结构(多分支) 例:例: If If score = 60 Then Print 祝贺你考试通过!祝贺你考试通过! End
3、IfEnd If Print “继续努力!继续努力!” 等价于等价于等价于等价于: If If Score=60 Score=60 ThenThen Print Print “祝贺你考试通过!祝贺你考试通过!” Print Print “继续努力继续努力!” 1. IfThen1. IfThen 结构结构结构结构 (单分支)(单分支)(单分支)(单分支)格式格式:(1) If :(1) If 条件条件 Then Then (A (A组组语句语句) ) EndIfEndIf (2)(2) If If 条件条件 Then Then 语句语句执行规则:若执行规则:若条件成立条件成立条件成立条件成立,
4、 ,执行执行A A组语句组语句; ; 条件不成立条件不成立, ,跳过跳过A A组语句组语句. .条件条件A组语句组语句TF 例:例: If score = 60 Then Print score Print 祝贺你考试通过!祝贺你考试通过! End If Print “继续努力!继续努力!” 1.IfThen1.IfThen结构结构例例例例1 1:输入两个数,分别放在:输入两个数,分别放在:输入两个数,分别放在:输入两个数,分别放在x x和和和和y y变量中,比较它们大小,变量中,比较它们大小,变量中,比较它们大小,变量中,比较它们大小, 然后将大数放在然后将大数放在然后将大数放在然后将大数放
5、在x x中,小数放在中,小数放在中,小数放在中,小数放在y y中。中。中。中。xyx%=Text1.textY%=Text2.textIf x = 60 Then Print “祝贺你考试通过!祝贺你考试通过!” Else Print “考试未通过考试未通过.” End If Print 继续努力!继续努力!2. 2. IfThenElseIfThenElse结构(双分支)结构(双分支)格式:格式:IfIfIfIf 条件条件 ThenThen A A组语句组语句 ElseElse B B组语句组语句 END END END END IfIfIfIf 执行规则执行规则: :条件条件成立成立, ,
6、执行执行A A组语句组语句, , 条件条件不成立不成立, ,执行执行B B组语句组语句例例2:计算分段函数:计算分段函数: Y=x2+1 (x0) x3+3x (x=0)条件条件A组语句组语句TFB组语句组语句If条件语句条件语句例:例:(思考思考)输入二级考试成绩,要求显示对应三级制的输入二级考试成绩,要求显示对应三级制的 评定。评定条件为:评定。评定条件为: 优:优:Mark 90等级:等级: 通过:通过:60 Mark 90 未通过:未通过:=90?输入成绩开始输出“通过”T输出“优”T成绩=60?F输出“未通过”FIf条件语句条件语句.3. If3. If3. If3. IfThenT
7、henThenThenElseIf ElseIf ElseIf ElseIf 结构(多分支)结构(多分支)结构(多分支)结构(多分支)Mark=Text1.TextIf Mark = 90 Then Print 优优ElseIf Mark = 60 Then Print 通过通过Else Print 未通过未通过End If若条件若条件若条件若条件1 1与条件与条件与条件与条件2 2换位,结果会怎样?换位,结果会怎样?换位,结果会怎样?换位,结果会怎样?格式:IfIf 条件1 Then (A组语句) ElseIf 条件2 Then (B组语句) ElseIf 条件3 Then (C组语句) E
8、lse (n组语句) End IfEnd IfIf条件语句条件语句格式:If 条件1 Then A组语句 ElseIf 条件2 Then B组语句 ElseIf 条件3 Then C组语句 Else n组语句 End If3. If3. If3. If3. IfThenThenThenThenElseIf ElseIf ElseIf ElseIf 结构结构结构结构注意:注意: 多分支语句中,有多个分多分支语句中,有多个分 支同时满足,只执行支同时满足,只执行第一第一第一第一 个个个个与之匹配的语句块。与之匹配的语句块。 注意注意 ElseIfElseIfElseIfElseIf 的写法的写法I
9、f条件语句条件语句【例4.3】 用键盘输入一字符,判断该字符是小写字母、大写字母、数字字符还是其他字符,并作相应的显示。3. 3. 3. 3. IfThenElseIfIfThenElseIf 结构结构结构结构If条件语句条件语句4. If4. If语句的嵌套语句的嵌套If语句的嵌套是指if或else后面的语句块中又包含If语句。If条件语句条件语句使用嵌套语句时应注意以下问题:使用嵌套语句时应注意以下问题:(1 1)如如果果存存在在嵌嵌套套时时,语语句句中中的的每每一一个个Else必必须须和和一一个个If相相对对应应,应应避避免免产产生生混混乱乱。在在书书写写时时,可可以以将将同同一一层层的
10、的If子子句句和和Else子子句句左左对对齐齐,内内层层的的各各语语句句块块相相对对于于外外层层向向右右缩缩进进若若干干空格,以使程序结构更加清楚便于阅读和查错。空格,以使程序结构更加清楚便于阅读和查错。(2 2)每一个双分支结构都必须以)每一个双分支结构都必须以If开始,以开始,以End If结束。结束。(3)内层嵌套的结构中除了满足该层规定的条件外, 还必须首先满足外层结构中相应位置的条件。(4)VB中对块嵌套的层数没有限制,在嵌套的结构中仍然可以继续嵌套其他的结构.(5)利用双分支If语句的嵌套可以解决“多分支”选择的问题。Select CaseSelect Case 测试表达式测试表达
11、式 Case Case 测试项测试项1 1 A A组语句组语句 Case Case 测试项测试项2 2 B B组语句组语句 Case ElseCase Else n n组语句组语句End SelectEnd Select说明:说明:说明:说明: 测试表达式可以是数值型或字符型测试表达式可以是数值型或字符型 测试项的取值必须与测试表达式测试项的取值必须与测试表达式 的值类型相同,不能包含逻辑运算符的值类型相同,不能包含逻辑运算符常用形式为:常用形式为:n具体取值,用逗号隔开具体取值,用逗号隔开如:如:1 1,5 5,9 9n连续的范围:界连续的范围:界1 TO 1 TO 界界2 2如:如:12
12、To 20 12 To 20 n满足某个条件:满足某个条件:IsIs运算符运算符如:如:Is10 Is10 n三种形式可以组合使用三种形式可以组合使用Select Case语句语句Select Case Select Case Select Case Select Case 结构(情况选择语句)结构(情况选择语句)结构(情况选择语句)结构(情况选择语句)例:输入二级考试成绩,要求显例:输入二级考试成绩,要求显 示对应三级制的评定。示对应三级制的评定。 Mark=Val(Text1.Text)Select case Mark case is=90 Print 优优 case 90 to 60 P
13、rint “通过通过 Case Else Print “未通过未通过End selectp对于多分支选择结构,用对于多分支选择结构,用Select Case 语句比用语句比用IfThenElseIf语句更为直观,程序可读性强。语句更为直观,程序可读性强。p两者的区别在于:两者的区别在于:Select Case 语句只对单一表达式求值语句只对单一表达式求值,并,并根据求值结果执行不同的语句块,而根据求值结果执行不同的语句块,而IfThenElseIf语句可语句可以对多个不同的表达式求值以对多个不同的表达式求值, ,所以,当对多个条件进行判断时,所以,当对多个条件进行判断时,只能用只能用IfThe
14、nElseIf语句。语句。4.3 4.3 循环结构循环结构循环循环: :是在指定的条件下多次重复执行一组语句是在指定的条件下多次重复执行一组语句1. For 1. For NextNext2. Do2. DoLoop Loop 3. 3. 循环嵌套循环嵌套 4.4.其他辅助控制语句其他辅助控制语句 VB提供了三种不同风格的循环结构,分别是:计数循环(ForNext循环)当循环(While循环)Do循环(DoLoop循环) 其中计数循环常用于已知循环次数的循环,而当循环和Do循环适合于循环次数未知,只知道循环结束条件的循环。 For For 循环变量循环变量= =初值初值 TO 终值终值 Ste
15、p 步长步长 语句块语句块 Exit ForExit For 语句块语句块 Next Next 循环变量循环变量For循环格式:循环格式:For循环循环-计数型循环计数型循环步长省略,步长省略,默认为默认为1 1循环体循环体(1)系统将初值赋给循环变量,并自动记下终值和步长。(2)判断循环变量是否超过终值:未超过终值,执行一次循环体;否则,结束循环(3)执行Next语句,将循环变量加上一个步长。(4)转到(2),继续执行。(5)结束循环,执行Next后面的语句。 循环变量=初值循环变量是否到达终值循环体循环变量循环变量= =循环变量循环变量+ +步长步长TrueFalse程序代码:程序代码:
16、Dim I%, s % For I = 1 To 10 step 1 Next I Print I, s例例1:1:求求1+2+3+4+1+2+3+4+10+10之和之和. .分析分析: :重复过程重复过程( (循环体循环体):): s ss s+I+I初值、终值和增量初值、终值和增量:1、10、1 初值与终值换位初值与终值换位初值与终值换位初值与终值换位 可以吗?可以吗?可以吗?可以吗?循环体的执行次数是多少循环体的执行次数是多少 ? ? 输出的输出的I、S的值是多少的值是多少 ? ?For I = 1 To 10执行多少次?执行多少次?s = s + IFor I=10 To 1 Step
17、 -1ForFor循环循环循环循环 For For 循环变量循环变量= =初值初值 TO TO 终值终值 Step Step 步长步长 语句块语句块 Exit ForExit For 语句块语句块 Next Next 循环变量循环变量循环体循环体 DimIAsInteger,sAsIntegerForI=1To10s=s+INextIPrintI,s例例2:2:求求1010!分析分析: :重复过程重复过程: :* *初值、终值与增量不变初值、终值与增量不变 例例1:1:求求1+2+3+4+ 1+2+3+4+ +10+10之和之和. .分析分析: :重复过程重复过程( (循环体循环体):): +
18、 +初值、终值和增量初值、终值和增量:1、10、1DimIAsInteger,sAsIntegerForI=1To10s=s*INextIPrintI,ss=1ForI=1To10ForI=1To10 s=1ForFor循环循环循环循环功能说明:(1)在执行过程第二步中,所说的“超过”包含两种情况 步长为正数时,循环变量大于终值为“超过”。 步长为负数时,循环变量小于终值为“超过”。(2)终值和初值的取值有以下情况: 步长为正数时,终值应该大于初值,否则循环体不会被执行。 步长为负数时,终值应该小于初值,否则循环体不会被执行。 当循环变量等于终值时,不管步长是正数是负数,均执行一次循环体。(3
19、)循环次数由初值、终值和步长确定,计算公式为:循环次数 = Int(终值-初值)/ 步长)+ 1(4)For语句和Next语句必须成对出现,不能单独使用。(5)循环变量在循环体内可以被引用参与运算。(6) Exit For表示当遇到该语句时,退出循环体,继续执行Next语句下面的代码;(7)当循环变量为整型,而循环参数为带小数点的实数时系统将按照CInt函数或CLng函数的方式,将其转换为与循环变量相同的整型数。PrivateSubCommand1_Click()DimiAsIntegerFori=7To8.6Step2.5PrintiNextiEndSub例:分析下列程序段的输出结果:例:分
20、析下列程序段的输出结果: Dim I As Integer, J As Integer J = 2:m=6 For I = 0 To m Step J I = I + 1 J = J + 1 m=m+1 Next I print I,J, mForFor循环循环循环循环o【例4.6】 输入20个整数,分别计算并输出正数和负数的平均值。1. Do 1. Do WhileWhile 循环体循环体 LoopLoop2. D0 2. D0 循环体循环体 Loop While Loop While 3. Do Until 3. Do Until 循环体循环体 LoopLoop4. Do 4. Do 循环
21、体循环体 Loop Until Loop Until DoLoopDoLoop循环循环循环循环-条件型循环条件型循环条件型循环条件型循环1. 1. 1. 1. While循环循环循环循环 DoWhile 循环体循环体ExitDoLoop执行过程执行过程: :(先判断,后执行)(先判断,后执行)先判断循环条件先判断循环条件, ,若为真若为真: :执行循环体执行循环体, ,再判断循环条件再判断循环条件否则,跳过循环体否则,跳过循环体, ,执行执行LoopLoop之后语句之后语句循环条件循环条件 语句块语句块TF语句块语句块FExit DoExit DoTDoLoopDoLoop循环循环循环循环 D
22、oWhile 循环体循环体 Exit DoExit Do Loop Dim I As Integer, s As Integer For I = 1 To 10 s = s + I Next I Print I, s例例1:1:求求1+2+3+4+1+2+3+4+10+10的和的和. .Dim I Dim I AsInteger,s As Integer As Integer I=1I=1Do WhileDo WhileLoopLoopPrint I,s Print I,s s=s+I s=s+I I=10I=10I=I+1I=I+1I=I+1I=I+1I=11I=11(1)(1)循环体执行了
23、几次循环体执行了几次? ? (2)(2)没有没有I=1I=1会怎样会怎样? ?(3)(3)将将PrintPrint语句语句移到移到LoopLoop的的 前面结果怎样前面结果怎样? ?(4)(4)I I先赋值为先赋值为1 11 1, ,结果如何结果如何? ?1. 1. While循环循环DoLoopDoLoop循环循环循环循环 D0 循环体循环体 ExitDo LoopWhile 执行过程执行过程: :(先执行,后判断)(先执行,后判断)先执行循环体先执行循环体, ,再判断循环条件再判断循环条件, ,若为真,若为真, 继续执行循环体继续执行循环体; ;否则,结束循环否则,结束循环, ,执行执行L
24、oopLoop之后语句之后语句循环条件循环条件 语句块语句块TF语句块语句块F FExit DoExit DoT1. 1. 1. 1. While循环循环循环循环DoLoop循环循环 D0 循环体循环体 ExitDo Loop While 例例4:4:修改例修改例3 3 Dim I AsInteger,s As Integer I=1 Do While I=10 s=s+I I=I+1 Loop Print I,s Dim I AsInteger,s As Integer I=1 Do s=s+I I=I+1 Loop While I=10 Print I,s (1)(1)循环体执行几次?循环
25、体执行几次?(2)(2)将将I I先赋值为先赋值为1111, 执行结果如何执行结果如何? ? 1. 1. 1. 1. WhileWhile循环循环循环循环DoLoop循环循环DoWhile 循环体循环体ExitDo Loop D0 循环体循环体 ExitDo LoopWhile 区别区别区别区别:(:(:(:(1)1)执行顺序不同执行顺序不同 形式一形式一: :先判断先判断, ,后执行循环体后执行循环体; ; 形式二形式二: :先执行循环体先执行循环体, ,后判断后判断 (2)(2)执行次数不同执行次数不同(特殊情况下) 形式一形式一: :条件不满足条件不满足, ,循环体可能一次也不执行循环体
26、可能一次也不执行 形式二形式二: :不论条件如何不论条件如何, ,至少执行一次至少执行一次1.1.1.1.WhileWhile循环(当型循环)循环(当型循环)循环(当型循环)循环(当型循环)DoLoop循环循环执行过程执行过程: :(先判断,后执行)(先判断,后执行)先判断循环条件:先判断循环条件:条件为条件为假假: : 执行循环体执行循环体, , 然后再判断条件然后再判断条件. .条件为条件为真真: : 跳过循环体跳过循环体, , 执行执行LoopLoop之后语句之后语句 Do Until 循环体循环体 Exit Do Loop2.2.Until循环循环(直到型循环)(直到型循环)(直到型循
27、环)(直到型循环)循环条件循环条件 语句块语句块F FT T语句块语句块F FExit DoExit DoTDoLoop循环循环 Do Until 循环体循环体 Exit Do Loop例例5:5:修改上例修改上例Dim I as integer,s As Integer I=1Do While I=10 s=s+I I=I+1LoopPrint I,s Dim I as interger,s As Integer I=1Do Until s=s+I I=I+1LoopPrint I,s 条件应该如何写出条件应该如何写出?显示的显示的I、S值与值与 上例一样吗?上例一样吗? Do Do 循环体
28、循环体 Loop Until Loop Until I10I10I10I10DoLoop循环循环2.2.2.2.UntilUntil循环循环循环循环几种形式比较几种形式比较几种形式比较几种形式比较: : : : DoDo While While 循环体循环体 LoopLoop( While While ) Do Do Until Until 循环体循环体 LoopLoop( Until Until )区别区别: : While While 条件为条件为真真时执行循环体时执行循环体, ,否则退出循环否则退出循环 Until Until 条件为条件为假假时执行循环体时执行循环体, ,否则退出循环否
29、则退出循环关系:关系: WhileWhile和和UntilUntil可以相互可以相互转换转换,但循环条件,但循环条件取反取反DoLoop循环循环1.1.1.1.GoToGoTo语句语句语句语句2.2.2.2.ExitExit语句语句语句语句 满足循环条件的情况下,提前跳出循环体,结束循环。满足循环条件的情况下,提前跳出循环体,结束循环。 两种形式:两种形式:Exit For、Exit Do 作用:无条件的转移到标号或行号指定的语句作用:无条件的转移到标号或行号指定的语句 语法:语法:GoTo 标号标号|行号行号 100100 If I = 100 Then If I = 100 Then s
30、= s + I s = s + I I = I + 2 I = I + 2 GoTo 100 GoTo 100 End If End If其他辅助控制语句其他辅助控制语句Dim I As IntegerIf I mod 17 =0 then print I end If For I=100 to 200 Next IExit for分析:分析: 重复工作:判断每个数除重复工作:判断每个数除17的余数是否为的余数是否为0 初值、终值和增量:初值、终值和增量:练习:练习: 求出求出100100200200之间的之间的第一个第一个能被能被1717整除的整数。整除的整数。其他辅助控制语句其他辅助控制语
31、句循环的嵌套:循环的嵌套:循环的嵌套:循环的嵌套:在一个循环体内又包含了一个完整的循环结构在一个循环体内又包含了一个完整的循环结构4.4 循环嵌套循环嵌套ForI=1To9ForJ=1ToIs=I&J&=&I*JPicture1.PrintTab(J-1)*8+1);s;NextJPicture1.PrintNextI注意注意:1. 内、外循环变量不能同名2. 外循环必须完全包含内循环,不能出现交叉3.在循环体中遇到Exit For (Do)时,则只能跳出当前一层循环4.外层循环执行一次,内层循环要从头到尾执行一遍 【例例4.94.9】编写程序,找出编写程序,找出100100以内所有满足以内所
32、有满足a2+b2=c2且且ab的自然数组合。的自然数组合。 解题的基本思想是:解题的基本思想是: 一一列举各种可能的情况,并一一列举各种可能的情况,并判断哪种情况是符合要求的解,这种算法称为判断哪种情况是符合要求的解,这种算法称为穷举法穷举法(又称(又称“枚举法枚举法”),通常采用循环结构来实现。),通常采用循环结构来实现。 本程序使用了三重循环,循环变量在本程序使用了三重循环,循环变量在11001100之间变化,之间变化,内循环体被执行了内循环体被执行了100*100*100100*100*100次次。累加和、连乘积累加和、连乘积累加和、连乘积累加和、连乘积求素数求素数求素数求素数最大公约数
33、、最小公倍数最大公约数、最小公倍数最大公约数、最小公倍数最大公约数、最小公倍数穷举法穷举法穷举法穷举法4.5 4.5 程序示例程序示例程序示例程序示例要求掌握的几个算法:1.累加、连乘累加、连乘例1:编写一个大奖赛统计选手得分的程序。 要求单击“得分显示”按钮,则可以利用随机函数产生10个80100分之间的随机整数,输出在窗体上,并将计算选手的最后得分也在窗体上显示。分析:由随机函数生成分析:由随机函数生成8080100100之间的之间的1010个数据个数据 连续求和连续求和 求平均值求平均值 2.求素数求素数素数(质数):一个大于等于2的整数,并且只能被1和自身 整除,而不能被其他整数整除的
34、数。N N是否为素数的判断算法:用穷举法是否为素数的判断算法:用穷举法 用用2 2至至n-1n-1逐个去除整数逐个去除整数n.n. 若余数不为若余数不为0 0,用下一个整数去除,直到,用下一个整数去除,直到n n1 1为止为止 否则进行标记,或退出循环否则进行标记,或退出循环 输出结果输出结果为了压缩循环次数为了压缩循环次数, ,可将判断范围从可将判断范围从 2 - n-1 2 - n-1 改为改为 2 - int(sqr(N)2 - int(sqr(N)【例例4.104.10】编写程序,找出编写程序,找出1000010000以内的所有素数并作相应显示以内的所有素数并作相应显示。 本例题可以用
35、双重循环来实现,外循环用于对本例题可以用双重循环来实现,外循环用于对210000210000之间的数之间的数逐个进行判断,若是素数则将其添加到列表框中并作相应的计数,逐个进行判断,若是素数则将其添加到列表框中并作相应的计数,内循环用于判断每个数是否为素数。内循环用于判断每个数是否为素数。3.求最大公约数的算法求最大公约数的算法S1.S1.输入两个自然数输入两个自然数M M、N N;S2.S2.求求M M除以除以N N的余数的余数R R;S3.S3.使使M=NM=N,即用,即用N N代换代换M M;S4.S4.使使N=RN=R,即用,即用R R代换代换N N;S5.S5.若若R0R0,则重复执行
36、,则重复执行S2S2、S3S3、S4S4(循环),否则转(循环),否则转S6S6;S6.S6.输出输出M M,M M即为即为M M和和N N的最大公约数。的最大公约数。Private Sub Form_Click() m = Val(Text1) n = Val(Text2) If n = 0 Or m = 0 Then Text3=数据出错数据出错 End End If If m n Do 用用doloop while结构实现求最大公约数结构实现求最大公约数 R = m Mod n m = n n = R Loop while R0 Text3.text=Cstr(m)End Sub求二个正
37、整数求二个正整数m m和和n n的最小公倍数的最小公倍数 求得最大公约数以后,将原两数相乘并除以最大公约数,就得求得最大公约数以后,将原两数相乘并除以最大公约数,就得到了最小公倍数。到了最小公倍数。4.穷举法穷举法穷举法:就是将可能出现的各种情况一一测试,判断是否穷举法:就是将可能出现的各种情况一一测试,判断是否 满足条件满足条件 For x = 0 To 100 For y = 0 To 100 For z = 0 To 100 If x + y + z = 100 And _ 3 * x + 2 * y + 0.5 * z = 100 Then Print x, y, z End If N
38、ext z Next y Next x例:百钱买百鸡例:百钱买百鸡例:百钱买百鸡例:百钱买百鸡 假设:小鸡假设:小鸡5 5角角/ /只,公鸡只,公鸡2 2元元/ /只,母鸡只,母鸡3 3元元/ /只,现有只,现有100100元钱要买元钱要买100100只鸡,编只鸡,编程列出所有可能的购鸡方程列出所有可能的购鸡方案案分析:设母鸡、公鸡、小分析:设母鸡、公鸡、小鸡分别买鸡分别买X X、Y Y、Z Z只只 X+Y+Z=100 X+Y+Z=100 3*X+2*Y+0.5*Z=100 3*X+2*Y+0.5*Z=100 Forx=0To33Fory=0To50If3*x+2*y+0.5*(100-x-y)_=100ThenPrintx,y,zEndIfNextyNextx【例例4.134.13】 随机生成随机生成3030个三位正整数,将能被个三位正整数,将能被3 3整除、整除、能被能被7 7整除的数找出并显示。整除的数找出并显示。生成生成m-nm-n之间的随机整数可使用以下公式:之间的随机整数可使用以下公式:Int(Rnd * (n-m+1) )+m, 本例中本例中m=100m=100,n=999n=999