学习-程序设计基础_第1页
学习-程序设计基础_第2页
学习-程序设计基础_第3页
学习-程序设计基础_第4页
学习-程序设计基础_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

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

文档简介

2023/2/2中山大学计算机科学系第4章程序设计基础了解程序设计的基本概念和方法,掌握JavaScript的基础程序设计技术。2023/2/2中山大学计算机科学系第四章

程序设计基础编程基本概念JavaScript语言及其运行环境JavaScript编程基础JavaScript流程控制调试JavaScript程序JavaScript函数2023/2/2中山大学计算机科学系4.1编程基本概念4.1.1程序设计语言4.1.2算法与流程图4.1.3结构化程序设计2023/2/2中山大学计算机科学系4.1.1程序设计语言程序是用计算机语言描述的解决某一问题的步骤,由符合一定词法、语法和语义规则的符号序列组成。程序设计语言是用于编写计算机程序的语言,包括一组符号定义和相应规则。分类:机器语言、汇编语言和高级语言2023/2/2中山大学计算机科学系4.1.1程序设计语言(1)机器语言是二进制代码语言,能被计算机硬件直接识别并执行。如计算2+3:

0010001100000010--将2送累加器A;前8位是操作码--后8位是操作数

0000001100000011--将3与累加器A相加,结果放累加器A00000010--将累加器A中的数(即5)从总线输出2023/2/2中山大学计算机科学系4.1.1语言分类(2)汇编语言是用助记符代替操作码、用地址符代替操作数的一种面向机器的低级语言。例如:

MOVA,2H将2送累加器AADDA,3H将3与累加器A相加,结果放累加器

OUTLBUS,A将累加器A中的数(即5)从总线输出汇编概念:汇编语言程序必须使用汇编程序把它翻译成机器语言后,才能被机器理解、执行。2023/2/2中山大学计算机科学系4.1.1语言分类(3)高级语言的表达方法接近于人的自然语言和数学表达式,不依赖于机器的特定属性。例如:

Print2+3翻译方式:编译方式:使用编译程序解释方式:使用解释程序2023/2/2中山大学计算机科学系4.1.2算法与流程图算法是计算机解决问题的方法和步骤,可以使用自然语言、流程图、程序设计语言等描述工具来描述。一、流程图流程图是用一些几何框图、流程线和文字说明表示各种类型的操作。基本图形和含义2023/2/2中山大学计算机科学系4.1.2算法与流程图二、使用流程图描述算法示例例4.1将两个变量X和Y的值互换。设X=5,Y=10用自然语言描述:

S1:将Y值存入中间变量Z:Y→ZS2:将X值存入变量Y中:X→YS3:将中间变量Z的值存入X中:Z→X用流程图描述2023/2/2中山大学计算机科学系4.1.2算法与流程图例4.2求1+2+3+4+…+100用自然语言描述:S1:设累加和变量S,且0→S;计数变量i,且0→iS2:计算和S+i→S,并把计数变量增值i+1→i。S3:判断:当i≤100时,返回第2步S2,再次求和;当i>100时,顺序执行下一步S4。S4:输出结果,S为所求之和。用流程图描述2023/2/2中山大学计算机科学系4.1.2算法与流程图三、算法评价标准⑴正确性:保证运行结果正确⑵可读性:良好的可读性有助于保证算法的正确性。科学、规范的程序设计方法(如结构化方法和面向对象方法)可提高算法的可读性。⑶通用性:一个好算法要尽可能通用,可适用于同类问题的求解。⑷高效率:效率包括时间和空间两个方面,一个好的算法应执行速度快、占用内存少。可读性要优先于效率,高效率处于次要地位。2023/2/2中山大学计算机科学系4.1.3结构化程序设计结构化程序设计方法是指按照模块化、层次化的方法来设计程序。其核心思想包括以下三点:(1)程序模块化:是指把一个大程序分解成若干个小程序(即模块)。(2)语句结构化:是指每个模块用顺序、选择和循环三种流程结构来实现,如图:2023/2/2中山大学计算机科学系4.1.3结构化程序设计(3)自顶向下、逐步求精的设计过程:一方面是指将一个复杂问题的求解过程分解和细化成由若干个模块组成的层次结构;另一方面是指将每个模块的功能逐步分解、细化为一系列的处理步骤,直至分解为三种基本控制结构的组合。例4.3某班80名学生,求该班成绩的不及格率。首先将任务“求不及格率”分解成2个子模块“输入成绩”和“统计不及格人数”,如图:2023/2/2中山大学计算机科学系4.1.3结构化程序设计然后使用流程图分别描述这些模块的实现算法,如图4.7中的子图B、C、D所示最后使用某种程序设计语言加以实现2023/2/2中山大学计算机科学系4.2JavaScript语言及其环境4.2.1JavaScript简介JavaScript是一种解释型的、基于对象的脚本语言。适用于创建短小的应用程序。脚本宿主:执行脚本的解释器依赖于宿主特性,JavaScript脚本的用途有:动态网页编程:将JavaScript脚本嵌入网页中,由Web浏览器解释执行。Web服务器编程:将JavaScript脚本嵌入ASP页面中,由服务器端的ASP服务程序解释执行。自动管理Windows系统:将JavaScript脚本保存为独立的脚本文件,由Windows脚本宿主解释执行,实现对Windows系统的自动管理。2023/2/2中山大学计算机科学系4.2.2Windows脚本宿主一、WSH简介Windows脚本宿主是Windows脚本的运行环境,内嵌在微软的Windows操作系统中。其中,WindowsXP已内置WSH5.6版。脚本引擎是某种脚本语言的解释程序。安装WSH时已自动安装JavaScript和VBScrip这两种脚本引擎WSH可以执行以文本文件格式独立存在的Windows脚本,如.js、.vbs、.wsf、.wsh2023/2/2中山大学计算机科学系4.2.2Windows脚本宿主二、编写第一个JavaScript脚本程序例4.4使用记事本编写一个JavaScript脚本程序,显示文字“HelloWorld!”。操作步骤如下:⑴启动Windows记事本;⑵输入以下代码:

WScript.Echo("HelloWorld!");⑶将这段代码保存在文件S0404.js中。2023/2/2中山大学计算机科学系4.2.2Windows脚本宿主三、脚本的执行方式(1)显式启动WSH执行脚本WSH有两种形式,即窗口式WSH(WScript)和命令式WSH(CScript),分别对应可执行文件WScript.exe和CScript.exe。如:

wscriptE:\Scripts\S0404.js或

cscriptE:\Scripts\S0404.jsWScript和CScript对脚本的执行效果基本相同,唯一区别在于输出形式不同2023/2/2中山大学计算机科学系4.2.2Windows脚本宿主三、脚本的执行方式(2)隐式启动WSH执行脚本Windows脚本文件也可以像普通可执行文件那样直接执行:通过“我的电脑”打开脚本文件所在的文件夹,然后双击它。通过Windows“开始”菜单的“运行”命令,键入脚本文件的完整路径名。在命令提示符中键入脚本文件的完整路径名。2023/2/2中山大学计算机科学系4.2.3使用

Windows脚本帮助微软在发布WSH5.6时,也为脚本开发者提供了一个名为“MicrosoftWindows脚本技术”的说明文档(CHM格式)。它提供了对JScript、VBScript、脚本运行时库和Windows脚本宿言等技术的详细描述。还可以到微软的脚本中心站点()获取大量的脚本应用技术及实例。2023/2/2中山大学计算机科学系4.3JavaScript编程基础本节介绍最基本的编程概念,即常量、变量、运算符、表达式及其类型。4.3.1数据类型与常量(一)数值型(1)整数十进制:使用0~9的数字序列表示。例如:25,+234,-998,085。八进制:使用0~7的数字序列表示,并且首位必须是0。例如:0235,-065。十六进制:使用0~9、A、B、C、D、E、F(或a、b、c、d、e、f)的数码序列表示,并且前两位必须是0X或0x。例如:0x235,-0XA8,0XEF。2023/2/2中山大学计算机科学系4.3.1数据类型与常量(2)浮点数浮点数是可以有小数部分的数值。浮点数常量只能采用十进制,表示形式有两种:普通形式。由整数部分、小数点和小数部分组成,如:3.2、12.0、12.、.5、-1.8。指数形式。如5.34e5(表示5.34×105)、312E-4(表示312×10-4)。其中,e(或E)后面的指数是-324~308之间的整数。如23e4321和1.2e2.5等都是不合法的。另外,JavaScript用一个特殊的数值常量NaN(NotaNumber的缩写,即“非数字”)表示无意义的数学运算结果。2023/2/2中山大学计算机科学系4.3.1数据类型与常量(二)字符串型字符串用于表示文本数据,由0个或多个字符组成的序列组成。在表示字符串常量时,必须为字符串首尾添加成对的双引号“"”或单引号“'”,如:"Helloword!"'世界,您好!'"a"或'a''"Hi!"Isaid.'转义字符是指以反斜杠“\”开头,后跟一个或多个字符。4.3.1数据类型与常量(二)字符串型转义字符是指以反斜杠“\”开头,后跟一个或多个字符。

\b退格符\f换页符

\n换行符\r回车符

\t制表符\'

单引号

\"

双引号\\反斜杠例4.5

WScript.Echo("在字符串中,通过换码字符\\,既可加入单引号\',也可以加入双引号\"");2023/2/2中山大学计算机科学系4.3.1数据类型与常量(三)布尔型布尔型(Boolean)就是逻辑型,只有两个值:逻辑“真”和逻辑“假”,分别对应于布尔常量true和false。(四)其他类型的常量null是空值常量,表示空的或不存在的对象引用。undefined是未定义值常量,表示变量还没有赋值。2023/2/2中山大学计算机科学系4.3.2

变量变量是程序中一个已命名的存储单元。它有两个基本特征,即变量名(标识变量的名称)和变量值(变量存储的数据)。另外,变量的值可以通过赋值发生变化;不过,在为变量赋予新值之前,变量一直保持它原先所存储的数据。2023/2/2中山大学计算机科学系4.3.2

