c语言复试总结

1、说一下c语言的三种基本结构化程序设计方法?

顺序结构:最基本的一种结构,执行顺序就按照从上到下执行就行啦,执行起来就是一溜烟地执行完。

选择结构:顾名思义就是我们在执行下一条语句之前会根据一个条件做出判断,我们应该选择下面哪一条或者一段语句。这样就引入了分支的概念,程序也就可以开枝散叶了。

循环结构:当我们需要重复处理一段相同逻辑的代码时我们就可以采用循环结构,这样就可以大大减少我们的代码量,也便于我们理解程序逻辑。

2、c语言与c++的区别是什么?

c语言是一种面向过程的语言。面向过程指的是我们如果要解决一个问题,那么就去设计他的步骤,然后通过程序一步一步地实现步骤,然后完成这个事件,它是以事件作为中心编程思想。

c++是一种面向对象的语言。面向对象是指我们编程时把一个事件分解成多个对象,每个对象有自己的属性以及行为,然后它们之间怎么去实现这些行为然后实现整个事件。比如说李雷与韩梅梅打架了,就可以把韩梅梅和李雷看成两个对象,它们两个有不同的家庭、公司、亲人、以及其他一些社会身份,它们都有打架的动作,这样你一拳我一巴掌就完成了整个事件。

3、指针与数组的关系?

利用指针我们可以去操作一个数组,假如我们定义一个指针P初始化为了A数组,那么我们可以通过P去操作A。但是我们这里需要注意指针它是一个可以变化的变量,就是我们可以进行P++这样自加自减的操作,但是A是不可以进行这样的操作的,它被定义好后就不可以改变了,只能进行A+i这样的操作,这是一个值得注意的点

4、模块化编程有什么好处?

把复杂的问题简单化:把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块;

有利于程序的设计和调试;

有利于程序的优化和分工;

提高了程序的阅读性和可靠性。

5、链表与数组的对比?

数组静态分配内存,链表动态分布内存。

数组在内存中是连续存储的,链表不是。

数组利用下标定位元素,查找的时间复杂度为O(1),链表通过遍历定位元素,查找的时间复杂度是O(N)。

数组插入和删除需要移动其他元素,时间复杂度是O(N),链表的插入或删除不需要移动其他元素,时间复杂度是O(1)。

数组优点:查找元素速度快。

数组缺点: 插入和删除效率比较低、会造成内存浪费,扩展性差创建时就已经固定。

链表优点:插入和删除效率高、内存利用率高、动态性强。

链表缺点:查找效率低。

6、c语言的头文件有什么用?

按照我自己的理解是这个文件是包含着一些我们已经写好的函数以及定义好的变量,这样我们在写程序的时候只需要把.h包含进去,一些函数以及变量就可以使用啦!比如说我们写c语言的时候就要写#include<stdio.h>,这样我们的一些printf以及sizeof等函数就可以使用啦。其中#是一个预编译符号,就是在我们编写的程序运行前把文件里的东西给安排上,函数以及变量等都准备好。就好比吃饭前把碗筷准备好一样!

7、c语言的变量?

局部变量、全局变量。

全局变量是整个程序都可访问的变量,谁都可以访问,生存期在整个程序从运行到结束(在程序结束时所占内存释放);
而局部变量存在于模块(子程序,函数)中,只有所在模块可以访问,其他模块不可直接访问,模块结束(函数调用完毕),局部变量消失,所占据的内存释放。
操作系统和编译器,可能是通过内存分配的位置来知道的,全局变量分配在全局数据段并且在程序开始运行的时候被加载.局部变量则分配在堆栈里面。

还有一个小考点就是如果没有初始化的情况下,局部变量的值是随机的,而全局变量的值为零。

静态变量、动态变量。

一般情况下就是静态变量会加static关键字,表明这是一个静态变量。动态变量就比如说int a这种。下面要说一下四个关键的知识点:

(1) 动态全局变量:
作用域为整个项目,即最终编译成可执行文件的所有文件中均可以使用动态全局变量。跨文件的全局变量一般都会加一个extern。
生命周期为从程序运行到程序退出,即贯穿整个运行时间。
无显式初始化时默认初始化值为0。
(2 )静态全局变量:
作用域为当前文件,从定义/声明位置到文件结尾。
生命周期为从程序运行到程序退出,即贯穿整个运行时间。
无显式初始化时默认初始化值为0。

(3) 动态局部变量:
作用域为当前函数,从定义位置,到其所在的{}的结束位置。
生命周期为从函数调用到函数退出。
无显式初始化时默认初始化值为随机值。
(4) 静态局部变量:
作用域为当前函数,从定义位置,到其所在的{}的结束位置。
生命周期为从程序运行到程序退出,即贯穿整个运行时间,当下次函数调用时,静态局部变量不会被再次初始化,而是沿用上次函数退出时的值。
无显式初始化时默认初始化值为0。

