科学计算与仿真应用(基于MWORKS)课件 第三章 编程_第1页
科学计算与仿真应用(基于MWORKS)课件 第三章 编程_第2页
科学计算与仿真应用(基于MWORKS)课件 第三章 编程_第3页
科学计算与仿真应用(基于MWORKS)课件 第三章 编程_第4页
科学计算与仿真应用(基于MWORKS)课件 第三章 编程_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章编程本章目标掌握在Syslab环境下基于Julia语言进行程序设计的基础方法与核心思想。熟悉Syslab中两种常见的程序形式:顺序执行的脚本程序和基于函数的模块化程序。深入理解并熟练运用三大基础程序结构:顺序结构、分支结构(BRANCHES结构)和循环结构(LOOPS结构)。

掌握自顶向下(top-down)的程序设计模式,能够结合伪代码法(Pseudocode)将复杂问题分解为简单的子模块进行逻辑设计,以降低编程复杂度并减少错误发生率。知识点总览Top-down设计模式:详细介绍将庞大复杂任务逐级分解为易处理的小任务的系统化设计规范,涵盖从陈述问题、确定变量、任务分解、算法设计到代码翻译、测试与最终整合的完整开发步骤。伪代码(Pseudocode):探讨如何利用数学语言与常规文字描述程序的运算步骤,将其作为程序设计的“草稿”与核心输出物,以确保代数算法逻辑严密并易于他人理解和校验。基本控制结构详解:顺序结构:介绍最简单的程序执行方式,即语句严格按照书写顺序一句接一句地执行,且每条语句能且只能执行一次。分支结构:讲解关系运算符与逻辑运算符的运算规则与优先级,并深入剖析if-else-end双分支结构、嵌套elseif的多分支结构,以及用于容错的try-catch结构。循环结构:解析循环控制逻辑,包括循环次数确定的for循环结构,以及根据条件判定是否继续执行的while不定数循环结构。知识点总览函数编写与模块化编程:阐述将大型脚本分割为离散子系统函数的重要工程优势(即独立测试性、高复用性、规避侧面影响)。讲解函数的标准语法格式(function...end),以及函数体内外变量值的传递机制。介绍全局变量(global)的跨函数共用特性,以及私有函数和子函数的作用域限制与应用场景。1.top-down设计模式假如你在一家公司工作,需要你编程来解决一些问题,通常你会怎么做?在接到新任务时,通常情况下我们会立刻坐到计算机前开始编程,不会去仔细思考待解决的问题。如果问题简单,那么采用这种“运指如飞”的方法一般可以解决,就如本书中的一些示例。但是,在实际工作中遇到的问题往往比较复杂,如果程序员再使用这种方法,则会陷入难以自拔的困境。对于相对庞大的程序,在开始编程之前,建议程序员花费足够长的时间思考清楚需要解决的问题,以及解决该问题的具体方法和步骤。top-down设计就是一个分解大任务的过程,先将一个大任务分解为几个相对较小的任务,如果这些小任务仍然不容易解决,则可以再次将其分解为更小的任务,直到所分解出的小任务都很容易完成编程为止;然后完成每个小任务的编程和测试,直到确保各部分都没有错误为止;最后完成程序整合和整体测试。1.top-down设计模式top-down设计是程序设计规范的基础。所谓程序设计规范,实际上是指编程者的编程习惯。程序设计规范示意图如图所示。

