408 计算机考研-001-C语言-C语言基础-考研必学

news2025/2/2 0:55:53

408 计算机考研-001-C语言-C语言基础-考研必学

本文目录

  • 408 计算机考研-001-C语言-C语言基础-考研必学
    • 考研C语言应掌握的内容
    • 考研真题
      • 2022 年考研真题第 1 题
      • 2022 年考研真题第 41 题
      • 2021 年考研真题第 42 题
    • 一、打印:Hello, World
    • 二、数据类型
      • 1. 基本数据类型
    • 三、运算符
    • 四、流程控制
    • 五、函数
    • 六、数组和指针
      • 1. 数组
      • 2. 指针
      • 3. 动态内存分配
    • 七、结构体和联合体
      • 1.结构体
    • 八、常用函数
    • 总结
    • 参考资料

考研C语言应掌握的内容

计算机408考纲内容:
能够运用数据结构基本原理和方法进行问题的分析与求解,具备采用 C 或 C++语言设计与实现算法的能力

大家可以先看下下面的几道真题,如果下面的题目你都能看到,那么你对于C语音在考研中需要的的基础知识应该也差不多了。如果你看不懂的话那么可以接着往下面看,所有的知识点都在代码里面。

从下面几道真题题目中我们可以知道需要掌握C语言的如下知识:

  1. 数据类型:了解C语言的基本数据类型(整型、浮点型、字符型等),以及如何声明和使用变量。
  2. 运算符:熟悉C语言的算术运算符、关系运算符、逻辑运算符等,以及它们的优先级和结合性。
  3. 控制流程:理解C语言的条件语句(if-else语句、switch语句)和循环语句(for循环、while循环),以及如何使用它们控制程序的执行流程。
  4. 函数:掌握如何定义、调用和传递参数给函数,以及如何使用函数来组织代码和实现模块化。
  5. 数组和指针:了解如何声明、初始化和操作数组,以及如何使用指针来访问数组元素和动态分配内存。
  6. 结构体和联合体:了解如何定义和使用结构体和联合体,以及它们如何用于组织和管理复杂的数据。
  7. C语言中的常用函数:熟悉如常见的字符串处理函数,如strlen、strcmp、strcpy等。

考研真题

2022 年考研真题第 1 题

在这里插入图片描述

2022 年考研真题第 41 题

在这里插入图片描述

2021 年考研真题第 42 题

// 42.已知某排序算法如下
void cmpCountSort(int a[], int b[], int n) 
{
    int i, j, *count;
    // C++语言:count = new int[n];
    count = (int*)malloc(sizeof(int) * n);
    for(i = 0; i < n; i++) count[i] = 0;
    for(i = 0; i < n - 1; i++) 
        for(j = i+1; j<n; j++)
            if(a[i] < a[j]) count[j]++;
            else count[j]++;
   for(i = 0; i < n; i++) b[count[i]] = a[i];
   // C++语言:delete count;
   free(count);          
}

一、打印:Hello, World

首先先来看看最经典的C的Hello,World程序吧。

/**
 * include是包含的意思,这句话的意思就是把 stdio.h 的这个文件包含进来
 * 专业解释:#include 这行代码是一条C预处理器指令
 * #include <stdio.h>:这句话代码就是把C语音中的 标准输入输出(stdio.h)库 引入进来
 * stdio.h: 这个文件里面包含了标准一些标准输入输出相关的函数, 如下面用到的 printf() 这个输出函数。还有如scanf() 输出函数
 * 引入库的标准格式: #include <函数库的名称>
 * 这属于C语言语法要求的格式,不用纠结为何这样写,记下来就好了
 */
#include <stdio.h>

/**
 * 这行表示函数名为main的函数
 * int: 表示函数值的反类型
 * main: 表示函数的名称,也可以叫 其他的名称, 如 abc() 等
 * 但是main这个名称有些特殊,它在C语音中表示的是开始的函数。
 * 意思是这个程序编译好后,如果要执行的话就会去找文件中找到名字叫main的函数。就像游戏中的开始按钮一样,如果游戏没有开始按钮就玩不了了。
 */
