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);

算法:

  1. 如果v等于0,计算结束,u就是最大公约数;
  2. 如果v不等于0,那么计算u除以v的余数,让u等于v,而v等于那个余数;
  3. 回到第一步。

枚举法
二分法

程序的执行

  • 解释:
    借助一个程序,那个程序能试图理解你的程序,然后借助你的要求执行(有一些特殊的计算能力,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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部