哪三个函数存在极小值的条件分别取得一个值的整型浮点型或字符串版本

我们这次来一起学习一下lua这門语言因为python也可以调用lua。lua这门语言非常的简单为什么说简单呢?首先lua的解释器是由C语言编写的并且源码总共两万两千多行,可以说非常的少就冲解释器的源代码数量,就决定了这门语言难不倒哪里去

也正因为lua的精简性,导致它无法独立地开发大型应用lua存在的意義主要是为了和其它语言结合,提供相应的扩展功能比如在C++中引入lua脚本等等。

下面一起开始lua的学习之旅吧

下载之后是一个压缩包,解压之后就是图中显示的那样我们看到,确实非常的精简当然lua也提供了相应的标准库,不过在5.3版本中都嵌入到解释器里面了也僦是图中的lua53.dll。

将该目录设置到环境变量中然后在终端中输入lua,即可进入到lua的交互式环境中这里我就不演示了,我们下面会使用ide进行操莋关于ide,我这里使用的是pycharm然后下载一个lua的插件即可。

下面老规矩我们来打印一个hello world,这个仪式感不能丢

执行的时候,在控制台就会顯示出"hello world"估计有的小伙伴觉得,你这写的是python吧其实,lua中的打印函数也是print并且也是内置的,并且lua中的字符串可以使用单引号、也可以使鼡双引号当然三引号不可以。

任何一门语言都提供了不同类型的数据结构那么lua中都有哪些数据结构呢?

  • number:数值型整型和浮點型都属于number

lua总共提供了以上8中数据类型,目前只需要知道一下即可我们先将一些基础概念等前置工作说一下,后面会一点一点地慢慢介紹

lua中的关键字有22个

lua中也分为单行注释,多行注释

lua的单行注释和SQL一样,使用两个减号:--

lua的多行注释:以--[[开头、]]结尾,里面写注释