int main()
// 这个左花括号 { 的意思表示函数定义的开始,代表着这个里面的东西属于一个整体
// 程序中的注释的表示方法: 1. 行注释 // <注释的内容>   2. 块注释 /* <注释的内容> */
{
    /**
     * 这行的意思是调用标准输入输出库(stdio.h)中的printf()函数,把 双引号中的 Hello, Wordl 输出到控制台中
     */
    printf("Hello, World");

    /**
     * main函数可以给使用者返回一个数。目前,可暂时把该行看作是结束main()函数的要求。
     */
    return 0;
// 这个右花括号 } 的意思表示的函数定义的结束
}

二、数据类型

1. 基本数据类型

/**
 * C语言数据类型
 */
#include <stdio.h>
#include <limits.h>

int main() {

    /**
     * char : 字符数据类型, 对应的值需要使用单引号扩起来。
     * 取值范围:-128 到 127 (对应于ASCII码)
     * ASCII码中 '0' = 48; 'A' = 65;  'a' = 97;
     */
    char singleSymbol = 'A';
    printf("打印char据类型中的字符:%c \n", singleSymbol);
    printf("打印char据类型中的字符对应的ASCII码:%d \n", singleSymbol);
    /**
     * CHAR_MAX : 是从 <limits.h> 这个库中引入进来的。
     * 表示CHAR的最大取值范围,其中还有CHAR_MIN(char类型最小值), INT_MAX(int类型最大值)等
     */
    printf("打印char字符最大值 %d \n", CHAR_MAX);

    /**
     * unsigned char : 无符号字符数据类型
     * 数据取值范围:0 到 255;
     * unsigned 也可以加到其他数类型的前面,待表对应的无符号数据类型
     * 如;unsigned int 、 unsigned long
     */
    unsigned char unsignedSingleSymbol = 'A';

    /**
     * 整型数据类型
     * 一般都用的int类型就够了
     */
    short shortIntegral = 10; // 短整型
    int integral = 10000; // 整型
    long longIntegral =  10000000L; // 长整型

    /**
     * 浮点数据类型,可以表示小数。常用double类型
     */
     float floatNum = 1.1; // 单精度浮点型
     double pi = 3.1415962; // 双精度浮点型
     
    return 0;
}

三、运算符

/**
 * C语音中的运算符
 */
#include <stdio.h>

int main() {

    /**
     * 赋值运算符: =
     * 把等号右边的值赋值给左边
     */
    int a = 10; // 把10赋值给变量a
    int b = 20;
    int c = 4;
    int d;

    /**
     * 算数运算符
     * 加、减、乘、除、取模、自增、自减
     * +、 -、 *、 \、 %、 ++、 --
     */
    d = a + b;  // 加法运算符 = 30
    printf("a + b = %d\n", d);
    d = a - b;  // 减法运算符 = -10
    printf("a - b = %d\n", d);
    d = a * c;  // 乘法运算符 = 40
    printf("a * b = %d\n", d);
    // 整数除法和浮点数除法不同。浮点数除法的结果是浮点数,而整数除法的结果是整数。整数是没有小数部分的数。
    d = a / c; // 除法运算符 = 2 ,
    printf("a * b = %d\n", d);
    d = a % c; // 取模运算符 = 2;
    printf("a * b = %d\n", d);
    c++; // 自增运算符 = 5
    printf("a * b = %d\n", c);
    c--; // 自减运算符 = 4
    printf("a * b = %d\n", c);

    /**
     * 关系运算符: 主要用来作为条件判断使用。
     * == (等于)、!= (不等于)、> (大于)、>= (大于等于)、< (小于)、<= (小于等于)
     */
    if ( a < b) { // 判断 a 和 b 的大小
        printf("a 小于 b \n"); // 此句将会打印
    } else {
        printf("a 不小于 b \n");
    }

    /**
     * 逻辑运算符
     * && (逻辑与)、 || (逻辑或)、! (逻辑非)
     */
    if ( a && b) {
        printf("a && b 条件为真 \n");
    }

}

四、流程控制

/**
 * 流程控制
 */
#include <stdio.h>

