C语言程序设计笔记(浙江大学)
C语言程序设计笔记
- 写在前面
- week1程序设计与C语言
- 计算机和编程语言
- C语言
- week2计算
- 变量
- 表达式
- 符号优先级
- 赋值运算符
- 利用DevC对程序进行调试
- 递增递减运算符
- 前缀与后缀
- week4 进一步的判断与循环
- 逻辑类型与运算
- 逻辑运算
- 优先级
- 短路
- 条件运算符
- 逗号运算符
- 级联和嵌套的判断
- 嵌套的if-else
- else的匹配
- 级联的if-else
- 多路分支
- 循环的例子
- week5 循环控制
- 循环控制
写在前面
上课时记的笔记,没有参考价值,只记录对自己有用的东西。
week1程序设计与C语言
计算机和编程语言
辗转相除法:
寻找两个数之间的最大公约数
int u = 32;
int v = 26;
while (v != 0)
{int temp = u % v;u = v;v = temp;
}
printf("%d",u);
算法:
- 如果v等于0,计算结束,u就是最大公约数;
- 如果v不等于0,那么计算u除以v的余数,让u等于v,而v等于那个余数;
- 回到第一步。
枚举法
二分法
程序的执行
- 解释:
借助一个程序,那个程序能试图理解你的程序,然后借助你的要求执行(有一些特殊的计算能力,e.g.可以运行中修改源代码) - 编译:
借助一个程序,就像一个翻译,把你的程序翻译成计算机真正懂得语言——机器语言——写的程序,然后,这个机器语言系的程序就能直接执行(能够有确定的运算性能,同样的程序运行速度时固定的)
ps.任何一个语言既可以解释执行又可以编译执行
C语言一般是编译执行的。
C语言
- 现代的编程语言在语法上的差异很小
- 几乎都是C-like语言
- 语言的能力/适用领域主要是由
-库- 传统决定的
Fortran语言是人类历史上第一个高级程序设计语言。
在高级语言当中,C语言显得是一种比较底层的语言。
week2计算
变量
赋值
a = b
在数学中表示一种关系,即a和b的值一样,是静态的;
在程序设计中,a = b表示要求计算机把b的值赋给a,是一种动作,是动态的。
C99标准允许在代码的任意位置定义变量。
直接写造程序里的常数,称为直接量,或者幻数(magic number)e.i.你不知道这个数代表的是什么
const是一个修饰符。
表达式
算子(operand)也叫操作数,是指参与运算的值,这个值可能是个常数,也可能是个变量,也有可能是一个方法的返回值
符号优先级
p.s.
单目:只有一个算子
单目运算符的优先级是大于双目运算符的
1—>4
高–>低
| 优先级 | 运算符 | 运算 | 结合关系 | 距离 |
|---|---|---|---|---|
| 1 | + | 单目不变 | 自右向左 | a*+b |
| 1 | - | 单目取负 | 自右向左 | a*-b |
| 2 | * | 乘 | 自左向右 | a*b |
| 2 | / | 除 | 自左向右 | a/b |
| 2 | % | 取余 | 自左向右 | a%b |
| 3 | + | 加 | 自左向右 | a+b |
| 3 | - | 减 | 自左向右 | a-b |
| 4 | = | 赋值 | 自右向左 | a=b |
p.s. 只有单目和赋值的结合关系是自右向左的
赋值运算符
赋值也属于运算符的范畴,但并不是所有的语言中的=都是运算符。
赋值时有结果的,e.g.a = 6, 结果就是a被赋予的值6。
避免嵌入式赋值e.g.
int c = 1 + (b = a);
//先把a的值赋给b,再让c加上a的值
int result 2;
result = (result = result*2) *6*(result = 3 + result);
利用DevC对程序进行调试
调试之前需要再程序之中设置一个断点。
断点那一行代码之前的代码都会被执行,但是不包括断点那一行的代码
将鼠标停滞在变量上查看变量的值
递增递减运算符
++和- -:单目运算符,且算子必须是变量,即不能是常量。
前缀与后缀
前缀:先执行++/- -再使用变量。
后缀:先使用变量再执行++/- -。
p.s.不要组合增量运算符
week4 进一步的判断与循环
逻辑类型与运算
逻辑运算
优先级
| 优先级 | 运算符 | 结合性 |
|---|---|---|
| 1 | () | 从左到右 |
| 2 | ! + - ++ – | 从右到左(单目的+和-) |
| 3 | * / % | 从左到右 |
| 4 | ± | 从左到右 |
| 5 | < <= > >= | 从左到右 |
| 6 | == != | 从左到右 |
| 7 | && | 从左到右 |
| 8 | 或 | 从左到右 |
| 9 | = += -= *= /= %= | 从右到左 |
短路
逻辑运算是自左向右进行的,如果左边的结果已经能够确定结果,就不会做右边的计算
对于&&, 左边是false时就不做右边了
对于||,左边是true就不做右边了
条件运算符
count = (count > 20) ? count -10 : count
条件运算符是自右向左结合
条件运算符的优先级高于赋值运算符,但是低于1其他运算符
不建议使用嵌套条件表达式
逗号运算符
主要在for中使用
级联和嵌套的判断
嵌套的if-else
else的匹配
else总是和最近的那个if匹配
缩进不能暗示else的匹配
e.g.
代码的目的是加入game over!=0,打印GAME OVER。
if (gameover == 0)if (player2move == 2)printf("Your turn\n");
elseprintf("GAME OVER\n");
但该代码的else仍然与里面的if匹配,所以当game over != 0 不会打印出任何东西。
解决方案:加大括号
if (game over == 0)
{if(player2move == 2)printf("Your turn\n");
}
else
printf("GAME OVER\n");
建议 在if或else后面总是用{},即使只有一条语句的时候
级联的if-else
if (exp1)st 1;
else if (exp2)st 2;
elsest3;
单一出口:程序中不会出现使用f变量的语句
int f;
if ( x < 0) {f = -1;
} else if (x == 0) {f = 0;
} else {f = 2 * x;
}
printf("%d", f);
推荐写单一出口的代码
多路分支
case 只是说明switch内部位置的路标,在执行完分支中的最后一条语句后,如果后面没有break,就会顺序执行到下面的case里去,直到于道一个break,或者switch结束为止
循环的例子
x % n 的结果时[0, n-1]的一个整数
week5 循环控制
循环控制
素数 : 只能被1和自己整数的数,不包括1
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
