Golang练习题
HelloWorld
func main() {
fmt.Println("HelloWorld")
}
99乘法表
func main() {
for i := 1;i<10;i++ {
for j := 1;i<=i;j++ {
fmt.Println("%d * %d = %d\t",j,i,j*i)
}
fmt.Println()
}
质数判断
func justfy(a int) bool {
for i := 2;i<a;i++ {
if a % i == 0{
return false
}
}
return true
}
func main() {
for i:=2;i<100;i++ {
if justfy(i) == true {
fmt.Printf("[%d] is prime\n",i}
}
}
}
水仙花数,1的立方+5的立方+3的立方=153
func shuixianhua(a int) bool {
first := a%10
second := (a/10)%10
third := (a/100)%10
sum := first*first*first+second*second*second+third*third*third
if sum == a{
return true
}
reutrn false
}
func main() {
for i := 100;i<1000;i++{
if shuixianhuashu(i) == true{
fmt.Printf("[%d]是水仙花数\n",i)
}
}
}
字符统计::输入一行字符,统计出英文字母、空格、数字和其他字符的个数
func test(str string) (charCount,numCount,spaceCount,otherCount int) {
uftChars := []rune(str)
for i:= 0;i<len(uftChars);i++ {
if uftChars[i] >= 'a' && uftChars[i] <= 'z' || uftChars[i] >= 'A' && uftChars[i] <= 'Z' {
charCount++
continue
}
if uftChars[i] >= '0' && uftChars[i] <='9' {
numChount++
continue
}
if uftChars[i] == ' '{
spaceConut++
continue
}
otherCount++}
}
return
}
func main() {
var str string = "dksjfhk 我123+---"
carCount,numCount,spCount,other := test(str)
fmt.Printf("字母有%d,数字有%d,空格有%d,其他有%d", charCount, numCount, spCount, other)
}
插入排序
func inser_sort(a [8]int) [8]int {
for i:=1;i<len(a);i++ {
for j:= i;j>0;j-- {
if a[j] <a[j-1] {
a[j],a[j-1] = a[j-1],a[j]
} else {
break
}
}
}
return a
}
func main() {
var i [8]int = [8]int{8,3, 2, 9, 4, 6, 10, 0}
j := inser_sort(i)
fmt.Println(i) //[8,3, 2, 9, 4, 6, 10, 0]
fmt.Println(j) //[0,2,3,4,6,8,9,10]
}
选择排序
func selet_sort(a [8]int) [8]int {
for i:=0;i<len(a);i++ {
for j:= i+1;j<len(a);j++ {
if a[j] < a[i] {
[i],a[j] = a[j],a[i]
}
}
}
return a
}
func main() {
var i [8]int = [8]int{8, 3, 2, 9, 4, 6, 10, 0}
j := select_sort(i)
fmt.Println(i) //[8, 3, 2, 9, 4, 6, 10, 0]
fmt.Println(j) //[0,2,3,4,6,8,9,10]
}
斐波那锲数列
//递归
func fab(n int) int{
if n<=1 {
return 1
}
return fab(n-1) + fab(n-2)
}
func main() {
for i :=0;i<10;i++ {
n:= fab(i)
fmt.Println(n)
}
}
冒泡排序
func select_sort(a [8]int) [8]int{
for i:= 0;i<len(a);i++ {
for j:=0;j<len(a)-i-1;j++ {
if a[j]>a[j+1]{
a[j],a[j+1] = a[j+1],a[j]
}
}
}
return a
}
func main() {
var i [8]int = [8]int{8, 3, 2, 9, 4, 6, 10, 0}
j := select_sort{i}
fmt.Println(i)
fmt.Println(j)
}
数组元素之和
func main() {
a := [...]int{1,3,5,6,8}
b := 0
for _,value := range a {
b += value
}
fmt.Println(b)
}
数组中和为给定值的两个元素的下标:数组[1,3,4,8,7]中找出和为8的下标分别是(0,4)和(1,2)
func main() {
a := [...]int{1,2,3,4,5,8,4,4,2}
for i:=0;i<len(a);i++ {
for j:= i+1;j<len(a);j++ {
if a[i]+a[j] == 8 {
fmt.Printf("(%d,%d)的和等于8\n",i,j)
}
}
}
}
切片程序输出
func main() {
var sa = make([]string,5,10)
for i := 0;i<5;i++ {
sa = append(sa,fmt.Sprintf("%v",i))
}
fmt.Println(sa)
} //[ 0,1,2,3,4,5,6,7,8,9]
sort排序包对数据进行排序
func main() {
var a [5]int = [5]int{1,4,2,5,6}
sort.Ints(a[:]) //Ints表示整型
fmt.Println(a)
var b [5]string = [5]string{"ac","ed","sd","fg"}
sort.Strings(b[:]) //Strings表示字符串类型
fmt.Println(b)
} //Float64表示浮点型
统计字符串中每个单词出现的次数
//端口
func test(str string) map[string]int {
var result mapp[string]int = make(map[string]int,128)
words := strings.Split(str," "}
for _,v := range words {
count,ok := result[v]
if !ok {
result[v] = 1
} else {
result[v] = count+1
}
}
return result
}
func main() {
var str = "how do ou do?"
result := test(str)
fmt.Printf("result%v\n",result)
}
//文件
type CharCount struct {
ChCount INT
NumCount int
SpaceCount int
OtherCount int
}
func main() {
file,err := os.Open("c:/test.log")
if err != nil {
fmt.Println("read file err:",err)
return
}
defer file.Close()
var count CharCount
reader := bufio.NewReader(file)
for {
str,err := reader.ReadString('\n')
if err == io.EOF {
break
}
if err == ! nil {
fmt.printf("read file failed,err:%v",err)
break
}
runeArr := []rune(str)
for _,v := range runeArr {
switch {
case v > ='a' && v<='z':
fallthrouth //满足这个条件的无条件执行下一个case内容
case v >= 'A'&&v<='Z':
count.ChCount++
case v==' '||v=='\t':
count.SpaceCount++
case v>='0'&&v<='9':
count.NumCount++
default:
count.OtherCount++
}
}
}
fmt.Printf("char count:%d\n",count.ChCount)
fmt.Printf("num count:%d\n",count.NumCount)
fmt.Printf("space count:%d\n",count.SpaceCount)
fmt.Printf("other count:%d\n",count.OtherCount)
}
存储学生信息
//学生有id、年龄、分数、需要方便通过id查到对应学生的信息
func test() {
var stuMap map[int]map[string]interface{}
stuMap = make(map[int]map[string]interface{},16)
var id = 1
var name = "stu01"
var score = 79.3
var age = 19
value,ok := stuMap[id]
if !ok {
value = make(map[string]interface{},8)
}
value["id"] = id
value["name"] = name
value["score"] = score
value["age"] = age
stuMap[id] = value
fmt.Printf("stuMap:%v\n",stuMap) //stuMap:map[1:mao[age:19 id:1 name:stu01 score:79.3]] 带#表示要输出类型
fmt.Printf("stuMap:%#v\n",stuMap) //stuMap:mao[int]mao[string]interface{}{1:map[string]interface{}{"age":18,"id":1,"name":"stu01","score":79.3}}
for i:= 0;i<10;i++ {
value,ok := stuMap[i]
if !ok {
value = make{map[string]interface{},8)
}
value["name"] = fmt.Sprintf("stu%d",i)
value["id"] = i
value["score"] = rand.Float32()*100.0
value["age"] = rand.Intn(100)
stuMap[i] = vaue
}
fmt.Println()
for k,v := range stuMap {
fmt.Printf("id=%d stu info = %#v\n",k,v)
}
}
struct链表:单向链表
//尾部添加
type Student struct {
Name string
Age int
Score float64
next *Student
}
func trans(p *Student) {
for p!= nil {
fmt.Println(*p)
p = p.next
}
fmt.Println()
}
func test() {
var head Student
head.Name = "yang"
head.Age = 19
head.Score 100.00
var tail = &head
for i:=0;i<5;i++ {
stu := &Student{
Name : fmt.Sprintf("stu%d",i),
Age:rand.Intn(100)
Score:rand.Float64() *100,
}
tail.next = stu
tail = stu
}
trans(&head)
}
//头部添加
type Stident struct {
Name string
Age int
Score float64
next *Student
}
func trans(p *Student) {
for p!= nil {
fmt.Println(*p)
p = p.next
}
fmt.Println()
}
func test() {
var head *Student = &Student{}
head.Name = "hua"
head.Age = 18
head.Score = 100
for i := 0;i<5;i++ {
stu := Student{
Name : fmt.Printf("stu%d",i),
Age : rand.Intn(100),
Score:rand.Float64() *100,
}
stu.next = head
head = &stu
}
trans(head)
}
defer练习
func f1() int{
x:= 5
defer func() {
x++
}()
return x
}
func f2() (x int) {
defer func() {
x++
}()
return 5
}
func f3() (y int) {
x := 5
defer func() {
x++
}()
return x
}
func f4() (x int) {
defer func(x int) {
x++
}(x)
return 5
}
func main () {
fmt.Println(f1()) //5
fmt.Println(f2()) //6
fmt.Println(f3()) //5
fmt.Println(f4()) //5
}
并发引起的闭包
//问题
var wg sync.WaitGroup
func main() {
wg.Add(1000)
for i :=0;i<1000;i++ {
go func() {
fmt.Println(hello",i)
wg.Done()
}()
}
wg.Wait()
} //会有很多重复的1000,匿名函数中i存在调用外部变量的情况产生闭包
//解决
var wg synv.WaitGroup
func main() {
wg.Add1000)
for i:=0;i<1000;i++ {
go func(i int) {
fmt.Println("hello",i)
wg.Done()
}(i)
}
wg.Wait()
} //把i传进去就会解决嗲用外部变量的问题
简单聊天机器人
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
//从标准输入读取数据
inputReader := bufio.NewReader(os.Stdin)
fmt.Println("Please input your name:")
//读取数据直到遇见\n位置
input, err := inputReader.ReadString('\n')
if err != nil {
fmt.Printf("An error occurred:%s\n", err)
//异常错误后退出
os.Exit(1)
} else {
//用切片操作删除最后的\n
name := input[:len(input)-1]
fmt.Printf("Hello,%s!What can i di for you?\n", name)
}
for {
input, err = inputReader.ReadString('\n')
if err != nil {
fmt.Printf("An error occurred:%s\n", err)
continue
}
input = input[:len(input)-1]
//全部转换为小写
input = strings.ToLower(input)
switch input {
case "":
continue
case "nothing", "bye":
fmt.Println("Bye!")
//正常退出
os.Exit(0)
default:
fmt.Println("Sorry,I didn't catch you.")
}
}
}

被折叠的 条评论
为什么被折叠?



