跳转到内容

编程基础:内置函数

来自维基教科书,开放世界开放书籍

试卷 1 - ⇑ 编程基础 ⇑

← 异常处理 内置函数 随机数生成 →


你需要熟悉大多数常见编程语言中内置的几个编程例程。这些例程非常有用,可以节省你在编写代码以执行常见任务方面的大量工作。你可能会被要求在考试中使用它们,所以要学习它们!

算术函数

[编辑 | 编辑源代码]

你必须熟悉几个

舍入函数用于使用 Math.Round() 函数将数字舍入到有限的小数位数

Math.Round(1.94, 1) 'Returns 1.9
Math.Round(1.95, 1) 'Returns 1.9 !0.5 rounds down!
Math.Round(1.96, 1) 'Returns 2.0
Math.Round(1.9445, 2) 'Returns 1.94
Math.Round(1.9545, 3) 'Returns 1.954
Math.Round(6.765, 2) 'Returns 6.76
Math.Round(1.9445) 'Returns 2 - the equivalent of saying round to 0 dp

截断函数返回数字的整数部分,而不管小数位数。

Math.Truncate(19.45) 'Returns 19
Math.Truncate(19.9999) 'Returns 19

这在尝试在 模算术 中执行 DIV 时特别有用。

扩展:随机数

大多数游戏的一个重要部分是使用随机数的能力。这些可能用于在图上随机放置金币,或者计算你是否在一定距离处用步枪击中目标。

Dim rndGen As New Random()
Dim randomNumber As Integer
randomNumber = rndGen.Next()

上面的代码将为你提供一个介于 1 和 2,147,483,647 之间的随机数。你可能需要一个稍微小的数字。要获得两个设定数字之间的随机数,在本例中为 5 和 10,可以使用以下方法

randomNumber = rndGen.Next(5,10)

那么我们到底如何使用它呢?看看下面的游戏

Dim rndGen As New Random()
Dim randomNumber As Integer
Dim guess as Integer
randomNumber = rndGen.Next(1,100)
console.writeline("Please guess the random number between 1 and 100")
Do 
  console.write("your guess:")
  guess = console.readline()
  if guess > randomNumber
    console.writeline("Too High")
  end if
  if guess < randomNumber
    console.writeline("Too Low")
  end if
Loop While guess <> randomNumber
console.writeline("Well done, you took x guesses to find it!")

调整上面的代码以告诉用户他们猜了多少次才找到随机数。提示:你需要一个变量

答案

    Sub Main()
        Dim rndGen As New Random()
        Dim randomNumber As Integer
        Dim guess As Integer
        Dim count As Integer = 1
        randomNumber = rndGen.Next(1, 100)


        Console.WriteLine("Please guess the random number between 1 and 100")
        Do
            Console.Write("your guess:")
            guess = Console.ReadLine()
            If guess > randomNumber Then
                Console.WriteLine("Too High")
            End If
            If guess < randomNumber Then
                Console.WriteLine("Too Low")
            End If
            If guess <> randomNumber Then
                count = count + 1
            End If
            If guess = randomNumber Then
                Console.WriteLine("Well done, you took " & count & " guesses to find it!")
            End If

        Loop
    End Sub
练习:算术函数

以下代码输出什么

dim num1 as single = 12.75
dim num2 as single = 12.499
dim total as single

num2 = Math.Round(num2, 1)
num1 = Math.Truncate(num1)
total = num1 + num2
console.writeline(Math.Round(total))

答案

   代码输出

24


编写一些代码以输出用户输入的数字的整数部分

答案

Math.Truncate(input)


编写代码以输出输入数字的整数和小数部分

   代码输出

请输入一个十进制数字:13.78
这个数字的整数部分是:13
小数部分是:0.78

答案

dim num as single
console.write("Please insert a decimal number: ")
num = console.readline()
console.writeline("The whole number part of this number is: " & Math.Truncate(num))
console.writeline("The decimal part is: " & num - Math.Truncate(num))

字符串处理函数

[编辑 | 编辑源代码]

非常受欢迎的考试问题涉及操纵字符串。这些简单的函数将帮助你完成此任务。

