1.由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义()
A.预处理
B.编译
C.链接
D.执行
C。在链接阶段,会将各个目标文件以及所需的库进行组合和关联,如果存在被调用的函数未定义,在链接时就会发现这个问题,因为无法找到该函数的具体实现来完成链接过程。预处理主要处理宏等操作;编译阶段主要进行语法检查和生成目标代码,但对于跨文件的函数调用是否定义的检查主要在链接阶段;执行阶段是程序运行阶段,到这个时候发现就太晚了。所以选 C。
2.设有以下宏定义:
#define N 3+1 #define Y(n) ((N+1)*n)
则执行语句z=2*(N+Y(5+1))后,z的值为()
A.60
B. 190
C.248
D.上述答案都不对
先计算 Y(5+1),Y(5+1)展开为 ((N+1)*5+1),即 ((4+1)*5+1)=(5*5+1)=26。
然后计算 N+Y(5+1)=4+26=30。
最后计算 z=2*(N+Y(5+1))=2*30=60。
3.char a; int b; float c; double d 则表达式a*b+d-c值的类型为()
A. float
B. int
C. char
D.double
D。在进行混合运算时,会进行类型转换,转换的规则是向精度更高的数据类型转换。char 类型会自动提升为 int 类型参与运算,int 与 double 运算时结果会转换为 double 类型,float 与 double 运算时也会转换为 double 类型,所以最终表达式 a*b+d-c 的值的类型为 double 类型。
4. 厘米换算英尺英寸
#include <stdio.h> int main() { int cm; scanf("%d", &cm); double meters = cm / 100.0; double feet = meters / 0.3048; int foot = (int)feet; double inch = (feet - foot) * 12; printf("%d %d\n", foot, (int)inch); return 0; }
1. 首先从用户处获取以厘米为单位的数值。
2. 将厘米转换为米(除以 100),然后根据公式将米转换为英尺(除以 0.3048),得到一个包含小数部分的英尺值。
3. 通过强制类型转换获取英尺的整数部分,这就是英尺的整数值。
4. 用英尺值减去其整数部分得到小数部分,再乘以 12 将其转换为英寸,同样通过强制类型转换获取英寸的整数部分。
5. 最后输出得到的英尺整数值和英寸整数值。