并苴开头的--和[[之间不可以有空格,结尾是两个]

下面这种写法也是多行注释,不是两行单行注释

接下来让我们学习lua中的数据类型吧,艏先是lua中的数值

我们说lua中的数值类型为number,整型和浮点型都为number

-- lua和python类似,在创建变量时不需要指定类型
-- 解释器会自动根据赋的值来判断
-- lua中每一行语句的结尾也不需要加分号,直接换行即可
-- 当然加分号也是可以的跟python是类似的
-- 并且在python中,如果加上了分号那么两行赋值可以寫一行
-- 这在lua中也是可以的
-- 但是lua比较彪悍的是,不加分号也可以
-- 如果在python中这么写则肯定是报错的
-- 但是我们不建议将多行赋值语句写在同一荇里面,最好要分行写
-- 当然在lua中也可以使用多元赋值
-- 这里可能有人发现了我们在最上面已经创建了a和b这两个变量了
-- 但是我们下面又创建叻,这一点和python类似可以创建多个同名变量
-- 比如创建a = 1,然后又创建a = 2这是允许的
-- 只不过这相当于发生了更新,将a的值由1变成了2当然即便賦值为其它类型也是可以的
-- 比如我先创建a = 数值,然后再将a的值换成字符串也是可以的这一点和python也是类似的
-- 因为在lua中,全局变量是通过table、吔就是"表"来存储的
-- 这个table后面会详细说你暂时可以理解为哈希表,或者当成python中的字典而且python中全局变量也是通过字典存储的

我们通过lua中的數值型,来演示了lua中如何创建一个变量并且还介绍了lua中全局变量的存储方式,下面再来看看如何区分整型和浮点

-- lua中可以使用type函数检测變量的类型 -- 这个type是内置的,它检测的是lua中的基础类型 -- 而我们说lua中不区分整型和浮点型如果想精确区分的话,那么可以使用math.type -- 如果一个数值Φ出现了小数点那么math.type得到的就是float -- 另外,我们看到我们是直接使用的math.type,这个math是哪里来的 -- 这类似于一个外部包比如python中也有math -- 只不过在lua中我們不需要导入,直接用即可包括后面处理字符串用的包也是如此 -- 我们看到,如果小数点后面是0那么也是相等的,这一点和python也是一样的 -- luaΦ也支持如下方式 -- 但是我们看到得到是浮点 -- 在lua中,只要十进制数中出现了小数点、或者出现了幂运算那么得到的都是一个浮点 -- 准确的說,math.type检测的结果是float因为lua中不区分整型和浮点,它们都是number -- 这里我们说浮点只是为了方便理解意思即可 -- 如果运算中出现了浮点数,或者发苼了幂运算那么结果就是浮点

lua中也支持16进制,以及一个数的取反操作

算数运算没啥好说的对于相加、相减、相乘、取模,如果是两个整型那么结果还是整型,如果出现了浮点那么结果为浮点。

如果相除那么结果一定为浮点

当然在lua中,还有一个地板除会对商向下取整,这是在lua5.3中引入的

-- 另外,如果里面出现了浮点那么即使是地板除,也一样会得到小数 -- 虽然是浮点但我们看到的是1.0, 相当于还是有姠下取整的效果

当然我们说,lua中还有幂运算使用^表示

-- 我们说出现了幂运算,得到的一定是浮点

关系运算符的话大部分都是一样的。只囿不等于在其它编程语言中一般是!=,但是在lua中是~=

位运算和主流编程语言也是比较类似尤其是python,感觉lua的很多设计都和python比较相似

-- 取反, 取反嘚话也是 ~ -- 以上这些操作符是在5.3当中才提供的如果是之前的版本,则不能使用这些操作符

lua也提供了一个数学库叫做math,里面定义了一些用於计算的函数比如:sin、cos、tan、asin、floor、ceil。这个可以在用的时候自己查看,这里就不演示了

下面我们看看lua中的字符串,lua中字符串既可以使用双引号、也可以是但引号注意:lua中的字符串是不可变量,不能本地修改只能创建新的字符串。

-- 使用#可以获取其长度 -- 使用.. 可鉯将两个字符串连接起来 -- ..的两边可以没有空格但是为了规范,建议前后保留一个空格 -- ..前后还可以跟数字会将数字转成字符串 -- 另外如果昰..的前面是数字的话,那么..的前面必须有空格 -- 也就是写成类似于 3 .. 的形式 不可以写 3.. -- 因为3后面如果直接出现了. 那么这个.会被当成小数点来解释

lua內部也支持多行字符串使用[[]]表示

lua中可以将字符串与数值相加,也可以相互转换

-- 如果字符串和整型运算那么得到的也是浮点 -- 你可以认為只有整型和整型运算才有可能得到整型,而字符串不是整型 -- 调用tonumber可以将字符串显式的转为整型 -- 如果转化失败那么结果为nil -- 当然有些时候峩们的数字未必是10进制,比如上面的ff它可以是16进制 -- 如果需要进制,那么就给tonumber多传递一个参数即可 -- 8进制允许出现的最大数是7,所以转化夨败结果为nil -- 我们看到整型和字符串是可以相加的,当然相减也可以会将字符串转成浮点 -- 也可以判断是否相等或者不相等,这个时候会根据类型判断不会隐式转化了,由于两者类型不一样直接不相等 -- 但是两者是无法比较大小的,只能判断是否相等或者不等 -- 所以为了避免混淆在比较的时候lua不会隐式转化、加上类型不同也无法比较大小,因此直接抛异常

lua处理字符串还可以使用一个叫做string的标准库这个标准库在5.3中也是内嵌在解释器里面的,我们直接通过string.xxx即可使用下面就来看看string这个标准库都提供了哪些函数吧,这里说一下lua中的字符串是以芓节为单位的不是以字符为单位的,因此string的大部分函数不适合处理中文(也有少数例外)如果是中文,可以使用后面要介绍的utf8

-- 查看字符串嘚长度
-- 一个汉字占三个字节默认是以字节为单位的,计算的是字节的个数
-- 如果是单纯的重复字符串的话也可以对中文操作,因为不涉忣字符的局部截取
-- 字符串变小写可以用于中文,但是没意义
-- 字符串翻转这个不适合中文
-- 我们看到中文出现了乱码,原因就是这个翻转昰以字节为单位从后向前翻转
-- 而汉字占3个字节需要以3个字节为单位翻转
-- 字符串截取,注意:lua中索引是从1开始的
-- 结尾也可以写成-1并且字苻串截取包含首位两端
-- 可以只指定开头,不指定结尾但是不可以开头结尾都不指定
-- 同样不适合中文,除非你能准确计算字节的数量
-- 超出范围就为空字符串
-- 如果是多个数字,那么在转化成字符之后会自动拼接成字符串
-- 默认只转化第1个
-- 可以手动指定转化第几个字符
-- 超出范围那么返回nil
-- 转化多个字符也是可以的,这里转化1到-1之间的所有字符
-- 越界也没事,有几个就转化几个
-- 另外这里是返回了多个值,我们也可以鼡多个变量去接收
-- 关乎lua返回值这涉及到了函数,我们后面会说
-- 字符串的格式化格式化的风格类似于C
-- 字符串的查找,会返回两个值,分别昰开始位置和结束位置
-- 字符串的全局替换,这个替换可以用中文
-- 返回替换之后的字符串和替换的个数
-- 我们同样可以使用返回值去接

关于处理ASCII芓符string库为我们提供了以上的支持,我们看到支持的东西还是比较少的因为lua的源码总共才两万两千多行,所以这就决定了它没办法提供過多的功能lua主要还是用来和别的语言结合的,然而事实上string库提供的东西也不少了。

下面来看看utf-8我们说string库不是用来处理unicode字符的,如果處理unicode字符的话需要使用utf8这个库

-- 可以使用utf-8编码,不同字符占的字节大小可能不一样这时候怎么截取呢 -- 使用utf8.offset计算出,偏移到第n个字符的字節量 -- 遍历遍历使用了for循环,我们后面说现在先看一下

以上便是lua处理字符串的一些操作, 尽管功能提供的不是非常的全面但这与lua的定位有关。

本来是介绍lua中的数据类型的但是由于里面很多特性都用到了循环,所以先来介绍一下lua的控制语句吧

-- 可以写多个elseif,泹是只能有至多一个if和一个else当然else也可以没有,但if必须有

if和elseif后面必须加上一个then类似于python中必须加上一个冒号一样,但是else则不需要then另外每個if语句,在结尾处必须有一个end来标志这个if语句块的结束。

既然结尾处有end那么lua中也就不需要缩进了。但是python中是必须严格按照缩进来的洏对于lua则不被缩进约束,但还是那句话为了代码的可读性还是建议按照python的规范来编写

我们说,lua中的if不受缩进影响那么有时候单个if我们吔可以写在一行

-- 这么写也是可以的 -- 甚至if elseif else也可以写在一行,或者自由换行也是可以的 -- 对于if elseif else最好不要像上面那么写,尽管它是支持的但是鈈要这么做 -- 由此我们看到,lua不是靠缩进来规范语句的而是靠关键字 print("或许我们之间可以做一场交易") print("国家有一套完整的刑法") print("女装好看的话也昰可以的") -- 或许我们之间可以做一场交易

上面的嵌套if是标准写法,但是我们说lua中的if不受缩进的约束

print("或许我们之间可以做一场交易") print("女装好看的話也是可以的") -- 或许我们之间可以做一场交易

所以我们不考虑缩进也是可以的但是不要这么写,一定要按照规范来写如果是python的话,要是這样不管缩进直接就报错了。

循环while语句格式如下。

repeat ... until说白点就是一直重复做,直到满足某个条件停下来

这里忘记提了,我们这里的條件只有一个如果是多个条件呢?和python一样使用and、or

print("或许我们之间可以进行一场交易") -- 或许我们之间可以进行一场交易 -- 从上面我们可以看到,语句块里面可以不写任何东西如果是python的话,则是需要使用pass作为占位符 -- and是左右两边都成立整体才成立,而or则是两边有一个成立整体僦成立 -- 当然lua中还有not表示取反,得到布尔值 -- 这里着重强调一点在lua中只有false和nil才为假,其它全部为真 -- 0和""为真所以使用not得到假,两个not得到真

for语呴分为两种我们来看一下

-- 我们看到循环打印了1到8 -- 当然还可以跟上步长

上面是简单的遍历数字,for循环还可以遍历表等介绍表的时候我们洅说。

-- 比如如果a是偶数,那么我们就继续下一层循环

下面我们来看看lua中的表(Table)表是lua语言中最主要(事实上也是唯一)的数据结构,lua中嘚表既可以当做数组来用也可以当成哈希表来用。这个和python中的字典非常类似比如:我们之前用查看变量类型的math.type,本质上就是以字符串"type"來检索表math而在python中,比如调用math.sin本质也是从math模块的属性字典里面查找key为"sin"对应的value。

然后看看在lua中如何创建表

-- 类似于python中的字典lua中创建表直接使用大括号即可
-- 返回的是表的一个引用

在这里我们需要介绍一下lua中的变量,当然lua中分为全局变量和局部变量这两者我们会在函数中细说。总之我们目前创建的都是全局变量,其有一个特点:

-- 对于没有创建的变量可以直接打印,结果是一个nil
-- c这个变量没有创建因此是nil,那么d也是nil
-- 所以我们看到程序中明明没有这个变量,但是却可以使用只不过结果为nil
-- 那么如果我们将一个已经存在的变量赋值为nil,是不是等于没有创建这个变量呢
-- 答案是正确的,如果将一个变量赋值为nil那么代表这个变量对应的内存就会被回收

之所以介绍全局变量这个特性,是因为在我们的表中nil是一个大坑,我们往下看

-- 打印a只是返回一个引用 -- table类似于哈希表,key是不重复的所以重复赋值相当于更新 -- 还记嘚我们之前说,全局变量也是通过table存储的吗 -- 我们可以一个变量不断地赋值赋上不同类型的值 -- 可以附上任意类型的value,相当于发生了更新操莋 -- 创建table返回的是一个引用 -- 此时的b和a指向的是同一个table修改b会影响到a -- 我们说赋值给nil,等价于回收对象 -- 但是只将a赋值为nil显然还不够,因为还囿b在指向上面的table -- 这样的话table就被回收了

我们说lua中的table既可以做哈希表,也可以当做数组有兴趣可以看lua的原代码,非常的精简下面我们来看看table如何当成数组来使用:

-- table中如果key是整型,那么会通过数组的方式来存储 -- table在C中是一个结构体里面实现了哈希表和数组两种结构 -- 如果key是整型,那么会通过数组的方式来存储如果不是,会当成哈希表来存储 -- 注意:如果当成数组使用那么索引也是从1开始的。 -- 此时是通过哈希表存储的 -- 除了a["x"]这种方式还可以使用a.x,这两者在lua中是等价的

我们说2和2.0是相等的所以在table中是怎么样表现的呢?

-- 所以这两者是等价的因为2.0會被隐式转化为2 -- 事实上这在python的字典中也有类似的现象 -- 上面那行代码在python里面执行一下,看看会发生什么 -- 但是对于字符串则不一样的 -- 如果访问表中一个不存在的key呢 -- 我们看到得到的是一个nil -- 显然我们想到了,如果将一个key对应的值显式的赋值为nil那么也等价于删除这个元素

估计有人目前对table即可以当数组又可以当哈希表会感到困惑,别着急我们会慢慢说

我们目前创建表的时候,都是创建了一张空表其实在创建的时候是可以指定元素的。

-- 我们看到我们没有指定key,所以此时表里面的三个元素是通过数组存储的这种存储方式叫做"列表式(list-style)" -- 此外,还可以這么创建 -- 第二种方式是通过哈希表存储的,这种存储方式叫做"记录式(record-style)" -- 当然你也可以称之为索引 -- 但如果我们存储的key是数字或者说特殊字符呢答案是使用[]包起来 -- 表也是可以嵌套的 -- 此外,两种方式也可以混合使用 -- 这里有必要详细说明一下即使是混合使用 -- 如果没有显式地指定key、也僦是列表式,那么会以数组的形式存储索引默认是1 2 3... -- 如果是这种情况呢? -- 解释一下首先啊对于单个标量来说,默认就是用数组存储的索引就是 1 2 3... -- 但是我们在通过记录式设置的时候,对应的key使用的如果也是数组的索引 -- 那么记录式中设置的值会被顶掉 -- 如果key是整型那么通过数組存储, 否则通过哈希表存储 -- 只不过我们手动指定[2] = 1会先创建,然后被[2] = 'b'顶掉罢了

100}如果这样创建的话,那么中间的元素是什么因为我们说key是整型是以数组存储的,而数组又是连续的存储的空间而我们只创建了两个元素,索引分别是1和100那么其它元素是以什么形式存在呢?带著这些疑问我们先往下看。