变量(一)变量命名①变量名由以字母或下划线开头的字母A~Z或a~z、数字0~9和下划线(_)构成的字符序列组成。如:page1、_hg、X1_1②不能使用JavaScript保留字,如var。③JavaScript变量名是区分大小写的。如n与N④为了提高程序的可读性,要选择易于记忆、有意义的变量名。如age⑤也可以使用中文字符命名JavaScript变量2023/2/2中山大学计算机科学系4.3.2

变量(二)变量声明使用关键字var声明变量,格式如下:varvariablename;也可以同时声明多个变量,如:varname,age,weight;(三)为变量赋值①方法一:声明变量的同时也给出初始值。如:varname="张三";②方法二:使用赋值语句为变量赋值。如:age=20;2023/2/2中山大学计算机科学系4.3.2

变量(四)读取变量的值若要取一个变量的值,则可以把该变量名放在一个常量可以出现的位置。例4.6了解变量的基本用法和含义,以及注释。varname; //声明变量namename="张三"; //把字符串“张三”存储到变量name中age=20; //变量age被隐式声明,并赋值整数20/*以上语句声明两个变量name、age,并赋值;以下语句取出这两个变量的值、并使用WScript.Echo方法输出。*/WScript.Echo(name); //取出变量name的值,并输出WScript.Echo("今年"); //输出字符串“今年”WScript.Echo(age); //读取变量age的值,并输出WScript.Echo("岁"); //输出字符串“岁”2023/2/2中山大学计算机科学系4.3.2

变量(五)变量类型在JavaScript中,变量类型是指变量值所属的数据类型。由于JavaScript是一种弱类型的编程语言,允许把任何类型的数据赋值给变量,因此JavaScript变量的类型是动态的,只有在程序运行时才能动态确定。例4.7编写以下JavaScript程序并使用CScript执行,以了解变量类型的动态性。varx=20;WScript.Echo(typeof(x));x="您好";WScript.Echo(typeof(x));x=true;WScript.Echo(typeof(x));2023/2/2中山大学计算机科学系4.3.2

变量(六)简述变量的作用域变量的作用域是指变量起作用的范围,在该范围内可引用该变量。在引入函数概念之前,本章大多数示例使用的都是全局变量,其作用范围是同一个脚本文件,也就是说,只要定义了一个变量,那么在同一个脚本文件中的后续脚本就可以使用它。2023/2/2中山大学计算机科学系4.3.3运算符与表达式4.3.3.1基本概念运算符是指定计算操作的符号(如+、-、*、\等)。其中,把被计算的值称为操作数。依赖操作数的个数,可将运算符分为单目运算符、双目运算符和三目运算符。表达式是运算符和操作数组合而成的式子,如123、x、x+100表达式具有值,这个值是对操作数实施运算符所确定的计算后产生的结果值。例如,如果有定义“varx=123;”,那么123、x、x+100的值分别是数值123、123、223。2023/2/2中山大学计算机科学系4.3.3运算符与表达式4.3.3.2运算符的优先级在计算复杂表达式时,先要计算子表达式的值,而计算这些子表达式的顺序依赖于运算符的优先级(优先级越高越先计算)。例尽量使用简单的表达式2023/2/2中山大学计算机科学系4.3.3运算符与表达式4.3.3.3运算符的结合性当表达式中连续出现的几个运算符优先级相同时,其运算顺序由结合性决定,分为:左结合:是指左边的运算符优先计算,如

10-2-5右结合:是指右边的运算符优先计算,如

x=y=1002023/2/2中山大学计算机科学系4.3.3运算符与表达式4.3.3.4表达式中的类型转换JavaScript会根据运算符的特性和操作数的类型进行隐式类型转换。例4.8求100+300、100+"300"、"100"+300和"100"+"300"。例4.9求100-300、100-"300"、"100"-300和"100"-"300"。例4.10求true+100、true+"100"、true+false、true-false。例4.11求表达式"a"–100的值。控制方法⑴对于+运算符:①如果有一个操作数为字符串,则为字符串连接运算;②如果两个操作数都不是字符串,则是算术加运算。⑵对于其他运算符,自动把操作数转换为相应类型⑶使用函数parseInt()和parseFloat()显式转换2023/2/2中山大学计算机科学系4.3.4JavaScript运算符4.3.4.1算术运算符JavaScript算术运算符的操作数和计算结果都是数值型,包括+、-、*、/、%、++x、x++、--x、x--例

10%3//等于1//若有varx=100,y;y=++x;y=x++;y=--x;y=x--;例4.12

买东西付了$105,税率为0.05,那么标价是多少?一共又付了多少税钱?2023/2/2中山大学计算机科学系4.3.4JavaScript运算符4.3.4.2关系运算符关系运算符(又称比较运算符)对操作数进行比较,返回一个布尔值。包括<、<=、>、>=、==、!=、===、!==比较运算符的操作数一般为数值型数据,但也可以是其他类型的数据:如果两个操作数都是字符串,则进行字符串比较运算(比较字符的Unicode码值)。例如:"a"=="a"、"ab"=="ab"、"a"<"ab"、"ab"<"a"、"xyz">"XYZ"、"x">"XYZ"如果至少有一个操作数不是字符串,就先将非数值型操作数转换为数值,然后进行数值比较运算。例如:2>"10"、1>true、true>false、2=="0X2"、1==true、"true"==true2023/2/2中山大学计算机科学系4.3.4JavaScript运算符4.3.4.3逻辑运算符逻辑运算符的操作数和计算结果都是布尔值,包括&&、||、!例如,若有变量x,则判断“x是属于[10,99]之间的数值”的表达式写成:

x>=10&&x<=99判断“x是大于100或小于10的正数”的表达式写成:

x>100||(x<10&&x>0)2023/2/2中山大学计算机科学系4.3.4JavaScript运算符4.3.4.4位操作运算符位操作运算符用于对整数的二进制位进行操作,计算结果仍为整数,包括&、|、^、<<、>>、>>>例4.13

vara=4,b=7,c=2,result;WScript.Echo("a=4(0100),b=7(0111),c=2");result=a&b;WScript.Echo("a&b="+result);result=a|b;WScript.Echo("a|b="+result);result=a^b;WScript.Echo("a^b="+result);result=a<<c;WScript.Echo("a<<c="+result);result=a>>c;WScript.Echo("a>>c="+result);result=a>>>c;WScript.Echo("a>>>c="+result);result=-1>>2;WScript.Echo("-1>>2="+result);result=-1>>>2;WScript.Echo("-1>>>2="+result);2023/2/2中山大学计算机科学系4.3.4JavaScript运算符4.3.4.5赋值运算符最基本的赋值运算符是等于号(=),用于对变量进行赋值。另外,一些运算符也可以和等于号(=)联合使用,构成组合赋值运算符,如=、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>=2023/2/2中山大学计算机科学系4.3.4JavaScript运算符4.3.4.6条件运算符条件运算符格式如下:

condition?true_result:false_result如果condition为真,则表达式的值为true_result子表达式的值,否则为false_result子表达式的值。例4.14varage,status;age=20;status=(age>=18)?"已成年":"未成年";WScript.Echo("小李"+status);2023/2/2中山大学计算机科学系4.3.4JavaScript运算符4.3.4.7其他运算符JavaScript还包含其他几个特殊的运算符,如.字段访问[]数组下标()函数调用,顺序执行两个表达式Delete对象中删除一个属性,数组中删除一个元素

New对像创建Typeof对像类型Void对表达式求值,并返回undefined2023/2/2中山大学计算机科学系4.4

JavaScript流程控制JavaScript支持结构化程序设计方法,即支持顺序、选择和循环这三种流程结构。所谓顺序结构就是指构成JavaScript程序的多条语句按照它们的书写顺序从头到尾依次执行在JavaScript中,每条语句应该以一个分号(;)结束,不过有时没有分号也不会出错。另外,JavaScrip允许把多条语句写在同一行中,此时,语句之间就一定要加上分号。2023/2/2中山大学计算机科学系4.4.1宿主的输入与输出功能JavaScript语言没有直接提供输入与输出的语句,只能借助脚本宿主对象所提供的有关方法进行基本的输入与输出。(一)使用WScript对象的Echo方法命令格式:WScript.Echo([Arg1][,Arg2][,Arg3]...);例如:WScript.Echo("HelloWorld!");WScript.Echo("Hello","World!");WScript.Echo("1+2","=",1+2);2023/2/2中山大学计算机科学系4.4.1宿主的输入与输出功能(二)使用WScript.Shell对象的Popup方法命令格式:iB=object.Popup(strText,[nSecondsToWait],[strTitle],[nType])例4.15varshell=WScript.CreateObject("WScript.Shell");varBtnCode=shell.Popup("您来过中大吗?",8,"确认框示例",1);varvisited=(BtnCode==1);varshow_text=visited?"您也认为中大很美吧!":"欢迎您有机会来中大参观!";WScript.Echo(show_text);2023/2/2中山大学计算机科学系4.4.1宿主的输入与输出功能(三)使用WScript的标准输入/输出流对象StdIn、StdOutWScript的子对象StdIn、StdOut分别对应于Windows命令符窗口中的标准输入、输出流,因此,这两个对象只有用CScript执行才有效。WScript.StdIn对象的ReadLine方法从标准输入流中读取一行文本;而WScript.StdOut对象的WriteLine方法则是向标准输出流输出一行文本。例4.16

WScript.StdOut.WriteLine("请输入您的姓名:");varname=WScript.StdIn.ReadLine();WScript.StdOut.WriteLine("尊敬的"+name+":欢迎您进入脚本世界!");2023/2/2中山大学计算机科学系4.4.2选择结构JavaScript支持if语句和switch语句4.4.2.1if语句一、if…else语句if语句的基本形式是:if(判定条件)

语句1;

else

