习题解答
else
bonus=bonus10+(i-1000000)*0.01; printf(\}
习题十二
12.1 12.2 12.3
C C
写出下列程序段的运行结果。
(1)15
分析:在带参数宏声明中,宏展开后的赋值语句为k=10* (i)<(j)?(i):(j);由于*的优先级比<高,条件表达式的条件判断过程是:先计算10*i的结果,再与j值比较。由于10*10大于15,所以条件表达式取y的值,即15。 (2)7
-6
分析:宏展开后的语句为: a=5+1;
printf(\printf(\
第一个输出语句中的表达式值为7,第二个输出语句中a的值是6。 (3)9
分析:在宏声明PRINT(a)中使用已经声明的宏PR(a)。本题宏PRINT的实参是F(3)*x,包含了一个宏F,由于宏替换是直接照字符原样替换,替换后实参成为:3.84+3*x,用它来替换宏PRINT(a)中的a, 得到语句:printf(\ 3.84+3*x))。表达式的值是9.84,取整输出为9。 (4)c=15
分析:由于标识符DEBUG已在文件开始被#define命令声明过,主程序不执行第一个printf语句。 12.4
编写程序实现求a+b+c的值,要求使用宏。
2
2
2
分析:声明一个带参的宏S(x,y,z),在主函数调用并输出。
#include
#define S(x,y,z) ((x)*(x)+(y)*(y)+(z)*(z)) void main() { int a,b,c;
scanf(\ printf(\
习题解答
}
12.5 声明一个带参的宏 swap(x,y),实现两个整数的互换,并利用它将一维数组 a 和 b 的值进行交换。
分析:声明带参的宏 swap(x,y),注意宏中包含多个语句,在主函数的循环中调用它来实现数组值的交换。 #include
#define Swap(x,y) {t=x; x=y; y=t;} #define N 3 void main() { int a[N],b[N]; int i,t;
for(i=0;i scanf(\ %d\ for(i=0;i } Swap(a[i],b[i]); printf(\ %d\ for(i=0;i 12.6 设x=3.4,y=2.0,z=9.1,请写出一个宏Prin(x,y,z),要求此宏能输出如下: x = 3.4 y = 2.0 z = 9.1 分析:用宏来定义好输出格式,实数采用“%4.1f”的输出格式,每输出一个变量后换行。 #include #define Prin(x,y,z) printf(\ void main() { float a,b,c; scanf(\ Prin(a,b,c); } 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C练习答案(4、12章)(2)在线全文阅读。
相关推荐: