Go语言开发实战课后编程题
生活随笔
收集整理的這篇文章主要介紹了
Go语言开发实战课后编程题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Go語言開發實戰課后編程題
- 第一章
- 第三章
- 第四章
- 第五章
- 第六章
- 第七章
- 第八章
自己做的課后習題,不保證完全正確,侵刪
第一章
嘗試創建一個項目,新建一個程序,輸出字符串“我愛Go語言”。
package mainimport "fmt"func main(){fmt.Println("我愛Go語言") }輸出結果:
第三章
打印左上直角三角形
package mainimport "fmt"func main(){// 讀入需要生成多少行的左上直角三角形var line intfmt.Scanf("%d",&line)// 生成左上直角三角形for i := 0;i < line;i++{for j:=0;j < (line - i);j++{fmt.Printf("*")}fmt.Println()} }輸出結果:
編程打印出所有的“水仙花數”。所謂水仙花數,是指一個三位數,其各位數字的立方之和等于該數
package mainimport "fmt"func main(){var a,b,c intfor num := 100;num < 1000;num++{a = num / 100b = (num - 100 * a) / 10c = num % 10if (a * a * a + b * b * b + c * c * c) == num{fmt.Println(num)}} }輸出結果:
第四章
斐波那契數列是由0和1開始,之后的斐波那契數列系數就由之前的兩數相加。在數學上定義為F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2),下面請使用閉包實現斐波那契數列,并輸出前10個數
package mainimport "fmt"func fib() func() int {var f0 int = 0var f1 int = 1return func() int{tmp := f0f0 = f1f1 = f0 + tmpreturn tmp} }func main(){myfib := fib()for i := 0;i < 10;i++{fmt.Println(myfib())} }輸出結果:
遞歸實現n!
package mainimport "fmt"func factorial(n int) int {if n == 0{return 1}return n * factorial(n - 1) }func main(){var num intfmt.Scanf("%d",&num)fmt.Printf("%d\n",factorial(num)) }輸出結果:
第五章
實現楊輝三角輸出(打印10行)
package mainimport "fmt"func calYangHuiTriangle(arr []int) []int{arrlen := len(arr)ret := []int{}if arrlen == 0{ //說明是楊輝三角的第一行ret = append(ret,1) // 返回第一行return ret}// 首先在ret中添加1ret = append(ret,1)// 添加中間的值for i := 0; i < arrlen - 1;i++{ret = append(ret,arr[i] + arr[i + 1])}// 添加最后的1ret = append(ret,1)return ret }func main(){arr := []int{}for i := 0;i < 10;i++{arr = calYangHuiTriangle(arr)fmt.Println(arr)} }輸出結果:
寫一個函數,判斷一個字符串是否對稱,若對稱,返回true,否則返回false
package mainimport "fmt"func isEqual(arr string) bool{length := len(arr)i := 0j := length - 1for ;i <= j;i++{if arr[i] != arr[j]{return false}j--}return true }func main(){var arr stringfmt.Scanf("%s",&arr)fmt.Println(isEqual(arr)) }輸出結果:
第六章
將字符串內所有abc替換成xyz,并轉換成大寫
package mainimport ("fmt""strings" )func toUpperAfterSplit(arr string) string{splitArr := strings.Split(arr,"abc")var retStr stringlength := len(splitArr)for i := 0;i < length - 1;i++{retStr += (splitArr[i] + "xyz")}retStr += splitArr[length -1 ]retStr = strings.ToUpper(retStr)return retStr }func main(){var arr stringfmt.Scanf("%s",&arr)fmt.Println(toUpperAfterSplit(arr)) } // 或者可以用strings包中自帶的join函數 package mainimport ("fmt""strings" )func toUpperAfterSplit(arr string) string{splitArr := strings.Split(arr,"abc")var retStr stringretStr = strings.Join(splitArr,"xyz")retStr = strings.ToUpper(retStr)return retStr }func main(){var arr stringfmt.Scanf("%s",&arr)fmt.Println(toUpperAfterSplit(arr)) }輸出結果:
編寫一個程序,輸入某個日期,輸出該日期是星期幾
package mainimport ("fmt""strconv""strings" )func calculateTheDateofTheWeek(date string) string{var weekday = [...]string{"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}/*根據蔡勒公式計算日期w = ([c/4]-2c+y+[y/4]+[13*(m+1)/5]+d-1)MOD7w —— 星期; w對7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六c —— 世紀(注:一般情況下,在公式中取值為已經過的世紀數,也就是年份除以一百的結果,而非正在進行的世紀,也就是現在常用的年份除以一百加一)y —— 年(一般情況下是后兩位數,如果是公元前的年份且非整百數,y應該等于cMOD100+100)m —— 月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計算)d —— 日*/var datetime = strings.Split(date,"-")var year,month,day intvar c,y,m,index intyear,_ = strconv.Atoi(datetime[0])month,_ = strconv.Atoi(datetime[1])day,_ = strconv.Atoi(datetime[2])if month < 3{m = month + 12y = (year - 1) % 100c = (year - 1) / 100}else{m = monthy = year % 100c = year / 100}index = ((c / 4) - 2 * c + y + (y / 4) + (13 * (m + 1) / 5) + day - 1) % 7return weekday[index]}func main(){var date stringfmt.Scanf("%s",&date)fmt.Println(calculateTheDateofTheWeek(date)) }輸出結果:
第七章
自定義一個案例。該案例包含以下知識點:結構體,繼承,方法重寫,接口,多態,接口對象轉型
package mainimport ("fmt" )/*定義三個-結構體-:(1)Human:屬性有name、sex、age、phone(2)Teacher:屬性繼承Human,再添加school,systemType,salary(3)Employee:屬性繼承Human,再添加company,systemType,salary--方法--(1)采用繼承和方法重寫完成功能:對于Teacher和Employee,自我介紹都需要包含自己的名字、年齡、手機號,老師還需要介紹自己的工作學校(2)采用接口完成功能:Teacher和Employee介紹自己所使用的電腦系統類型(Windows/MAC)(3)采用多態完成功能:在場所有人的工資平均和總和(4)采用接口對象轉型完成功能:判斷是否是Teacher還是Employee */// 結構體 type Human struct{name,phone,sex stringage int }type Teacher struct{Humanschool,systemType stringsalary float64 }type Employee struct{Humancompany,systemType stringsalary float64 }// 接口 type introduceSystemType interface{introduceSystemType() }// 自我介紹方法(Human) func (h Human) introduce(){fmt.Printf("大家好,我叫%s,我%d歲了,手機號為%s\n",h.name,h.age,h.phone) }// 自我介紹方法(Teacher) func (t Teacher) introduce(){fmt.Printf("大家好,我叫%s,我%d歲了,手機號為%s,工作于%s\n",t.name,t.age,t.phone,t.school) }// 介紹自己所使用的電腦系統 func (t Teacher) introduceSystemType(){fmt.Printf("大家好,我是Teacher,我使用的電腦系統為%s\n",t.systemType) }func (e Employee) introduceSystemType(){fmt.Printf("大家好,我是Employee,我使用的電腦系統為%s\n",e.systemType) }// 計算工資相關 type Income interface{calSalary() float64 } func (t Teacher) calSalary() float64{return t.salary }func (e Employee) calSalary() float64{return e.salary }func main(){// 首先新建三個Teacher和三個Employeet1 := Teacher{Human{"Dianel","188-4658-****","Male",26},"第一中學","Windows",5645.5}t2 := Teacher{Human{"Cherry","156-7894-****","Female",45},"第二中學","Windows",4569.7}t3 := Teacher{Human{"Helen","131-4652-****","Female",35},"第三中學","Mac",7895.3}e1 := Employee{Human{"Selina","156-7899-****","Female",28},"01公司","Mac",12368}e2 := Employee{Human{"Tom","178-4632-****","Male",39},"02公司","Mac",4569}e3 := Employee{Human{"Jack","198-3645-****","Male",45},"03公司","Windows",25984.6}// 每個人自我介紹一下fmt.Println("---------------------------------------------------")t1.introduce()t2.introduce()t3.introduce()e1.introduce()e2.introduce()e3.introduce()// 介紹自己所使用的電腦系統fmt.Println("---------------------------------------------------")t1.introduceSystemType()t2.introduceSystemType()t3.introduceSystemType()e1.introduceSystemType()e2.introduceSystemType()e3.introduceSystemType()//計算工資總和和平均fmt.Println("---------------------------------------------------")var totalSalary,averageSalary float64var count intic := []Income{t1,t2,t3,e1,e2,e3}for _,income := range ic{if instance,ok := income.(Teacher);ok{fmt.Printf("我是Teacher,我的工資為%.2f\n",instance.salary)}else if instance,ok := income.(Employee);ok{fmt.Printf("我是Employee,我的工資為%.2f\n",instance.salary)}totalSalary += income.calSalary()count += 1}averageSalary = totalSalary / float64(count)fmt.Println("---------------------------------------------------")fmt.Printf("TotalSalary:%.2f\n",totalSalary)fmt.Printf("AverageSalary:%.2f\n",averageSalary) }輸出結果:
第八章
借助defer實現字符串倒序
package mainimport ("fmt" )func main(){var arr stringfmt.Scanf("%s",&arr)for i := 0;i < len(arr);i++{defer fmt.Printf("%c",arr[i])} }輸出結果:
其他實現方法:https://zhuanlan.zhihu.com/p/78550943
總結
以上是生活随笔為你收集整理的Go语言开发实战课后编程题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海2014计算机职称考试理论题,201
- 下一篇: ibm服务器和微软,微软与IBM不得不说