int main () {

    /**
     * 判断语句
     */
    int age = 18; // 年龄
    // if语句
    if (age >= 18) { // 判断年龄是否大于等于18岁
        printf("已满18岁,可以上网 \n");
    }
    // if else 格式
    age = 17;
    if (age >= 18) { // 判断年龄是否大于等于18岁
        printf("已满18岁,可以上网 \n");
    } else {
        printf("未满18岁,不可以上网 \n");
    }

    /**
     * 也可以简写为下面这样,意思同上
     * 注意:如果没有花括号的话只能跟携带一条语句
     */
    if (age >= 18)
        printf("已满18岁,可以上网 \n");
    else
        printf("未满18岁,不可以上网 \n");

    // 多重选择 switch 语句
    char score = 'A'; // 成绩
    switch (score) {
        case 'A': // 如果成绩为A这进入到里面,并打印其中的语句
            printf("您的考试成绩为A \n");
            // 结束语句
            break;
        case 'B':
            printf("您的考试成绩为B \n");
            // 结束语句
            break;
        // 如果上面都没有匹配的,则执行到这里
        default:
            printf("您的成绩为C");
    }


    /**
     * 循环语句
     */

    // while 循环
    int count = 1; // 计数器
    while (count <= 10) { // 打印 1 - 10
        printf("%4d", count);
        count++; // 计算器自增
    }
    printf("\n");

    // for 循环
    for (int i = 1; i <= 10; ++i) {
        printf("%4d", i);
    }
    printf("\n");
}

五、函数

/**
* C语言函数
* 函数(function)是完成特定任务的独立程序代码单元。
*/
#include <stdio.h>

/* 函数声明 */
int max(int num1, int num2);

int main() {
    /* 局部变量定义 */
    int a = 100;
    int b = 200;
    int result;

    /* 调用函数来获取最大值 */
    result = max(a, b);

    printf( "最大值是 : %d\n", result );

    return 0;
}

/* 函数返回两个数中较大的那个数 */
int max(int num1, int num2) {
    /* 局部变量声明 */
    int result;

    if (num1 > num2)
        result = num1;
    else
        result = num2;

    return result;
}

六、数组和指针

1. 数组

/**
 * C语言数组
 */
#include <stdio.h>

int main() {

    /**
     * 声明数组
     */
    int candy[10]; // 糖果数组
    double scores[52]; // 成绩数组

    /**
     * 数组的初始化
     */
    int candyA[3] =  {1, 2, 3};
    candy[0] = 1;

    /**
     * 访问数组
     */
    printf("candy数组中的第一个值:%d", candyA[0]);

    return 0;
}

2. 指针

  • C语言中的指针是一种特殊的数据类型,它用来存储变量的地址。指针变量表示的是一个内存地址,可以用来访问和修改该地址处的数据。
  • 指针的声明形式为:数据类型 * 指针变量名;例如:int * p; 表示声明了一个指向整型数据的指针变量p。
  • 使用指针变量时,可以通过解引用操作符*来访问该指针所指向的内存地址处的数据。例如:*p 表示访问指针p所指向的整型数据。
  • 指针的主要作用是在函数间传递参数和动态分配内存。通过传递指针参数,可以在函数中修改实际参数的值。通过动态分配内存,可以在程序运行时动态申请和释放内存空间,实现灵活的内存管理。
  • 使用指针时需要注意一些细节问题,如指针的初始化、指针的比较、指针的运算等。同时,在使用指针时还要注意避免空指针和野指针的出现,以免引起程序崩溃或数据错误的问题。
/**
 * C语言指针
 */
#include <stdio.h>

int main() {

    /** 指针的声明 */
    int * ptr; // 声明一个指向整型数据的指针
    char * str; // 声明一个指向字符型数据的指针

    /** 指针的赋值 */
    int num = 10;
    ptr = &num; // 将指针ptr指向变量num的地址

    /** 通过指针访问和修改数据 */
    printf("%d\n", *ptr); // 打印出变量num的值
    *ptr = 20; // 修改变量num的值
    printf("%d\n", num); // 打印出修改后的变量num的值

    /** 指针的运算 */
    int arr[5] = {1, 2, 3, 4, 5};
    int * arrPtr = arr; // 指针指向数组arr的第一个元素
    printf("%d\n", *arrPtr); // 打印第一个元素的值
    arrPtr++; // 指针右移一个元素
    printf("%d\n", *arrPtr); // 打印第二个元素的值

    return 0;
}

3. 动态内存分配

  • C语言通过使用指针来管理内存,手动分配和释放内存。
  • C语言中有两种主要的内存分配方式:静态分配和动态分配。
  • 静态分配是在程序编译时进行的,在程序运行时分配固定大小的内存。静态分配的内存是通过声明变量和数组来完成的。例如,当你声明一个整型变量时,编译器会为它分配必要的内存。
  • 动态分配是在程序运行时进行的,在程序运行时根据需要分配内存。动态分配的内存是通过C标准库函数malloc()和calloc()来完成的。
  • 内存分配函相关数
    • malloc():动态分配指定大小的内存块,并返回一个指向分配内存的指针。如果分配失败,则返回NULL。
    • calloc():动态分配指定数量和大小的内存块,并返回一个指向分配内存的指针。calloc()函数在分配内存块之前会将其初始化为0。如果分配失败,则返回NULL。
    • realloc():重新分配之前分配的内存大小,可以调整内存的大小。如果分配失败,则返回NULL。
    • free(): 将先前分配的内存块返回给系统。
/**
 * C语言动态内存分配
 */
#include <stdio.h>
#include <malloc.h>

int main() {

    /**
     * 分配一个包含10个整数的数组,可以使用以下代码
     * 在这个例子中,`malloc`函数分配了`sizeof(int) * 10`字节的内存空间,并将指针赋值给了`arr`变量。
     * 注意,我们在类型转换前面加上了`(int*)`,这是因为`malloc`的返回类型是`void*`,需要将其转换为我们所需的指针类型。
     * 在分配完内存后,可以使用`arr`指针来访问这些内存。
     */
    int* arr = (int*) malloc(sizeof(int) * 10);

    // 使用`malloc`函数分配内存后,我们需要负责手动释放这些内存空间。否则,这些内存将一直占用直到程序结束。
    free(arr);

    return 0;
}

七、结构体和联合体

1.结构体

结构体是一种用户定义的数据类型,可以用来存储多个不同类型的数据项。结构体可以包含多个成员,每个成员可以是任意数据类型,包括基本类型(如整数和浮点数)和其他结构体类型。

// 结构体的定义
struct 结构体名 {     
    数据类型 成员1;     
    数据类型 成员2;    
    ...    
    数据类型 成员n; 
};
/**
 * C语言结构体
 */
#include <stdio.h>
#include <string.h>

// 定义一个表示学生信息的结构体,包含姓名、年龄和分数三个成员
struct student {
    char name[20];
    int age;
    float score;
};

int main() {
    // 声明结构体变量
    struct student s;

    // 给结构体中的成员赋值
    strcpy(s.name, "Tom");
    s.age = 18;
    s.score = 90.5;

    // 直接访问结构体中的成员
    printf("Name: %s\n", s.name);
    printf("Age: %d\n", s.age);
    printf("Score: %.2f\n", s.score);

    // 通过指针访问结构体的成员
    struct student *p = &s;
    printf("Name: %s\n", p->name);
    printf("Age: %d\n", p->age);
    printf("Score: %.2f\n", p->score);
    
    return 0;
}

八、常用函数

  1. printf():用于打印输出。
  2. scanf():用于输入数据。
  3. strcmp():用于比较两个字符串是否相等。
  4. strlen():用于获取字符串的长度。
  5. strcpy():用于将一个字符串复制到另一个字符串。
  6. strcat():用于将一个字符串连接到另一个字符串的末尾。
  7. atoi():用于将字符串转换为整数。
  8. atof():用于将字符串转换为浮点数。
  9. rand():用于生成随机数。
  10. malloc():用于动态分配内存。
  11. free():用于释放动态分配的内存。

总结

看到这里大家应该也能够对于C语言有个基本的了解了吧,对于考研中的408C语言中的知识差不多也就是上面那些了。
了解了C语言的基本知识之后就可以开始学习数据结构了。
如果大家还是不懂的话可以直接去看B站上面老师们的视频,或者看看下面的参考资料。