语句2;这种形式的if语句支持典型的二路选择结构,也就是,根据某种情况的判断,要么执行语句A,要么执行语句B。语句A和语句B不会同时执行。2023/2/2中山大学计算机科学系4.4.2选择结构例4.17分别输入两个数给变量x、y,然后求出这两个变量中的最大值。varx,y,max;WScript.StdOut.WriteLine("x=");x=parseFloat(WScript.StdIn.ReadLine());WScript.StdOut.WriteLine("y=");y=parseFloat(WScript.StdIn.ReadLine());if(x>y)//若x>y,则x是最大值,否则y是最大值max=x;elsemax=y; WScript.StdOut.WriteLine("最大值是:"+max);2023/2/2中山大学计算机科学系4.4.2选择结构二、没有else部分的if语句if语句的简单形式:if(判定条件)语句;例4.18改写例4.17,要求不使用else部分。编程思路:先假定x最大,如果假定不成立,那么y的值就最大。max=x; //先假定x的值最大if(max<y)max=y;WScript.StdOut.WriteLine("最大值是:"+max);好处:便于改为求3个甚至更多变量的最大值。max=x;if(max<y)max=y;if(max<z)max=z;…2023/2/2中山大学计算机科学系4.4.2选择结构三、程序代码的书写格式问题建议格式:if(x>y)max=x;elsemax=y;或if(x>y)max=x;else//else与if对齐

max=y;不好格式:if(x>y)或if(x>y)max=x;elsemax=y;max=x;elsemax=y;注重程序可读性2023/2/2中山大学计算机科学系4.4.2选择结构四、使用语句组语句组:用大括号括起来的一组语句序列。在语法上,语句组相当于单条语句。例4.19

求两个变量的最大值和最小值...if(x>=y){//必须用花括号{}括起以下两条语句,使之成为语句组;否则将出错。

max=x;min=y;}else{//同样必须用花括号{}括起以下两条语句,使之成为语句组

max=y;min=x;}WScript.StdOut.WriteLine("最大值是:"+max+";最小值是:"+min);2023/2/2中山大学计算机科学系4.4.2选择结构五、论变量的使用变量的基本用途:存储初始值和计算结果,以及中间变量例4.20

分别输入两个数给变量x、y,然后对这两个数进行由小到大的排序,使x、y分别存储这两个数中的最小值和最大值。if(x>y){//交换变量x,y的值

temp=x;x=y;y=temp;}WScript.StdOut.WriteLine("排序后,x="+x+";y="+y)2023/2/2中山大学计算机科学系4.4.2选择结构六、if语句的嵌套可以把一个if语句当成另外一个if语句的语句部分来用,这就是所谓的if语句的嵌套。例4.21

根据成绩给出学生的考评:如果成绩>=85,就考评“优”,否则如果成绩>=60,就考评“及格”,否则考评为“不及格”。格式调整2023/2/2中山大学计算机科学系4.4.2.2switch语句格式:switch(表达式){case表达式1:

语句1;[break;]case表达式2:

语句2;[break;]…default:

语句n+1;[break;]}2023/2/2中山大学计算机科学系4.4.2.2switch语句例4.22常识问答,请选择“中国的首都是哪个城市?A.沈阳B.广州C.北京D.上海”switch(answer){case"a":case"A":WScript.StdOut.WriteLine("错!沈阳是中国东北部的大城市");break;case"b":case"B":WScript.StdOut.WriteLine("错!广州是中国南部的大城市");break;...default:WScript.StdOut.WriteLine("选择错误!只能选填字母A、B、C或D");break;}2023/2/2中山大学计算机科学系4.4.3循环结构当一些语句需要反复执行时,就要用到循环结构的语句,即循环语句。JavaScript常用的循环语句主要是for语句、while语句以及do…while语句。2023/2/2中山大学计算机科学系4.4.3.1for语句for语句格式:for(初值表达式;循环判定式;更新表达式)循环体语句;for语句执行步骤:2023/2/2中山大学计算机科学系4.4.3.1for语句例4.23

求1+2+3+…+100的累加和。编程思路:使用变量i作为循环变量,从1开始,每次加1,直至100;而sum作为累加器变量,累加i所遍历的值,其效果就是计算1+2+3+…+100vari,sum=0;//sum是累加器变量,初值0for(i=1;i<=100;i++){//在每次循环时,循环变量i的值依次是1,2,3,...,100sum+=i;//累加循环变量i所遍历的值1,2,3,...,100}WScript.Echo("1+2+3+...+100=",sum);2023/2/2中山大学计算机科学系4.4.3.1for语句例4.24

显示十六进制数的数码0123…ABCDEF编程思路:使用一个循环变量(如i)遍历十六进制数的16个数码for(i=0;i<16;i++)//i遍历每个数码{switch(i){//将十进制数i转换为对应的十六进制数码

