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

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赋值给变量aint b = 20;int c = 4;int d;/*** 算数运算符* 加、减、乘、除、取模、自增、自减* +、 -、 *、 \、 %、 ++、 --*/d = a + b;  // 加法运算符 = 30printf("a + b = %d\n", d);d = a - b;  // 减法运算符 = -10printf("a - b = %d\n", d);d = a * c;  // 乘法运算符 = 40printf("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++; // 自增运算符 = 5printf("a * b = %d\n", c);c--; // 自减运算符 = 4printf("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");elseprintf("未满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 - 10printf("%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;elseresult = 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.rhkb.cn/news/11641.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

因为AI,我被裁了;MJ设计海报全流程;独立开发者每周收入2.3K美元;MJ常用参数超详细介绍 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 受 AI 影响&#xff0c;这 8 家公司开始裁员…… 为了搞清楚 AI 最近在影响哪些行业、哪些职业&#xff0c;作者花了三天事件找到了八…

AIGC 语言大模型研究报告

AIGC 研究报告 这份报告可以被划分为两大部分。 第一部分集中于ChatGPT的发展和运作原理&#xff0c;为了增强理解&#xff0c;我们将先探讨自然语言处理的历史发展。第二部分主要聚焦于由大模型引领的新的研究领域&#xff0c;并深入介绍在每个领域中可以进行的具体研究工作…

ChatGPT编造假新闻,百家号非法获利!

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 看来国内第一个“利用ChatGPT谋利”的案件已经出来了。说通俗点&#xff0c;他就是用ChatGPT乱编热点新闻&#xff0c;然后百家号发文章点击获取收益&#xff0c;然后被定性为涉嫌寻衅滋事罪&#…

如何识别 ChatGPT 的真假

ChatGPT 面世惊艳&#xff0c;无数普通人都想试试看&#xff0c;这个传闻中超级厉害的人工智能到底是怎么回事。一时间&#xff0c;很多网站、群聊中&#xff0c;都冒出来各式各样的打着 ChatGPT 名义&#xff0c;挂着 ChatGPT 头像的人工智能对话机器人。但试着一聊&#xff0…

上海交大全球午餐会——大语言模型机器学习ChatGPT(主讲人:赵海)

实现强人工智能&#xff0c;从脑计划到与训练模型&#xff1a;在过去的十年中&#xff0c;一段时间很热&#xff0c;后面被人工智能机器学习盖过去了 目前脑计划的现状不能宣布失败&#xff0c;仍在进行&#xff0c;但是没有之前那么热。预训练模型正在走向脑计划的方向。 特别…

百度“文心一言”大模型(ERNIE)发布了,对标ChatGPT

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下基于大语言模型的背景下&#xff0c;国内外的发展现状&#xff0c;以及百度的“文心一言”大模型。 一、自然语言处理模型的发展 自然语言处理(NLP)大模型的发展可以追溯到早期的简单的规则模型&#xff0c;再到后…

百度版ChatGPT将提前上线/ 快手辟谣「宿华最新创业或是芯片」/ 北京支持头部企业打造ChatGPT竞品…今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大家好&#xff0c;今天是普普通通平平常常的2月14日星期二。 科技圈最近都有哪些新鲜事&#xff0c;来和日报君一起康康&#xff5e; 北京&#xff1a;支持头部企业打造对标ChatGPT的大模型 ChatGPT的火&#xff0c;在国内越烧越旺了…

百度即将推出的“文心一言”对标ChatGpt?

百度即将推出的“文心一言”对标ChatGpt? ChatGpt是最近备受关注的一个风口&#xff0c;它由Openapi开发的自然语言处理模型&#xff0c;可以为人类带来极大的便利&#xff0c;前几期小编 也出过几篇关于ChatGpt的文章&#xff0c;相信大家在体验ChatGpt的过程已经感受到了它…

百度中国版ChatGPT“正式问世”

百度中国版ChatGPT正式问世&#xff0c;这是百度自然语言处理方面的重大突破&#xff0c;也是AI领域的一次跨越。ChatGPT是百度自然语言处理技术的升级版&#xff0c;其核心是“GPT”&#xff0c;即“Generative Pre-training Transformer”&#xff0c;是一项基于深度学习的自…

chatgpt是哪家的 chatgpt中的gpt是什么意思

