一个非常简明扼要的笔记,没java那篇写得好,不过全网关于c语言二级考试的笔记全网少得可怜,所以还是分享出来
考试时候c语言的编辑器属于能用但不多的那种,代码执行后会自动关闭,导致看不到结果,我在调试的时候会在代码执行完毕后加一行输入,这样就会在最后停住,能看看结果,不知道有没有更好的方法,抛砖引玉吧(不管怎么样比java的编译器还是好很多的)
c语言算是java、c、python老三样中难度最低的,如果你能过python,那么这一门基本不会有问题,大部分都是基础语法,也没有库或者gui的使用,相对来说非常基础?如果你这学期要学c语言,可以报了,不会超出你们期末考试的考试范围,一起搞定。
考试时间如下:
上半年考试: 3月25日至25日
下半年考试: 9月21日至23日
考试题型与时间安排
二级C语言程序设计考试总时长为120分钟,满分100分,及格分数为60分。考试题型包括单选题、操作题、应用题和综合应用题,分布如下:
选择题: 40道,每题1分,共40分
基本操作题: 3道,每题5分,共15分
简单应用题: 2道,分别为10分和15分,共25分
综合应用题: 1道,20分
总的来说,操作题占了相对较大的比重,一般来说只要有两题没做出来,就很难合格了,不过c语言的操作题很简单,基本上都是满分?
个人觉得,唯一困难的地方是不要害怕复杂的格式(゚∀゚)
推荐题库:c.code2ji.cn
没什么特别的理由,能在手机上写操作题,还有比这更重要的吗?
C语言二级考试核心知识点
1. C语言基础语法
数据类型
基本数据类型:
- char: 字符型,1字节,范围 -128 到 127
- int: 整型,4字节,范围约 -21亿 到 21亿
- float: 单精度浮点型,4字节,6-7位有效数字
- double: 双精度浮点型,8字节,15-16位有效数字
修饰符:
unsigned
: 无符号signed
: 有符号(默认)short
: 短整型long
: 长整型
变量声明和初始化
#include <stdio.h>
int main() {
// 基本变量声明
int age = 25;
float height = 175.5;
char grade = 'A';
double salary = 8500.50;
// 数组声明
int scores[5] = {85, 92, 78, 96, 88};
char name[20] = "张三";
return 0;
}
2. 控制结构
条件语句
// if-else语句
int score = 85;
if (score >= 90) {
printf("优秀\n");
} else if (score >= 80) {
printf("良好\n");
} else if (score >= 60) {
printf("及格\n");
} else {
printf("不及格\n");
}
// switch语句
char grade = 'B';
switch (grade) {
case 'A':
printf("优秀\n");
break;
case 'B':
printf("良好\n");
break;
case 'C':
printf("及格\n");
break;
default:
printf("不及格\n");
}
循环语句
// for循环
for (int i = 0; i < 10; i++) {
printf("%d ", i);
}
// while循环
int i = 0;
while (i < 5) {
printf("%d ", i);
i++;
}
// do-while循环
int num;
do {
printf("请输入一个正数: ");
scanf("%d", &num);
} while (num <= 0);
3. 函数
函数定义和调用
#include <stdio.h>
// 函数声明
int add(int a, int b);
void printArray(int arr[], int size);
int factorial(int n);
int main() {
int result = add(5, 3);
printf("5 + 3 = %d\n", result);
int numbers[] = {1, 2, 3, 4, 5};
printArray(numbers, 5);
int fact = factorial(5);
printf("5! = %d\n", fact);
return 0;
}
// 函数定义
int add(int a, int b) {
return a + b;
}
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 递归函数
int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
4. 数组和字符串
一维数组
#include <stdio.h>
int main() {
int scores[5] = {85, 92, 78, 96, 88};
// 计算平均分
int sum = 0;
for (int i = 0; i < 5; i++) {
sum += scores[i];
}
double average = (double)sum / 5;
printf("平均分: %.2f\n", average);
// 查找最大值
int max = scores[0];
for (int i = 1; i < 5; i++) {
if (scores[i] > max) {
max = scores[i];
}
}
printf("最高分: %d\n", max);
return 0;
}
字符串处理
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[50] = "World";
char str3[100];
// 字符串连接
strcpy(str3, str1);
strcat(str3, " ");
strcat(str3, str2);
printf("连接结果: %s\n", str3);
// 字符串长度
int len = strlen(str3);
printf("字符串长度: %d\n", len);
// 字符串比较
if (strcmp(str1, str2) == 0) {
printf("字符串相等\n");
} else {
printf("字符串不相等\n");
}
return 0;
}
5. 指针
基本指针操作
#include <stdio.h>
int main() {
int num = 42;
int *ptr = # // 指针指向num的地址
printf("num的值: %d\n", num);
printf("num的地址: %p\n", &num);
printf("ptr的值(地址): %p\n", ptr);
printf("ptr指向的值: %d\n", *ptr);
// 通过指针修改值
*ptr = 100;
printf("修改后num的值: %d\n", num);
return 0;
}
数组和指针
#include <stdio.h>
void printArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]); // 等价于 *(arr + i)
}
printf("\n");
}
int main() {
int numbers[] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]);
printArray(numbers, size); // 数组名就是指针
return 0;
}
6. 文件操作
文件读写
#include <stdio.h>
int main() {
FILE *file;
char content[100];
// 写入文件
file = fopen("data.txt", "w");
if (file != NULL) {
fprintf(file, "Hello, File!\n");
fprintf(file, "第二行内容\n");
fclose(file);
printf("文件写入成功\n");
}
// 读取文件
file = fopen("data.txt", "r");
if (file != NULL) {
while (fgets(content, sizeof(content), file) != NULL) {
printf("读取内容: %s", content);
}
fclose(file);
} else {
printf("文件打开失败\n");
}
return 0;
}
文件操作函数
// 文件操作常用函数:
fopen(filename, mode) // 打开文件
fclose(file) // 关闭文件
fgets(str, size, file) // 读取一行
fputs(str, file) // 写入字符串
fprintf(file, format, ...) // 格式化写入
fscanf(file, format, ...) // 格式化读取
feof(file) // 检查是否到达文件末尾
7. 结构体
#include <stdio.h>
#include <string.h>
// 定义学生结构体
struct Student {
int id;
char name[20];
float score;
};
int main() {
// 创建结构体变量
struct Student student1;
student1.id = 1001;
strcpy(student1.name, "张三");
student1.score = 85.5;
// 结构体数组
struct Student students[3] = {
{1001, "张三", 85.5},
{1002, "李四", 92.0},
{1003, "王五", 78.5}
};
// 输出学生信息
for (int i = 0; i < 3; i++) {
printf("学号: %d, 姓名: %s, 成绩: %.1f\n",
students[i].id, students[i].name, students[i].score);
}
return 0;
}
8. 动态内存分配
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
printf("请输入数组大小: ");
scanf("%d", &n);
// 动态分配内存
int *arr = (int*)malloc(n * sizeof(int));
if (arr == NULL) {
printf("内存分配失败\n");
return 1;
}
// 初始化数组
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
// 输出数组
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 释放内存
free(arr);
return 0;
}
9. 考试重点提醒
- 基本语法: 变量声明、数据类型、运算符优先级
- 控制结构: if-else、switch、for、while循环的正确使用
- 函数: 函数定义、调用、参数传递、返回值
- 数组: 一维数组、字符数组、数组作为函数参数
- 指针: 指针的定义、使用、指针与数组的关系
- 字符串: strlen、strcpy、strcat、strcmp等函数
- 文件操作: 文件的打开、读写、关闭
- 结构体: 结构体的定义、使用、结构体数组
10. 常见编程题型
- 数组操作: 排序、查找、统计、求最值
- 字符串处理: 字符统计、字符串反转、查找替换
- 函数递归: 阶乘、斐波那契数列、汉诺塔
- 文件处理: 读取数据文件,统计分析,格式化输出
- 结构体应用: 学生管理、成绩统计等
- 指针操作: 通过指针操作数组、字符串
- 算法实现: 冒泡排序、选择排序、二分查找
11. 编程规范
- 变量命名: 使用有意义的变量名,如age、score等
- 缩进格式: 统一使用4个空格或Tab缩进
- 注释: 复杂算法要有注释说明
- 错误检查: 文件操作、内存分配要检查是否成功
- 内存管理: malloc后要对应free,避免内存泄漏
结语:
差不多也就这些内容,内容真心少得可怜,愿意的话基本上两天能学到通过的水平…一般刷个30多题就能去参加考试了,选择题可能花的时间还要更多一点呢
个人推荐b站随便看个c语言语法的速成课,额外找个视频看看文件读写的语法,3小时搞定,然后就开始刷题,刷个两天去考试。我计划着会做个两小时通关视频,到时候如果出了请务必捧场(´∀ ˋ)
题库平台最后还是拿出来夸一下:c.code2ji.cn
然后如果想看更详细的可以看我的这一篇博客:带例题的一篇