case10:digit="A";break;case11:digit="B";break;...default:digit=i;break;//0…9}digits=digits+digit;}WScript.Echo("十六进制的16个数码是:",digits);2023/2/2中山大学计算机科学系4.4.3.2while语句while语句格式:while(循环判定式)循环体语句;while循环的执行步骤如下:2023/2/2中山大学计算机科学系4.4.3.2while语句例4.25使用while语句求1+2+3+…+100编程思路:vari,sum;i=1;sum=0;//i是循环变量,初值1;而sum是累加器变量,初值0while(i<=100){//在每次循环时,循环变量i的值依次是1,2,3,...,100sum+=i;//累加循环变量i所遍历的值1,2,3,...,100i++;}WScript.Echo("1+2+3+...+100=",sum);2023/2/2中山大学计算机科学系4.4.3.3dowhile语句dowhile语句格式:

do循环体语句while(循环判定式);dowhile循环的执行步骤如下:2023/2/2中山大学计算机科学系4.4.3.3dowhile语句例4.26使用do…while语句求1+2+3+…+100编程思路:vari,sum;i=1;sum=0;//i是循环变量;sum是累加器变量do{//在每次循环时,循环变量i的值依次是1,2,3,...,100sum+=i;//累加循环变量i所遍历的值1,2,3,...,100i++;}while(i<=100);WScript.Echo("1+2+3+...+100=",sum);在形式上dowhile语句把判定式while(i<=100)放在语句后部,并且后面要加上分号“;”2023/2/2中山大学计算机科学系4.4.3.3dowhile语句dowhile的特点是至少执行一次循环体语句。例4.27