严格按照top-down设计规范步骤编程,为编译出可用、无误的程序提供保障,同时提高程序的可移植性。2.伪代码编写伪代码是编程过程中的重要组成部分。伪代码对将在程序中执行的代数算法进行了详细的阐述。最重要的是,这些阐述易于他人理解,并且能够为程序员提供帮助。但伪代码中的程序运算步骤设计是以程序员的数学水平为基础的,数学水平高的程序员设计的程序运算步骤简洁、快速,数学水平稍差的程序员设计的程序运算步骤烦琐,在这一方面我们很难给出有价值的意见或建议。伪代码是借助数学语言和文字表述对所编写的程序运算过程的阐述。也就是说,按照伪代码中的步骤和方法,通过数学计算就能够得出所要解决的问题的正确答案,即使人工计算也可以(前提是人工能够计算出结果)。伪代码就是对解决问题的过程的详细阐述。也可以说,伪代码是待编写程序的另一种表述形式,将伪代码中的数学语言和文字表述转化为Syslab可执行语句就是要编写的程序。在编写伪代码时,一般将每个运算和操作步骤作为一行,并对每一行都附以浅显易懂的文字解释。伪代码对程序员修改程序非常有帮助,便于程序员清楚理解每条语句。此外,伪代码对想了解Syslab内置程序思想的程序学习者和使用者,以及想了解Syslab编程过程的不同用户也很有帮助。在程序非常简单,也就是程序学习者和使用者较容易看懂程序的情况下,伪代码往往会被省略。3.顺序结构顺序结构是所有程序结构中最简单的一种。顺序结构的程序是由一系列Syslab可执行语句组成的,语句是一句接一句执行的。提高编程能力最有效的途径就是做大量练习,为此本书将提供大量示例。例3.1输入学生信息。编写一个入学新生登录程序,提示学生输入姓名、家庭住址、院系和年龄,并在窗口中显示输入的信息。分析:根据题意可知,本程序的用户为入学新生,包含4部分内容:姓名、家庭住址、院系和年龄。其功能有二:一是用户输入自己的相关信息;二是显示用户输入的相关信息。本程序的伪代码如下。(1)本程序需要4个变量,分别为Name、Address、Department和Age。Syslab表述:(2)在光标处显示“请输入您的姓名:”或“Pleasetypeyourname:”,之后按回车键。Syslab表述:(3)在光标处显示“请输入您的家庭住址:”或“Pleasetypeyouraddress:”,之后按回车键。Syslab表述:@variablesNameAddressDepartmentAgeName=readline()Address=readline()3.顺序结构(4)在光标处显示“请输入您的系院专业:”或“Pleasetypeyourdepartment:”,之后按回车键。Syslab表述:(5)在光标处显示“请输入您的年龄:”或“Pleasetypeyourage:”,之后按回车键。Syslab表述:(6)显示用户输入的信息。Julia表述:println("姓名为:",Name)Address=readline()println("姓名为:",Name)println("家庭住址为:",Address)println("院系为:",Department)println("年龄为:",Age)Address=readline()在本程序中,没有考虑新生输入错误情况下的修改功能。如果要为新生提供修改机会,则会出现两种情况:一是保存输入信息并显示;二是选择修改,重新输入信息,直到确定输入正确再保存。为实现这一功能,程序出现分支结构,也就是两种选择,此功能将在3.4节中实现。3.顺序结构##########clc()#清除命令行窗口.clear()#清除工作空间中的变量.#提示用户输入姓名.println("请输入您的姓名:")Name=readline()#提示用户输入家庭住址.println("请输入您的家庭住址:")Address=readline()#提示用户输入院系.println("请输入您的院系:")Department=readline()#提示用户输入年龄.println("请输入您的年龄:")Age=readline()#显示用户输入的信息.println("姓名为:",Name)println("家庭住址为:",Address)println("院系为:",Department)println("年龄为:",Age)先单击工具栏中的“启动命令行窗口”按钮,然后单击“运行”按钮,结果如下:请输入您的姓名:王永龙请输入您的家庭住址:

山东临沂请输入您的院系:物理与电子工程学院请输入您的年龄:48姓名为:王永龙家庭住址为:山东临沂院系为:物理与电子工程学院年龄为:483.顺序结构例3.3求三重积分。为求三重积分编写一个程序,要求能够显示每一步的积分结果。分析:尽管Syslab为三重积分提供了积分函数integrate,但是并没有给出实际的积分步骤。为了给出大家熟悉的积分步骤,下面给出求三重积分的程序。首先要对输入变量和输出变量以及需要显示的数学结果进行分析。本程序的主体是被积函数,需要输入积分变量。积分过程分为3步,对3个积分变量一个接一个地进行积分。因为每个积分变量都需要积分下限和积分上限,所以本程序需要6个变量和表达式。因此,本程序至少需要7个输入通道。同时,为了提供每一步的积分结果,本程序至少还需要3个输出通道。本程序的伪代码如下。(1)本程序需要3个变量作为积分变量,记为x、y、z。此外,本程序还需要10个变量,分别是1个被积函数,6个积分限,3个计算结果。Syslab表述:(2)提示用户输入被积函数,该函数是变量x、y、z的函数。Syslab表述:SymPy.@symsxyzfx1x2y1y2z1z2println("Entertheintegratedfunction:")f_str=sympify(readline())3.顺序结构(3)提示用户输入变量x的积分下限x1和积分上限x2。Syslab表述:(4)提示用户输入变量y的积分下限y1和积分上限y2。Syslab表述:(5)提示用户输入变量z的积分下限z1和积分上限z2。Syslab表述:println("Entertheintegralbottom-limitofx,aconstant,x1=")x1=parse(Float64,readline())println("Entertheintegralup-limitofx,aconstant,x2=")x2=parse(Float64,readline())println("Entertheintegralbottom-limitofydependingonx,y1=")y1=sympify(readline())println("Entertheintegralup-limitofydependingonx,y2=")y2=sympify(readline())println("Entertheintegralbottom-limitofzdependingonxandy,z1=")z1=sympify(readline())println("Entertheintegralup-limitofzdependingonxandy,z2=")z2=sympify(readline())4.分支结构-关系运算符和逻辑运算符关系运算符对于分支结构的程序,在运行程序过程中需要对执行模块进行选择。程序员经常会遇到这类问题,不同情况会有不同结果。为了解决这类问题,在程序中我们必须先将任务分为多个子任务,再将这些子任务通过语句整合在一起,借助特定命令语句进行选择。在做出选择的过程中,会用到关系运算符和逻辑运算符。常用的关系运算符如表3.1所示。关系运算符能比较两标量、两数组,也能比较标量与数组,返回正确结果只有两种情况:“真”和“假”。否则,将给出错误提示。基于关系运算符比较结果,我们能一个一个地完成各子任务。换句话说,我们能借助关系运算符将复杂问题简单化。运算符描述==等于。~=不等于。>大于。>=大于或等于。<小于。<=小于或等于。4.分支结构-关系运算符和逻辑运算符逻辑运算符和逻辑函数在编程过程中,关系运算符一般用来处理包含多种情况的问题,逻辑运算符通常用来处理相对比较复杂的问题。逻辑运算符如表3.2所示,逻辑运算示例如表3.3所示,逻辑函数如表3.4所示。运算符描述&与|或xor非或~非输入与或非或非L1L2L1&L2L1|L2xor(L1,L2)~L10000010101111001101111004.分支结构-关系运算符和逻辑运算符运算顺序关系运算和逻辑运算顺序如下。首先是关系运算符(==、~=、>、>=、<、<=),其运算顺序为从左到右依次执行;其次是或非运算符(xor)和非运算符(~);其次是与运算符(&);最后是或运算符(|)。补充:如果上面的运算顺序不好区分,则可以通过“()”强行限定运算顺序。函数描述ischar(A)如果A为字符数组,则结果为1,否则结果为0。isempty(A)如果A为空数组,则结果为1,否则结果为0。isinf(A)如果A的值为无穷,则结果为1,否则结果为0。isnan(A)如果A为非数,则结果为1,否则结果为0。isnumeric(A)如果A为数值数组,则结果为1,否则结果为0。4.分支结构-if结构if结构的一般形式如图3.2、图3.3和图3.4所示。最简单的if结构是含有两个分支的结构,其中一个分支在if判定条件正确时执行,另一个分支在if判定条件错误时执行。最简单的if结构如图3.2所示。一旦待解决的问题变得复杂时,if结构将含有远多于两个分支。本书为解决复杂问题提供了两种方法:一种是在同级别情况下,借助elseif增加分支;另一种是增加if-else-end结构,利用嵌套完成。对于前一种方法,可以借助elseif命令来任意增加需要的分支选择。含有多于两个分支的if结构如图3.3所示。后一种方法是指,在if分支中增加if-else-end结构,也可在else分支中增加if-else-end结构,如果有需要可以继续细分、继续增加。含有多层的if结构如图3.4所示。4.分支结构-if结构图3.2最简单的if结构图3.3含有多于两个分支的if结构图3.4含有多层的if结构4.分支结构-if结构例题

