C语言简答题
1、C语言中,变量为何要先定义后使用?
凡是未被事先定义的不作为变量名,这就能保证程序中变量名使用得正确,便于编译时发现错误,避免变量名使用时出错。每个变量被指定一确定类型,在编译时就能为其分配相应的存储单元。指定每一个变量属于一个类型,便于在编译时据此检查该变量所进行的运算是否合法。
2、举例说明在C语言中如何定义符号常量,使用符号常量的优点?
#define 〈符号常量> 〈常量>
例如:#define AGE 35 #define M 1。9734067e9
优点:1)简化书写格式、减少出错率.2)定义符号常量可以提高程序的可读性,便于程序的调试和修改。3)符号常量不同于变量,在其作用域内不能被改变和重新赋值。4)习惯上人们把符号常量名用大写字母表示,变量用小写,以示区别。
3、字符串是以'\\0’结束的,存储一个字符串需要多少个字节?
如“ABC\"实际需要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)如果对全部元素都赋初值,则定义数组时可以不指定第一维的长度,
如:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
7、C语言中进行函数声明的作用是什么?
函数声明的作用是:把函数的名字、函数类型及形参类型、个数和顺序通知编译系统,
以便在调用该函数时系统按此进行对照和检查(例如,函数名是否正确,实参的类型和个数是否一致).
8、带参的宏与函数有什么区别?
1.函数调用,求出实参表达式的值,再带入形参.而宏只进行简单的字符替换。
2。函数调用是在程序运行时处理的,分配临时的内存单元;而宏展开则是在编译时进行的,在展开时并不分配内存单元,不进行值的传递处理,也没有“返回值”的概念。
3.对函数中的实参和形参都要定义类型,二者的类型要求一致,如不一致,应进行类型转换;而宏不存在类型问题,无类型,只是一个符号代表,展开时带入指定的字符即可。宏定义时,字符串可以是任何类型的数据。
4。调用函数只可得到一个返回值,而用宏可以设法得到几个结果。
#include 〈stdio。h> #define PI 3.1415926
#define CIRCLE(R,L,S,V) L=2*PI*R;S=PI*R*R;V=4。0/3.0*PI*R*R*R
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=%6。2f\\n\,l,s,v);}
5.使用宏次数多时,每展开一次都使程序增长,而函数调用不使源程序变长.
6。宏不占运行时间,只占编译时间;函数占运行时间(分配、保留、值传递、返回)。
9、C语言变量的存储特性可分几类?以及各类的特点?
四种:自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。
1。自动变量:函数中所有的非静态局部变量。其作用域仅仅局限于其定义的函数中,存储在动态存储区,在没有显式初始化的时候,其变量的值是随机无用的.随着函数的进栈和出栈而创建和销毁。
2。静态变量:在变量前加上static关键字的变量。存储在静态存储区,在没有显式初始化的时候会被初始化为0或者null,并且只初始化一次(初始化不等同于赋值)。长期存在静态存储区,直到程序结束
静态全局变量:作用域只是在其定义的源文件中有效,对外部变量起到了“屏蔽”的作用。静态局部变量:其作用域是其定义的函数中。
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、使用全局变量的优点和副作用是什么?
优点:所有函数之前定义的全局变量可被本文件中所有函数共用;全局变量的有效范围是它定义的位置到本源文件结束;全局变量增加了函数之间的联系通道;全局变量与局部变量重名时,在函数内部将屏蔽全局变量.
副作用:过多的全局变量时函数之间的“耦合性”增加,不利于程序的移植;过多的全局变量使程序的可读性变差;外部变量可加强函数模块之间的数据联系,但又使这些函数依赖这些外部变量,因而使得这些函数的独立性降低;从模块化程序设计的观点来看这是不利的,因此不是非用不可时,建议不要使用外部变量;全局变量在程序执行的全过程都占用存储单元.
13、指针有哪些运算?以及指针编程的优点?
算术运算、关系运算、赋值;
提高程序的编译效率和执行速度;可向调用函数处返回除正常的返回值之外的其他数
据,从而实现两者间的双向通信;利用指针可以实现动态内存分配;直接操纵内存地址;更容易实现函数的编写和调用.
14、C语言中,*(星号)运算符有几种用途?并分别举例说明。
指针符号;乘法运算符;字符;注释。
因篇幅问题不能全部显示,请点此查看更多更全内容