go语言基础语法01天-5

 

7,运算符

在前面的课程中,我们已经学习了变量,常量,那么接下来我们学习一下运算符。GO语言中常见的运算符有算术运算符,赋值运算符,关系运算符,逻辑运算符等。

7.1 算术运算符

7.1.1

运算符术语示例结果
+10+515
-10-55
*10*550
/10/52
%取模(取余)10%31
++后自增,没有前自增a=0;a++a=1
--后自减,没有前自减a=2;a--a=1

算术表达式:由算术运算符连接起来的式子.如:1+1 a-b(变量ab前面已声明并赋初值)

下面以a=21 ,b=10为例进行计算:

package main

import "fmt"

func main() {

   var a int = 21
   var b int = 10
   var c int

   c = a + b
   fmt.Printf("第一行 - c 的值为 %d\n", c )
   c = a - b
   fmt.Printf("第二行 - c 的值为 %d\n", c )
   c = a * b
   fmt.Printf("第三行 - c 的值为 %d\n", c )
   c = a / b
   fmt.Printf("第四行 - c 的值为 %d\n", c )
   c = a % b
   fmt.Printf("第五行 - c 的值为 %d\n", c )
   a++
   fmt.Printf("第六行 - a 的值为 %d\n", a )
   a=21   // 为了方便测试,a 这里重新赋值为 21
   a--
   fmt.Printf("第七行 - a 的值为 %d\n", a )
}

输出结果如下:
第一行 - c 的值为 31
第二行 - c 的值为 11
第三行 - c 的值为 210
第四行 - c 的值为 2
第五行 - c 的值为 1
第六行 - a 的值为 22
第七行 - a 的值为 20
  • a++ 等价于a=a+1
  • 注意:GO语言中没有前自增,这是与其他编程语言不同的地方

7.1.2 演示:某学生三门课成绩为,语文:90 数学:80 英语:67,编程求总分和平均分

package main

import (
	"fmt"
)

func main() {

    var chinese int = 90
    var math int = 80
    var english int = 67

    var sum,avg int
    //求总分
    sum = chinese + math + english
    //求平均分
    avg = sum / 3
    fmt.Printf("总分是:%d 平均分是:%d\n",sum,avg)
}

输出结果如下:
总分是:237 平均分是:79

虽然已经计算出总分与平均分了,但是我们可以对上面的程序进行优化,怎么优化呢?示例如下:

package main

import (
	"fmt"
)

func main() {

    var chinese int = 90
    var math int = 80
    var english int = 67

    fmt.Printf("总分是:%d 平均分是:%d\n",chinese+math+english,(chinese+math+english)/3)
}

以上程序大家需要注意几点:

  • 该程序比第一种实现减少了变量的定义,可以减少对内存的占用,所以变量不是定义越多越好。
  • 注意运算优先级:先乘除,后加减,有括号先算括号里的,相同级别的从左至右运算 int a=((1+5)+3)*2
  • 小括号可以无限制的套用,但一定要成对出现

7.1.3 类型转换

现在我们把上面提的需求修改一下:语文:90 数学:80 英语:69,编程求总分和平均分. 只是将英语的成绩进行了修改,还是计算总分和平均分

package main

import (
	"fmt"
)

func main() {

    var chinese int = 90
    var math int = 80
    var english int = 69

    fmt.Printf("总分是:%d 平均分是:%d\n",chinese+math+english,(chinese+math+english)/3)
}

输出结果如下:
总分是:239 平均分是:79  ## 数字改变了,但没有小数

现将程序进行如下更改:

package main

import (
	"fmt"
)

func main() {

    var chinese int = 90
    var math int = 80
    var english int = 69

    fmt.Printf("总分是:%d 平均分是:%f",chinese+math+english,float64(chinese+math+english)/3)
}

输出结果如下:
总分是:239 平均分是:79.666667
  • Go语言中不允许隐式转换,所有类型转换必须显式声明(强制转换),而且转换只能发生在两种相互兼容的类型之间

7.2 思考题

7.2.1 请阅读以下程序,如果该程序正确,请说出程序运行的结果,如果有错误,请说出错误原因,并指明怎样进行修改?

package main

import (
	"fmt"
)

func main() {

    var num1 int = 35
    var num2 int = 40
    var avg float64
    avg = (num1+num2) / 2
    fmt.Printf("avg=%f",avg)
}
  • 所有的类型转换都必须要声明,所以avg=必须要声明格式,修改如下:
package main

import (
	"fmt"
)

func main() {

    var num1 int = 35
    var num2 int = 40
    var avg float64
    avg = float64((num1+num2) / 2)
    fmt.Printf("avg=%f",avg)
}

输出:
avg=37.000000

7.2.2 以下程序,如果正确请说出程序运行的结果,如果错误,请说出错误原因,并指明怎样进行修改?

package main

import (
	"fmt"
)

func main() {

    var num1 int = 10
    var num2 int = 3
    var mod float64
    mod = float64(num1 / num2)

    fmt.Printf("mod=%f",mod)
}