解一元二次方程。编写解一元二次方程的程序。分析:本程序用来解任意常系数一元二次方程ax2+bx+c=0。首先,本程序能够判定输入方程具有什么样的根,如两实根、两等实根、两复数根。其次,本程序需要的变量包括3个系数a、b、c,1个判别式s,2个根x1、x2,以及根的实部和虚部real、image。最后,本程序能够显示所求的解。本程序的伪代码如下。(1)定义3个输入变量a、b、c,1个中间变量s,2个输出变量x1、x2,以及根的实部和虚部real、image。Syslab表述:(2)提示用户输入一元二次方程的3个系数。Syslab表述:SymPy.@symsabcsimagerealx1x2println("Thisprogramsolvestherootsofthequadraticequationa*x^2+b*x+c=0")println("请输入a:")a=parse(Float64,readline())println("请输入b:")b=parse(Float64,readline())println("请输入c:")c=parse(Float64,readline())4.分支结构-if结构(3)根据输入的系数,计算判别式。Syslab表述:(4)根据判别式给出方程的解。当方程有两实根(s>0)时,解为s=b^2-4*a*c4.分支结构-if结构Syslab表述:ifs>0x1=(-b-sqrt(s))/(2*a)x2=(-b+sqrt(s))/(2*a)println("Thisequationhastworealroots:")println("x1=",round(x1,digits=2))println("x2=",round(x2,digits=2))elseifs==0x1=-b/(2*a)println("Thisequationhasasinglerepeatedroot(twoidenticalrealroots)")println("x1=x2=",round(x1,digits=2))elsereal=-b/(2*a)image=sqrt(abs(s))/(2*a)println("Thisequationhastwocomplexroots:")println("x1=",round(real,digits=2),"-i*",round(image,digits=2))println("x2=",round(real,digits=2),"+i*",round(image,digits=2))end4.分支结构-if结构例题

