C程序设计(第三版)谭浩强习题答案全下mai(陈策提供)huan

上传人:飞*** 文档编号:50959764 上传时间:2018-08-11 格式:PDF 页数:79 大小:71.42KB
返回 下载 相关 举报
C程序设计(第三版)谭浩强习题答案全下mai(陈策提供)huan_第1页
第1页 / 共79页
C程序设计(第三版)谭浩强习题答案全下mai(陈策提供)huan_第2页
第2页 / 共79页
C程序设计(第三版)谭浩强习题答案全下mai(陈策提供)huan_第3页
第3页 / 共79页
C程序设计(第三版)谭浩强习题答案全下mai(陈策提供)huan_第4页
第4页 / 共79页
C程序设计(第三版)谭浩强习题答案全下mai(陈策提供)huan_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《C程序设计(第三版)谭浩强习题答案全下mai(陈策提供)huan》由会员分享,可在线阅读,更多相关《C程序设计(第三版)谭浩强习题答案全下mai(陈策提供)huan(79页珍藏版)》请在金锄头文库上搜索。

1、第 9 章 预处理命令9.1 定义一个代参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。解:# define SWAP(a,b) t=b;b=a;a=t main ( ) int a,b,t; printf(“ Input two integers a,b:” );scanf(“ %d,%d,” *a,*b);SWAP(a,b); printf(“ Now,a=%d,b=%dn” ,a,b); 运行结果如下:Input two integers a,b :3,4Now,a=4,b=3 9.2 输入两个整数,求它们相除的余数。用带参的宏来实现,编程序

2、。解:# define SURPLUS(a,b) a%b main ( ) int a,b; printf(“ Input two integers a,b:” );scanf(“ %d,%d” ,printf(“ Remember is %dn” ,SURPLUS(a,b); 运行结果如下:Input two integers a,b :60,13Remember is 8 9.3 三角形的面积为:area= 其中 s= (a+b+c),a,b,c 为三角形的三边。定义两个带参的宏,一个用来求s,另一个用来求 area。写程序,在程序中用带实参的宏名来求面积area。解:# include

3、# define S(a,b,c)(a+b+c)/2 # define AREA(a,b,c) sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(S(a,b,c)-c) main ( ) float a,b,c; printf( “ Input a,b,c:” );scanf(“ %f,%f,%f ” ,if (a+bc else printf(“ It is not a triangle!” ); 运行结果:Input a,b,c:3,4,5area:6.00 Input a,b,c:12,3,5It is not a triangle! 9.4 给年份 ye

4、ar定义一个宏,以判断该年份是否为闰年。提示:宏名可定义为LEAP_YEAR ,形参为 y,即定义宏的形式为:# define LEAP_YEAR(y) (读者设计的字符串) 在程序中用以下语句输出结果:if(LEAP_YEAR(year) printf(“ %d is a Leap year” ,year);else printf(“ %d is not a leap year” ,year);解:# define LEAP_YEAR(y) (y%4=0) printf(“nInput year:” );scanf(“ %d ” ,if (LEAP_YEAR(year) printf(“ %

5、d is a leap year. n” ,year);else printf(“ %d is not a leap year. n” ,year); 运行结果:Input year:19901990 is not a leap year. Input year:20002000 is a leap year. 9.5 请分析以下一组宏所定义的输出格式:# define NL putchar(, n?)# define PR (format,value) printf(“ value=%formatt ” ,(value)# define PRINT(f,x1) PR(f,x1);NL # d

6、efine PRINT(f,x1,x2) PR(f,x1);PRINT(f,x2) 如果在程序中有以下的宏引用:PR(d,x); PRINT1(d,x); PRINT2(d,x1,x2); 写出宏展开后的情况,并写出应输出的结果,设x=5,x1=3,x2=8 。解:展开后为:printf(“ value=%formatt ” ,x);printf(“ value=%formatt ” ,x); putchar(, n?);printf(“ value=%formatt ” ,x1); printf(“ value=%formatt ” ,x2);putchar(, n?);如果运行以下程序:#

7、 include # define NL putchar(, n?)# define PR (format,value) printf(“ value=%formatt ” ,(value)# define PRINT1(f,x1) PR(f,x1);NL # define PRINT2(f,x1,x2) PR(f,x1); PRINT1(f,x2) main ( ) float x=5.0,x1=3.0,x2=8.0; char d; PR(d,x); PRINT1(d,x) PRINT2(d,x1,x2); 输出结果如下:value=5.000000ormat value=5.000000

