技能一 程序设计(C 语言)(40%,≈32 分)
🟡 进阶 | 专业综合操作技能卷(80 分)· 判断/单选/填空/综合
阅卷提示:综合题程序填空的空由上下文锁定(如二分查找的
mid=(low+high)/2),填空考语法关键字/语句/输出结果——标准答案唯一,注意拼写与分号。
S1.1 程序结构 ★★★
- C 程序由函数组成;有且仅有一个 main 函数,程序从 main 开始、在 main 结束;函数分库函数(printf 等)与自定义函数
- 语句以分号 ; 结尾;注释:
/* ... */(多行)与//(单行,C99)——注释不参与编译执行 - 源程序书写格式:自由格式——一行可写多条语句、一条语句可分多行;严格区分大小写(Main≠main);书写顺序:先定义/声明后使用;缩进只影响可读性不影响编译
- C 程序开发流程:编辑→编译(.c→.obj 目标文件)→链接(+库→.exe 可执行文件)→运行
- 头文件
#include <stdio.h>(标准输入输出)、#include <math.h>(数学函数)等
S1.2 数据类型、常量与变量 ★★★
基本数据类型(⚠ 16/32/64 位环境字节数可能不同,按经典教材口径):
| 类型 | 关键字 | 字节(典型) | 备注 |
|---|---|---|---|
| 整型 | int | 4 | 修饰:short(2)/ long(4或8)/ signed / unsigned(无符号,无负数,范围平移) |
| 字符型 | char | 1 | 存储 ASCII 码,可参与整数运算 |
| 单精度浮点 | float | 4 | ~7 位有效数字,输入 %f |
| 双精度浮点 | double | 8 | ~15 位,输入 %lf |
- 标识符命名规则 ★★★:由字母、数字、下划线组成,第一个字符不能是数字;区分大小写;不能用关键字(32 个:int、if、for、while、return、void、static…)
- 常量 ★★★:
- 整型:十进制;八进制以 0 开头(012=10);十六进制以 0x 开头(0x1A=26)
- 实型:小数形式 / 指数形式 3e2 或 3E2 = 300(e 前有数字、后为整数:合法 1.5e3,非法 e3、1e2.5)
- 字符常量:单引号
'a'、'0'(占 1 字节);转义字符:\n换行、\t制表、\0空字符、\\反斜杠、\'、\"、\101(八进制 ASCII→'A')、\x41(十六进制→'A') - 字符串常量:双引号
"abc"——系统自动补结束符'\0',故 "abc" 占 4 字节(字符数+1)★★★
- 变量:先定义后使用;初始化
int a=3;;多个变量可同型定义
S1.3 运算符与表达式 ★★★
| 类别 | 运算符 | 要点 |
|---|---|---|
| 算术 | + − * / % | 两个整型相除得整型(5/2=2);% 取余仅用于整型(5%2=1,符号同被除数)⚠ |
| 自增自减 | ++ −− | 前置 ++i:先加后用;后置 i++:先用后加(j=i++ 与 j=++i 结果不同)★★★ |
| 赋值 | = 及复合 **+= −= = /= %=* | 赋值表达式的值=左值;连续赋值 a=b=c=5 |
| 关系 | > < >= <= == != | 结果只有 1/0;⚠ = 是赋值、== 才是判等(高频陷阱) |
| 逻辑 | && 与 || 或 ! 非 | 短路特性:&& 左假则右不算,|| 左真则右不算;非 0 即真 |
| 条件 | ? : | max = a>b ? a : b; 唯一三目运算符 |
| 逗号 | , | 从左到右求值,整个表达式的值=最后一个 (a=3, a+5) 值为 8 |
| 求字节 | sizeof | sizeof(int)=4;sizeof("abc")=4(含\0) |
| 位〔超纲但常混〕 | & | ^ ~ << >> | 考纲列于理论"比特位逻辑运算",技能卷偶考 |
- 优先级主干(高→低):
( )→!++--sizeof(单目)→ 算术(* / % 高于 + −)→ 关系 → && → || → 赋值 → 逗号 ★★★ - 结合性★:多数运算符自左向右(左结合);单目(! ++ --)、条件 ?:、赋值 = 为自右向左(右结合)(
a=b=c从右算起;-i++等价-(i++)) - 类型转换:自动转换(低→高:char,short→int→long→float→double);强制转换
(类型名)表达式:(int)3.14= 3(截断不四舍五入)⚠;10/3与10/3.0分别得 3 与 3.333 - 经典求值题:
5/2+5%2= 2+1 = 3;int x=5; printf("%d",x++*2)输出 10 后 x=6
S1.4 输入输出 ★★★
- printf("格式串", 输出表):格式符 %d %f %lf %c %s %u %o(八进制) %x(十六进制) %e %p;
%%输出百分号;宽度与精度:%5d(右对齐占 5)、%-5d(左对齐)、%.2f(保留两位小数)、%6.2f - scanf("格式串", 地址表):变量前必须加 取地址符 &(
scanf("%d",&a);数组名/字符数组本身是地址不加)⚠ 忘 & 是综合题高频挖空- 格式串中的普通字符(如逗号)必须原样输入:
scanf("%d,%d",&a,&b)输入3,4★★(2024 真题考过) %c会接收空白字符;%s遇空白结束
- 格式串中的普通字符(如逗号)必须原样输入:
getchar()/putchar():单字符输入输出;gets/puts:字符串一行(gets 不安全,新版已弃用)- 常用数学库(math.h):sqrt 平方根、fabs 绝对值、pow 幂
S1.5 选择结构 ★★★
- if(表达式) 语句1 [else 语句2]:表达式非 0 为真;else 总与它前面最近的、未配对的 if 配对(缩进不影响)⚠
- if-else if-else 多分支;表达式嵌套
- switch(表达式):表达式与 case 后须为整型或字符型常量(不可变量/实型);case 只起入口作用,需 break 跳出,无 break 会继续执行后续 case(穿透);
default兜底(2024 真题考点)★★★ - 经典:成绩等级、判断闰年
((y%4==0 && y%100!=0) || y%400==0)、三数排序
S1.6 循环结构 ★★★
- for(表达式1; 表达式2; 表达式3):先 1(一次)→ 判 2 → 循环体 → 3 → 再判 2;三表达式皆可省但分号不能省(
for(;;)死循环) - while(条件):先判断后执行,可能 0 次;do{ }while(条件);:先执行后判断,至少执行 1 次 ★★★(末尾分号);对比高频
- break:跳出本层循环/switch;continue:结束本次循环进入下一次(跳过其后语句)★★★(两者区别必考)
- 循环嵌套;死循环条件
- 经典程序 ★★★(综合题素材库):1~100 求和、求 n 的阶乘 n!、斐波那契数列、判断素数、九九乘法表、水仙花数、最大公约数(辗转相除
r=a%b)、位数拆分(%10 与 /10)
S1.7 数组 ★★★
- 定义
int a[10];:下标从 0 开始,最大下标 = 长度−1;越界不报错但危险(C 不检查) - 初始化:
int a[5]={1,2,3};(其余补 0);int a[]={1,2,3};(长度自动 3);⚠int a[5]={1,2,3,4,5,6}错 - 二维数组
a[3][4]:3 行 4 列;按行优先存放;初始化可分行赋或整体赋;a[0]表示第 0 行 - 字符数组与字符串★★★:
char s[10]="abc";或char s[]="abc";(4 字节含\0);char s[]={'a','b','c'}(3 字节无 \0,是字符数组不是字符串)⚠- 输出
printf("%s",s)遇\0停止({'m','n','\0','t'}输出 "mn"——2024 真题) - 字符串函数(string.h):
strlen(s)求实际长度(不含 \0);strcpy(s1,s2)复制;strcat(s1,s2)连接;strcmp(s1,s2)比较(相等返回 0;按字典序);strlwr/strupr大小写 ⚠strlen("abc")=3而sizeof("abc")=4
- 批量数据处理 ★★★:排序(冒泡:相邻比较交换,n 个数 n−1 趟;选择:每趟找最小放前)与查找(顺序;折半/二分查找:要求数组有序,
mid=(low+high)/2,2024 综合题原型)★★、求数组最大/最小值、逆置
S1.8 函数 ★★★
- 定义:
类型名 函数名(形参表){ ... return 表达式; };无返回值用 void;return 返回值并结束函数 - 形参与实参:定义时形参(变量),调用时实参(常量/变量/表达式);参数传递是"值传递"、单向(实参→形参),形参改变不影响实参 ⚠(传数组名=传地址除外——数组元素可被改)
- 函数原型声明:先声明后使用(或定义在前)
- 嵌套调用(函数调用函数)与递归调用 ★★★:函数直接/间接调用自身;递归必须有终止(出口)条件;经典:n!(
f(n)=n*f(n-1),f(1)=1)、斐波那契f(n)=f(n-1)+f(n-2) - 局部变量(函数/复合语句内,auto 默认)与全局变量(函数外定义,整个文件可用);static 局部变量:只初始化一次、函数返回后保留值
- 库函数:printf/scanf(stdio.h)、sqrt/pow/fabs(math.h)、字符串函数(string.h)