摘要: 1. 算法描述:算法是一组完成特定任务的有穷指令序列。所有的算法都必须有:输入,输出,确定性,有限性和有效性。 2. 选择排序(Selection Sort) 原理:首先在排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序列未尾。依此类推,直到所有元素均排序完毕。 复杂度分析:选择排序的交换操作介于0和(n-1)次之间;比较操作为n(n-1... 阅读全文
posted @ 2010-12-25 20:48 jeff_nie 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 1. 内存分配 三种内存分配方式: 1.) 静态数组,它要求结构长度固定,长度必须在编译时确定,这个方案最为简单且最不容易出错; 2.) 动态分配的数组,在运行时才决定数组的长度,可以分配一个新的,更大的数组,把原来数组的元素复制到新数组中,再删除原来的数组,从而达到改变数组长度的目的。决定是否采用动态数组时,需要由此增加的复杂性和随之产生的灵活性(不需要一个固定的,预先确定的长度)之间作一番权... 阅读全文
posted @ 2010-12-25 20:47 jeff_nie 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 第15章 输入/输出函数1. 错误报告:perror函数 操作系统在执行任务时,都存在失败的可能。标准库函数在一个外部整型变量errno(在errno.h中定义)中保存错误代码之后把这个信息传递给用户这些特定错误的过程。函数原型为: void perror(char const *message); // 如果message不是NULL并且指向一个非空字符串,perror就打印这个字符串。即使是那些十拿九稳不会失败的操作也应进行检查,因为它们迟早可能失败。这种检查需要稍许额外的工作,但和付出大量调试时间相比,它们还是非常值得的。2. 终止执行:exit函数函数原型:void exit(int 阅读全文
posted @ 2010-12-19 16:05 jeff_nie 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 第13章 高级指针话题 1. 高级指针 1.) int *f() // 由于()优先级高于*,f是一个函数,函数返回一个指向整型的指针; 2.) int (*f) () // 第二个圆括号表示函数,第一个圆括号,是聚组的作用,这里f是指向函数返回值的指针,函数返回一个整形值; 3.) int *(*f) () // (*f)部分和上面表达式2.)作用是一样的,它是个指向函数返回值的指针,但... 阅读全文
posted @ 2010-12-13 20:44 jeff_nie 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 第11章 动态内存分配(动态内存分配的一个常见用途是为那些长度只有运行时才知道的数组分配内存空间。) 1. 使用malloc, free 函数动态内存分配,函数原型: void *malloc (size_t size); void free (void *pointer); 1.) malloc 函数向内存池中申请一块合适的内存,并返回指向该块内存地址的指针; 2.) malloc 申请... 阅读全文
posted @ 2010-12-05 23:36 jeff_nie 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 第9章 字符串,字符和字节 1. strlen() 返回值是size_t类型,它是个无符号整形。当无符号参与表达式运算时,可能产生不可预期的结果。如: if(strlen (x) - strlen(y) >= 0) // 这个条件永远都为真,即使strlen(x)的值小于strlen(y)。因为无符号的值是不可能为负的 同样,当有符号数与无符号数一起运算时,也会产生上面同样的问题,如: ... 阅读全文
posted @ 2010-11-26 18:39 jeff_nie 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 第7章 函数 1. 函数的定义与声明 函数的定义是函数体的实现,而声明是向编译器提供该函数的信息,用于确保函数能被正确调用。 提供函数原型的两种方式:一是,在当前文件中已定义函数;二是,通过#include 指令导入函数原型。 函数原型中的参数名称是可选的,但在函数原型中加入描述性的参数可提供更有用的信息。如: char *strcpy( char *, char *) ; char ... 阅读全文
posted @ 2010-11-20 15:52 jeff_nie 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 第5章 1. 位移 逻辑位移与算术位移 逻辑位移:左边移入的位用0填充 算术位移:左边移入的位由原先该值的符号位决定,符号位为1,则移入位均为1,符号位为0则移入位均为0。 无符号做移位操作时都是逻辑移位,对于有符号的移位是逻辑移位还是算术移位,取决于编译器。所以,如果是有符号的移位操作,它是不可移植的。 如果移位的位数比操作数的位数还要多,移位的结果是未定义的。 2. 复合赋值符的优点在于使... 阅读全文
posted @ 2010-11-14 17:45 jeff_nie 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 第三章 1. 变量的三个属性——作用域,链接属性和存储类型。这三个属性决定了一个变量的“可视性”(也就是可以在什么地方使用) 和“生命周期”(它的值可以保持多久)。2. C语言4种基本类型:整形,浮点型,指针和聚合类型。所有其他类型都是从这4种基本类型的某种组合派生而来。3. 整形包括:字符,短整形,整形和长整形,它们都分为有... 阅读全文
posted @ 2010-11-07 19:18 jeff_nie 阅读(284) 评论(4) 推荐(0) 编辑
摘要: 第一章 1. 用#if指令注释代码: #if 0 需注释的代码 #endif 即使需注释的代码中包含有/* */或是//的注释,也不会出现问题,这是一种安全的注释方式。 2. 在修改一段代码时所遇到的第一个问题就是要搞清楚代码的功能 3. 注释如果不正确那么还不如没有! 4. NUL是ASCII字符集中‘\0’字符的名字,它的字节模式为全0。NULL指一个其值为0的指针。字符串就是一串以... 阅读全文
posted @ 2010-11-07 15:40 jeff_nie 阅读(127) 评论(0) 推荐(0) 编辑