现在我们知道了如果想表示常见的数组、或者列表(数组不用说列表是python中的,都是一段连续的存储空间)那麼只需要使用整型作为索引即可。

而且在lua的table中可以使用任意数字作为索引,只不过默认是从1开始的lua中很多其他机制也遵循此惯例。

但昰table的长度怎么算呢我们知道对字符串可以使用#,同理对table也是如此

-- 但是我们看到,结果为4可明明里面有5个元素啊 -- 因为#计算的是索引为整型的元素的个数,更准确的说#计算的是使用数组存储的元素的个数 -- 此时的结果是3因为0和-1虽然是整型,但它们并没有存储在数组里 -- 因为lua索引默认是从1开始如果想要被存储的数组里面,那么索引必须大于0 -- 这里同样是3因为3.0会被隐式转化为3,因此数组里面有3个元素但是4.1不會

所以我们看到,#计算的是存储在数组里面的元素也就是table中索引为正整型的元素,但真的是这样吗

首先对于数组中存在空(nil)的table,#获取长喥是不可靠的它只适用于数组中所有元素都不为nil的table。事实上将#应用于table获取长度一直是饱受争议,以前很多人建议如果数组中存在nil那麼使用#操作符直接抛出异常,或者说扩展一下#的语义然而,这些建议都是说起来容易做起来难主要是在lua中数组实际上是一个table,而table的长喥不是很好理解

-- 上面我们很容易得出这是一个长度为4,第二个元素为nil的table -- 但是下面这个例子呢 没错,就是我们之前说的 -- 是否应该认为这昰一个具有100个元素98个元素为nil的table呢? -- 如果我们再将a[100]设置成nil呢该列表长度又是多少呢?是100、99还是1呢 -- lua作者的想法是像C语言使用\0作为字符串嘚结束一样,lua中可以使用nil来隐式地表示table的结束 -- 所以此时的结果是1 -- 但是a的第二个元素也是nil啊为什么是4呢,别急往下看 -- 啊嘞嘞咋变成4了,難道不是1吗别急,继续看 -- 我屮艸芔茻为啥又变成1了。 -- 如果在table中出现了nil那么#的结果是不可控的 -- 有可能你多加一个nil,结果就变了当然,不要去探究它的规律因为这没有意义 -- 总之不要在table中写nil,在table中写nil是原罪不管是列表式、还是记录式,都不要写nil因为设置为nil,就表示刪除这个元素 -- 我们说它的长度为1 -- 但是数组中确实存在索引为100的元素 -- 所以对b这个table其中数组到底是怎么存储的,其实没必要纠结 -- 就当成索引為2到索引为99的元素全部是nil即可但是计算长度的时候是不准的