参考资料

  • 《C Primer Plus》第六版
  • 计算机 408 历年考研真题
  • 计算机 408 考研大纲
  • ChatGPT
  • 牛客网C语言入门教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/762684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目bug——编码问题报错(java.lang.IllegalStateException)

项目场景&#xff1a; 项目拉下后报错 问题描述 2023-07-17 14:26:07.596 ERROR 14300 — [ main] o.s.boot.SpringApplication : Application run failed java.lang.IllegalStateException: Failed to load property source from ‘file:/Users/wang/IdeaProjects/ms-famil…

ADS交叉耦合振荡器仿真

ADS交叉耦合振荡器仿真 摘要参考视频书籍 环境过程结果分析频率计算瞬态仿真差分电压输出查看相位噪声分析 摘要 本文主要参考视频中如何使用进行ADS交叉耦合振荡器仿真和分析&#xff0c;由于视频中有诸多错误和视频清晰度较低&#xff0c;虽然视频博主及时改正&#xff0c;为…

家用洗地机好用吗、智能洗地机品牌排行榜

在现如今&#xff0c;洗地机不算是什么稀奇的东西了。正相反&#xff0c;越来越多的家庭在清洁的时候都会使用洗地机。因为洗地机相比传统的清洁方式&#xff0c;更加便捷高效&#xff0c;清洁使用的时候简直就是事半功倍&#xff01;那么今天小编就为给大家盘点几款非常适合家…

3Ds max入门教程:快捷键命令和鼠标热键大全

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 起初&#xff0c;您可能需要花一些时间查找热键&#xff0c;但是一旦您使用它们记住了它们&#xff0c;它们将使您以至少两倍的速度产生结果。例如&#xff0c;当您进行建模&#xff08;移动、缩放、旋转等…

霍纳法则----快速入门,贼好理解

别问我&#xff0c;为什么写这个&#xff0c;我可能一辈子都在开发中用不到&#xff0c;纯粹应付八股。 公式我不知道咋打&#xff0c;就网上复制了个图片。 这是什么&#xff1f;是一个含x的多项式&#xff0c;他有很多次方。假设让你写代码&#xff0c;x的输入项&#xff0c;…

一文带你了解动态内存管理

目录 动态内存存在的意义 动态内存函数的介绍 malloc和free calloc realloc 常见的动态内存错误 对NULL指针解引用操作 对动态开辟的空间的越界访问 对非动态开辟内存使用free释放 使用free释放一块动态开辟内存的一部分 对同一块内存多次释放 动态开辟内存忘记释放…

时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测

