• 自己写一个pow()函数

    2017-09-21 05:48:37
    问题:请自己动手写一个pow()函数。   我们在学习C语言的时候,可能已经接触过pow()函数,它是C语言标准库函数中自带的一个函数,使用的时候只需包含就可以了,不需要你自己动手去实现。   在C语言标准库函数中...
    问题:请自己动手写一个pow()函数。

      我们在学习C语言的时候,可能已经接触过pow()函数,它是C语言标准库函数中自带的一个函数,使用的时候只需包含<math.h>就可以了,不需要你自己动手去实现。

      在C语言标准库函数中,pow()函数是这样声明的double pow(double x, double y),其作用就是返回x的y次幂。幂函数的实现还是比较简单的,我们就自己动手写一个:

    func challenge(number: Int, power: Int) -> Int {
        
        // 对输入的数据进行校验,确保底数和幂指数都是有意义的
        guard number > 0, power > 0 else { return 0 }
        
        // 初始化返回值,默认其值为底数
        var returnValue = number
        
        for _ in 1..<power {
            
            // 返回值 = 底数 * 底数(一共执行power-1次)
            returnValue *= number
        }
        
        // 返回最后的结果
        return returnValue
    }
    
    challenge(number: 2, power: 3)  // 结果为8
    

      除了上面那种解决方案之外,还可以使用递归算法,这样看上去可以让代码更简洁:

    func challenge1(number: Int, power: Int) -> Int {
        guard number > 0, power > 0 else { return 0 }
        
        // 如果幂指数为1,直接返回底数
        if power == 1 { return number }
        
        // 当幂指数不为1时,直接返回底数的power - 1次方
        return number * challenge1(number: number, power: power - 1)
    }
    
    challenge1(number: 2, power: 5)  // 结果为32
    
    展开全文
  • Swift 函数

    2017-08-30 16:17:21
    Swift 函数用来完成特定任务的独立的代码块。 Swift使用一个统一的语法来表示简单的C语言风格的函数到复杂的Objective-C语言风格的方法。 函数声明: 告诉编译器函数的名字,返回类型及参数。 函数定义: 提供了函数...

    Swift 函数用来完成特定任务的独立的代码块。
    Swift使用一个统一的语法来表示简单的C语言风格的函数到复杂的Objective-C语言风格的方法。

    • 函数声明: 告诉编译器函数的名字,返回类型及参数。
    • 函数定义: 提供了函数的实体。

    Swift 函数包含了参数类型及返回值类型:

    一、函数定义

    Swift 定义函数使用关键字 func。
    定义函数的时候,可以指定一个或多个输入参数和一个返回值类型。
    每个函数都有一个函数名来描述它的功能。通过函数名以及对应类型的参数值来调用这个函数。函数的参数传递的顺序必须与参数列表相同。
    函数的实参传递的顺序必须与形参列表相同,-> 后定义函数的返回值类型。

    1、语法

    func funcname(形参) -> returntype
    {
       Statement1
       Statement2
       ……
       Statement N
       return parameters
    }

    2、实例

    func person(age: Int, name: String) -> String {
        return "\(name): \(age)"
    }
    print(person(age: 10, name: "不二"))

    输出:

    不二: 10

    二、函数调用

    我们可以通过函数名以及对应类型的参数值来调用函数,函数的参数传递的顺序必须与参数列表相同。

    print(returnStr(str: "输出"))
    func returnStr(str: String) -> String {
        return str
    }

    三、函数参数

    函数可以接受一个或者多个参数,这些参数被包含在函数的括号之中,以逗号分隔。

    func person(age: Int, name: String) -> String {
        return "\(name): \(age)"
    }

    四、不带参数函数

    1、语法

    func funcname() -> datatype {
       return datatype
    }

    2、实例

    func printSome() {
        print("我没有用")
    }

    五、元组作为函数返回值

    函数返回值类型可以是字符串,整型,浮点型等。
    元组与数组类似,不同的是,元组中的元素可以是任意类型,使用的是圆括号。
    你可以用元组(tuple)类型让多个值作为一个复合值从函数中返回。

    func minMax(array: [Int]) -> (min: Int, max: Int) {
        var currentMin = array[0]
        var currentMax = array[0]
        for value in array[1..<array.count] {
            if value < currentMin {
                currentMin = value
            } else if value > currentMax {
                currentMax = value
            }
        }
        return (currentMin, currentMax)
    }
    
    let bounds = minMax(array: [8, -6, 2, 109, 3, 71])
    print("最小值为 \(bounds.min) ,最大值为 \(bounds.max)")
    最小值为 -6 ,最大值为 109

    如果你不确定返回的元组一定不为nil,那么你可以返回一个可选的元组类型。
    你可以通过在元组类型的右括号后放置一个问号来定义一个可选元组,例如(Int, Int)?或(String, Int, Bool)?
    注意:
    可选元组类型如(Int, Int)?与元组包含可选类型如(Int?, Int?)是不同的.可选的元组类型,整个元组是可选的,而不只是元组中的每个元素值。

    func minMax(array: [Int]) -> (min: Int, max: Int)? {
        if array.isEmpty { return nil }
        var currentMin = array[0]
        var currentMax = array[0]
        for value in array[1..<array.count] {
            if value < currentMin {
                currentMin = value
            } else if value > currentMax {
                currentMax = value
            }
        }
        return (currentMin, currentMax)
    }
    if let bounds = minMax(array: [8, -6, 2, 109, 3, 71]) {
        print("最小值为 \(bounds.min),组大值为 \(bounds.max)")
    }

    六、没有返回值函数

    func printSome() {
        print("我没有用")
    }

    七、函数参数名称

    函数参数都有一个外部参数名和一个局部参数名。

    1、局部参数名

    局部参数名在函数的实现内部使用。

    func sample(number: Int) {
       println(number)
    }

    以上实例中 number 为局部参数名,只能在函数体内使用。

    func sample(number: Int) {
        print(number)
    }
    sample(number: 1)
    sample(number: 2)
    sample(number: 3)

    输出:

    1
    2
    3

    2、外部参数名

    你可以在局部参数名前指定外部参数名,中间以空格分隔,外部参数名用于在函数调用时传递给函数的参数。
    如下你可以定义以下两个函数参数名并调用它:

    func pow(firstArg a: Int, secondArg b: Int) -> Int {
       var res = a
       for _ in 1..<b {
          res = res * a
       }
       print(res)
       return res
    }
    pow(firstArg:5, secondArg:3)

    注意:
    如果你提供了外部参数名,那么函数在被调用时,必须使用外部参数名。

    八、可变参数

    可变参数可以接受零个或多个值。函数调用时,你可以用可变参数来指定函数参数,其数量是不确定的。
    可变参数通过在变量类型名后面加入(…)的方式来定义。

    func vari<N>(members: N...){
        for i in members {
            print(i)
        }
    }
    vari(members: 4,3,5)
    vari(members: 4.5, 3.1, 5.6)
    vari(members: "Google", "Baidu", "Runoob")

    以上程序执行输出结果为:

    4
    3
    5
    4.5
    3.1
    5.6
    Google
    Baidu
    Runoob

    九、常量、变量及 I/O 参数

    一般默认在函数中定义的参数都是常量参数,也就是这个参数你只可以查询使用,不能改变它的值。
    如果想要声明一个变量参数,可以在参数定义前加 inout 关键字,这样就可以改变这个参数的值了。

    func  getName(_ name: inout String).........

    此时这个 name 值可以在函数中改变。
    一般默认的参数传递都是传值调用的,而不是传引用。所以传入的参数在函数内改变,并不影响原来的那个参数。传入的只是这个参数的副本。
    当传入的参数作为输入输出参数时,需要在参数名前加 & 符,表示这个值可以被函数修改。

    1、实例

    func swapTwoInts(_ a: inout Int, _ b: inout Int) {
        let temporaryA = a
        a = b
        b = temporaryA
    }
    
    
    var x = 1
    var y = 5
    swapTwoInts(&x, &y)
    print("x 现在的值 \(x), y 现在的值 \(y)")

    以上程序执行输出结果为:

    x 现在的值 5, y 现在的值 1
    展开全文
  • Swift中的幂运算函数

    2020-05-27 11:30:00
    Swift中想求幂运算、有系统函数pow(x,y),含义为:求x的y次幂 public func pow(_ x: Decimal, _ y: Int) -> Decimal Decimal根据系统文档表示为 表示以10为基数的数的结构体,就是十进制的表示方法,可以...

    在Swift中想求幂运算、有系统函数pow(x,y),含义为:求x的y次幂

    public func pow(_ x: Decimal, _ y: Int) -> Decimal

    Decimal根据系统文档表示为

    表示以10为基数的数的结构体,就是十进制的表示方法,可以是Float、Int、Double。使用Float和Double的时候需要指定类型

    print(pow(-2, 2))//4
    print(pow(5, 3))//125
    print(pow(Double(2.533),2))//6.4160889999999995 精度问题、
    print(pow(Float(2.533),2))//6.416089

     

    展开全文
  • pow函数的返回值

    2020-04-30 20:13:58
    pow(n,m)的返回值是浮点数double类型 #include<iostream> #include<cmath> using namespace std; int main() { int n=60; cout<<pow(2,60); cout << endl; printf("%lld",pow(2,60));...

    记录一下这个坑:
    pow(n,m)的返回值是浮点数double类型

    #include<iostream>
    #include<cmath>
    
    using namespace std;
    
    int main()
    {
    	int n=60;
    	cout<<pow(2,60);
    	cout << endl;
    	printf("%lld",pow(2,60));
    	
    	return 0;
    }
    

    运行结果:
    在这里插入图片描述

    用pow()函数时,返回值一定要用int/long long接收一下,再输出。
    展开全文
  • Swift包含了74个内置函数,但在 The Swift Programming Langage 一书中只介绍了其中的7个,其它的都没有在文档中体现。 这篇文章列举出了所有的Swift库函数。文中所谓的 内置函数 是指无需引入任何模块(比如说...

    Swift包含了74个内置函数,但在 The Swift Programming Langage 一书中只介绍了其中的7个,其它的都没有在文档中体现。

    这篇文章列举出了所有的Swift库函数。文中所谓的 内置函数 是指无需引入任何模块(比如说Fundation等)即可以直接使用的函数。

    下面先来看看7个在文档中提到的库函数:

    下面列出一些很实用,但未在文档中体现的库函数:

    复制代码代码如下:

    //断言,参数如果为`true`则继续,否则抛出异常
    //assert mentioned on page 55
    assert(true)
     
    //计算序列的元素个数
    // countElements mentioned on page 79
    countElements("foo") == 3
     
    //返回一个新的序列,其中每个元素是一个元组,
    //第一个值为原来元素所在的位置`index`,第二个为原来序列中的元素
    // enumerate mentioned on page 94
    for (i, j) in enumerate(["A", "B"]) {
     // "0:A", "1:B" will be printed
    println("\(i):\(j)")
    }
     
    //返回所有参数中的最小值
    // min mentioned on page 246
    min(8, 2, 3) == 2
     
    //打印
    // print mentioned on page 85
    print("Hello ")
     
    //打印(带换行)
    // println mentioned on page 4
    println("World")
     
    //排序
    // sort mentioned on page 14
    for i in sort(["B", "A"]) {
     // "A", "B" will be printed
     println(i)
    }


    abs(signedNumber):返回数字的绝对值

    复制代码代码如下:

    abs(-1) == 1
    abs(-42) == 42
    abs(42) == 42

    contains(sequence, element):如果某个序列sequence(比如说一个数组)包含指定的元素element,则返回true,否则返回false。

    复制代码代码如下:

    var languages = ["Swift", "Objective-C"]
    contains(languages, "Swift") == true
    contains(languages, "Java") == false
    contains([29, 85, 42, 96, 75], 42) == true

    dropFirst(sequence):返回一个去掉了首个元素的、新的序列(比如一个新数组)。

    复制代码代码如下:

    var languages = ["Swift", "Objective-C"]
    var oldLanguages = dropFirst(languages)
    equal(oldLanguages, ["Objective-C"]) == true

    dropLast(sequence):返回一个去掉了最后一个元素的、新的序列(比如一个新数组)。
    复制代码代码如下:

    var languages = ["Swift", "Objective-C"]
    var newLanguages = dropLast(languages)
    equal(newLanguages, ["Swift"]) == true

    dump(object):打印出某个对象object的所有信息
    复制代码代码如下:

    var languages = ["Swift", "Objective-C"]
    dump(languages)
    // Prints:
    // ▿ 2 elements
    // - [0]: Swift
    // - [1]: Objective-C


    equal(sequence1, sequence2):判断两个序列是否相等
    复制代码代码如下:

    var languages = ["Swift", "Objective-C"]
    equal(languages, ["Swift", "Objective-C"]) == true
    var oldLanguages = dropFirst(languages)
    equal(oldLanguages, ["Objective-C"]) == true

    filter(sequence, includeElementClosure):对序列sequence中每个元素都执行includeElementClosure闭包,并将所有闭包结果为true的元素合成一个新序列sequence并返回。
    复制代码代码如下:

    for i in filter(1...100, { $0 % 10 == 0 }) {
     // 10, 20, 30, ...
     println(i)
     assert(contains([10, 20, 30, 40, 50, 60, 70, 80, 90, 100], i))
    }

    find(sequence, element):返回序列sequence中某元素element的位置index。如果序列中不存在此元素,则返回nil。

    复制代码代码如下:

    var languages = ["Swift", "Objective-C"]
    find(languages, "Objective-C") == 1
    find(languages, "Java") == nil
    find([29, 85, 42, 96, 75], 42) == 2

    indices(sequence):返回序列sequence中所有元素的位置(indices是index的复数)

    复制代码代码如下:

    equal(indices([29, 85, 42]), [0, 1, 2])
    for i in indices([29, 85, 42]) {
     // 0, 1, 2
     println(i)
    }

    join(separator, sequence):将序列sequence通过分隔符separator连成一个字符串,并返回此字符串。
    复制代码代码如下:

    join(":", ["A", "B", "C"]) == "A:B:C"
    var languages = ["Swift", "Objective-C"]
    join("/", languages) == "Swift/Objective-C"

    map(sequence, transformClosure):对序列sequence中每个元素都执行includeElementClosure闭包,并将所有闭包的结果合成一个新序列sequence并返回。

    复制代码代码如下:

    equal(map(1...3, { $0 * 5 }), [5, 10, 15])
    for i in map(1...10, { $0 * 10 }) {
     // 10, 20, 30, ...
     println(i)
     assert(contains([10, 20, 30, 40, 50, 60, 70, 80, 90, 100], i))
    }

    max(comparable1, comparable2, etc.):返回参数中的最大值。
    复制代码代码如下:

    max(0, 1) == 1
    max(8, 2, 3) == 8

    maxElement(sequence):返回序列sequence中的最大值。
    复制代码代码如下:

    maxElement(1...10) == 10
    var languages = ["Swift", "Objective-C"]
    maxElement(languages) == "Swift"

    minElements(sequence):返回序列sequence中的最小值。
    复制代码代码如下:

    minElement(1...10) == 1
    var languages = ["Swift", "Objective-C"]
    minElement(languages) == "Objective-C"

    reduce(sequence, initial, combineClosure):给定一个序列sequence,以及一个初始值initial,然后将initial和序列里的第1个元素作为参数传入combineClosure中进行运算,得到的结果保存到initial;然后再将initial和第2个元素传入combineClosure中计算,结果保存到initial;重复计算直到所有sequence中的元素都计算完毕,并返回最终的initial值。

    复制代码代码如下:

    var languages = ["Swift", "Objective-C"]
    reduce(languages, "", { $0 + $1 }) == "SwiftObjective-C"
    reduce([10, 20, 5], 1, { $0 * $1 }) == 1000

    reverse(sequence):返回逆序的序列sequence。

    复制代码代码如下:

    equal(reverse([1, 2, 3]), [3, 2, 1])
    for i in reverse([1, 2, 3]) {
     // 3, 2, 1
     println(i)
    }

    startsWith(sequence1, sequence2):如果序列sequence1中开头的元素跟序列sequence2中的所有元素都相等,则返回true,否则返回false。

    复制代码代码如下:

    startsWith("foobar", "foo") == true
    startsWith(10..100, 10..15) == true
    var languages = ["Swift", "Objective-C"]
    startsWith(languages, ["Swift"]) == true

    上面提到的函数是我认为在Swift编程中会经常用到的函数。

    完整74个内置函数:

    复制代码代码如下:

    abs(...)
    advance(...)
    alignof(...)
    alignofValue(...)
    assert(...)
    bridgeFromObjectiveC(...)
    bridgeFromObjectiveCUnconditional(...)
    bridgeToObjectiveC(...)
    bridgeToObjectiveCUnconditional(...)
    c_malloc_size(...)
    c_memcpy(...)
    c_putchar(...)
    contains(...)
    count(...)
    countElements(...)
    countLeadingZeros(...)
    debugPrint(...)
    debugPrintln(...)
    distance(...)
    dropFirst(...)
    dropLast(...)
    dump(...)
    encodeBitsAsWords(...)
    enumerate(...)
    equal(...)
    filter(...)
    find(...)
    getBridgedObjectiveCType(...)
    getVaList(...)
    indices(...)
    insertionSort(...)
    isBridgedToObjectiveC(...)
    isBridgedVerbatimToObjectiveC(...)
    isUniquelyReferenced(...)
    join(...)
    lexicographicalCompare(...)
    map(...)
    max(...)
    maxElement(...)
    min(...)
    minElement(...)
    numericCast(...)
    partition(...)
    posix_read(...)
    posix_write(...)
    print(...)
    println(...)
    quickSort(...)
    reduce(...)
    reflect(...)
    reinterpretCast(...)
    reverse(...)
    roundUpToAlignment(...)
    sizeof(...)
    sizeofValue(...)
    sort(...)
    split(...)
    startsWith(...)
    strideof(...)
    strideofValue(...)
    swap(...)
    swift_MagicMirrorData_summaryImpl(...)
    swift_bufferAllocate(...)
    swift_keepAlive(...)
    toString(...)
    transcode(...)
    underestimateCount(...)
    unsafeReflect(...)
    withExtendedLifetime(...)
    withObjectAtPlusZero(...)
    withUnsafePointer(...)
    withUnsafePointerToObject(...)
    withUnsafePointers(...)
    withVaList(...)
    展开全文
  • 以在Playground中展示为例: 1. 打开Xcode10, 按下图依次选择File - New - Playground 2. 在弹出窗口中选择 Blank 3. ...敲入以下代码,然后点⭕️里的三角形运行即可看到下图所示结果。...}...
  • 程序如下:#includeint pow1(int m,int n)//测试求幂函数,用于计算整数m的n次幂{ int i,p=1; for(i=1;i p=p*m; return p;}main(){ int x,y,s; printf("请分别输入求整数m的n次幂的m和n的值/n"); scanf
  • ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:...
  • 1.abs(_ x: T) -> T 返回的是数字的绝对值 abs(-10) = 10 abs(34) = 34 2.assert(_ condition: @autoclosure () -> Bool, _ message: @autoclosure () -> String = default, file: StaticString = #file, line: ...
  • Swift 定义函数

    2017-08-25 14:51:42
    Swift 定义函数使用关键字 func。 定义函数的时候,可以指定一个或多个输入参数和一个返回值类型。 每个函数都有一个函数名来描述它的功能。通过函数名以及对应类型的参数值来调用这个函数函数的参数传递的顺序...
  • //***********swift学习之15--函数--*************************** /*  Swift 定义函数使用关键字 func,由函数名、参数、返回值组成。参数和返回值甚至可以是元组、带返回值的函数等  */ // 1.1...
  • Swift 函数 Swift 函数用来完成特定任务的独立的代码块。 Swift使用一个统一的语法来表示简单的C语言风格的函数到复杂的Objective-C语言风格的方法。 函数声明: 告诉编译器函数的名字,返回类型及参数。 函数...
  • 原文链接 : Trigonometry for Games – Sprite Kit and Swift Tutorial: Part 2/2 原文作者 : Nick Lockwood 译文出自 : 开发技术前线 www.devtf.cn 译者 : kmyhy 游戏编程中的三角学!2015年4月20日 更新:...
  • swift-func(函数

    2019-07-25 21:54:00
    Swift 函数类似于简单 C 函数以及复杂的 Objective C 语言函数。 它使我们能够通过函数调用内部的局部和全局参数值。 像其他任何语言一样 swift 函数也遵循相同的步骤。 函数声明:它告诉编译器有关的函数的...
  • Math.sqrt(9); //3 Math.pow(2,2) //4
  • swift函数

    2020-03-25 11:52:19
    Swift统一的函数语法足够灵活,可以用来表示任何函数,包括从最简单的没有参数名字的 C 风格函数,到复杂的带局部和外部参数名的Objective-C风格函数。参数可以提供默认值,以简化函数调用。参数也可以既当做传入...
  • Swift - 函数

    2015-09-14 22:54:15
    函数是用来完成特定任务的独立的代码块。 函数的定义与调用 定义函数:func 函数名(参数列表)->返回值 { 实现部分 } 关键字 函数名 参数 返回值 func sayHello (name: String) -> String { // 函数实现 return ...
  • 其实在绝大多数C语言编译器内部是有幂函数这个函数的,具体的指令是pow(a,b),这个指令实现的功能就是求解a^b的值,也就是求解a的b次方。 例如,假如我们要求解6的7次方,并把最终的结果存入变量result,那么我们...
  • ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:...
  • 常用数学函数

    2017-08-19 10:51:57
    博主在这里大致列举出一些Swift中常用的数学函数 1、绝对值 let testAbs = abs(-2) // 2 2、次方 let testPow = pow(2, 3) // 8 3、平方根 let testSqrt = sqrt(4) 4、对数(参数必须为浮点数) let ...
1 2 3 4 5 ... 17
收藏数 326
精华内容 130