评述学生成绩。编写一个程序,根据用户输入的学生成绩等级给出恰当的评述。学生成绩分为5个等级:A(或a)、B(或b)、C(或c)、D(或d)和E(或e)。学生成绩等级与评述有如下关系。A(或a):优秀;B(或b):良好;C(或c):合格;D(或d):基本合格;E(或e):非常抱歉,需要重修。如果用户输入了其他字符,本程序会提示“输入错误”。分析:本程序能够根据用户输入的学生成绩等级A(或a)、B(或b)、C(或c)、D(或d)和E(或e)给出恰当的评述。先将用户输入的学生成绩等级用变量存储,然后将该变量与后面紧跟的结果进行比较,哪个结果对就执行哪个模块。这里有5种评述,还有1种输入错误提示,共有6个分支。本程序的伪代码如下。(1)定义1个变量,用于存储学生成绩等级。Syslab表述:SymPy.@symsscore4.分支结构-if结构(2)提示用户输入学生成绩等级。Syslab表述:(3)根据用户输入的学生成绩等级给出恰当的评述。Syslab表述:println("Pleaseenterthescoreofcourse")score=string(readline())ifscorein["A","a"]println("优秀!")elseifscorein["B","b"]println("良好!")elseifscorein["C","c"]println("合格!")elseifscorein["D","d"]println("基本合格!")elseifscorein["E","e"]println("非常抱歉,需要重修!")elseprintln("输入错误!")end4.分支结构-try-catch结构try-catch结构是一种特殊的分支结构,一般为锁定错误而设定。在通常情况下,当运行Syslab的Julia程序遇到错误时,程序会自动终止运行。try-catch结构修改了这种遇到错误时的处理方式,使其能够继续运行下去。这种继续运行不是执行try模块,而是直接执行catch模块。这让用户能够清楚地知道错误语句所处的大概位置,并且不会导致程序停止运行或进入死循环。try-catch结构如图所示。4.分支结构-try-catch结构例3.8两个矩阵相乘。编写一个程序,判断两个矩阵能否相乘,如果能相乘,则给出结果;如果不能相乘,则给出错误提示。分析:该问题可分成三步完成。第一步,用户输入两个矩阵。第二步,尝试进行两个矩阵的叉乘运算。第三步,若第二步出错,则执行此步。尝试执行try模块,进行两个矩阵的点乘运算,若再次出错,则执行catch模块,给出错误提示。本程序的伪代码如下。(1)提示用户输入两个矩阵。Syslab表述:println("PleaseenterthefirstmatrixA:")input_A=readline()rows_A=split(strip(input_A,[';']),';')A=[parse.(Float64,split(row,','))forrowinrows_A]A_matrix=hcat(A...)println("PleaseenterthesecondmatrixB:")input_B=readline()rows_B=split(strip(input_B,[';']),';')B=[parse.(Float64,split(row,','))forrowinrows_B]B_matrix=hcat(B...)4.分支结构-try-catch结构(2)将本程序分成3个子程序,借助2个try-catch结构嵌套完成。Syslab表述:try#尝试进行两个矩阵的叉乘运算.localC=A_matrix*B_matrixprintln("TheproductofAandBis")println(C)catchtry#尝试进行两个矩阵的点乘运算.localD=A_matrix.*B_matrixprintln("Theelement-wisemultiplicationofAandBis")println(D)catch#两个矩阵既不能进行叉乘运算也不能进行点乘运算.println("ThetwomatricesAandBcannotbeexecutedmatrixandelement-wisemultiplication.")endend5.循环结构-for循环结构for循环结构是一种能够让某一特定语句模块执行超过一次的结构。for循环结构如右图所示。这里的指针是循环变量,指针判定表达式是用来判定下面的循环模块是否需要停止执行的唯一指令。只有指针指令与指针判定表达式中某个元素一致,下面的循环模块才会执行。当指针的指令数值在指针判定表达式中找不到对应数值时,循环将停止。for和end之间的语句为循环语句,每循环一次,这部分语句将被从头至尾循环执行一次。一般对for循环结构函数有如下描述。(1)在执行循环语句前,Julia程序需要产生一个控制表达式。(2)第一次执行循环语句,控制表达式将把它的第一个元素赋给指针,并将该值代入下面的循环模块进行运算。(3)循环语句的设置需要注意连续性,也就是在第一次运行结束后,能够将控制表达式的第二个元素赋给指针,进行下一次运算。(4)第三步的重复执行要能够持续,一直到跳出控制表达式的元素范围为止。控制表达式有很多结构模式,其典型模式如下图所示。5.循环结构-for循环结构例题