时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测 目录 时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测效果一览基本介绍研究内容程序设计参考资料效果一览 基本介绍 时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测 研究内容 NARX(Nonlinear AutoReg…

抖音账号矩阵系统源码-开源部署开发者分享

抖音账号矩阵系统&#xff0c;短视频账号矩阵系统源码&#xff0c; 短视频矩阵是一种常见的视频编码标准&#xff0c;它通过将视频分成多个小块并对每个小块进行压缩来实现高效的视频传输。短视频多账号矩阵系统&#xff0c;通过多账号一键授权管理的方式&#xff0c;为运营人员…

90%的程序员都不知道Mysql索引下推

索引下推(Index Condition Pushdown) ICP 是Mysql5.6之后新增的功能&#xff0c;主要的核心点就在于把数据筛选的过程放在了存储引擎层去处理&#xff0c;而不是像之前一样放到Server层去做过滤。 虽然这是一个比较简单的概念&#xff0c;但是可能很多不细心的同学对于索引下推…

无需点跟踪,克服DragGAN缺陷!中科大联合上海AI Lab发布FreeDrag:可稳定拖动语义内容

FreeDrag无需点跟踪&#xff0c;即可实现更高质量的拖动编辑效果&#xff01; 近日&#xff0c;在AIGC的广阔世界里出现了一个火热的图像编辑方法—即通过在给定图像上通过把语义内容从原位置&#xff08;handle point&#xff09;拖动到目标位置&#xff08;target point&…

12宫格 抽奖逻辑实现【直接可用】

先看视频&#xff0c;比较卡&#xff0c;毕竟是视频转gif导出的 /*** Author : 马占柱* E-mail : mazhanzhu_3351163.com* Time : 2023/5/24 17:46* Desc : 12宫格 盲盒抽奖*/ public class NineLuckPan extends View {private Paint mPaint;private ArrayList<RectF>…

linux下安装jdk

1、创建目录 cd /opt mkdir /opt/jdk 2、将jdk放入/opt/jdk中 3、 解压目录 cd /opt/jdk tar -zxvf jdk-8u261-linux-x64.tar.gz 4、拷贝目录 mkdir /usr/local/java mv /opt/jdk/jdk1.8.0_261 /usr/local/java 5、配置环境变量的配置文件 vim /etc/profile 在配置文件中添加…

PyCharm 常用快捷键

目录 1、代码编辑快捷键 2、搜索/替换快捷键 3、代码运行快捷键 4、代码调试快捷键 5、应用搜索快捷键 6、代码重构快捷键 7、动态模块快捷键 8、导航快捷键 9、通用快捷键 1、代码编辑快捷键 序号快捷键作用1CTRLALTSPACE快速导入任意类2CTRLSHIFTENTER代码补全3SHI…

基于STM32LVGL8.2保姆级教程③代码框架移植

这里推荐去看正点原子的视频 对照教程一步步的移植即可 需要一点时间 点击传送门直达 如果你觉得太繁琐 也可以找我直接获取移植好的框架(免费分享) 移植完毕的工程截图~ 注意事项 这两个文件的内容默认是使用宏定义关闭的 需要你手动开启(我的代码已经完成了这一步)

自动上香木鱼念珠颂钵功德流量主小程序开发

自动上香木鱼念珠颂钵功德流量主小程序开发 自动上香木鱼念珠颂钵功德流量主小程序的功能包括&#xff1a; 自动上香&#xff1a;用户可以设置定时任务&#xff0c;小程序会在指定时间自动上香&#xff0c;无需用户手动操作。木鱼念珠&#xff1a;小程序提供虚拟的木鱼念珠&a…

高压放大器需要注意哪些指标

高压放大器是一种专门用于输出高电压信号的电子设备&#xff0c;主要应用于精密测量、医疗设备、电力电子等领域中。在选择高压放大器时&#xff0c;需要注意其性能指标&#xff0c;以确保设备的稳定性和可靠性。 以下是高压放大器需要注意的性能指标&#xff1a; 输出电压范围…

一个简单的python案例,用正则采集小说网站

目录标题 前言尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 使用Python抓取xx阁小说需要用到 requests 库和正则表达式模块 re&#xff0c;下面是一个具体的实现步骤&#xff1a; 1. 首先需要使用 requests 库请求小说的页面 例如&#xff1a; import requestsu…

运维数据(1):谈谈运维数据的8大特征

在这个数据作为市场要素之一的时代&#xff0c;数据已从理念上的资产认同逐步走向实践上的深入行动。单从经济利益上去评定数据的资产化价值&#xff0c;我认为太狭隘&#xff0c;把数据仅仅作为有形物品去交易&#xff0c;价值的发挥未免太过局限。我家那一亩三分地种的红薯&a…

等保——windows终端和服务器测评

一、本文适用于Windows系统&#xff0c;但有些版本不适用&#xff0c;例如win10、win11等&#xff0c;因为没有密码策略模块 二、针对于win7的测评过程 1、winR打开命令行&#xff0c;输入gpedit.msc&#xff0c;打开本地组策略编辑器&#xff08;win10以上版本没有这个模块&…

辅助笔记-linux找回root密码(CentOS7.6)

linux找回root密码(CentOS7.6) 文章目录 linux找回root密码(CentOS7.6)步骤1步骤2步骤3步骤4步骤5 本文主要参考自“韩顺平教育–linux找回root密码.docx”。 步骤1 首先&#xff0c;启动系统进入开机界面&#xff0c;注意在此界面下的5秒之内&#xff0c;使用键盘的上下键使得…