《Go语言程序设计》第7章练习

7.1 已知三角形三边a、b、c,编写函数求三角形面积公式area(),求三角形面积。

package main

import (
	"fmt"
	"math"
)

func main() {
	var a, b, c float64
	fmt.Scan(&a, &b, &c)
	fmt.Println("area=", area(a, b, c))

}

func area(a, b, c float64) float64 {
	var s = (a + b + c) / 2.0
	return math.Sqrt(s * (s - a) * (s - b) * (s - c))
}


7.2 编写函数find(),在整型数组arr中查找最大元素下标max和最小元素下标min,要求数组作为函数参数,且使用多返回值同时返回查找结果max和min。

package main

import (
	"fmt"
)

func main() {
	var num = [10]int{1, 3, 5, 7, 9, 0, 2, 4, 6, 8}
	fmt.Println(find(num))

}

func find(arr [10]int) (max, min int) {
	for i, v := range arr {
		if arr[max] < v {
			max = i
		}
		if arr[min] > v {
			min = i
		}
	}
	return
}


7.3 编写一个函数,用于计算float64类型Slice的元素平均值,要求将Slice作为函数参数传递给处理函数。

package main

import (
	"fmt"
)

func main() {
	var num = []float64{1, 3, 5, 7, 9, 0, 2, 4, 6, 8}
	fmt.Println(average(num))

}

func average(slice []float64) float64 {
	var sum float64
	for _, v := range slice {
		sum += v
	}
	return sum / float64(len(slice))
}


7.4 设计一个变参函数max(),该函数可以找出不定数量整型数组中的最大值。

package main

import (
	"fmt"
)

func main() {
	fmt.Println(max(1, 3, 9, 7))

}

func max(args ...int) int {
	var m int = args[0]
	for _, v := range args {
		if m < v {
			m = v
		}
	}
	return m
}


7.5 编写函数fac(),使用递归调用计算n!。

package main

import (
	"fmt"
)

func main() {
	fmt.Println(fac(10))
}

func fac(n int) int {
	if n == 0 {
		return 1
	}
	return n * fac(n-1)
}


7.7 使用panic-and-recover机制编写一个检测用户账号合法性的程序,比如用户中不能出现空格,不能出现非法字符,比如‘,’、'#'、'!'等。

package main

import (
	"fmt"
	"strings"
)

func main() {
	defer func() {
		if err := recover(); err != nil {
			fmt.Println("Exception:", err)
		}
	}()

	var name string
	fmt.Scan(&name)
	check(name)
}

func check(name string) {
	if strings.ContainsAny(name, ",#! ") {
		panic("用户名含有非法字符")
	} else {
		fmt.Println(name)
	}
}

你可能感兴趣的:(Golang)