您的当前位置:首页正文

C语言简答题

2022-06-15 来源:知库网


C 语言简答题

1、

C语言中,变量为何要先定义后使用?

凡是未被事先定义的不作为变量名,这就能保证程序中变量名使用得正 确,便于编译时发现错误,避免变量名使用时出错。每个变量被指定一确定类 型,在编译时就能为其分配相应的存储单元。指定每一个变量属于一个类型, 便于在编译时据此检查该变量所进行的运算是否合法。

2、 举例说明在C语言中如何定义符号常量,使用符号常量的优点?

#define <符号常量 > <常量 >

例如: #define AGE 35#define M 1.9734067e9

优点: 1)简化书写格式、减少出错率。 2)定义符号常量可以提高程序的 可读性,便于程序的调试和修改。 3)符号常量例外于变量,在其作用域内不能 被改变和从头赋值。 4)习惯上人们把符号常量名用大写字母表示,变量用小 写,以示区别。

3、 字符串是以 “0“结束的,存储一个字符串需要多少个字节?

如“AB(”际需要3+1个字节来存储这个字符串常量。

4、 while{}和do{ }while两种循环结构的相同点和例外点是什么?

do-while 语句和 while 语句的区别在于 do-while 是先执行后判断,因此 do- while 至少要执行一次循环体。而 while 是先判断后执行,如果条件不满足,则 一次循环体语句也不执行。 while 语句和 do-while 语句大凡都可以相互转换。

5、 C语言中,什么基本数据类型不能做 switch()的参数?

只能针对基本数据类型使用 switch,这些类型包括int、char等。对于其他 类型如 long /float /double ,则必须使用 if 语句。

6、 二维数组的定义和初始化的正确形式有哪些?

1)分行,如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

2) 按数组排列的顺序将所有数据写在一个花括号内,

女口: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

3) 部分元素初始化。如: int a[3][4]= {{,1},{0,6},{0,0,11}};

4) 如果对全部元素都赋初值,则定义数组时可以不指定第一维的长度,

1/ 5

如: int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

7、 C语言中进行函数声明的作用是什么?

函数声明的作用是:把函数的名字、函数类型及形参类型、个数和顺序通 知编译系统,以便在调用该函数时系统按此进行对照和检查(例如,函数名是 否正确,实参的类型和个数是否一致)。

8、 带参的宏与函数有什么区别?

1. 函数调用,求出实参表达式的值,再带入形参。而宏只进行简单的字符替 换。

2. 函数调用是在程序运行时处理的,分配临时的内存单元;而宏展开则是在 编译时进行的,在展开时并不分配内存单元,

不进行值的传递处理,也没有 回值”的概念。

3. 对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致, 应进行类型转换;而宏不存在类型问题,无类

型,只是一个符号代表,展开时 带入指定的字符即可。宏定义时,字符串可以是任何类型的数据。

4. 调用函数只可得到一个返回值,而用宏可以设法得到几个结果。

#include #define PI 3.1415926

void main(){float r,l,s,v;scanf( “ %f“ ,&r);

CIRCLE(r,l,s,v);

printf( “r=%6.2f,l=%6.2f,s=%6.2f,v=%n6“.2,fr,l,s,)v;}

5. 使用宏次数多时,每展开一次都使程序增长,而函数调用不使源程序变 长。

6. 宏不占运行时间,只占编译时间;函数占运行时间(分配、保留、值传 递、返回)。

9、C语言变量的存储特性可分几类?以及各类的特点?

四种:自动变量(auto)、静态变量(static)、外部变量(extern)以及寄 存器变量( register)。

1. 自动变量:函数中所有的非静态局部变量。其作用域仅仅局限于其定义的 函数中,存储在动态存储区,在没有显式初始

化的时候,其变量的值是随机无 用的。随着函数的进栈和出栈而创建和销毁。

2、 静态变量:在变量前加上 static 关键字的变量。存储在静态存储区,在没 有显式初始化的时候会被初始化为 0 或者 n u

ll ,并且只初始化一次(初始化不等 同于赋值)。长期存在静态存储区,直到程序结束

静态全局变量:作用域只是在其定义的源文件中有用,对外部变量起到了 “屏蔽”的作用。静态局部变量:其作用域是其定义

2/ 5

的函数中。

3、 外部变量:大凡用作全局变量作用域的扩展。把全局变量在其他源文件 中声明成 extern 变量,可以扩展该全局变量的

作用域至声明的那个文件,其本 质作用就是对全局变量作用域的扩展。长期存在静态存储区,直到程序结束。

4、 寄存器变量:大凡经常被使用的的变量(如某一变量需要计算几千次)

可以设置成寄存器变量,register变量会被存储在寄存器中,计算速度远快于存 在内存中的非register变量。存储在cpu的寄存器中,速度快,大凡不需要程序 员定义寄存器变量,这是由于一些编译器会把需要参加很多次计算的变量转化 成寄存器变量,不允许程序员对寄存器变量的地址进行操作。离开函数值就会 消失。

10、C语言中,动态存储区主要存放哪些数据?

动态存储区中存放以下数据:函数的形参;函数调用时的现场保护和地址 等; auto/register 型局部变量。对以上数据,当进行函数调用时分配动态存储空 间,当函数调用结束时,释放这些存储单元。

在程序的执行过程中,这种分配和释放是动态的。

11、 static 声明有什么用途 (请至少说明两种 )?static 全局变量与普通的全局 变量有什么区别? static 局部变量和普通局部变量有什么区别? static 函数与普 通函数有什么区别?

1. 限制变量的作用域;设置变量的存储域;

2. 全局变量的说明之前再加以 static 就构成了静态的全局变量。全局变量本 身就是静态存储方式,静态全局变量当然也是

静态存储方式。这两者在存储方 式上并无例外。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有 用的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有 用,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局 限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文 件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了 它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它 的作用域,限制了它的使用范围;

3. static 局部变量只被初始化一次,下一次依据上一次结果值;

4. static 作用域仅在本文件。只在当前源文件中使用的函数应该说明为内部 函数(static),内部函数应该在当前源文件中

说明和定义。对于可在当前源文件以 外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这 个头文件。

static 函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝程序 的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据 存在于(堆)中。

12、使用全局变量的优点和副作用是什么?

优点:所有函数之前定义的全局变量可被本文件中所有函数共用;全局变 量的有用范围是它定义的位置到本源文件结束;全局

3/ 5

变量增加了函数之间的联 系通道;全局变量与局部变量重名时,在函数内部将屏蔽全局变量。

副作用:过多的全局变量时函数之间的 “耦合性 ”增加,晦气于程序的移 植;过多的全局变量使程序的可读性变差;外部变量可加强函数模块之间的数 据联系,但又使这些函数依赖这些外部变量,因而使得这些函数的独立性降 低;从模块化程序设计的观点来看这是晦气的,因此不是非用不可时,建议不 要使用外部变量;全局变量在程序执行的全过程都占用存储单元。

13、指针有哪些运算?以及指针编程的优点?

算术运算、关系运算、赋值;

提高程序的编译效率和执行速度;可向调用函数处返回除正常的返回值之 外的其他数据,从而实现两者间的双向通信;利用指针可以实现动态内存分 配;直接操纵内存地址;更简易实现函数的编写和调用。

14、C语言中,*(星号)运算符有几种用途?并分别举例说明。

指针符号;乘法运算符;字符;注释。

4/ 5

因篇幅问题不能全部显示,请点此查看更多更全内容