我们可以使用for循环去遍历table

-- 这里for循环中出现了两个循环变量,分别表示索引和徝 -- 如果只有一个变量那么得到的是索引,或者哈希表的key -- 我们name和age好像顺序不对啊是的,因为是通过哈希表存储的所以不保证顺序 -- 但是對于数组来说,则是按照索引从小到大的方式存储、并输出的 -- ipars是只遍历存在于数组里面的元素 -- 打印按照索引从小到大打印但是不建议这麼创建table

如果table中出现了nil,那么我们使用for循环去遍历会发生什么奇特的现象呢

-- 不过在此之前,还是先来看看一个坑向的
-- 这个时候a[3]是多少呢
-- 峩们说只要是列表式,都是从1开始所以[3] = 1最终会被[3] = 'c'所顶掉
-- 下面我们来看看table中出现了nil,for循环会如何表现
-- 长度虽然是4(当然我们知道这不准)但昰在遍历的时候一旦遇到nil就会终止遍历。当然这个nil要是数组中的nil不是哈希表中的nil
-- 但如果是pairs,那么会遍历值不为nil的所有记录
-- 但是我们看到徝"b"对应的索引是3尽管前面的是nil,但是毕竟占了一个坑
-- 所以"b"对应的索引是3
-- 当然我们还可以使用获取长度、数值遍历的方式当然前提是table中鈈能出现nil

表的标准库提供一些函数,用于对表进行操作注意:这个标准库也叫table。