此函数用于查找传递给它的任何字符串的长度,包括空格在内的所有字符。在 Visual Basic 中,要查找字符串的长度,我们使用 Len("some string") 函数,该函数返回传递给它的字符串的整数长度

someText = "Gary had a little lamb"
Console.writeline(Len(someText))
   代码输出

22


此函数允许我们在给定字符串中查找项目的ตำแหน่ง并返回ตำแหน่ง的位置。在 Visual Basic 中,这是通过以下命令执行的:InStr([string], [item]) 例如,我们可能想通过查找句号来查找句子结尾的位置

someText = "Gary had a little lamb. His fleece was white as snow."
Console.writeline(InStr(someText,"."))
   代码输出

23

我们也可以使用此命令在字符串中搜索字符串。例如,如果我们要查看一个句子是否包含某个名称

someText = "Gary had a little lamb. Dave's fleece was white as snow."
Console.writeline(InStr(someText,"Dave"))
   代码输出

25

如果搜索项未包含在字符串中,则它将返回 0

someText = "Gary had a little lamb. Dave's fleece was white as snow."
Console.writeline(InStr(someText,"Julie"))
   代码输出

0


子字符串

[编辑 | 编辑源代码]

此函数允许你从字符串中剪切项目并返回子字符串。Visual Basic 使用以下命令:[string].Substring([startPosition],[lengthOfReturnString])。例如,我们可能想从给定的固定电话号码中找到本地号码。我们必须忽略区号

phone = "(01234)567890"
local = phone.Substring(7, 6)
console.writeline(local)
   代码输出

567890


此函数允许你将字符串粘合在一起(连接),以便你可以开始使用变量构建字符串。Visual Basic 使用以下命令:[stringA & stringB] 例如,我们可能在变量 dim name as string 中存储了一个用户的姓名,以及我们想给予他们的问候

name = "Charles"
console.writeline("Hello " & name & ". How are you today?")
   代码输出

你好,查尔斯。今天过得怎么样?


字符串转换函数

[编辑 | 编辑源代码]

当你声明一个变量时,你给它一个数据类型。此数据类型限制了你可以放入变量的值。例如

dim age as integer
将允许:age = 34
将不允许:age = "cabbages"

这似乎很有道理,但是当你尝试将一个实数放入整数时会发生什么

dim age as integer
age = 34.3
console.writeline(age)
   代码输出

34

这似乎没问题,但是在其他语言中我们可能会遇到麻烦。要执行此操作,我们将不得不从一种数据类型转换为另一种数据类型

dim age as decimal
age = 34.3
console.writeline(age)
age = CInt(34.3) 'converts the decimal into an integer
console.writeline(age)
   代码输出

34.3 34


练习:字符串函数

编写一个简短的程序来告诉某人他们姓名中包含多少个字母(以防他们不知道!),例如

   代码输出

输入:Fremlin
你好,Fremlin,你的名字有 7 个字母。

答案

  Dim name As String
  console.write("Input: ")
  name = console.readline()
  console.writeline("Hello " & name & " you have " & Len(name) & " letters in your name.")


有些人愚蠢地将他们的姓和名输入到数据库中,编写一些代码来显示姓,然后显示名

Dim name as string = "Elizabeth Sheerin"
   代码输出

输入:Elizabeth Sheerin
名:Elizabeth
姓:Sheerin

答案

        Dim name As String = "Elizabeth Sheerin"
        Dim firstname, secondname As String
        Dim space, textlength As Integer

        space = InStr(name, " ")
        textlength = Len(name)

        firstname = name.Substring(0, space)
        secondname = name.Substring(space, textlength - space)

        Console.WriteLine("first name is: " & firstname)

        Console.WriteLine("second name is: " & secondname)


电话号码已作为字符串输入到计算机中:(01234)567890

dim phonenum as string = "(01234)567890"

编写一些代码以输出不带括号的号码

   代码输出

输入:(01234)567890
输出:01234567890

答案

        Dim phonenum As String = "(01234)567890"
        Dim firstbracket, secondbracket As String
        Dim textlength, arealength As Integer

        firstbracket = InStr(phonenum, "(")
        secondbracket = InStr(phonenum, ")")
        textlength = Len(phonenum)
        arealength = secondbracket - firstbracket

        Console.Write(phonenum.Substring(firstbracket, arealength - 1) & phonenum.Substring(secondbracket, textlength - secondbracket))