阶乘函数。阶乘函数是for循环结构的典型示例,下面对该示例进行分析。分析:在阶乘函数计算过程中,首先用户要输入计算阶乘的数,然后由程序给出结果。因此,本程序需要两个变量:一个用于存储用户输入的数,另一个用于存储该数阶乘的结果。此外,循环过程中还需要指针变量。本程序的伪代码如下。(1)提示用户输入正整数。Syslab表述:(2)对阶乘函数fact_n赋初值。Syslab表述:(3)执行循环运算,计算阶乘,并给出结果。Syslab表述:println("Pleaseenterapositiveinteger:")n=parse(Int,readline())globalfact_n=1foriiin1:nglobalfact_n*=iiend5.循环结构-while循环结构while循环结构不确定循环次数,只需满足循环条件,循环模块就执行。while循环结构如下图所示。如果判定表达式返回结果为真,那么循环模块将执行,执行完成后回到while循环结构前等待下一次判定。如果判定表达式在上一次循环后返回结果仍为真,那么循环模块将继续执行。直到判定表达式返回结果为假时,循环将停止,执行点跳到while循环结构后一条语句。如果想对测得的多组数据的基本特点有一些了解,则可通过平均值和标准差对其进行比较。求平均值和标准差,可采用while循环结构。5.循环结构-while循环结构

例题

求平均值和标准差5.循环结构-while循环结构(1)对变量赋初值。Syslab表述:(2)提示用户输入样本。Syslab表述为:(3)完成循环计算需要中间量sum_x和输入样本个数N,并将x作为第N个元素存入数组xmat。需要注意的是,不要忘记提示用户输入下一个样本。Syslab表述:globalx=0globalN=0globalsum_x=0globalsum_x2=0globalxbar=0globalstd_dev=0globalfact_n=1println("Pleaseenterthefirstsample:")globalx_input=readline()globalx=parse(Float64,x_input)while!isempty(x_input)globalN+=1push!(xmat,x)globalsum_x+=xprintln("Pleaseenternextsample:")globalx_input=readline()if!isempty(x_input)globalx=parse(Float64,x_input)endend5.循环结构-while循环结构(4)计算过渡变量sum_x2,也就是

。Syslab表述:(5)计算标准差。Syslab表述:(6)在命令行窗口中显示需要的信息。Syslab表述:globalxbar=sum_x/Nforiiin1:Nglobalsum_x2+=(xmat[ii]-xbar)^2endglobalstd_dev=sqrt(sum_x2/N)println("Thenumberofdatapointsis:$N.")println("Themeanofthisdatasetis:$xbar.")println("Thestandarddeviationis:$std_dev.")6.函数编写最常用的程序设计模式为top-down设计模式,程序员首先需要将待求问题的输入变量、输出变量阐述清楚;其次设计容易执行的算法,借助算法将待求问题分解为容易处理的多个小问题;再次将这些小问题作为子模块进行编程,将其转化为容易执行的Syslab语句;最后将这些子模块有机、系统地整合起来,组成程序。上面的示例基本都采用top-down设计模式,但是没能达到所阐述的效果,这主要是因为在课堂上编写的程序都非常简单,一旦编写大程序,就能够彰显该模式的好处,因为在大程序中寻找错误犹如大海捞针,与在子模块中寻找错误相比可谓有天壤之别。另外,在整合完成的结果程序中,很难再对子模块进行测试。top-down设计模式的好处如下。1.便于测试:每个子模块都是独立单元,每个独立单元都可以进行独立测试,可节省测试时间。2.可重复使用:在很多情况下,某些子模块可能会被重复使用,因为有独立函数,所以只需调用函数,不需要再重复编写函数,这可压缩程序体积,同时可提高编程效率和质量。3.可减少侧面效应:由于是独立函数,所以函数中的一些变量不会影响其他函数中的变量,这也为编程带来意想不到的好处。一是可以减小出现错误的可能,二是可以降低编程的复杂度,三是可以为程序员提供更大的自由。6.函数编写-函数在Syslab的Julia模式中,编程文件(.jl)文件分为两类:一类是脚本文件,另一类是函数文件。脚本文件是将一些Syslab可执行语句放在一起保存的一个独立文件。只要打开文件夹选中文件,单击工具栏中的“运行”按钮,在命令行窗口中就会执行该文件,并且给出运行结果。函数文件和脚本文件有所不同,一般函数需要输入变量才能执行,并且会将运算结果赋给输出变量,在特殊情况下输出变量也可不设定。用户如果想调用所编写的函数,则可以先在命令行窗口中输入函数名称和必要的输入变量、输出变量,然后按回车键,其使用方法和Syslab自带函数完全一致。Syslab自编函数是一类特殊的.jl文件,它有自己独立的工作空间,不会影响函数外变量,函数外变量也不会影响它的内在变量。它可以接收通过输入变量输入的数据,也可以通过输出变量给出计算结果。Syslab自编函数通常具有以下编写格式:6.函数编写-函数function是函数开始的标志符号;fname是函数名;输入变量一般用小括号括起来紧跟在函数名之后。接下来是陈述行,主要陈述该函数的特定功能及其用途。紧跟在函数名下面的第一行称为帮助陈述行,是针对函数功能的简要描述,只有一行。紧随其后的解释内容是针对函数主要内容及功能的详细描述。如果想让所编写的函数具有较好的可读性,请严格按照上面的编写模式编写函数,解释内容不可省略。随后是输出变量,在输出变量前写return命令,空格后写输出变量名,多个输出变量之间用逗号隔开。若不写return命令,则函数返回值是最后计算的表达式的值。最后以end命令结尾。functionfname(输入变量1,输入变量2,…)#针对函数功能的简要描述.#针对函数主要内容及功能的详细描述.…(运行语句)#运行模块.…return输出变量1,输出变量2,…end(结束显示)6.函数编写-函数例题

