1 源程序的编译及链接是怎样一个过程?
2编写第一个简单的C语言程序
3 C语言是强类型的语言,这是什么意思?任何程序都要处理数据,计算机可以处理的数据有多种类型。在C语言程序中,用来保存数据的变量必须事先定义才能在程序中使用。定义变量的语法如下:变量类型名 变量名表;例如,以下语句定义了x、y、z三个变量名,其值只能取整型值:int x,y,z;在C程序中,每一个变量都必须声明其取值类型。因此,C语言是一种强类型的程序设计语言。对于程序中使用到的常量、变量的类型要事先进行定义才能使用,这是保证程序可靠性的手段之一。早期的一些计算机程序设计语言不要求对变量的类型进行定义,因此,一个变量的类型在程序运行期间是不确定的,这将会降低程序的可靠性。4 如何理解变量与常量?变量与常量相当于数据的可读可写与只读,常量是数据的一种保护机制。在内存分配给程序的内存块中有专门的常量(只读)存储区。5 如何正确理解和使用赋值运算符?赋值运算符“=”连接的是左边的变量和右边的表达式,把表达式的值赋值给左边的变量。赋值运算符的优先级比较低,只在逗号运算符之前。一个赋值表达式中可以包含多个赋值表达式,赋值表达式的值就等于左边变量的值,在不加圆括号的情况下,赋值运算符按“从右至左”的结合顺序运算。由于赋值运算符的优先级比较低,如果出现在其他表达式中需要优先运算,则要加圆括号。赋值运算符“=”连接的是左边的变量和右边的表达式,当变量和表达式的数据类型不一致时,会产生什么样的结果?C语言赋予了赋值表达式类型转换的功能,一旦出现变量和表达式的数据类型不一致的情况,会自动进行类型的转换,将表达式的值向变量类型的方向进行转换。当然,也不是所有不匹配的类型都可以转换,类型转换有一定的前提,必须是相近的、可以转换的类型才能进行转换。
6 为什么表达式1/2的值为0?在以下的代码段中,变量x的值为0:float x;x=1/2;变量x虽然被定义为单精度浮点型,但以上代码执行后,x的取值为0,而不是0.5。这是因为在计算表达式1/2时,由于1和2都是整型常量,计算的结果就只能取整数部分,故为0。为了防止这种情况出现,可以使用以下两种方法:(1)使用1.0表示被除数是一个浮点型数据,即x=1.0/2。(2)使用强制类型转换,即(float)1/2。强制类型转换是使用显式表达将一种数据类型转换为另一种数据类型,其格式为:(类型名)表达式7 字符型数据与整型数据、浮点型数据为什么可以直接运算?字符型数据用于表示ASCII字符。由于ASCII字符在内存中是以ASCII编码的形式存储的,因此可以将字符型数据看作一个整数与整型数据、浮点型数据直接进行算术运算,而这在其他的计算机语言中是不允许的。例如以下的代码段:int x=32;char y=’A’;int z=y x;以上代码执行后,变量z的值为97。8 如何理解逗号运算符和逗号表达式?逗号表达式是C语言中特有的一种运算符。在C语言的所有运算符中,逗号运算的优先级最低。逗号运算符使用逗号将多个表达式连接起来,按照从左到右的顺序依次计算其中的各个表达式的值,整个逗号表达式的值是最右端即最后计算的表达式的值。逗号表达式常用于在一条语句中连续完成多个计算或操作。例如,t=x;x=y;y=t;将会被作为三条语句处理,而t=x,x=y,y=t;则将被当作是一条语句处理。由于逗号运算符是C语言中优先级最低的运算符,当表达式中含有逗号运算符时,应特别注意运算符的优先级顺序。例如:int x=3,y;y=1,x 执行后x=4,y=1。而:int x=3,y;y=(1,x );执行后,y=3,x=4。9 整型数据的溢出问题任何一种数据类型的数据在计算机中都有它确定的数值表示范围,一旦超出这个范围,就会产生溢出问题。10 对于浮点型数据执行相等比较为什么有时会出现问题?在C语言中,只有整型数据和字符型数据是精确表示的。浮点型数据采用的是指数表示形式,数据的有效位数是有限的,因此浮点型数据是不精确的。对于浮点型数据进行相等比较时,有时两个相等的数进行比较也有可能出现不相等的情况。为了解决浮点数相等比较时的误差问题,可以规定当两个数相减之后的绝对值小于一个足够小的数时即认为它们相等。11 没有初始化的变量的初始值是什么?如果该变量是静态存储类型的变量,系统编译时会自动地赋初值0(对数值型变量)、空字符(对字符变量)、或者空指针(对指针型变量);而如果变量是动态存储类型,则在没有赋初值的情况下,将会有一个不确定的值(垃圾值,单元格使用过后遗留下的历史值)充当其初值,这是非常危险的,尤其是对于一个不确定的指针来说,修改它所指向存储单元的值可能会造成巨大危害。因此,一般都要求程序员为变量赋予合理的初值。12 C语言中逻辑值1和0是如何判断的?C语言中,一般在进行逻辑运算时,将所有非零值都作为1,也就是逻辑真;而只有本身为0的值才当做0,也就是逻辑假参加判断。13 求解逻辑表达式时“有解即停”(短路求值)是什么意思?当需要判断多个条件同时成立或至少有一个成立时,需要使用逻辑运算符&&和||。表达式A && B表示当A与B均为真时,条件为真;表达式A || B表示当A与B至少一个为真时,条件为真。当求解 A && B时,只要A为假则整个表达式一定为假,此时不需要求解表达式B。而对于表达式 A || B,只要表达式A为真,则整个表达式一定为真,此时不需要求解表达式B。14 switch语句是如何执行的?C语言中的switch语句用于处理多分支的判断问题。在switch语句中的多种分支情况中,只要找到了一个与表达式值匹配的case分支,则从此位置开始顺序执行,除非遇到break语句或switch语句结束。当没有任何一个case与表达式的值相匹配时,则执行default分支中的语句,但这并不意味default分支必须位于switch语句的所有case分支之后,而是可以位于switch语句中的任何位置。同样,如果在default分支中没有break语句,则程序仍将顺序执行。在switch语句中,case只是一个语句标号,它并不进行条件判断。因此,在switch语句执行时,会根据switch后面表达式的值找到匹配的入口标号,然后从这个标号(也就是向对应的case)处开始执行下去,不会再进行条件判断。15 在C程序中使用goto语句是不是有百害而无一利?goto语句是C语言中的一个控制程序跳转的语句,很多书上都说要慎用,因为无限制的使用goto语句,可能会造成整个程序的混乱,连程序员自己都会无法判断程序的运行流程。但是,这并不表示使用goto是一个有百害而无一利的事情。事实上,这只是一个程序设计风格的问题,goto本身确实是一个简洁明了的语句,适当的使用其实并无害处,当然,不能在一个程序中过多的使用它,尤其是出现过多嵌套使用的情况,那样就真的会出现有百害而无一利的情况。通过跳转语句,能更好地理解循环语句的实质:
-END-
猜你喜欢