首师大考研C语言简答题总结(总5页)
C语言大题总结
1、冯.诺伊曼模型的基本组成部分。
输入设备、输出设备、存储器(内存储器、外存储器)、运算器、控制器
2、请写出结构化程序的含义和基本思想。
以模块设计为中心,将待开发的软件系统划分为若干相互独立的模块,完成每一个模块的功能独立而明确,为设计大的软件打下了基础。结构化程序设计的基本思想是自顶向下,逐步求精。
3、一个算法应该具有以下五个重要的特征:1.有穷性:算法的有穷性是指算法必须能在执行有限个步骤之后终止2.确切性:算法的每一步骤必须有确切的定义;3.输入项:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条
件;
4.输出项:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;5.可行性:算法中执行的任何计算步都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成。(也称之为有效性)
4、请列举三种以上的排序算法,并从稳定性、算法复杂度进行比较。
1.稳定度:就是说排序过程中,出现错误排序(从小到大排列时,某次交换是8排到了7前面,就作为一次错误排序)的次数越少,稳定性越好。
2.计算的复杂度:可用时间复杂度来衡量,对于一个n元素的数组,最好的排序复杂度自然是O(n)但是做不到,退而求其次,O(nlogn)也不错,最差的是O(n2).
稳定算法 | 不稳定算法 | ||
名称mysql语句查询语句 | 复杂度 | 名称 | 复杂度 | java多线程join方法
插入排序 | O(n2) | 选择排序 | O(n2) |
冒泡排序 | O(n2) | 堆排序 | O(nlogn) |
快速排序 | O(nlogn)-O(n2) | ||
5、冒泡排序代码c语言什么是算法什么是算法复杂度
算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。算法的复杂度指的是算法在运行过程中所需要的资源(时间、空间)多少 。所需资源越多,表明算法的复杂度越高。
6、算法分析的目的是什么?
u盘不可用怎么办是为了建立衡量算法优劣的标准,用以比较同一类问题的不同算法。为了对算法的某些特定输入,估算该算法所需的内存空间和运行时间;
7、算法设计的常用技术是什么?
①分治法;②回溯法;③贪心法;④动态规划法⑤分治限界法;⑥穷举法;⑦递推法; ⑧递推法
8、什么是递归算法递归算法的特点
递归算法:是一个模块(函数、过程)除了可调用其它模块(函数、过程)外,还可以直接
或间接地调用自身的算法。
递归算法特点:
①要有终止条件,不然会无限循环
②要到一个可以循环调用的递归表达式
9、分治法的基本思想是什么
将一个规模为N的问题分解为K个规模较小的子问题,这些子问题互相独立且与原问题相同。递归地解这些子问题,然后将各子问题的解合并得到原问题的解。
10、递归算法的优点是什么 结构清晰,可读性强,容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。
11、递归算法的缺点是什么?
运行效率较低,耗费的计算时间和占用的存储空间都多。为了达到此目的,根据具体程序
的特点对递归调用工作栈进行简化,尽量减少栈操作,压缩栈存储空间以达到节省计算时间和存储空间的目的。
12、C语言为什么要规定对所有用到的变量要“先定义,后使用”这样做有什么好处?
因为C语言是一种强类型语言,要求所有变量在使用之前先定义数据类型。
1、根据数据类型分配内存空间。
2、便于提高源代码的安全性。 例子:假如一个全局变量money在代码中多次使用。但有一次写成了menoy。由于变量不需要事先声明的。所以程序正常运行,但是逻辑错误,难以排除。如果要求事先定义,则不会出现这样的错误。
13、简述C语言中指针与数组的联系与区别。
数组名只是指针中的一种,它是指针中只指向栈区的且指针的移动范围是有限的,即数组长度。而且数组在定义之初就已经有了自己的内存,一般的指针如果未指向某一个内存块时,它是没有自己的内存的,即所谓的野指针。 联系:如上面所说,数组只是定义在栈区的一个连续变量,它的首地址就是一个指针。
区别:数组是地址的常量,指针是保存地址的变量。
14、在编写程序的过程中,可能会出现程序编译错误或执行结果不正确等情况,为了有效的检查和分析错误原因,经常采用调试的方法。请写出至少2种常见的程序调试方法。
1、设置断点 2、分段隔离 3、跟踪打印 4、单步执行 5、查看变量
6、预定义使用
16、什么是全局变量和局部变量。给出局部变量的任意两种存储方式。
全局变量指在程序整个生命周期都占据内存的变量。
局部变量指在定义该变量的范围内可用的变量,仅在定义该变量的局部范围内起作用。
auto动态变量,默认是它,数据存储在动态存储区中。static:静态变量,在函数调用结束后不消失而保留原值,在下一次函数调用时,该变量已有值就是上次函数调用结束时的值。
17、简述C程序的编译过程。
1. 编译预处理
预编译程序所完成的基本上是对源程序的“替代”工作。经过此种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译成为机器指令。
2. 编译阶段
编译程序所要做的工作就是通过词法分析和语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇编代码。
3. 优化阶段
优化一部分是对中间代码的优化。这种优化不依赖于具体的计算机。另一种优化则主要针对目标代码的生成而进行的。经过优化得到的汇编代码必须经过汇编程序的汇编转换成相应的机器指令,方可能被机器执行。
4. 汇编过程
汇编过程实际上指把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码。
5. 链接程序
jetbrains折扣 链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来。
18、模块化程序设计思想,简述这种方法的策略和优点。
strcat函数使用方法模块化是结构化方法最基本的分解原则的具体应用它主要出现在结构化设计阶段中其目标是将系统分解成具有特定功能的若干模块从而完成系统指定的各项功能。
自顶向下逐层分解,是指在程序设计时,先考虑问题大的方面,在确定了主要方向后,再由表及里深入到问题具体的细节,由易到难,逐层解决问 题。这是一个由模糊到清晰,由概括到具体的过程。而逐步求精是在遇到复杂问题的时候,先设计一些子目标作为过渡,来逐步细化。
19、什么是剪枝函数?
回溯法搜索解空间树时,通常采用两种策略避免无效搜索,提高回溯法的搜索效率。其一是用约束函数在扩展结点处剪去不满足约束的子树;其二是用限界函数剪去得不到最优解的子树。这两类函数统称为剪枝函数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论