自己做的课后习题,不保证完全正确,侵删
尝试创建一个项目,新建一个程序,输出字符串“我爱Go语言”。
package main
import "fmt"
func main(){
fmt.Println("我爱Go语言")
}
输出结果:

打印左上直角三角形
package main
import "fmt"
func main(){
// 读入需要生成多少行的左上直角三角形
var line int
fmt.Scanf("%d",&line)
// 生成左上直角三角形
for i := 0;i < line;i++{
for j:=0;j < (line - i);j++{
fmt.Printf("*")
}
fmt.Println()
}
}
输出结果:

编程打印出所有的“水仙花数”。所谓水仙花数,是指一个三位数,其各位数字的立方之和等于该数
package main
import "fmt"
func main(){
var a,b,c int
for num := 100;num < 1000;num++{
a = num / 100
b = (num - 100 * a) / 10
c = num % 10
if (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 main
import "fmt"
func fib() func() int {
var f0 int = 0
var f1 int = 1
return func() int{
tmp := f0
f0 = f1
f1 = f0 + tmp
return tmp
}
}
func main(){
myfib := fib()
for i := 0;i < 10;i++{
fmt.Println(myfib())
}
}
输出结果:

递归实现n!
package main
import "fmt"
func factorial(n int) int {
if n == 0{
return 1
}
return n * factorial(n - 1)
}
func main(){
var num int
fmt.Scanf("%d",&num)
fmt.Printf("%d\n",factorial(num))
}
输出结果:

实现杨辉三角输出(打印10行)
package main
import "fmt"
func calYangHuiTriangle(arr []int) []int{
arrlen := len(arr)
ret := []int{}
if arrlen == 0{ //说明是杨辉三角的第一行
ret = append(ret,1) // 返回第一行
return ret
}
// 首先在ret中添加1
ret = append(ret,1)
// 添加中间的值
for i := 0; i < arrlen - 1;i++{
ret = append(ret,arr[i] + arr[i + 1])
}
// 添加最后的1
ret = append(ret,1)
return ret
}
func main(){
arr := []int{}
for i := 0;i < 10;i++{
arr = calYangHuiTriangle(arr)
fmt.Println(arr)
}
}
输出结果:

写一个函数,判断一个字符串是否对称,若对称,返回true,否则返回false
package main
import "fmt"
func isEqual(arr string) bool{
length := len(arr)
i := 0
j := length - 1
for ;i <= j;i++{
if arr[i] != arr[j]{
return false
}
j--
}
return true
}
func main(){
var arr string
fmt.Scanf("%s",&arr)
fmt.Println(isEqual(arr))
}
输出结果:


将字符串内所有abc替换成xyz,并转换成大写
package main
import (
"fmt"
"strings"
)
func toUpperAfterSplit(arr string) string{
splitArr := strings.Split(arr,"abc")
var retStr string
length := 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 string
fmt.Scanf("%s",&arr)
fmt.Println(toUpperAfterSplit(arr))
}
// 或者可以用strings包中自带的join函数
package main
import (
"fmt"
"strings"
)
func toUpperAfterSplit(arr string) string{
splitArr := strings.Split(arr,"abc")
var retStr string
retStr = strings.Join(splitArr,"xyz")
retStr = strings.ToUpper(retStr)
return retStr
}
func main(){
var arr string
fmt.Scanf("%s",&arr)
fmt.Println(toUpperAfterSplit(arr))
}
输出结果:

编写一个程序,输入某个日期,输出该日期是星期几
package main
import (
"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)MOD7
w —— 星期; 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 int
var c,y,m,index int
year,_ = strconv.Atoi(datetime[0])
month,_ = strconv.Atoi(datetime[1])
day,_ = strconv.Atoi(datetime[2])
if month < 3{
m = month + 12
y = (year - 1) % 100
c = (year - 1) / 100
}else{
m = month
y = year % 100
c = year / 100
}
index = ((c / 4) - 2 * c + y + (y / 4) + (13 * (m + 1) / 5) + day - 1) % 7
return weekday[index]
}
func main(){
var date string
fmt.Scanf("%s",&date)
fmt.Println(calculateTheDateofTheWeek(date))
}
输出结果:

自定义一个案例。该案例包含以下知识点:结构体,继承,方法重写,接口,多态,接口对象转型
package main
import (
"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 string
age int
}
type Teacher struct{
Human
school,systemType string
salary float64
}
type Employee struct{
Human
company,systemType string
salary 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和三个Employee
t1 := 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 float64
var count int
ic := []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 main
import (
"fmt"
)
func main(){
var arr string
fmt.Scanf("%s",&arr)
for i := 0;i < len(arr);i++{
defer fmt.Printf("%c",arr[i])
}
}
输出结果:

其他实现方法:https://zhuanlan.zhihu.com/p/78550943