编写一个二位整数相加的测试程序。要求程序随机生成两个二位整数,提示用户回答它们的相加结果,根据用户回答给出“答对”或“答错”的提示,并且允许用户决定是否继续答题,如果继续就再出题,否则就结束。编程思路:2023/2/2中山大学计算机科学系4.4.3.3dowhile语句varx,y,result,answer,prompt,go_on_s,go_on;do{//先出题,再答题

x=Math.floor(Math.random()*90)+10;//随机生成两个二位整数

y=Math.floor(Math.random()*90)+10;result=x+y;//计算标准答案

WScript.StdOut.WriteLine(x+"+"+y+"=");answer=parseInt(WScript.StdIn.ReadLine());//输入用户的答案

prompt=(answer==result?"答对":"答错")+"!继续答题吗?(Y:继续;其他键退出)";WScript.StdOut.WriteLine(prompt);go_on_s=WScript.StdIn.ReadLine();//输入用户是否继续答题的字符,但仍然要按回车键结束

go_on=(go_on_s=="Y"||go_on_s=="y");}while(go_on);2023/2/2中山大学计算机科学系4.4.3.4使用break和continuebreak语句也经常用在循环体中。当程序执行到循环体中的break语句时就结束整个循环语句。continue语句只能用在循环体中,其作用是跳过循环体中未执行的语句,结束本次循环,跳至求循环判定式,决定是否继续循环。continue语句和break语句的区别是:continue只是结束本次循环体的执行,而break则是结束整个循环语句的执行。通常,continue语句和break语句在循环体中与if语句配合使用,从而控制循环。2023/2/2中山大学计算机科学系4.4.3.4使用break和continue例4.28使用break语句实现例4.27varx,y,result,answer,prompt,go_on_s;while(true){//先出题,再答题x=Math.floor(Math.random()*90)+10;y=Math.floor(Math.random()*90)+10;result=x+y;//计算标准答案WScript.StdOut.WriteLine(x+"+"+y+"=");answer=parseInt(WScript.StdIn.ReadLine());prompt=(answer==result?"答对":"答错")+"!继续答题吗?(Y:继续;其他键退出)";WScript.StdOut.WriteLine(prompt);go_on_s=WScript.StdIn.ReadLine();if(go_on_s!="Y"&&go_on_s!="y")break;}2023/2/2中山大学计算机科学系4.4.3.4使用break和continue例4.29累加用户输入的正数,如果输入字符“Q”,就不继续输入,并显示累加结果。varinput,input_number,sum;for(sum=0;;)//sum作为累加器,初值为0{WScript.StdOut.WriteLine("sum="+sum+",\t请输入新的累加数(输入Q结束):");input=WScript.StdIn.ReadLine();if(input=="Q"||input=="q")break;//结束累加input_number=parseFloat(input);if(isNaN(input_number))continue;//不能累加NaNif(input_number<=0)continue;//不累加非正数sum+=input_number;//累加有效正数}WScript.StdOut.WriteLine("sum="+sum);2023/2/2中山大学计算机科学系4.4.3.5循环的嵌套在一个循环语句的循环体中也可以包含另一个循环语句,这称为循环的嵌套。例4.30

显示一个“9×9乘法表”。编程思路:第j列显示j与j~9依次相乘的结果。9×9乘法表的每一项其实就是“列号*行号”2023/2/2中山大学计算机科学系4.4.3.5循环的嵌套vari,j,output=""for(i=1;i<=9;i++)//外循环:行号i从1~9{for(j=1;j<=i;j++)//内循环:列号j从1~i{if(j>1)output+="\t";//使输出各项上下对齐

output+=j+"*"+i+"="+j*i;//9×9乘法表的每一项其实就是“列号j*行号i”}output+="\n"//换行}WScript.Echo(output);//一次性输出“9×9乘法表”2023/2/2中山大学计算机科学系4.5 调试JavaScript程序程序出错分为两类:语法错误;语义错误。所谓调试程序就是排除程序中的错误。2023/2/2中山大学计算机科学系4.5.1词法、语法和语义规则(1)词法:组成合法语句的基本单元称为单词,构成合法单词的规则称为词法。如语句“x1=2”中的x1、=、2是合法单词,而1x不是合法变量名。(2)语法:具有特定含义的符号串称为语句,构成合法语句的规则称为语法。例如:语句“x=*2”符合词法,但不符合语法规则。(3)语义:合法语句的实际含义称为该语句的语义。对语义的理解是否准确,直接影响程序的正确性和可靠性。例如:在JavaScript中,“x==2”表示判断变量x与数值2是否相等,而“x=2”却表示将2赋值给x。2023/2/2中山大学计算机科学系4.5.2排除语法错误语法错误是指写出的程序代码不符合语法规则,比如,变量名使用关键字、括号不匹配、if语句中判定条件式没有用圆括号括起来,等等。Windows脚本宿主在执行含有语法错误的脚本程序时,会提示出现了什么错误以及出错位置。例4.31

以下程序有语法错误,请排除。...ifx>y//将出错,if判定条件式必须用圆括号括起来

max=x;elsemax=y; WScript.Echo("最大值是=",max);2023/2/2中山大学计算机科学系4.5.3排除语义错误语义错误是指编写的程序代码符合语法规则,能够正常执行,但是执行的结果不符合要求。导致语义错误的常见情况是对流程控制语句使用不当或者对变量赋予了一个不恰当的值。对于这种情况,可以使用专业的调试工具,通过跟踪程序的一步步执行并且查看执行中变量值的变化情况来排除程序中的语义错误。2023/2/2中山大学计算机科学系4.5.4使用Microsoft脚本编辑器调试程序Microsoft脚本编辑器是一种专业化的脚本编辑和调试工具,是MicrosoftOffice的可选组件之一。使用示例例4.32第一步:在调试器中执行脚本

CScriptE:\Scripts\S0432.js//X第二步:设置断点、执行到断点第三步:逐语句执行,观察变量x、y值的变化第四步:找到问题后,结束本次调试2023/2/2中山大学计算机科学系4.6

JavaScript函数4.6.1什么是函数函数是编制程序时定义的一个语句序列,其作用是执行一项单一任务或一系列任务。例如,一个函数可能是输出一行文本,也可能是计算一个数值并把它返回给主程序。使用函数的一个好处在于它的可重用性。2023/2/2中山大学计算机科学系4.6.2使用预定义函数所谓预定义函数是指不必自己定义、直接就可使用的函数。一、eval()函数:计算在字符串中的表达式的值例4.33求用户输入的任意常量表达式的值。二、isNaN()函数isNaN()函数用于确定一个变量是否是NaN。2023/2/2中山大学计算机科学系4.6.2使用预定义函数三、parseFloat()函数parseFloat()函数将字符串转换为浮点数。如:parseFloat("123.45")\\123.45parseFloat("123.45abc")\\123.45parseFloat("abc123.45")\\NaNparseFloat(true)\\NaN四、parseInt()函数parseInt()函数与parseFloat()类似parseInt("123.45")\\123parseInt("123.45abc")\\123parseInt("abc123")\\NaNparseInt(true)\\NaN2023/2/2中山大学计算机科学系4.6.3函数定义与函数调用4.6.3.1函数定义定义格式:function自定义函数名(){

函数体}例4.34

定义一个函数Hello(),这个函数的功能是输出文字“您好!”。实现程序如下:functionHello(){//自定义无参数的函数

WScript.Echo("您好!");}2023/2/2中山大学计算机科学系4.6.3函数定义与函数调用4.6.3.2函数调用与调用预定义函数一样,对自定义函数的调用形式也是“函数名()”例4.35

改写例4.34,通过函数调用实现文字“您好!”的输出。...Hello();调用流程2023/2/2中山大学计算机科学系4.6.3函数定义与函数调用4.6.3.2函数调用例4.35

改写例4.34,通过函数调用实现文字“您好!”的输出。functionHello(){//自定义函数,只有通过函数调用才能使该函数起作用

WScript.Echo("您好!");}Hello();//对自定义函数Hello()的调用,从而输出文字“您好!”2023/2/2中山大学计算机科学系4.6.4函数参数的使用4.6.4.1给函数添加参数定义函数的完整格式:function自定义函数名(形参1,形参2,...){

函数体}参数作用:为被调用的函数传递一个或多个值定义函数时指定的参数称为形式参数(形参);调用函数时为形参实际传递的值称为实际参数(实参)调用形式:函数名(实参1,实参2,...)2023/2/2中山大学计算机科学系4.6.4函数参数的使用例4.36