这篇文章主要介绍了一个有趣的事情&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 1、chatgpt是什么? chatgpt介绍如下&#xff1a; ChatGPT是由人工智能研究实验室OpenAI在…

现在ChatGPT正式交付给一位华人

目录 引语&#xff1a; 目前网络上关于OpenAI这位新任华人高管的报道并不多。 直到Peter Deng宣布加入OpenAI。 结语&#xff1a; 引语&#xff1a; 大家好我们是权知星球&#xff0c;开启你独特的知识星际之旅 正当所有人都在讨论ChatGPT是否会导致产品经理失业时&#…

多个chatgpt模型

GPT4All 简介&#xff1a;GPT4AllNomic AI Team 从 Alpaca 获得灵感&#xff0c;使用 GPT-3.5-Turbo OpenAI API 收集了大约 800,000 个提示-响应对&#xff0c;创建了 430,000 个助手式提示和生成训练对&#xff0c;包括代码、对话和叙述。80 万对大约是羊驼的 16 倍。该模型…

ChatGPT 4 的 6 个最佳使用场景

作者&#xff1a;SYDNEY BUTLER 译者&#xff1a;明明如月 无论是在 ChatGPT 中还是通过 API&#xff0c;对 OpenAI 的 GPT-4 模型的访问比 GPT-3.5 限制更多。这意味着你需要慎重考虑在何种情况下使用 GPT-4&#xff0c;并选择性地将最适合的任务交给它&#xff0c;以便让其发…

Twitter开发者账号申请流程

申请了两个星期&#xff0c;终于申请成功了&#xff01;主要是中间等待Twitter回复邮件费时间。 完整教程请到我的资源下载&#xff1a; Twitter开发者账号申请教程.docx_推特开发者账号-专业指导文档类资源-CSDN下载 把这个分享出来&#xff0c;主要是觉得网上的教程都是申…

1.Twitter开发者之如何申请一个twitter开发者账号

Twitter开发者之如何申请一个twitter开发者账号 教大家申请一个推特开发者账号满足后面的使用 保证每一步都给大家介绍到&#xff0c;非常详细&#xff0c;希望帮助大家注册好自己的账号&#xff01; 1.先打开Twitter的账号注册界面&#xff0c;选择使用手机号码或电子邮箱注…

Google开发者账号申请

背景 Android端应用要出海&#xff0c;Google Play无疑是最好的平台&#xff0c;要上架Google Play&#xff0c;必须拥有Google开发者资质。 账号申请 申请Google开发者账号大致分为两步&#xff1a;一、申请Google账号&#xff1b;二、创建Google开发者账号。 申请条件也比…

JSP住宅小区物业管理系统(源代码+开题报告+论文+答辩PPT

登录 JSP住宅小区物业管理系统(源代码开题报告论文答辩PPT) 2022-12-04 657 100 元 点赞 (0) 收藏 立即购买 升级会员 查看演示 遇到问题请联系客服微信&#xff1a;19966519194 下载方式&#xff1a; 购买成功后会出现“立即下载”按钮&#xff01; 下载遇到问题请看底部…

【AI绘画】外网一直进不去?别担心,还有AI绘画小程序和文心一格

这是加入新星计划的最后一周的最后一篇文章啦&#xff01;文章的最后是我想总结一下从三月底到四月中旬这几十天的感想&#xff5e; 系列文章&#xff1a; 【AutoGPT】你自己运行&#xff0c;我先睡了—— ChatGPT过时了吗&#xff1f;_山楂山楂丸的博客-CSDN博客 目录 前言 …

rocketmq-client-go注册消费者组的问题

一、前言 test环境服务启动&#xff0c;通过代码新注册一个customer group进行消费&#xff0c;服务一直报错如下&#xff1a; levelerror msg"fetch offset of mq from broker error" MessageQueue"MessageQueue [topicxxx, brokerNamebroker-a, queueId1]&q…

django csrfMiddleware的一些理解跨站和跨域

目录 术语为什么要有同源策略同源策略&#xff1a;同源策略的限制:同源策略作用:为什么能防csrf csrf攻击的特点Django中csrf token验证原理问题引入解答 chatgpt——Q&A1. django 的csrf可以防御csrf攻击&#xff0c;单前后端分离使用djangorestframework时&#xff0c;dr…