前面学习了go的基础知识,这里做一些练习,来巩固我们所学知识,请看下面题目
1、字符串去除空格和换行符
2、判断一个数是偶数
3、寻找100以内的所有素数
4、99乘法口诀表
5、杨辉三角
6、将学生成绩分为A(90分以上)、B(60-90)、C(小于60),使用switch语句编写
7、定义一个结构体,包含X和Y两个坐标,带入函数,求两点之间的距离
8、使用iota常量生成器,生成一个星期的常量,用1到7来进行表示
9、定义两个slice,进行比较(slice是不能直接进行比较的,数组可以)
10、定义一个map,key是学生名称,value是学生的成级,写一个函数无返回值,参数为指针类型的数组,数组存放学生名称,遍历数组查找map中的对应学生的成绩,找不到或者成绩小于60分时,删除数组中对应的学生
实现源码:
// stydy project main.go
package main
import (
"fmt"
"math"
"strings"
)
//去除字符串中的空格和换行
func replaceStr() {
s := "a bcd \naaa3355\n pbc"
//strings.Replace(s, old, new, index) 返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。
s = strings.Replace(s, " ", "", -1)
s = strings.Replace(s, "\n", "", -1)
fmt.Println(s)
}
//判断一个数是否是偶数
func judgeEvenNum(s int) {
//能被2除尽的数为偶数
if s%2 == 0 {
fmt.Printf("%d是偶数\n", s)
} else {
fmt.Printf("%d是奇数\n", s)
}
}
//1到100以内的所有素数, 只能被1和自身除尽的数为素数
func primeNumber() {
flag := true
for i := 1; i <= 100; i++ {
for j := 1; j <= i; j++ {
if i%j == 0 && j > 1 && j < i {
flag = false
break
}
}
if flag {
fmt.Println(i)
}
flag = true
}
}
//打印99乘法口诀表
func printMultTable() {
for i := 1; i <= 9; i++ {
for j := 1; j <= i; j++ {
fmt.Printf("%d*%d=%d\t", i, j, i*j)
}
fmt.Println()
}
}
//杨辉三角
func ShowYangHuiTriangle(rows int) {
nums := make([]int, rows)
for i := 0; i < rows; i++ {
//补空白
for j := 0; j < (rows - i); j++ {
fmt.Print(" ")
}
for j := 0; j < (i + 1); j++ {
var length = len(nums)
var value int
if j == 0 || j == i {
value = 1
} else {
value = nums[length-i] + nums[length-i-1]
}
nums = append(nums, value)
fmt.Print(value, " ")
}
fmt.Println("")
}
}
//将学生成绩分为A(90分以上)、B(60-90)、C(小于60),使用switch语句编写
func studentPerformance(score int) string {
var result string
switch {
case score >= 90:
result = "A"
case score >= 60 && score < 90:
result = "B"
case score < 60:
result = "C"
default:
result = "unknow"
}
return result
}
//定义一个结构体,包含X和Y两个坐标,带入函数,求两点之间的距离
//p1 := Point{X: 8, Y: -7}
//p2 := Point{1, 2}
//b, err := getDistance(p1, p2)
//if err == nil {
// fmt.Println(b)
//} else {
// fmt.Println(err)
//}
type Point struct {
X float64
Y float64
}
func getDistance(p1, p2 Point) (float64, error) {
if p1.X < 0 || p1.Y < 0 || p2.X < 0 || p2.Y < 0 {
return -1, fmt.Errorf("point error")
}
return math.Pow(p1.X-p2.X, 2) - math.Pow(p1.Y-p2.Y, 2), nil
}
//8、使用iota常量生成器,生成一个星期的常量,用1到7来进行表示
//fmt.Println(Sunday) 7
const (
_ int = iota
Monday
Tuesday
Wednesday
Thursday
Firday
Staurday
Sunday
)
//9、定义两个slice,进行比较(slice是不能直接进行比较的,数组可以)
//arr1 := []int{1, 2, 3, 4, 5}
//arr2 := arr1[:]
//b := compareSlice(arr1, arr2)
//fmt.Println(b) true
func compareSlice(arr1, arr2 []int) bool {
//第一步用长度比较
if len(arr1) != len(arr2) {
return false
}
//当长度相当的时候,遍历slice,比较元素
for i, _ := range arr1 {
if arr1[i] != arr2[i] {
return false
}
}
return true
}
//10、定义一个map,key是学生名称,value是学生的成级,写一个函数无返回值,
//参数为指针类型的数组,数组存放学生名称,遍历数组查找map中的对应学生的成绩,找不到或者成绩小于60分时,删除数组中对应的学生
// sarr := []string{"jack", "rose", "go", "java"}
// smap := map[string]int{"python": 80, "java": 70, "rose": 59}
// searchStu(&sarr, smap)
// fmt.Println(sarr)
func searchStu(sarr *[]string, smap map[string]int) {
for i, name := range *sarr {
score, ok := smap[name]
if !ok && score < 60 {
remove(sarr, i)
}
}
}
func remove(arr *[]string, i int) {
var temp []string = *arr
for j := i; j < len(temp)-1; j++ {
temp[j] = temp[j+1]
}
*arr = temp[:len(temp)-1]
}
func main() {
}