c考题易错笔记

考题易错笔记

常量

  1. 0382 是常量?

    • 因为 0 开头是八进制,不应有 8 出现
    • 故错误
  2. '123' 是常量?

    • 字符串应是双引号""
    • 故错误
  3. 2.46E-1.5 是常量?

    • 科学计数法 -符号右边应为整数 正确形式为2.46E-15代表 2.46 * 10^3
    • 故错误

运算顺序

  1. int x = 11; 则表达式(x++*1/3)的值是几

    • 答案是 3 因为 x 先参与运算后自加 也就是 11/3≈3 不明白 为什么 x 不加 1 而表达式的值为 3
  2. 在遇到如x+=y+=2这类表达式先从右向左进行赋值运算

自增运算符

  1. x++ ++x 等这类表达式,只与本行语句相关 ++x在本行就发生改变 x++到下一行时值会改变

函数

  1. C  语言程序中,要调用的函数必须在  main( )函数中定义

    • 错因为可以在 main()函数外定义

位运算

  1. 正确表示条件  100≤x≤300  的  C  表达式是

    -x>=100&&x<=300

循环

  1. whiledo-while 的主要区别
    • do-while  的循环体至少无条件执行一次
  2. int k=0; while(k=1) k--;
    • 因为 k=1为赋值语句 故是无限循环
  3. for(语句1,语句2,语句3) 循环体
    • 这里需要注意 进入循环 先执行 语句1,再判断,然后循环体,再是语句3。语句1只执行一次

字符串(字符数组)

  1. 字符串(字符数组) 赋值 char s[10]; s="student"; 是否正确

    • 错 字符串数组只有在声明时可以 这样直接赋值
    • 字符数组的赋值只能按元素一一赋值(错误的原因: C 语言并没有提供可以直接操作字符串的运算符;“=”可以用于其他数据类型的赋值,但是不可以直接给字符串赋值)
    • 可以用strcpy 和 strcat实现赋值,但本质也是操作字符
  2. strlen(str + 4)其实是指针操作 &str[4]

  3. 字符串长度题 strlen("xxxxx")

    • 转义字符系列: \\ 表示\ , \n 换行 , \0 字符串结尾标志 , \01 代表ASCII码为八进制1的字符 , \x || 0xab 代表十六进制数, \t 水平制表
  4. 字符串数组结尾标识符\0

    • 遇见即为字符数组结尾
    • 字符串数组结尾标识符

指针访问 数组元素的方法

  1. int arr[]={1,2,3,4,5};*p=arr; 访问第四个元素的方法
    • arr[3] *(p+3) p[3]

printf 输出

  1. int a=010,b=10, printf("%d,%d",++a,b--); 输出的值为什么
    • 因为 010 为 8 进制所以 ++a 等于 8+1 ,b-- 是先运算后自减 所以还是 10
    • 结果为:9 10;
  2. 关于输出精度问题 3/5,3./5,3.0/5.0
    • 带点的是浮点不带的是整形

标识符

  1. C 语言中把标识符分为三类:关键字,预定义标识符,用户自定义标识符
  2. C 语言区分大小写所以IF合法标识符

c 语言布尔值

C 中是没有布尔值的,所以,可以使用相应的整数,来表示布尔值,如 0 为假,非 0 为真

  1. 求输出结果 此题考验对布尔值得理解 和 逻辑运算符

    #include<stdio.h>
      int main()
      {
          int x = 2,y = 2,z = 0,a;
          a = ++x || ++y && z++;
    // 在执行到 || 时 会判断 ++x 的 是否为真,为真就不执行后面的代码
          printf("%d,%d,%d\n",x,y,z);
      }
    
      结果:
      3 2 0
    

逻辑运算符 && || !=

  1. && 逻辑或当一个为真即为真 后面的表达式或常量将不执行
  2. || 逻辑与当两个全为真 才为真 一假全假后面的表达式或常量不执行
  3. != 逻辑不等于 判断两侧是否相等

c 字符串长度的计算

  1. 字符串 "\\Too\n\97\'"的长度是
    • strlen() 传的参数是一个字符数组首地址
     \\      代表 /
     \n      代表 换行
     \97     代表 a
    

ascll 字符代表码 与转义字符

注:大小写字母的转换 'a' -'A' = 32

‘0’ 的ASCLL码为48

‘a ’的ASCLL码为97

’A’ 的ASCLL码为65

'0'即为字符 0

'\0'的ascll码为0,用于字符串的结束符

NULL 其实也是ascll为0的数,只是表示方式不一样,NULL= (void*) 0;

回车,ASCII 码 13
换行,ASCII 码 10
空格,ASCII 码 32

输入输出语句

  • 格式化输入输出
      printf()
      scanf()
    
  • 单个字符输入输出
      getchar()
      putchar()
    
  • 字符串输入输出
      gets()
      puts()
    

存储类型

  • auto 自动型 函数中所有的非静态局部变量

  • static 静态型 在变量前加上 static 关键字的变量 (在使用期间 未设置初始值默认 0,并且只进行一次赋初值 初值具有可继承性)

  • extern 外部变量 一般用作全局变量作用域的扩展

  • register 寄存器类型 一般经常被使用的的变量(如某一变量需要计算几千次)可以设置成寄存器变量,register 变量会被存储在寄存器中,计算速度远快于存在内存中的非 register 变量

  • 更多详情见

精度

  • double%lf 表示, long int%ld 表示

进制

  • 16 进制 每一位 是 2 进制的四位

变量大小

  1. char 是 1 个字节
  2. int 是 4 个字节

递归(递龟)

常用递归的有阶乘,累加。并且只使用分之结构

  1. 直接递归

  2. 间接递归

位运算 (& | >> <<)

转化成2进制数 然后 上下进行逻辑运算

posted @ 2020-04-08 23:01  lambertlt  阅读(812)  评论(0编辑  收藏  举报