linux C 学习


1. printf函数

其实 printf()函数是有返回值的(只是平常不需要关心它的返回值)表示实际打印的字符数;同理,scanf函数也有返回值,表示实际输入的字符数


2. glibc

  1. glibc是linux平台上使用最广泛的C函数库,几乎所有C程序都要调用此库。
  2. glibc提供一组头文件和一组库文件。包括最基础的libc.so库,和数学计算libm.so库,以及多线程C程序依赖的libpthread.so库 等。。。
  3. glibc并不是linux平台唯一的C函数库,有别的C函数库 如:uClibc.
    详见:uClibc_baidu and uClibc

3. 高亮问题!

  1. 用vim阅读文档时,光标停于某字符处(比如停于X处),这时按 ‘Shift+8’ 可以将文档中所有 X 都高亮显示。
  2. 取消:按下 Esc 确保处于非编辑模式。输入 / < X > ,即可恢复原状!
  3. 解释:当显示高亮的时候,再次按下 ‘Shift+8’ ,则在 Terminal 底端会出现 '/\ < X\ > ' 由此蒙出以上2 的解决办法。或者为 \ < X \ >

4. 局部变量和全局变量

局部变量可以用类型相符的任意表达式来初始化,而全局变量只能用常量表达式(Constant Expression)初始化。
例如:全局变量 pi 这样初始化是合法的

double pi = 3.14 + 0.0016;

但这样初始化是不合法的:

double pi = acos(-1.0);

acos(double)为反余弦函数,C语言中,反三角函数arccos简称为acos,同理,反正弦为:asin(double);反正切为:atan(double)或者,atan(double1,double2) = atan(double1/double2).详情点击

然而局部变量这样初始化却是可以的。


5. 运算符

  1. ** % ** 取模运算符

X % 2 表示 X 除以 2 所得的余数。C语言规定%运算符的两个操作数必须是整型的
当用printf()函数输出 ‘%’ 符号的时候,需要定义如下:

printf("%% %d",a);【假定 a = 2】
输出即为:% 2


6. 传参

  1. C语言的传参规则为:Call by Value,按值传递。return也是按值传递。传回的只是数据,而不是参数本身,因为参数马上就要被释放掉了。
  2. return() 可以返回一个表达式!例如:

1 #include < stdio.h >
2 #include < math.h >
3 int main()
4 {
5 int x,c;
6 printf("please input x:");
7 scanf(" %d ",&x);
8 c = fabs(x); //求绝对值函数
9 return (printf("|x| = %d\n",c));
10 }

运行结果为:
please input x:-4
|x| = 4


7. 增量式开发封装分层设计

  1. 其实就是先搭框架,再慢慢添加东西!美其名曰:增量式开发
  2. 封装主要是为了避免重复代码的出现,降低可能出现的维护工作量。把解决各种小问题的代码封装成函数,在解决第一个大问题时可以用这些函数,在解决第二个大问题时可以复用这些函数。
  3. 解决问题的过程是把大的问题分成小的问题,小的问题再分成更小的问题,这个过程在代码中的体现就是函数的分层设计(Stratify)

8. 神之递归

如果你相信你正在写的递归函数是正确的,并调用它,然后在此基础上写完这个递归函数,那么它就会是正确的,从而值得你相信它正确。玄乎其玄!数学证明如下:

从数学上严格证明一下 factorial 函数的正确性。刚才说了, factorial(n) 的正确性依赖于 factorial(n-1) 的正确性,只要后者正确,在后者的结果上乘个 n 返回这一步显然也没有疑问,那么我们的函数实现就是正确的。

因此要证明 factorial(n) 的正确性就是要证明factorial(n-1) 的正确性,同理,要证明 factorial(n-1) 的正确性就是要证明 factorial(n-2) 的正确性

依此类推下去,最后是:要证明 factorial(1) 的正确性就是要证明 factorial(0) 的正确性。而 factorial(0) 的正确性不依赖于别的函数调用,它就是程序中的一个小的分支 return 1; 这个1是我们根据阶乘的定义写的,肯定是正确的

因此 factorial(1) 的实现是正确的,因此 factorial(2) 也正确,依此类推,最后factorial(n) 也是正确的.


8.for循环

循环中可以这样定义i:

for (int i = 1;😉

如果这样定义,那么变量 i 只是 for 循环中的局部变量而不是整个函数的局部变量,循环外就不能继续使用i;
这个程序用 gcc 编译要加上选项 -std=c99


9.break和continue语句

break 语句可以用来跳出 switch 语句块,这个语句也可以用来跳出循环体。
continue 语句也会终止当前循环,和 break 语句不同的是, continue 语句终止当前循环后又回到循环体的开头准备执行下一次循环。

posted @ 2016-04-21 00:15  屋中人  阅读(285)  评论(0编辑  收藏  举报
返回顶部