☰
c语言:选择题概念
2026/10/14 3:53:27 网站建设 项目流程

第1章 C语言基础概念

  1. C是编译型语言,不是解释型。源代码 .c → 编译→目标文件 .obj →链接→可执行程序 .exe
  • 编译:检查语法;链接:合并库、函数地址。报错分编译错误、链接错误(选择题高频区分)
  1. C语言本身没有输入输出语句, printf/scanf 是stdio库提供的函数
  2. C程序入口一定是 main() ,只能有1个main函数,位置不固定;main返回int,标准 int main(){return 0;}
  3. 注释: /* 块注释 */ 不能嵌套; //行注释 到本行结束。注释不参与编译,不占运行内存
  4. 关键字:C一共32个关键字,全部小写,不能用作变量名(背诵考点)
  5. 标识符规则【必考】
  • 允许:字母、数字、下划线 _ ;首字符不能是数字(注意下划线不是减号,字母可以大写)
  • 区分大小写 Num 和 num 是两个变量
  • 不能是关键字;不能含 - 、空格、中文
  1. 程序执行顺序:从main开始,顺序执行,遇到分支/循环跳转

第2章 数据类型、常量变量(超级多选择题坑)

2.1 基础类型

  1. char 字符型,1字节;C标准没规定默认signed/unsigned,考试以教材为准
  • 字符常量 ‘A’ 单引号,占1字节;字符串 “A” 双引号,末尾自带隐藏 ‘\0’ 结束符,占2字节!【巨高频坑】
  1. short 2字节; int 4字节(主流平台); long 4/8字节; long long 8字节; float 4字节; double 8字节
  2. 取值范围:重点记住
  • int: -2^31 ~ 2^31-1 ;unsigned int: 0~2^32-1
  • 溢出:有符号整数溢出属于未定义行为!(选择题坑:溢出不会自动转负数,只是编译器表现如此,标准没规定)
  1. 常量
  • 整型: 10 十进制; 012 八进制(0开头); 0xA 十六进制(0x开头)
  • 浮点常量默认是double;写 1.2f 才是float
  • 符号常量 #define N 10 :预处理纯文本替换,没有类型,末尾不要加分号!加分号会埋坑
  1. 变量
  • 变量必须先定义,后使用
  • 局部变量:定义在函数内部;不初始化,值是随机垃圾值【高频选择题】
  • 全局变量:函数外面定义,默认初始值=0;作用域整个程序
  • static静态局部变量:只在第一次调用初始化1次!生命周期持续到程序结束,不会函数退出就销毁(超级重点,选择狂考)

2.2 类型转换(理解型,写代码也会踩坑)

  1. 隐式自动转换:低精度 → 高精度
    char/short → int → unsigned → long → long long → float → double
  2. 运算规则:两个不同类型运算,先统一成高类型再计算(一瓶水倒进河里,成为河的一部分)
    例: 1/2 两个int,整数除法!结果=0,不是0.5; 1.0/2 才得到0.5【经典坑】
  3. 强制转换 (类型)表达式 :只是临时转换本次运算的值,不会改变变量本身类型

int a=5;
(double)a; //a本身仍然是int,a的值不变

第3章 运算符与表达式【选择题重灾区】

  1. 优先级(从高到低,只记必考)
    () > 单目运算符(! ++ – & *) > * / % > + - > 比较>< >= <= > == != > && > || > 赋值=
    ✅口诀:单目>算术>比较>逻辑>赋值
  2. % 取模运算符:只能用于整数!(只能是整数相取余)浮点数不能用%;结果符号和第一个数一致
  3. ++ – 前置/后置
  • ++i :先自增,再运算
  • i++ :先运算,后自增
    注意它们和printf的位置,而且赋值=也是运算,如果是前置的,要注自增自减会不会影响它们。
    选择题坑:不要在同一个表达式多次自增 i++ + ++i ,标准未定义,不同编译器结果不一样
  1. 逻辑短路【超级高频!必考】
  • A && B :A为假,B直接不执行(短路)
  • A || B :A为真,B直接不执行(短路)
    短路没有对错之分,只有是否可执行之分。不要一看到短路就觉得是代码错了

int a=1; 0 && (a=100); //a不会变成100!后面不跑
因为这个是假,为0
5. 赋值 = vs 等于 == :选择题最爱挖坑! = 是赋值; == 判断相等,千万不要写反
6. 三目运算符 条件 ? 表达式1 : 表达式2
条件真执行1;假执行2;是运算符,不是语句
7. 逗号运算符 exp1,exp2 :从左往右算,整个表达式最终值=exp2的值,优先级最低(有时候前一个是不会影响后一个的,不要傻傻卡在一个没用的项)

第4章 分支语句 if / switch

  1. if: if(表达式) ,表达式只要非0就判定为真,0为假
  • 坑: if(3) 合法,代表恒真; if(a=5) 是赋值,永远真,不是判断a==5
  1. if-else匹配规则:else总是和离它最近、未配对的if绑定(没有大括号时坑最多)
  2. switch
  • switch(整型表达式) :只能是整型/char,不能是浮点、字符串
  • case 后面必须是常量,不能写变量
  • break 跳出switch;不加break会穿透,顺序往下执行case(选择题必考)
  • default:可有可无,所有case都不匹配才执行,位置不强制在最后(是其余都不符合,才执行它)

