Skip to content

Latest commit

 

History

History
159 lines (119 loc) · 5.35 KB

C primer.md

File metadata and controls

159 lines (119 loc) · 5.35 KB

strlen和sizeof函数

  1. 返回类型的转换说明为%zd
  2. strlen圆括号
  • 运算对象为类型时,圆括号必须加
  • 运算对象为特定量时,圆括号可有无
  1. strlen与sizeof的区别
  • strlen计算字符时计算空格但不计算空白符\0

#define预处理指令

  1. 符号常量要用英文大写
  2. 定义字符串或者字符时
  • 字符用单引号
  • 字符串用双引号

printf函数

  1. %i有符号十进制整数、%o无符号八进制整数、%u无符号十进制整数、%p指针
  2. 转换修饰符
  • z表示size_t类型的值,即sizeof函数返回的类型
  • “-”代打印项左对齐
  • “+”显示数值符号
  • “空格”显示负号,省去正号
  • “#”把结果转换为另一种进制eg:0x
  1. 转换不匹配
  • 符号:如,有符号类型值即将用无符号类打印出来时从“65535=-1”开始依次递减为“32768=-?”,而0~32767为数值本身
  • 大小:如需打印的数大于转换说明所规定的数值范围大小时,那么用需要打印的数值 除以 转换说明所规定的数值范围所得的余数 ps:详见c primer plus76页
  1. 了解“参数传递”即的概念 P77
  2. printf的返回值为打印字符的个数(包括空格和不可见的换行符)
  3. *用于可变字符宽度,不过需提前提供变量于转换说明前

scanf函数

  1. 关于是否使用&
  • 基本变量类型的值时,加&
  • 字符串读入字符数组时,不加&
  1. scanf使用空白、换行符、制表符即可多行输入(%c例外,会读取空白
  2. *用于抑制赋值(在%和字符中间)
  3. 使用字符宽度时会在字段结尾第一个空白字符处停止读取

循环

基本运算符

  1. 赋值运算符:=
  • a=1 应当理解为“把右值1赋给左值对象定位符)a”,而不是“a等于1”
  • 区别变量名变量值 eg:a=a+1 其中,第一个a为变量名,第二个a为变量值,此语句的意思为:“找出变量a的值,然后把该值加1,然后把新值赋给变量a” -在C中,都是从右往左赋值
  1. 基本运算符:/
  • 区别整数除法和浮点数除法:

    • 在整数除法中,整数除以整数出现小数部分的话,那么小数部分将会被丢弃,这过程被称为截断
    • 混合类型中,例如浮点数除以整数,那么整数将被转换为浮点数
  • 注意:

    • 正数:变为小于或等于浮点数的最大整数
    • 负数:应使用“趋零截断”
  1. 运算符优先级:
  • 乘法和除法的优先级比加法和减法高
  • 大多数情况下,都是从左往右
  • 从左往右的结合律只适用于共享同一运算对象的运算符
  1. 求模运算符:%
  • 左侧整数除以右侧整数所得的余数 为模
  • 只适用于整数,不适用于浮点数
  1. 递增、减运算符:
  • 前缀模式:先使用,再递增
  • 后缀模式:先递增,再使用
  • 运算优先级只比圆括号低,且只能作用在一个可修改的左值上面
  1. 关于表达式的值:
  • “q>3”,若为真,那么值为1,否则为0
  1. 关于语句:
  • 列举:完整表达式子表达式迭代语句或结构化语句(如while语句)

  • 序列点

    • 为程序执行的点,所有副作用(即目的)都在进入下一步之前发生。
    • 任何一个完整表达式的结束也是一个序列点
  • 完整表达式:指这个表达式不是另一个更大表达式的子表达式,例如表达式语句中的表达式和while循环中做为 测试条件的表达式

    • 这是一个非常重点的内容,有助于分析递增、减后缀何时发生(P104多读多看)

标准输入函数s_get_s()函数模版

#include<stdio.h>
char * s_get(char * st,int n)
{
char * ret val;
int i=0;
ret_val=fgets(st,n,stdin);
if(ret_val)
{
while (st[i]!='\n' &&st[i] !='\0') \\检查是否存在换行符
      i++;  \\逐个字符依次检查
      if (st[i]=='\n')  \\当为换行符时用空白符替换换行符
        st[i]='\0';
      else
           while(getchar()!='\n')  \\键入一个字符跳出if循环 
           contiune;
           }
           return ret_val;  \\返回ret_val
           
}


一个合理的输入框应当具备:

  • 提示用户正确输入数据类型;

  • 处理用户与目标输入数据类型不匹配的输入

    • eg:预设输入数字时,假设用户输入字母和符号;
  • 再次提醒用户输入

  • 给予反馈


线性表函数类型

  • InitList(*L):初始化操作,建立一个空的线性表L
  • ListEmpty(L):若线性表为空,返回true,否则返回false
  • ClearList(*L):将线性表清空
  • GetElem(L,i,*e):将线性表L中的第i个位置元素值返回给e
  • LocateElem(L,e):在线性表中查找与定值e相等的元素,如果查找成功,返回该元素在表中的序号表示成功;否则,返回0表示失败
  • ListInsert(*L,i,e):在线性表L中的第i个位置 插入 新元素e
  • ListDelete(*L,i,*e):删除线性表L中第i个位置元素,并用e返回其值
  • ListLength(L):返回线性表L的元素个数

时间复杂度排序

O(1)<O(LOG)<O(N)<O(NLOG)<O(N2.3.4)<O(2N)<O(N!)<O(NN)