bug由来 昆虫 臭虫
机器码 由二进制组成 是给计算机看 计算机可以直接执行
汇编码 由数字和字母和符号组成的一些代码
问题 汇编语言书写的代码必须按照计算的计算流程书写
写代码的流程就是在模拟计算机运行的流程
make space a in 3
make space b in 4
make space c in a add b
c=a+b
高级编程语言源码
由数字 字母 符号组成
可以按照人类的思维习惯去书写代码
int a=3;
int b=4;
int c=a+b;
源代码-机器码 编译
常量:不变的量
1.直接在程序中出现的数据(字面量)
2.将一个变量通过一些手段变成一个常量
限制变量的值不可修改
特殊的:在python中不存在第二种
变量:变化的量
变量的本质:进程空间中一个临时的存储空间
并且该临时存储空间有其自己的物理内存地址(由计算机随机分配)
因为变量的地址是随机的,所以我们不应该直接通过该变量的地址去操作数据
怎么办?我们可以给变量起别名 变量名
系统底层会自动为 变量名称和其针对的变量的地址 做一个表格
其实 在C语言里面 这个变量的地址 就是 指针
那么 该空间中存啥?先记住一点 无论是哪种语言 变量空间中永远不可能存数据本身 存的是数据的地址
常量池中 常量数据的地址
堆内存中 对象数据的地址
进程中 变量的地址
变量本质
int a=3;
int b=3;
int c ;指针变量
c=&b; c本身还是变量有自己的地址 c里存的是b的地址0456
printf("%d",c); 0x456 b的地址
printf("%d",&c);0x789 c的地址
printf("%d",c);0x333是一个常量的地址->常量
int **d; 首先d是个指针变量,意思可以存普通变量的地址,再加个*,也是指针变量,但是存的是另外一个指针的地址
d=&c;
printf("%d",&d);0x666
printf("%d",d);空间找 0x789
printf("%d",d);按照0789地址找c 打印0x456
printf("%d",d);*d=c c找b **d=b 打印0×333 是常量 所以打印 3
printf("%d",&&d);&d d的地址0×666 **&d找c 找c地址 再*一下 又在c 所以打印 0x456
变量永远存的是数据的地址
C 里面只有常量池中的地址 变量的地址
Java 里面只有常量池中的地址 堆中的地址 没有指针
Python 里面只有堆中的地址
Python中一切数据皆对象
高级编程语言之间区别
静态编译型 C C++ Java
编译:先将源代码整体编译完成 生成一个可执行程序
然后运行该可执行程序即可
一本英文书->翻译->一本中文书
c++
编译
VSC强制打开后乱码
.c->编译->.exe C语言
编译
.java->编译->.class Java语言
解释型:逐行进行编译且运行
同声传译 别人说一句英文 我翻译一句
动态解释型 Python JavaScript Matlab
静态:变量数据类型一旦确定 则不可更改 但是可以向下兼容
动态:变量数据类型随着数据的变化而变化
a=3
#id() 查看当前数据的地址
print(id(a)) # 查看a所存储的数据在堆内存中的地址
print(id(3)) # 查看3这个数据在堆内存中的地址
print(type(a))# int
两个地址一样
a=3.14
print(id(a)) # 查看a所存储的数据在堆内存中的地址
print(id(3.14)) # 查看3.14这个数据在堆内存中的地址
print(type(a))
数据类型变为浮点型。
a=“一二三四”
print(id(a))
print(id(“一二三四”))
print(type(a))
数据类型变为字符串。
“”" 三个引号
重点:
变量本身是内存当中的一个临时存储空间
该空间中存的数据的地址(数据都在堆)
变量的数据类型随着所存储的数据变化而变化
“”“
# 单行注释
“”“ 多行注释 三个双引号中间写 ”“”
练习题
print((分子)/(分母))
print((9.54.5-2.53)/(45.5-3.5))
print(4*(1-1/3+1/5-1/7+1/9-1/11))
print(4*(1-1/3+1/5-1/7+1/9-1/11+1/13-1/15))
#提示用户输入摄氏温度
cel=float(input(“Enter a degree in Celsius:”))
#利用已知公式求华氏温度
fah=(9/5)*cel+32
#输出
#print格式化输出
.0 .1 表示保留零位和一位小数
print("%.0f Celsius is %.1f Fahrenheit"%(cel,fah))
#提示用户输入半径和高
eval 同时输入两个A,B=eval(input(“Enter the A and B of a cylinder:”))
radius,length=eval(input(“Enter the radius and length of a cylinder:”))
pi=3.1415
#计算底面积 area
area=radius**2pi
#计算体积volume
volume=arealength
#输出
print(“The area is %.4f”%area)
print(“The volume is %.1f”%volume)
area 数据取决于pi的给定值 所以是正确的
#提示用户输入一个0~1000之间的数字
number=int(input(“Enter a number between 0 and 1000:”))
number=999
a=number%10 #9
number//=10 #99
b=number%10 #9
number//=10 #9
c=number%10 #9
sum=a+b+c
print(sum)
#提示用户输入一个分钟数:
#分钟//60 =整小时 小时//24=整天数 天数//365=整年 天数%365 剩下的天数
minutes=int(input(“Enter the number of minutes:”))
hours=minutes//60
days=hours//24
years=days//365
shengyu=days%365
print("%d minutes is approcimately %d years and %d days"%(minutes,years,shengyu))
#提示用户输入三个坐标点 六个数据
x1,y1,x2,y2,x3,y3=eval(input(“Enter three points for a triangle:”))
#三个坐标两两成边
side1=((x1-x2)**2+(y1-y2)**2)**0.5 #p1 p2
side2=((x2-x3)**2+(y2-y3)**2)**0.5 #p2 p3
side3=((x3-x1)**2+(y3-y1)**2)*0.5 #p3 p1
#计算半周长
s=(side1+side2+side3)/2
#计算面积
area=(s(s-side1)(s-side2)(s-side3))**0.5
#输出
print(“The area of the triangle is %.1f”%area)
#如何获取当前时间
#time模块 返回从1970年1月1日00:00:00至今所经过的毫秒数import time
import time
#提示用户输入时区
offset=int(input(“Enter the time zone offset to GMT:”))
#总秒数
totalSeconds=int(time.time())
#当前秒数
currentSeconds=totalSeconds%60
#总分钟数
totalMintues=totalSeconds//60
#当前分钟数
currentMintues=totalMintues%60
#总小时数
totalHours=totalMintues//60
#当前小时数
currentHours=(totalHours%24+offset)%24
print(“The current time is %.f:%.f:%.f”%(currentHours,currentMintues,currentSeconds))
检验一下我们是东八区输入8
正确