计算空间中两点间的距离和两点连线与直角坐标系3个轴的夹角。编写一个程序,计算空间中两点间的距离和两点连线与直角坐标系3个轴的夹角。分析:这个问题是一个简单的数学问题,或者说是一个物理问题。要想确定空间中一个点的位置,需要用3个变量来描述其空间坐标(x,y,z),描述空间中两个点的位置需要6个变量。用户输入的空间中的两个点可记为(x1,y1,z1)和(x2,y2,z2)。需要输出的结果有4个,分别是两点间的距离和两点连线与直角坐标系x轴、y轴、z轴的夹角。因此,本程序共需要10个变量。4个输出变量分别为先定义输入变量,然后将上面的运算过程转化为Syslab可执行语句,最后设定输出变量的结果传递。本程序的伪代码如下。6.函数编写-函数(1)本程序需要6个变量来存储两个点的坐标,需要4个变量来存储两点间的距离和两点连线与直角坐标系x轴、y轴、z轴的夹角。Syslab表述:(2)调用函数进行计算。Syslab表述:(3)以return命令表示输出变量,最后以end命令结尾。Syslab表述:functionEXAMP03011(x1,y1,z1,x2,y2,z2)s=sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2);theta1=acos((x2-x1)/s)*180;theta2=acos((y2-y1)/s)*180;theta3=acos((z2-z1)/s)*180;theta=theta1,theta2,theta3returns,thetaend6.函数编写-变量值的传递Syslab程序与其函数的交流是借助传递变量值完成的。当一个函数调用已经存在的变量时,会将已知变量值移植到函数中。这一移植在Syslab编程中是至关重要的,函数可以对移植进来的数值进行任意操作而不影响原数值。这一特点大大降低了编程难度,并且减少了因变量相互干扰而产生的错误。例题

直角坐标到极坐标的转换。平面上一个点的位置,可以用直角坐标表示为(x,y),也可以用极坐标表示为(r,

)。这两种表示等价,可以相互转换,转换关系为编写两个函数rect2polar和polar2rect,使其分别具有将直角坐标转换为极坐标和将极坐标转换为直角坐标的功能。本例题只给出将直角

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论