输出如下:
mod=3.000000
  • 由于num1和num2声明了为int形式,所以输出结果为取整数;如果要以小数输出,需要提前定义num1和num2的数据形式:
package main

import (
	"fmt"
)

func main() {

    var num1 float64 = 10
    var num2 float64 = 3
    var mod float64
    mod = float64(num1 / num2)

    fmt.Printf("mod=%f",mod)
}

输出结果如下:
mod=3.333333

7.2.3 以下程序,如果正确请说出程序运行的结果,如果错误,请说出错误原因,并指明怎样进行修改?

package main

import (
	"fmt"
)

func main() {

    var num1 int = 35
    var num2 int = 40
    var num3 int = 2
    var avg float64
    avg = float64(num1+num2) / num3
    fmt.Printf("avg=%f",avg)

}
  • avg已经定义过类型为float64,如果保留小数,需要做如下修改:
package main

import (
	"fmt"
)

func main() {

    var num1 float64 = 35
    var num2 float64 = 40
    var num3 float64 = 2
    var avg float64
    avg = float64((num1+num2) / num3)
    fmt.Printf("avg=%f",avg)

}

输出如下:
avg=37.500000

7.3 练习

7.3.1 练习1:定义两个数分别为100和20,打印出两个数的和。

package main

import (
	"fmt"
)

func main() {

	var a int = 100
	var b int = 20
	var sum int
	sum = a + b
    fmt.Printf("sum=%d",sum)

}

输出结果:
sum=120

7.3.2 练习2:计算半径为5的圆的面积和周长并打印出来.(pi为3.14)面积:pirr; Perimeter(周长)

package main

import (
	"fmt"
)

func main() {

	const pi=3.14
	var r float32 = 5
	var l float32
	l = pi*r*r
    fmt.Printf("l=%f",l)

}

输出结果如下:
l=78.500000

7.3.3 某商店T恤(T-shirt)的价格为35元/件,裤子(trousers)的价格为120元/条.小明在该店买了3件T恤和2条裤子,请计算并显示小明应该付多少钱?

package main

import "fmt"

func main() {
    var T_shirt int = 35
    var trousers int =120
    var totalMoney int
    var realMoney float64
    //总钱数
    totalMoney = 3*T_shirt + 2*trousers
    //打折后需要付的总钱数
    realMoney=float64(totalMoney)*0.88
    fmt.Printf("总钱数为:%d,打折后:%f",totalMoney,realMoney)

}

输出结果如下:
总钱数为:345,打折后:303.600000

7.3.4 练习4:如上题中打完8.8折后出现小数,商店为了结算方便,只收用户整数部分的钱,如本应收用户303.6,现在只收用户303元,应该如何做?

package main

import "fmt"

func main() {
    var T_shirt int = 35
    var trousers int =120
    var totalMoney int
    var realMoney float64
    //总钱数
    totalMoney = 3*T_shirt + 2*trousers
    //打折后需要付的总钱数
    realMoney=float64(totalMoney)*0.88
    fmt.Printf("总钱数为:%d,打折后:%d",totalMoney,int(realMoney))   

}

## 打折后:%f修改为%d,realMoney的数据格式修改为int
输出结果如下:
总钱数为:345,打折后:303

7.4 强制类型转换总结

强制类型转换的语法格式:

7.4.1 数据类型名(待转换的值)

例如:

package main

import "fmt"

func main() {
    var a float64 = 3.123
    var b int
    b = int(a)
    fmt.Printf("b=%d",b)

}

输出如下:
b=3

7.4.2 强制类型转换,数据类型一定要相兼容下面的写法对吗?

package main

import "fmt"

func main() {
    var a string
    var b int
    a = "3.14"
    b = int(a)
    fmt.Printf("b=%d",b)

}

##错误,禁止不同类型数据强制转换

谨记:int 转float强制转换,多小数float转int强制转换,丢精度.

7.4.3 补充:关于“+”运算符,除了可以完成两个数字相加以外,也可以链接两个字符串,如下:

package main

import "fmt"

func main() {
    var str1 string = "abc"
    var str2 string = "def"

    fmt.Printf("%s",str1+str2)

}

输出如下:
abcdef

7.4.4 作业:

  • 编程实现计算几天(如46天)是几周零几 天?
package main

import "fmt"

func main() {
    //计算周数
    var day int = 46
    var week int
    var days int
    week = day/7
    //计算剩余天数
    days = day - week*7

    fmt.Printf("周数为:%d 剩余天数为%d",week,days)

}
  • 编程实现107653秒是几天几小时几分钟几秒?
package main

import (
    "fmt"
)

func main() {

    var time int = 107653
    var hou int
    var min int
    var sec int
    //计算小时
    hou = time/3600
    //计算分钟
    min = (time-hou*3600)/60
    //计算剩余秒数
    sec = (time-(hou*3600+min*60))



    fmt.Printf("小时为:%d 剩余分钟为%d 剩余秒数为%d",hou,min,sec)
    
    输出为:
    小时为:29 剩余分钟为54 剩余秒数为13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值