C语言中定义的静态变量存放在栈区,动态分配的内存空间位于堆区。
C语言中局部变量存在栈里,全局变量存静态存储区。

局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。

全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;

8、c语言的指针?

指针是一种内存地址,而指针变量是一种表示内存地址的变量。我们如果要想使用这个地址里面所存的数据,那么我们可以加入来实现,这个我查到了叫做间接寻址运算符。还有就是以下几个知识点要清楚,指针常量、常量指针、指针数组、数组指针。

指针常量的本质是一个常量,并且使用指针来修饰它,那么说明这个常量的值应该是一个指针,其格式应为:int * const p。

常量指针本质是指针,常量修饰它,表示这个指针是一个指向常量的指针(变量)。指针指向的对象是常量,那么这个对象不能被更改。

指针数组在本质上是一个数组,只不过我们的数组里面全部存的都是指针变量。

数组指针本质上一个指针,它是指向数组首地址的一个指针。

指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。
声明格式为:*类型标识符 函数名(参数表)

函数指针,其本质是一个指针变量,该指针指向这个函数。总结来说,函数指针就是指向函数的指针。
声明格式:类型说明符 (函数名) (参数)
定义不同
指针函数本质是一个函数,其返回值为指针。
函数指针本质是一个指针,其指向一个函数。
写法不同
指针函数:int
fun(int x,int y);
函数指针:int (fun)(int x,int y);
可以简单粗暴的理解为,指针函数的
是属于数据类型的,而函数指针的星号是属于函数名的。

9、动态存储方式和静态存储方式

动态存储方式:在程序运行期间根据需要进行动态的分配存储空间的方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、 释放形参变量的存储单元。

静态存储方式:在程序编译时分配固定的存储空间的方式。该存储方式通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。全局变量,静态变量等就属于此类存储方式。

内存中用户存储空间的分配情况(三种):

程序区:存放程序语句
静态存储区:存放全局变量,在程序编译时给全局变量分配存储区,程序执行完毕就释放。
动态存储区:存放以下数据:函数形式参数。在调用函数时给形参分配存储空间;自动变量(未加static声明的局部变量) ;函数调用时的现场保护和返回地址等;
动态内存分配:发生在程序调入和执行的时候,动态地分配或者回收存储空间的分配内存的方法。(是不是想到了堆,对!堆一定是动态分配的)

静态内存分配:发生在程序编译和连接的时候,预先分配存储空间(栈可以是静态分配如全局变量,也可以是动态分配;,栈动态分配是由编译器进行释放)

10、什么是内存的动态分配

所谓动态内存分配,就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。 动态内存分配不像 数组 等 静态内存 分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。

全局变量是分配在内存中的静态存储区的,非静态的局部变量(包括形参)是分配在内存中的动态存储区的,这个存储区是一个称为栈(stack)的区域。除此以外,C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放。这些数据是临时存放在一个特别的自由存储区,称为堆(heap)区。可以根据需要,向系统申请所需大小的空间。由于未在声明部分定义它们为变量或数组,因此不能通过变量名或数组名去引用这些数据,只能通过指针来引用。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
考研c语言复试面试题主要涉及基本知识点和算法思想。 首先,考官可能会询问C语言的基础知识,如变量的定义、常量和运算符的使用等。在回答中,我会着重强调C语言的数据类型、变量的存储和作用域、内存管理等重点内容。 其次,考官可能会针对C语言的特性和应用进行提问。例如,对指针的理解和使用、内存动态分配的方法和原理、结构体和联合体的巧用等。对于这些问题,我会结合实际应用场景,说明在C语言中如何高效地进行编程和问题解决。 另外,考官还可能会考察C语言的算法思想和常见的算法题。例如,对于排序算法,我会简单介绍几种常见的排序方法,如快速排序、归并排序等,并指出它们的时间复杂度和适用场景。如果遇到其他算法问题,我会尽力给出解题思路和步骤,以展示我在算法方面的理解和应用能力。 最后,我会总结回答,强调对C语言的理解程度和自己学习过程中的收获。我会强调在平时的学习和实践中,我通过阅读相关文献资料、参与编程竞赛等方式持续提升自己的C语言编程技能和算法思想,并且对于未来研究方向中与C语言相关的问题有着浓厚的兴趣。 通过对上述内容的准备和回答,我相信能够给考官留下深入学习和研究C语言的印象,展示自己在这方面的能力和潜力,从而在考研C语言复试中取得良好的成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值