定义一个含有参数的函数Show(text),它输出参数text中的字符串。实现程序如下:functionShow(text){WScript.Echo(text);}Show("JavaScript真棒!");2023/2/2中山大学计算机科学系4.6.4函数参数的使用4.6.4.2使用多个参数当使用多个参数时,函数调用的各个实参按照其排列的先后顺序依次传递给函数定义中的形参。例4.37定义一个多参数函数Calculate(x,y,op),用于显示对形参x、y进行形参op指定的运算结果。functionCalculate(x,y,op){//对形参x,y进行形参op指定的运算(如+、-、*、/等),并显示

varexp,result;exp=x+op+y;result=eval(exp);WScript.Echo(x,op,y,"=",result);}Calculate(3,2,"+");Calculate(4,5,"-");Calculate(6,7,"*");Calculate(8,9,"/");2023/2/2中山大学计算机科学系4.6.5使用函数返回值4.6.5.1给函数添加返回值方法:

return表达式;例4.38

编写函数Max(x,y):functionMax(x,y){//求x,y中的最大值

varmax;if(x>y)max=x;elsemax=y;returnmax;//结束函数,并把变量max的值作为函数的返回值}varm;m=Max(100,200);WScript.Echo("Max(100,200)=",m);2023/2/2中山大学计算机科学系4.6.5使用函数返回值4.6.5.2区分函数和过程只返回undefined的函数称为过程。过程和函数的一个显著区别是:过程调用单独构成一条语句;而函数调用出现在表达式中。例4.39

如果一个正整数只能被1和自身整除,那么这个数就是素数。求出1~100之间的所有素数。编程思路:如果p能够被2、3、4、…p-1之中的任何数整除,那么p就不是一个素数,否则就是素数2023/2/2中山大学计算机科学系4.6.5使用函数返回值例4.39:functionsum1_n(n){//求1+2+...+n的累加和

varsum=0,i;for(i=1;i<=n;i++)sum+=i;returnsum;}functionsum_all(n){//求1+(1+2)+(1+2+3)+...+(1+2+...+n)varsum=0,i;for(i=1;i<=n;i++){//累加sum1_n(1)+sum1_n(2)+...+sum1_n(n)sum+=sum1_n(i);//调用函数sum1_n(i)求1~i的累加和

}returnsum;}varn,sum;WScript.StdOut.WriteLine("n=");n=parseInt(WScript.StdIn.ReadLine());sum=sum_all(n);//1至1~n的累加和的累加和WScript.StdOut.WriteLine(sum);2023/2/2中山大学计算机科学系4.6.6函数的嵌套调用4.6.6.1函数嵌套调用的形式在一个函数定义的函数体语句中出现对另一个函数的调用,这就是函数嵌套调用,如图4.41所示。当一个函数调用另一个函数时,应该在定义调用函数之前先定义被调用函数。2023/2/2中山大学计算机科学系4.6.6函数的嵌套调用例4.40

输入1个数n,求1+(1+2)+(1+2+3)+…+(1+2+…+n)的值。编程思路:引入只求1~n的累加和函数sum1_n(n),那么1到1~n的累加和分别是sum1_n(1)、sum1_n(2)、sum1_n(3)…sum1_n(n),最终将这些累加和加起来就可求解。2023/2/2中山大学计算机科学系4.6.6函数的嵌套调用例4.40

functionsum1_n(n){//求1+2+...+n的累加和

varsum=0,i;for(i=1;i<=n;i++)sum+=i;returnsum;}functionsum_all(n){//求1+(1+2)+(1+2+3)+...+(1+2+...+n)varsum=0,i;for(i=1;i<=n;i++){//累加sum1_n(1)+sum1_n(2)+...+sum1_n(n)sum+=sum1_n(i);//调用函数sum1_n(i)求1~i的累加和

}returnsum;}varn,sum;WScript.StdOut.WriteLine("n=");n=parseInt(WScript.StdIn.ReadLine());sum=sum_all(n);//1至1~n的累加和的累加和WScript.StdOut.WriteLine(sum);2023/2/2中山大学计算机科学系4.6.6函数的嵌套调用4.6.6.2解决嵌套调用引起的效率问题当使用多个函数时,可能会引起运行效率问题例4.41使用单重循环求

1+(1+2)+(1+2+3)+…+(1+2+…+n)编程思路:引入另一个累加器变量(如total),使该变量在每次循环时累加变量sum的值例4.41和例4.40的实现程序都能正确求解,其主要差异是运行速度。如果输入一个比较大的数(如n=10000),那么例4.41将立刻算出结果;而例4.40则运行时间较长初学编程时,要优先考虑程序的可读性2023/2/2中山大学计算机科学系4.6.6函数的嵌套调用例4.41

functionsum_all(n){//求1+(1+2)+(1+2+3)+...+(1+2+...+n)vari,sum,total;sum=total=0;//累加器变量初值0for(i=1;i<=n;i++){sum+=i;//变量sum遍历每项累加和,即1、(1+2)、(1+2+3)、...、(1+2+...+n)total+=sum;//累加变量sum遍历的每项累加和

}returntotal;}varn,sum;WScript.StdOut.WriteLine("n=");n=

温馨提示

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

评论

0/150

提交评论