第5章 循环 while / do while / for

  1. while:先判断条件,条件为真才执行循环体;0次或多次执行
  2. do-while:先执行循环体,再判断条件;最少执行1次!(选择题最爱对比while和do while)
  3. for循环 for(表达式1;表达式2;表达式3)
  • 执行顺序:①表达式1(仅执行1次,循环开始前)→ 判断表达式2,真→循环体→表达式3;循环
  • 三个表达式全部都可以省略: for(;😉 无限死循环;中间表达式2为空代表恒真
  1. break:跳出当前所在整个循环/switch
  2. continue:结束本次循环,直接跳到下一轮条件判断,不是跳出循环【高频坑!】

break:直接跑路;continue:跳过本轮,下一轮继续

第6章 数组、字符串

  1. 数组定义 int arr[5]; 下标:0~4,没有arr[5]!越界访问,标准未定义行为
  2. 数组大小:定义时,常量表达式;C99支持变长数组VLA(但考试很多教材不考)
  3. 数组名:数组名是首元素地址,是地址常量,不能arr++,不能arr=xxx赋值
  4. 二维数组 int a[3][4] :3行4列;行优先存储;初始化可以省略行数,不能省略列数(它这个是直接写下标的)
  5. 字符串(char数组)【超级高频考点】
  • C没有独立字符串类型,靠char数组 + ‘\0’ (ASCII 0)结束标记
  • “hello” 末尾自动补 \0 ; char s[]={‘a’,‘b’} 没有 \0 ,不是合法字符串
  1. sizeof vs strlen 【天花板级考点,选择题反复出!】
  • sizeof :运算符,求占用内存字节数,包含 \0 ;编译期计算(大部分情况)
  • strlen :库函数 #include<string.h> ;统计有效字符长度,遇到’\0’停止,不包含’\0’

c

char s[]=“abc”;
sizeof(s)=4;strlen(s)=3;

第7章 函数

  1. 函数:C全部是值传递!形参是实参的拷贝,函数内部修改形参,不会影响外面实参(是形参的实参化)
    想修改外部变量,要传地址(指针)
    这里就涉及传值调用和传指调用
  2. 函数声明(原型):如果函数写在main后面,必须提前声明,告诉编译器函数返回类型、参数
    (先声明,后使用)
  3. 局部变量:作用域仅限函数内部;函数调用结束,内存释放(static除外)
  4. 递归函数
  • 两个必要条件:递归出口(终止条件) + 递归递推式子
  • 每次递归调用,开辟新栈帧;层数太深栈溢出
  1. 全局变量:整个文件可见;多个函数共享;生命周期程序全程
  2. static修饰函数:内部函数,仅当前.c文件可用,其他文件无法调用

第8章 指针(选择题概念坑很多,初学难点)

  1. 指针本质:存储内存地址的变量
  • int *p; p是指针变量,存放int变量地址; *p 是解引用,取地址里面的值
  1. & 取地址; * 解引用;优先级记住
  2. 指针加减: p+1 不是地址+1字节!向后移动一个指向类型的长度(每一个元素都有一个地址,它加减一是指那个地址加减变化,如果是int类型,*p+1相当于那个门牌号加4,那就到下一个房间了。int 型的房间,每个门牌号相差4)
  3. 空指针 NULL ,值为0;不能对NULL解引用*p,程序崩溃
  4. 数组和指针关联:数组名=首元素地址; a[i] 等价于 *(a+i)

第9章 结构体、共用体、typedef

  1. struct结构体:自定义复合类型,多个不同类型成员;结构体变量大小,存在内存对齐(选择题常考sizeof(struct))
  2. union共用体:所有成员共用同一块内存空间;sizeof(union)=最大成员所占字节
  3. typedef:给已有类型起别名,不是创造新类型!
    typedef int INTEGER; INTEGER等价int,只是别名

第10章 预处理 #define #include

  1. 预处理:编译之前执行,文本替换,不做语法检查!
  2. #include <xxx.h> 系统头文件; #include “xxx.h” 先在当前目录找自定义头文件
  3. 宏定义坑:宏替换纯文本,宏参数一定要加括号
    c

#define SQUARE(x) xx
SQUARE(1+2) → 1+2
1+2 结果5,不是9!正确写法#define SQUARE(x) ((x)*(x))

第11章 输入输出scanf printf(缓冲区选择题坑)

  1. scanf(“%d”,&a); 必须写取地址 & ;数组名不用&
  2. 输入缓冲区残留回车问题: %c 会读取换行符 \n ; %d %f 自动跳过空格、回车、tab
  3. printf格式符
  • %d int; %c char; %f float/double; %lf scanf读取double; %s 字符串
  1. 输入输出函数在 <stdio.h>

📌【选择题快速区分清单】

  1. C语言源文件后缀 .c ;目标文件 .obj ;可执行 .exe
  2. 算法五大特性:有穷性、确定性、可行性、输入、输出(填空选择高频背诵)
  3. 程序三大结构:顺序、选择(分支)、循环
  4. 常量区分:字符常量、字符串常量、符号常量
  5. 库函数:使用前要包含对应头文件

【避坑总提醒】

  1. 代码运行结果 ≠ 选择题标准答案!选择题严格遵循教材文字定义,编译器行为有时候是拓展,考试不算
  2. 遇到概念题,不要靠刷题经验猜,抓定义关键词
  3. 错题直接定位到上面对应章节,把这一小节全部看完,同类题一次性搞定

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询