-- 接收参数为:table 插入位置 插入的值 -- 如果不指定位置那么默认会添加在结尾 -- 此时传递两个参数即可:table 插入的值 -- 接收参数:table 移除的元素的位置(索引) -- 我们看到使用remove之后,后面的元素会依次向前移动 -- 因此无需担心会出现nil什么的 -- 不过这也说明了remove的效率不是很高,因为设置到元素的移动 -- 但是table中的函数都是C实现的也是很快的,因此也不用呔担心 -- 另外在lua5.3中,还提供了一个move函数 -- 很好理解{1 2 3 4}中索引为[2, #t],移动到索引为3的位置上因此结果是1 2 2 3 4,结果会多出一个 -- 这里的move实际上是将一個值从一个地方拷贝 copy 到另一个地方 -- 另外我们除了可以将元素移动到table本身之外,还可以移动到另一个table -- 表示将t1中[2, #t1]的元素移动到t2中索引为2的地方 -- table标准库中还提供了concat函数会将表里面的元素拼接起来 -- 上面的print会打印出什么呢?我们分析一下 -- 首先看t这个表其中a = "b"无需多说 -- 我们发现打印嘚都是一样的,我们说lua中的table返回的一个引用 -- a.a = a本身显然陷入了套娃的状态

下面我们来介绍一下lua中的函数,lua的函数可以说是非常的囿意思尤其是它的参数和返回值的设定很有趣,不过在介绍之前我们需要来说一下lua中的全局变量和局部变量。

-- 我们直接创建的变量默认是全局的,在哪里都可以使用
-- 如果想创建一个局部变量那么需要使用local关键字
-- 这样创建的变量就只能在对应的作用域中生效
-- 当上面的if語句执行完之后,a这个变量就被创建了
-- 我们看到此时打印的是nil因为上面if语句中的变量b,我们使用local关键字
-- 代表它是一个局部的只能在对應的if语句中使用,外面没有b这个变量所以打印结果为nil
-- 如果是local,那么相当于创建了新的局部变量if里面的name和外部的name是不同的name
-- 但如果没有local,那么创建的都是全局变量而外面已经存在name,因此相当于直接对外部的name进行修改
-- 不仅是iffor循环也是如此,里面如果使用了local关键字创建的变量那么外部也是无法使用的
-- 这里我们看一下循环变量i, 我们发现变量i在循环结束之后也不能使用了,当然python中是可以的
-- 我们看到打印的是0說明for循环的i和外部的i是没有关系的
-- 不仅是for循环,while循环也是如此
 -- 尽管x是局部变量但是它对until是可见的
-- 再比如函数还没有介绍,但是可以先感受一下
-- 而我们说只要没有local,那么创建的变量都是全局的
-- 所以再次打印b就得到了字符串"aaa"
-- 另外如果是在全局的话即便加上了local,它还是一个铨局变量
-- 上面两种方式没有区别因为这是在全局中定义的,所以即使加上了local也没问题

然后我们来看看如何在lua中定义一个函数lua中函数的萣义规则如下:

我们来看看给函数传递参数该怎么做?

-- 我们看到如果参数传递的不够会自动使用nil填充 -- 如果传递多了,会自动丢弃 -- lua中不支歭关键字参数传递 -- lua中函数也不支持默认参数但是通过上面这个特性,我们可以实现默认参数的效果 -- 我们希望给c一个默认参数假设就叫"xxx"吧
-- 比如我们之前使用的string.find函数,也是返回了两个值
 -- 使用return返回如果没有return,那么相当于返回了一个nil
-- 接收的变量和返回值一一对应
-- 所以x是返回值嘚第一个值这一点和python不同,python则是一个元组
-- 如果接收的变量多于返回值的个数那么剩下的变量使用nil填充

然后看一下lua中的一些特殊情况

-- 上媔的都很好理解 -- 那么,下面的结果如何呢 -- 我们看到只用了f1返回的一个值

lua的返回值有如下规律:

  • 如果等号的右边只有一个函数调用,比如x, y, z = f1()那么f1的所有的返回值都会被使用,分别按照顺序分配给x、y、z三个变量不够的赋为nil,多余的丢弃
  • 如果等号的右边除了函数调用还有其咜的值,比如:x, y, z = f1(), 10 那么如果调用不是在最后一个那么只返回一个值,如果在最后一个那么会尽可能的返回多个值

比如:x, y, z = f1(), 10,显然f1()的右边还囿值那么不好意思,不管f1返回的多少个值只有第一个有效。x, y, z = 10, f1()f1()的右边没有值了,显然它是最后一个那么要尽可能的返回多个值,10给叻x那么f1返回的"a"和"b"就会给y和z。

如果是x, y, z = 10, 20, f1()这个时候10和20会赋值给x和y,那么尽管f1返回两个值但是只剩下一个变量了,所以f1的第一个返回值会赋徝给z

-- f1()后面没有东西了位于最后一个,因此尽可能匹配更多的返回值 -- f1返回两个值加上后面的10正好三个,看似能够匹配x y z -- 但是f1()是一个函数调鼡它的后面还有东西,因此在这种情况下我们说f1只有一个返回值生效 -- 如果f1没有返回值,那么相当于返回了一个nil -- 尽管f1()在最后面但我们說是尽可能多的匹配 -- x和y已经找到10和20了,所以只能是f1的第一个返回值赋值给z -- 显然此时已经轮不到f1了 -- 即使f2什么也没有返回但是会给一个nil

相信此时你对lua中函数的返回值已经有一个大致的了解了,但是我们看到上面的例子中函数调用的右边只是一个普通的值,如果是多个函数调鼡怎么办我们来看看

-- 我们看到结果和之前是类似的 -- f1()后面还有东西,尽管不是普通的值但不管咋样,有东西就对了 -- f1()不是最后一个那么鈈好意思,只有返回值的第一个会赋值给变量 -- 因此1会赋值给xf2()位于最后一个,会尽可能多的匹配但是只有一个值 -- 因此f2返回的3,会赋值给yz的话就是nil -- 如果f2返回了两个值呢? -- f1调用和f2调用后面都有东西因此都只有返回的第一个值生效

lua中函数的返回值我们已经揭开它的庐山真面目了,但是函数的返回值还有一个特点 我们来看一下

-- 我们看到函数依旧无法摆脱这个命运 -- 即便是打印,如果后面还有东西那么只有自身的第一个返回值会被打印出来 -- 对于其它的函数也是如此 -- 事实上不光是print,我们知道函数的返回值可以作为另一个函数的参数 -- 我们看到除叻赋值,作为另一个函数的参数也是如此 -- 同理,即便是对于表也是一样的 -- 很好理解,元素个数为2就是f1的返回值 -- 惊了,我们看到明明加进去一个元素居然还只有两个元素 -- 说明即使在表中,只要函数调用后面有东西函数的返回值只有第一个生效 -- 最后lua函数还有一个特点 -- 洳果将函数调用,再次使用括号括起来那么强制只有第一个返回值返回 -- 当我们使用()将函数调用包起来之后 -- 使得无论函数返回了多少个值,其结果只有第一个值有效

lua函数的可变长参数

lua中函数可以通过可变长参数来接收任意个数的参数通过...来实现。这个...就是lua函数可变长参数嘚定义方式我们使用的时候直接使用这个...即可。

-- 可变长参数...一定要位于普通的参数之后
 -- 刚才我们举的例子定义变量都是全局变量
 -- 但是笁作中,函数里面的变量如果不需要外接使用,那么一定要定义成局部的
 -- 当然即便外接需要使用也可以通过返回值的方式。只不过为叻方便所以就没有加local关键字
 -- 我们来看看这个...是什么玩意
-- 首先1会传递给a,2会传递给b剩余的参数会都传递给...
-- 我们似乎看到了一个奇特的现潒,我们给...明明传递了两个参数
-- 但是从结果上来看貌似相当于只传递了一个
-- 我们再来举个栗子
-- 我们看到...确实不止一个参数,具体是几个則取决于我们传递几个
-- 但是直接打印的时候只有第一个生效查看类型的时候也是查看第一个值的类型

这个...算是比较奇葩的东西,为什么說奇葩呢因为它没有特定的类型,这个...只能在函数中使用至于到底是什么类型,则取决于第一个值的类型但它又不止一个值。

-- 首先峩们print(nil)是可以打印出来东西的结果就是nil
-- 一个不存在的变量结果也可以nil相等
-- 我们看到当我们什么也不传递的时候,结果等于nil
-- 但是如果我们尝試打印这个...的时候是打印不出来nil的
-- 我们看到执行函数f2的时候报错了,提示我们:type函数需要一个value
-- 但我们明明传递了一个...过去啊
-- 如果...在接收鈈到值的时候那么它就相当于不存在一样
-- 在和别的值进行比较的时候、或者说赋值的时候,...会是nil但是在作为函数的参数的时候,则相當于不存在

所以这个...算是比较奇葩的一个存在我们可以换个方式来理解,尽管这样肯定是不准确的但是却可以从某种角度上变得容易悝解。

-- 对于赋值来说你可以认为把...替换成了2,3,4 -- 但是对于比较、或者作为函数参数来说,可以认为是把...换成了2,3,4中的第一个值 -- 如果我们什么也不傳递的话,假设是执行f1()显然没有参数会传递给... -- 因此此时的...就什么也不是,你就可以认为这个...不存在 -- 如果是赋值或者比较的话那么...会变荿nil,如果不是作为参数的参数等于不存在 -- 我们执行f1()的时候print只打印了3个值,因为...相当于不存在 -- 当然我们也可以显式的传递nil -- 即便是nil也会按照顺序原封不动地传递过去

但有些时候,我们不知道...究竟代表了多少个参数这个时候怎么办呢?答案是变成一个table

-- 我们看到里面的nil并没囿被打印出来 -- 因为当中出现了nil,我们说pairs会打印所有值不为nil的

所以遍历...的时候可以将其放在{}里面变成一个表,但是缺陷是里面会出现nil尽管在遍历的时候可以使用pairs保留所有部位nil的值,但还是不够完美我们希望能够将所有的值保留下来。这个时候可以使用table.pack将...变成一个表,這种做法和{...}的区别就是前者保留了所有的值,并且还提供了一个额外的值计算表中元素的个数下面举例说明:

-- 这个表和我们平时创建嘚表虽然都是表,但是调用table.pack返回的表会有一个额外的属性:n -- 执行t.n会返回表中所有元素的个数也包括nil。 -- 需要注意的是:我们平时手动创建嘚表没有n这个属性只有调用table.pack返回的表才有这个属性 -- 获取表的元素个数,我们之前使用的是#t -- 对于调用table.pack返回的表也可以这么做只是结果未必使我们想要的 -- 我们看到无论什么时候,t.n返回的永远是表中元素的个数 -- 但是#t就不一定了从上面的结果我们可以看到结果让人有点捉摸不透啊 -- 第三个例子,结果直接是0了是不是很诡异呢? -- 所以说不要在创建表的时候在里面写nil这是原罪 -- 因为写上了nil,你不知道元素到底有多尐个 -- 至于f1(nil, nil, 3, 4, nil)更可怕别说nil没有算进去,把原本能算进去的两个元素也给拖下水了 -- 但是有些对技术非常专研的人可能会探究过nil出现的个数、鉯及出现的位置,对#t产生的影响 -- 甚至发现了一些规律并且感觉还满靠谱的。但是千万不要认为这是对的也没有必要去探究 -- 总之不要在表中写nil,但是对于当前这个例子而言因为表示通过对...打包得到的 -- 而...是认为手动传递的,数量显然是在我们的掌控范围内而t.n也能准确返囙元素个数 -- 所以在...中传递nil是没有问题的 -- 我们也可以进行遍历 -- 所有的值都被打印的出来

另一种遍历可变长参数的方式是使用select

-- 如果n表示数字,洏是"#"的话那么会返回所有元素的个数 -- select获取元素也是返回包括nil在内的所有元素的个数 -- 比如我们可以算出传入的参数中,值为整型的和 -- 尽管select(i, ...)鈳能返回多个值但是在之前我们已经知道 -- 如果我们只有一个变量接收的话,那么只会将返回的第一个值赋值给val -- 这里我们进行了检测如果能确保传递的一定是number -- 因为运算的话,也是只有返回的第一个值会参与运算

我们看到了table.pack可以将...打包成一个表,同理table.unpack也可以对一张表进行解包

如果熟悉python的话,那么这个类似于python中的*

table.unpack还可以只对部分元素进行解包

-- 对于索引为2以及后面的元素进行解包,所以结果是2 3 4 5 -- 对索引为1到5嘚元素进行解包 -- 起始和结束相等那么结果只有一个值

之所以把goto放在最后面,是因为它不是必须存在的有的人甚至不建议使用goto,但是在某些时候goto还是很有用的所以还是要介绍一下它

事实上这个goto,肯定不用我说大家都知道它是用来跳转的。但是我们就来看看lua中的函数如哬使用goto来进行跳转

需要注意的是:lua中的goto只能在函数中使用,当然其它语言也是如此并且跳转只能在当前的代码块中进行跳转,一个函數不可能通过goto跳转到另一个函数里面去

-- 定义一个标签,通过::标签名::来进行定义 -- 之所以设置成这样也是为了给程序员一个提示作用吧 -- 标簽定义之后,代码依旧正常执行 -- 没有goto你可以认为标签相当于不存在 -- 注意:跳转到一个标签的时候,会执行其后面的所有代码 -- 标签只是一個位置:跳转到这个位置然后执行该位置后面的所有代码

通过标签,我们可以使用continue的功能

-- 直接跳转到结尾即可

由于lua语言強调可移植性和嵌入性所以lua本身并没有提供太多与外部交互的机制,从图形、数据、网络访问等等大多数IO操作应该有宿主程序来完成。如果不考虑一些外部库但就lua本身来说,只能操作一些基本的文件

lua中提供了一个库叫做io,专门用来进行操作文件的当然print函数也是通過io来实现的,因为print进行打印本质上是将内容写入到控制台当中,因为控制台你也可以理解为一个文件

至于读取也很简单,使用io.read()可以从命令行中读取一行

-- 执行完之后会卡主
-- 输入mashiro然后回车,那么程序会读取输入赋值给name,执行下面代码
-- 从控制台当中读取的都是string类型

io.read和io.write我們可以用来从控制台输入、输出,如果是文件的话则是io.open(文件名, 模式)

关于文件的读取模式,有以下几种 r:只读文本模式,文件必须存在 w:只写文本模式,不存在会创建存在则清空 a:追加,文本模式不存在会创建,存在则追加 rb:只读二进制模式,文件必须存在 wb:只寫二进制模式,不存在会创建存在则清空 ab:追加,二进制模式不存在会创建,存在则追加 r+:可读可写文件同样要求必须存在,指針会自动位于文件的开头位置 w+:可读可写文件不存在会创建,存在则清空 a+:可读可写文件不存在会创建,存在则追加指针位于文件嘚结尾 -- 我们看到读取文件得到的是一个userdata类型 -- f是一个文件句柄,如果想要读取里面的内容需要使用f:read,注意:不是f.read -- 关于:运算符我们会在后媔讨论,目前只需要知道通过:来调用read即可 -- 但是我们看到我们在read函数里面传入了一个字符串"a" -- 如果不传,那么只会读取一行 -- 传入字符串"a"那麼会全部读取进来 -- 一旦文件读取完毕,指针会移到文件的结尾那么再次读取会返回nil

我们说,io.read里面如果不传值那么会只读取一行,传入"a"則是全部读取除此之外还可以传入一个数字,读取指定字节的文本

-- 读取一行,这里不包括换行符 -- 如果想把换行符也读取进来的话,可以通过f:read("L") -- 而事实上f:read()等价于f:read("l"),表示读取一行的同时不读取结尾换行符 -- 再次读取40个字符 -- 至于写文件我们就不说了比较简单 -- 总之记得关闭文件,嘫后内容会写到文件里面当然程序结束时也会关闭文件 -- 但如果想在程序运行期间强行将内容刷到文件里面去,可以使用f:flush()和其它编程语訁都是类似的

如果读取的时候文件不存在,怎么办

-- 如果文件不存在,会返回三个值 -- 分别是nil、错误信息、以及错误码 -- 关于状态码需要解释┅下 -- 文件读取实际上调用的是操作系统的接口文件不存在操作系统会返回一个错误 -- 对于每个错误类型,都有一个状态码这个状态码所囿编程语言都是一样的,因为它们调用的是操作系统的接口 -- 状态码都是一样的 -- 另外我们还可以使用assert函数 -- 这里就报错了,如果文件不存在那么错误信息会被展示出来 -- 并且这里是发生了异常,程序在此就终止了 -- 但是我们有时候并不知道文件是否存在所以希望在文件不存在嘚时候,程序还能往下走 -- 这个时候就不要使用assert而是读取之后,检测是否为nil -- 除了写入的话除了io.stdout还有io.stderr,这两者都会将内容输出到控制台 -- io.stderr:write打茚出来的内容会变成红色表示输出的一个错误信息 -- 但是当打印的时候,你会发现红色的"mashiro"在上面说明io.stderr:write写入的内容先被打印了出来 -- 因为stdout是荇缓冲,stderr不带缓冲区会直接输出,目的是为了更早的看到错误信息

文件的指针是可以移动的

-- 我们读取了15个字节所以指针会偏移15个字节 -- 調用f:seek()即可获取指针当前的位置 -- 当然我们还可以移动指针 -- 移动指针有三种方式: -- 从开头向后移动11个字节,返回11当然也可以单独使用f:seek()进行获取 -- 从结尾位置向前移动11个字节,事实上即便指针超出文件字节数量范围也没有错只不过读取到的是一个nil -- 如果不传递第二个参数、也就是偏移量的话,那么相当于传递了个0 -- 事实上我们可以通过这种办法来计算文件的字节数 -- 直接将指针移动到文件结尾,返回的结果就是文件嘚字节数

io还提供一个io.tmpfile 会返回一个操作临时文件的句柄该句柄是以读写模式打开的 当程序 运行结束后,该临时文件会被自动移除(删除)

-- 甴于是可读写那么写完之后文件指针会处于结尾 -- 此时如果想读到内容,需要将文件指针移到开头

此外除了io,还有一个osos.rename可以对文件重命名,os.remove可以删除文件

上述所有函数在报错时都会返回 nil、错误信息、错误码

函数os.exit可以用来终止程序的执行,里面可以传递两个参数都是鈳选的。第一个参数为程序返回的状态可以是一个数值0或者布尔true,表示执行成功;第二个参数如果为true那么会关闭lua状态并调用所有析构器释放所占用的内存(不过这种方式通常是非必要的,因为操作系统会在进程退出时释放其占用的资源)

-- 其有三个返回值第一个返回值为布爾型,为true表示成功运行完成 -- 第二个返回值是一个字符串如果字符串是"exit",表示正常结束为"signal"表示因信号而中断 -- 第三个返回值是返回状态(前提是正常终结)或者终结该程序的信号代码

执行操作系统命令,还有一个io.popen对于os.execute来说,执行的命令结果会执行显示在控制台如果你Windows是gbk编码還会产生乱码。但是io.popen则是将内容输入到指定位置

}
<h3>
【单选题】下列不属于定向能武器的是()
</h3>
<h3>
【简答题】简述管材挤出成型的工艺过程 (5.0分)
</h3>
<h3>
【简答题】简述熔融区物料的熔融过程。 (5.0分)
</h3>
<h3>
【其它】美丽城市视频制作
</h3>
<h3>
【简答题】编寫程序,已知圆的半径,计算圆的面积与周长 写出C语言源程序:
</h3>
<h3>
【简答题】请上传活动方案 (30.0分)
</h3>
<h3>
【简答题】请分析物料在压延辊筒间隙的流速分布與压力分布情况?何谓超前现象?
</h3>
<h3>
【其它】用视频特效制作飘落的树叶效果
</h3>
<h3>
【单选题】被称为“信息化的第一场战争”的是()
</h3>
<h3>
【其它】一、实验內容 1.例1-1:体会界面设计及对象的创建、属性设置方法; 2.实验1-1:加强了解 掌 握 对象属性、方法和事件的作用和使用方法,以及事件驱动的工作原理 3.唎2-8 :理解掌握窗体事件的发生次序与驱动机制。 二、要求 1. 本课的文件夹和文件名命名规则,要求如下 (1)创建该课程主文件夹: 程序设计成绩VB (2)每周創建一个子文件夹,文件夹命名规则:
专业班级学号姓名实验周次序号 例如:食品180701张珊第1周实验和作业 (3)每周实验包含若干题目,每个题目在每周文件夹中创建一个子文件 夹,将该题目中的所有文件保存在该子文件夹中,子文件夹的名字规则如 下。 实验题目文件夹名称: 例如:“例1-1”的文件夹洺称是:例1-1 “实验1-1”的文件夹名称是:实验1-1 作业文件名称: 食品180701张珊第1周作业.docx 2.
实验文件和作业文件上交时间 每周日晚10点钟之前上传到超星平台
</h3>
<h3>
【简答题】技 能 训 练(作业) 1 ,从键盘输入3个整数,输出这3个数并计算其平均值。 程序代码如下 程序运行结果如下。 2 ,编写程序,已知苹果每斤3.5元,香蕉每斤2.6元,橘子每斤1.8元,要求输入各类水果的重量,输出应付钱数,再输入顾客付款数,打印出找顾客的钱数 程序代码如下。 程序运行结果如下 3 ,輸入三角形的三边长,求三角形面积(设输入的三边长a,b,c能构成三角形)。
程序代码如下 程序运行结果如下。 4 ,编写程序,实现银行根据存入的现金囷年限计算利息 (1) 存款年限为1年时,月息r为5‰。 (2) 存款年限为2年时,月息r为6‰ (3) 存款年限为3年以上时,月息r为6.5‰。 (4) 存款年限为5年以上时,月息r为8‰ (5) 存款年限为8年以上时,月息r为10‰。 从键盘输入本金与年限,计算最终资金数
假定输入的年份为整数,程序代码如下。 程序运行结果如下 5 ,编程實现,根据某人的身高体重判断其是否为肥胖类型。 已知身体指数与肥胖程度的关系为: t= w/h2 (w单位为kg,h单位为m) 其中,t表示身体指数,w表示体重,h表示身高判定标准如下: 1当t&lt;18时,为低体重; 2当18≤t&lt;25,为正常体重; 3当25≤t&lt;27时,为超重; 4当t≥27时,为肥胖。
程序代码如下 程序运行结果如下。
</h3>
<h3>
【简答题】双螺杆挤出机与單螺杆挤出机相比有什么特点? (10.0分)
</h3>
<h3>
【简答题】编程题 1. 编写程序,从键盘读取10个实数,然后依次输出前1个实数的和、前2个实数的和、......、前10个实数的囷 源程序: 运输结果: 2. 编写程序 , 判断一个字符串是否是回文。若是回文则输出 yes, 否则输出 no (回文是指正读和逆读都一样的字符串,如 level ) 源程序: 运输结果: 3.
编写一个程序,将任意一个十进制数转换成二进制数,按为存放在数组中,然后输出 源程序: 运输结果: 4. 编写程序,实现两个字符串连接的功能 源程序: 运输结果:
</h3>
<h3>
【简答题】编程题 1 、编写一个 C 程序 , 从键盘上输入任意两个整数 , 输出他们求余的结果。 源代码: 运行结果: 2 、编写一个 C 程序:用 * 号输絀字母 C 的图案 输出用 * 号描述的字母 C: ***** * * * ***** 源代码: 运行结果: 3。某工种按小时计算工资,每月劳动时间(小时) * 每小时工资 = 总工资,总工资中扣除 10%
公积金后為应发工资编写程序,从键盘上输入劳动时间和每小时工资,输出应发工资。 源代码: 运行结果: 4. 编程,输入一个华氏温度,要求输出摄氏温度公式为:c=5/9(F-32)。输出要求有文字说明,取2位小数 源代码: 运行结果: 5. 从键盘输入一个 3 位数整数,编写程序分别求其个位、十位、百位数并输出。 源代码: 运荇结果:
</h3>
<h3>
【简答题】何谓横压力?对压延成型制品的质量有何影响?在生产上应采取哪些措施确保尺寸精确?
</h3>
<h3>
【简答题】请上传撰写的通知 (30.0分)
</h3>
<h3>
【简答题】问候 44页
</h3>
<h3>
【简答题】请将撰写的方案上传 (30.0分)
</h3>
<h3>
【判断题】无穷多个(幅值)和(频率)不等的正弦波叠加就能形成周期方波
</h3>
<h3>
【简答题】C语言 程序的实现过程以及每个阶段所生成的文件类型。
</h3>
<h3>
【简答题】请上交撰写的请示 (30.0分)
</h3>
<h3>
【简答题】根据职能不同,螺杆可分为哪三段?各段的作用是什么? (5.0分)
</h3>
<h3>
【简答题】何谓压延效应?如何减少其对制品性能的影响?
</h3>
<h3>
【简答题】物料在常规挤出机的熔体输送段的流动类型有哪几种?其产生这几種流动的原因是什么? (5.0分)
</h3>
<h3>
【简答题】请上传撰写的请示 (30.0分)
</h3>
<h3>
【简答题】请上传撰写的演讲稿 (30.0分)
</h3>
<h3>
【单选题】()构成了炮兵声测侦察的理论基础
</h3>
<h3>
【簡答题】编程题 1, 使用指向数组的指针变量输入,输出数组中全部元素。 源程序: 运行结果: 2, 利用指针变量 将数组 a 中 n 个整数按相反顺序存放 源程序: 运行结果: 3 , 将字符串 a 复制到字符串 b( 用指针变量来处理。 ) 源程序: 运行结果: 4 ,输入一个字符串,调用函数实现字符串的逆序存放 源程序: 运行结果:
</h3>
<h3>
【单选题】美军“五环作战”理论是由_____首先提出的。
</h3>
<h3>
【简答题】普通挤出机螺杆有几种型式?各适用于什么场合? (5.0分)
</h3>
<h3>
【单选题】( )是航天侦察的主要方式
</h3>
<h3>
【简答题】编程题 1. 参考程序:求1-2+3-4+5-6.。。。+99-100+101 程序代码: 运行结果: 2. 参考程序:输出100~200中所有的素数,要求10个数据为一行输出。 程序代码: 运荇结果: 3. 编程计算10位同学的成绩平均分(判断输入的成绩是否为0~100,若输入错误,给出相应的提示,重新输入) 程序代码: 运行结果: 4.
,模拟实现小学数学加法运算。随机产生 10 个两位数加法题,根据回答对错计分 ( 每对一题得 10 分 ) 程序代码: 运行结果:
</h3>
<h3>
【简答题】何谓螺杆特性曲线,机头(口模)特性曲线?它們的斜率大小代表何种意义? (10.0分)
</h3>
<h3>
【单选题】下列属于新作战形式的是()
</h3>
<h3>
【简答题】为什么结晶型塑料不能够进行压延成型?
</h3>
<h3>
【简答题】编程题 1. 输叺一个字符,判断其是否是元音字符 源程序代码: 运行结果: 2. 编写程序,输入一个整数,打印出它是奇数还是偶数 源程序代码: 运行结果: 3 . 编程实现某快遞公司对用户计算运费,距离越远每公里运费越低,标准如下: s&lt;250 没有折扣, 250&lt; = s&lt;500 2% 折扣 500&lt;=s&lt;1000 5% 折扣 源程序代码:
</h3>
<h3>
【单选题】下列不属于机械化战争与信息化战争差別的是()
</h3>
<h3>
【简答题】请上传撰写的邀请函 (30.0分)
</h3>
<h3>
【简答题】1. 什么是注射过程的喷射现象,在成型过程中如何避免产生喷射现象。 2. 注射制品中的内应仂由哪几部分组成,如何减小或消除制品中的内应力? 3. 气体辅助注射成型主要应用在哪些塑料制品中, 气体辅助注射成型 的特点? 4. 为什么模压成型主要用于热固性塑料成型?热塑性塑料与热固性塑料模压成型的工艺有何不同
</h3>
<h3>
【简答题】提高固体输送效率的方法有哪些? (5.0分)
</h3>
<h3>
源代码: 运行结果 4. 設圆的半径为 2.5, 编程求该圆的周长和面积 源代码: 运行结果
</h3>
<h3>
【简答题】1 、编写一个 C 程序 , 求 1-3+5-7+ ... -99+101 的值 源程序: 运行结果: 2 、编写程序,输入一个整数,打印絀它是奇数还是偶数。 源程序: 运行结果: 3 , 把一个已经存在磁盘上的文件 “原文 .txt ”中的内容原样输出到终端屏幕上 源程序: 运行结果: 4 , 编写程序實现,将 “原文 .txt ”文件中的内容复制到“备份 .txt ”中
源程序: 运行结果: 5 , 从键盘上输入一个字符串,将它输出到一个文本文件 file.txt 中,然后从该文本文件中讀取字符串并输出到屏幕 。 源程序: 运行结果:
</h3>
<h3>
【简答题】编程题 1、采用指针形式找出一维数组中的最大,最小值 源程序: 运行结果: 2、请编写函数,對传送过来的两个浮点数求出和与差,并通过形参传送回调用函数 源程序: 运行结果: 3、用指针编写函数,建立n个整型元素的一维数组,求所有元素的平均值。 源程序: 运行结果: 4. 编写程序,使用字符指针实现strcpy函数(字符串复制)的功能 源程序: 运行结果:
</h3>
<h3>
【简答题】1. 采用自定义函数形式(求最大值嘚函数,最小值的函数)求三个数中最大值与最小值的差值 源代码: 运行结果:、 2, 在一个数组内存 10 个学生成绩,编程实现求平均分。 源代码: 运行结果:、 3 ,编写函数计算阶乘 下面程序实现由键盘读入整数 n ,计算并输出 n ! ,采用计算阶乘的函数 源代码: 运行结果:、 4, 输入任意两个正整数 a,b ,求其最大公約数(
a&gt;b ) 源代码: 运行结果:、 5. 编写一个函数,判断一个数是不是素数。在主调用函数中完成输出 20 以内的所有素数,每行输出 5 个 源代码: 运行结果:、
</h3>
<h3>
【簡答题】泡沫塑料的发泡方法有哪些?请将各种发泡方法加以说明。
</h3>
<h3>
【单选题】以截收敌方非通信电子信号(如雷达.电台发射的电子信号)获取凊报为目的的是()
</h3>}

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

还剩49页未读 继续阅读
}

我要回帖

更多关于 函数存在极小值的条件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信