[算法]算法竞赛入门经典第4章笔记

1.  数学函数的定义“返回类型 函数名(参数列表){函数体}”函数体最后一条语句应该是“return表达式;”。

2.  Main函数总是返回0

3.  Hypot函数

原型:extern float hypot(float x, float y);

用法:#include <math.h>

功能: 计算直角三角形的斜边长

用法: double hypot(double x, double y);

例:

#include <stdio.h>

#include <math.h>

int main(void)

{

    double result;

    double x = 3.0;

    double y = 4.0;

    result =hypot(x, y);

    printf("Thehypotenuse is: %lf\n", result);

    return 0;

}

4.  定义结构体的方法:“struct 结构体名称{域定义};”花括号后还有分号

5. 往往用“typedef struct{域定义;}类型名;”方式定义一个新类型名,这一可以像原生数据类型一样使用这个自定义类型。

6. 注意避免溢出。

7. 谓词函数命名成is_xxx的形式;返回int值,非0为真,0为假

8. int is_prime(intx)

{

    inti;

    for(i=2;i*i<=x;i++)

    if(x%i==0)return0;

    return1;

}

9. assert()是一个诊断宏,用于动态辨识程序的逻辑错误条件。其原型是: void assert(int expression); assert只是对所给的表达式求值,就像if判断语句中一样,然后如果该值为真则正常运行,否则报错,并调用abort(),产生异常中断,exit出来。使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。

在调试结束后,可以通过在包含#include<assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用,示例代码如下:

  #include<stdio.h>

  #define NDEBUG

  #include<assert.h>

注意:assert是宏,而不是函数。在C的assert.h头文件中。

1)对非预期错误使用断言2)不要把需要执行的代码放入断言中

3)对来源于内部系统的可靠的数据使用断言,而不要对外部不可靠的数据使用断言,对于外部不可靠数据,应该使用错误处理代码。再次强调,把断言看成可执行的注释。

10.调用栈,由多个栈帧stack frame组成,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量,保证不同函数间的局部变量互不相干,因为不同函数对应着不同的栈帧。Gdb中可用backtrace命令打印所有栈帧,若要用p打印非当前栈帧的局部变量,可以用frame命令。


11.*a是指“a指向的变量”,而不仅是“a指向的变量所拥有的值”

用int*a声明的变量a是指向int型变量的指针。赋值a=&b的含义是把变量b的地址存放在指针a中,表达式*a代表a指向的变量,它既可以放在赋值符号的左边,也可以放在右边。

12.不要滥用指针,可能会把自己搞糊涂。

13.Unix/Linux可执行文件格式ELF,dos下是COM,COFF格式,windows下是PE。具有共同的概念--段。Segmentation是指二进制文件内的区域,所有某种特定类型信息被保存在里面。Size程序可以求各个段的大小


在可执行文件中,正文段(textsegment)储存指令,数据段(data segment)储存已初始化的全局变量,BSS段(BSS segment)储存未赋值的全局变量所需的空间。

堆栈段(运行时创建),存放调用栈和局部变量。如果越界访问,会出现段错误。栈帧过多,可能导致段溢出。

14.栈大小Linux下ulimit –a可显示当前栈大小,而ulimit –s 32768将把栈大小指定为32MB,windows使用gcc可指定可执行文件的栈大小,gcc –Wl,--stack=16777216,这样栈大小就变成了16MB

栈大小是有链接程序ld指定的,gcc编译参数-Wl的作用正是把其后的参数传递给ld

15.C语言程序设计奥秘

16.gcc 命令的常用选项
选项 解释
-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,
例如 asm 或 typeof 关键词。
-c 只编译并生成目标文件。
-DMACRO 以字符串“1”定义 MACRO 宏。
-DMACRO=DEFN 以字符串“DEFN”定义 MACRO宏。
-E 只运行 C 预编译器。
-g 生成调试信息。GNU 调试器可利用该信息。
-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。
-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。
-lLIBRARY 连接时搜索指定的函数库LIBRARY。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值