选择控制结构

  1. 数据结构 + 算法 = 程序

    • 数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合

    • 算法是对操作或行为(即操作步骤)的描述

  2. 衡量算法的正确性:有穷性、确定性、有效性、允许没有输入或多个输入、必须有一个或多个输出;

  3. 算法的描述方法:自然语言、流程图、NS 结构化流程图、伪码,养成先画流程图、然后再编写代码的习惯;

  4. C 语言中,非 0 值表示“真”,0 值表示“假”;

  5. 条件运算符 exp1 ? exp2 : exp3 是 C 语言中唯一一个三元运算符;

  6. 条件语句只允许每个条件分支中带一条语句,将一组逻辑相关的语句用 {} 括起来所构成的语句叫复合语句。建议无论 if 语句的分支中是一条还是多条语句,都将其用 {} 括起来;

  7. exit() 的作用是终止整个程序的执行,强制返回操作系统,并将 int 型参数 code 的值传给调用进程(一般为操作系统)。当 code 的值为 0 或宏常量 EXIT_SUCCESS 时,表示程序正常退出;当 code 值为非 0 值或为宏常量 EXIT_FAILURE 时,表示程序出现某种错误后退出。调用 exit() 需要包含头文件 <stdlib.h>

  8. 为什么不直接将实数与 0 比较:浮点数并非真正意义上的实数,只是其在某种范围内的近似。因此也就只能用近似的方法将实数与 0 进行比较,如:

    if (fabs(disc-0) <= EPS)  /*其中 EPS 被赋值为 1e-6*/
  9. switch 后面的的表达式只能是 intchar 型,case 后面的常量类型与 switch 后一致;

  10. case 如果没有 break 语句,程序将以此执行下面的 case 后语句,直到 switch} 为止,也即说明 case 本身没有条件判断的功能;

  11. case 后面的语句省略不写,则表示它与后续 case 执行相同语句;

  12. if (a = b) 表示:如果 b 赋给 a 的值为非 0;

  13. 在 C 语言中,若 a、b、c 分别为 3、2、1,关系表达式 a > b > c 的计算过程为:a > b > c = (a > b) > c = 1 > c = 0

  14. 解决运算符优先级问题的最好办法就是把需要先计算的表达式用 () 括起来;

  15. 若含有逻辑运算符 &&|| 的表达式的值可由先计算的左操作数的值单独推导出来,则不再执行右侧表达式;

  16. 程序测试只能证明程序有错,而不能证明程序无错;

  17. 白盒测试也称结构测试;黑盒测试也称功能测试;

  18. 选择有限数量的重要路径进行白盒测试,对重要的功能需求进行黑盒测试;

  19. 测试中选用合理的输入数据,还应选用不合理的以及某些特殊的输入数据或者临界的点,对程序进行边界测试

  20. scanf() 的返回值为遇到非法字符之前成功读入的数据项数;

  21. fflush() 可以用来清除输入缓冲区中的内容,但会带来移植性问题;

  22. 位运算的操作对象只能是 charint 类型;

  23. 按位与:两个操作数中的任一位为 0 时,运算结果的对应位被置 0;

  24. 按位或:两个操作数中的任一位为 1 时,运算结果的对应位被置 1;

  25. 按位异或:两个操作数的某对应位不一样,则按位异或结果为对应位为 1;

  26. 按位取反:按位取反是对操作数的各位取反;

  27. 左移位x << n 表示把 x 的每一位向左平移 n 位,右边空位补 0;

  28. 右移位x >> n 表示把 x 的每一位向右平移 n 位。当 x 为有符号数时,左边空位补符号位上的值,称为算数移位;当 x 为无符号数时,左边空位补 0,称为逻辑移位

循环控制结构

  1. do - while 循环体内的语句将至少被执行一次;

  2. 相对于用嵌套循环实现的程序而言,用单重循环实现的程序执行效率更高,因为程序所需的总的循环次数大大减少了;

  3. rand() 生成的是一个在 0 ~ 32767 (双字节整数最大值)之间的整数

    • 利用求余运算 rand()%b 将函数 rand() 生成的随机数变化到 [0, b-1] 之间
    • 利用 rand()%b+a 将随机数的取值范围平移到 [a, a+b-1] 之间
  4. rand() 所产生的随机数其实是一个伪随机数,反复调用函数 rand() 所产生的一些列数看似是随机的,但每次执行程序时所产生的随机数序列确是一样的,都是相同的一个数列,而程序又每次只用到了数列中的第一个随机数;

  5. srand(time(NULL)) 通过 time() 读取计算机的时钟值,并把该值设置为随机数种子;

  6. 检验 scanf() 返回值可以确认是否输入非法字符:

    while (ret != 1)  /*若存在输入错误,则重新输入*/
    {
        while (getchar() != '\n');  /*清除输入缓冲区中的非法字符*/
        printf("Please guess a magic number:");
        ret = scanf("%d", &guess);
    }
  7. 适合于使用 goto 语句:

    • 快速跳出多重循环
    • 跳向共同的出口位置,进行退出前的错误处理工作(其实也可以直接调用错误处理函数)

Comments