8、ormat value=3.000000ormat value=8.000000ormat 通过本习题可以看到:如果用 Turbo C, 则不能用这种方法将输出格式和输出项都作为参数。在宏替换时对字符串中的字符不予替换,一律保留原状。9.6 请设计输出实数的格式。实数用“6.2f”格式输出。解:# define PR printf # define NL “n”# define Fs “ %f”# define F“ %6.2f ”# define F1 F NL # define F2 F“t ” F NL# define F3 F“t ” F “t ” F NLmain ( ) float

9、 a,b,c; PR(“ Input three floating numbers a,b,c:n” );scanf(Fs, scanf(Fs, scanf(Fs, PR(NL); PR(“ Output one floating numbers each line:n” );PR(F1,a); PR(F1,b); PR(F1,c); PR(NL); PR(“ Output two floating numbers:n” );PR(F2,a,b); PR(F1,c); PR(NL); PR(“ Output three floating numbers:n” );PR(F3,a,b,c); 运

10、行情况如下:Input three floating number a,b,c :2.4 5.9 9.1Output one floating number each line :2.40 5.90 9.10 Output two floating numbers :5.90 9.10 Output three floating numbers :2.40 5.90 9.10 9.7 分别用函数和带参的宏,从3 个数中找出最大数。解: (1)用函数实现main ( ) int a,b,c; printf( “Enter three integers: ”); scanf(“ %d,%d,%d”

11、 ,printf(“ max=%dn” ,max(a,b,c); max (int x,int y,int z) int t; t=(xy? x:y); return(tz? t:z); 运行结果:Input three integers:12,34,9max=34 (2)用带参的宏实现# define MAX(a,b) (a)(b)? (a):(b) main ( ) int a,b,c; printf(“ Input three integers:” );scanf(“ %d,%d,%d” ,printf(“ max=%dn” ,MAX(MAX(a,b),c); 运行结果:Input th

12、ree integers:12,34,9max=34 9.8 试述“文件包含”和程序文件的连接(link )的概念,二者有何不同?解: “文件包含”是事先将程序中需要用到的信息分别存放在不同的“头文件”中(文件后缀为 .h) ,用户在编写程序时,利用 #include 命令将该头文件的内容包含进来,成为程序的一部分。 特别应当注意的是,该头文件与它所在的源文件共同组成一个文件模块(而不是两个文件模块)。在编译时它是作为一个文件进行编译的。连接则与此不同,它的作用是将多个目标文件连接起来。如果有两个或多个源程序文件,应先对它们分别进行编译,得到两个或多个目标文件(后缀为 .obj) ,在连接阶段

13、, 把这些目标文件与系统提供的函数库等文件连接成一个可执行的文件(后缀为.exe) 。9.9 用条件编译法实现以下功能:输入一行电报文字,可以任选两种输出:一为原文输出;一为将字母变成其下一字母(如a变成 b , z变成 a 。非字母的字符不变)。用 #define 命令来控制是否要译成密码。例如:# define CHANGE 1 则输入密码。若改为# define CHANGE 0 则不译成密码,按原码输出。解:# include “ stdio.h”# define MAX 80 # define CHANGE 1 main ( ) char strMAX; int i; printf(

14、“In” );gets(str); # if (CHANGE) for (i=0;i=?a? else printf(“ 不能构成三角形!“); 9.4 #define LEAP_YEAR(y) (y%4=0) printf(“n 请输入某一年:“); scanf(“%d“, if(LEAP_YEAR(year) printf(“%d 是闰年 .n“,year); else printf(“%d 不是闰年 .n“,year); 9.5 解:展开后 : printf(“ #118alue=%formatt“,x); printf(“ #118alue=%formatt“,x);putchar(n

15、); printf(“ #118alue=%formatt“);printf(“#118alue=%formatt“,x2);putchar(n); 输出结果 : #118alue=5.000000ormat #118alue=5.000000ormat #118alue=3.000000ormat #118alue=8.000000ormat 9.8 main() int a,b,c; printf(“ 请输入三个整数:“); scanf(“%d,%d,%d“, printf(“ 三个之中最大值为:%dn“,max(a,b,c); max(x,y,z) int x,y,z; int t; t

16、=(xy? x:y); return(tz? t:z); 9.10 #include #define MAX 80 #define CHANGE 1 main() char strMAX; int i; printf(“ 请输入文本行:n“); scanf(“%s“,str); #if(CHANGE) for (i=0;i if(stri!=0 if(stri=a if (n1n3) swap (p1,p3); if (n1n3) swap (p2,p3); printf(“ Now,the order is:%d,%d,%dn” ,n1,n2,n3); swap (int * p1,int * p2) int p; p=* p1;* p1= * p2;* p2=p; 运行结果Input three integer

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号