C语言学习笔记(三)
第一个C程序
打印输出“
Hello World!
”
1 |
|
常量
下面是一个简单的金额找零的代码片段
1 | int price = 0; |
固定不变的数,是常数。直接卸载程序里,称作直接量
(literal),我们可以更好地修饰这个常量:
1 | const int AMOUNT = 100; |
这是C99的写法,补充下上面的代码片段,可以有:
1 |
|
这样做有什么好处呢?
比如,别人第一次看这个“100”可能不知道是什么,但是看到“AMOUNT”可以知道这是跟数量(金额)有关
const修饰符
const
是一个修饰符,像上面这样加在int
前面,表示给这个变量加上一个const(不变的)
属性:即这个变量的值一旦初始化
(赋初值),就不能再修改了!一般习惯性的在const后面的变量名使用大写。
比如修改上面的程序,在int price = 0 ;
后面对该变量赋值,会报错read-only variable is not assignable AMOUNT 90;
1 |
|
如果这个AMOUNT
的值让用户输入值来进行初始化呢?const后面的变量值习惯性大写,这里让用户输入,恢复我们习惯的小写
1 |
|
浮点数
Q:美国人习惯使用英制计量单位,用几尺几寸来报自己的身高,如果遇到一个美国佬告诉你他是5英尺7寸,那他的身高是多少呢?
参考:尺+(寸/12)*0.3048=米数
1 |
|
对于实际的5英尺7英寸,正确的计算结果应该是:(5+7/12)*0.3048=1.7019米,但是上面的程序结果出现问题了,why?
因为在C语言中:
- 两个整数运算结果只能是整数
- 比如:在C中,10/3=3
- 10和10.0是两个不同的数
计算时间差
输入两个时间,每个时间分别输入小时和分钟的值,然后输出两个时间的差:
常规的,我们的思路是定义不同的变量来存储hour
和minute
,比如:
1 | int hour1, minute1; |
但是因为hour
和minute
之间不是十进制,在计算的时候假如发生需要“借位”的情况,那岂不是不行了?所以可以统一单位,比如把hour
也转化为minute
,两个不同的时间t1
、t2
,有:
- hour*60+minute——>转化为
minute
单位 - t/60——>
hour
部分 - t%60——>
minute
部分
这个简单的程序思路有了,可以写出来:
1 |
|
运算符优先级
优先级 | 运算符 | 运算 | 结合关系 | 实例 |
---|---|---|---|---|
1 | + | 单目不变 | 自右向左 | a*+b |
1 | - | 单目取负 | 自右向左 | a*-b |
2 | * | 乘 | 自左向右 | a*b |
2 | / | 除 | 自左向右 | a/b |
2 | % | 取余 | 自左向右 | a%b |
3 | + | 加 | 自左向右 | a+b |
3 | - | 减 | 自左向右 | a-b |
4 | = | 赋值 | 自右向左 | a=b |
赋值运算符
赋值也是运算,也有结果,比如:
- a=8 ——> a被赋予值(8)
- a=b=8 ——> a=(b=8)
“嵌入式赋值”
比如下面这样的,这样的写法容易产生错误
,而且会大大降低代码的可读性
,所以非常不推荐
1 | int a = 6; |
结合关系
- 一般自左向右
- 单目+/-和赋值=自左向右
下面是一段C代码,这种写法和上面“嵌入式赋值”
类似——太复杂、容易产生错误
,而且会大大降低代码的可读性
,所以非常不推荐
1 | result = a = b = 3 + c; |
应该按照程序的实际顺序改写成若干个表达式!
计算复利
在银行存定期的时候,可以选择到期自动转存,并将到期的利息自动并入本金合并转存。如果一年的定期利率是3.3%,那么连续转存三年后,最初存入的x元定期会得到多少本息余额?
首先,可以知道本息合计 = x*(1+3.3%)^3
,对于3年的本息复利:
1 | int x; |
交换变量
比如需要交换两个变量的值,就需要第三个变量(假设t就这这个变量)来帮助交换,可以表述为:
交换前:
a = 2,b = 3,t
交换后:
a = 3,b = 2,t
程序实现如下:
1 |
|
复合赋值
5个算术运算符:+、-、*、/、% 可以和 = 结合起来,形成
复合赋值运算符
:+=、-=、*=、/=、%=
注意在这两个运算符之间不要有空格
比如:
- total += 5 ——> total = total + 5
- total += (sum+100)/2 ——> total = total + (sum+100)/2
- total *=sum + 12 ——> total = total * (sum+12)
- total /= 12 + 6 ——> total = total / (12+6)
递增/递减运算符
“++”和“–”是两个很特殊的运算符,它们是
单目运算符
,这个算子还必须是变量
。这两个运算符分别叫做递增和递减运算符,它们的作⽤用就是给这个变量+1或者-1
前缀后缀
- ++ 和 – 可以放在变量的前面,叫做
前缀形式
,也可以放在变量的后面,叫做后缀形式
。 - a++ 的值是 a 加 1 以前的值,⽽而 ++a 的值是加了1以后的值,无论哪个,a自己的值都加了1。
对于递增/递减运算符的前缀后缀,可以列表如下:
表达式 | 运算 | 表达式的值 |
---|---|---|
count++ | 给count的值加1 | count原来的值 |
++count | 给count的值加1 | count+1后的值 |
count– | 给count的值减1 | count原来的值 |
–count | 给count的值减1 | count-1后的值 |
可以用一段程序验证,加强理解:
1 |
|
可以得到输出:
1 | a++=10 |
这部分开始跟着翁恺老师的C语言慕课学习的,大约是前两周内容,下面要加快点速度了😋