与上面类似的问题,电话号码目前以一种非常不可读的格式存储:01234567890,完全省略了区号。你能将它们转换为显示前 5 位数字是区号吗

dim phonenum as string = "01234567890"

然后应将其输出为

   代码输出

输入:01234567890
输出:(01234)567890

答案

        Dim phonenum As String = "01234567890"
        Console.Write("(" & phonenum.Substring(0, 5) & ")" & phonenum.Substring(6, 5))
        Console.ReadLine()


一个 回文 是一个可以从任何方向读作相同的单词、短语或数字。例如 1234321、RACECAR、TOOT 和 NUN。你需要编写一个程序来检查给定的任何输入是否为回文,并告知用户

   代码输出

输入:NUN
这是一个回文!
输入:nune
这不是一个回文

答案

  Dim name As String
  Dim length As Integer
  Dim Pal As Boolean = TRUE
  console.write("Input: ")
  name = console.readline()
  length = Len(name)
  For x = 0 to (length / 2)
    If name.Substring(x, 1) != name.Substring(length - x, 1) then
       Pal = FALSE
    End If
  Next
  
  If Pal then
    console.writeline("That is a palindrome!")
  Else
    console.writeline("That is NOT a palindrome!")
  End If


扩展:REGEX

你通常希望检查输入字符串的格式,如果格式不正确,则希望重新提交。例如,你可能希望某人输入他们最好的朋友的姓名,这意味着他们不应该输入任何数字或空格,并且它应该以大写字母开头

   代码输出

最好的朋友的姓名:Beanie(正确)
最好的朋友的姓名:jonny5(停止此操作)

为此,我们可以根据一些规则将输入字符串与一些规则匹配,正则表达式或 regex,在本例中,我们只希望来自字母表的字符

[A-Z][a-z]+

分解规则

  • [A-Z] - 从一个大写字母开始
  • [a-z]+ - 后面跟着任意数量的小写字母(+ 表示任意数量)

另一个例子可能是检查著名作曲家的正确拼写

"Handel", "Händel", and "Haendel"

我们可以使用模式 H(ä|ae?)ndel 来检查。让我们看看这意味着什么

  • H - 以 H 开头
  • (ä|ae?) - 包括 ä 或(| 符号)一个 a 后面跟着一个可选的 e (e? 表示 e 是可选的)

大多数正则表达式工具提供以下操作来构建表达式。

布尔“或”

竖线分隔备选方案。例如,gray|grey 可以匹配 "gray" 或 "grey"。

分组

括号用于定义运算符的范围和优先级(以及其他用途)。例如,gray|greygr(a|e)y 是等效模式,都描述了 "gray" 和 "grey" 的集合。

量化

在标记(如字符)或组后面的量词指定前面的元素允许出现的次数。

  • ? 问号表示前面的元素出现零次或一次。例如,colou?r 匹配 "color" 和 "colour"。
  • * 星号表示前面的元素出现零次或多次。例如,ab*c 匹配 "ac"、"abc"、"abbc"、"abbbc" 等。
  • + 加号表示前面的元素出现一次或多次。例如,ab+c 匹配 "abc"、"abbc"、"abbbc" 等,但不匹配 "ac"。

大多数编程语言都有正则表达式函数。在 VB.NET 中,我们可以使用 Regex 例程来使用正则表达式

' this code enforces the name rule from earlier
Dim name As String
Console.Write("Name of best friend: ")
name = Console.Readline()

' match the string against a regular expression
Dim m As Match = Regex.Match(name, "[A-Z][a-z]+")

If (m.Success) Then
    Console.WriteLine("You have input the name correctly")
Else
    Console.WriteLine("Incorrect format!")
End If

正则表达式的常见用途是检查您是否输入了正确的电子邮件地址。该规则如下:^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$

您可以在维基百科上了解更多关于 正则表达式 的信息,您将在 A2 中更详细地学习正则表达式。

到/从整数、实数、日期/时间。

华夏公益教科书