《C程序设计》(谭浩强著)课后答案下载
《c程序设计》是2010年清华大学出版社出版的图书,作者是谭浩强。以下是由阳光网小编整理关于《C程序设计》(谭浩强著)课后答案下载地址,希望大家喜欢!
《C程序设计》(谭浩强著)课后答案预览
9.1定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。
#define CHANGE(a,b,t) t=a;a=b;b=a
main()
{int c,d,s;
scanf("%d,%d",&c,&d);
CHANGE(c,d,s);
printf("c=%d,d=%d\n",c,d);
}
9.2输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。
#define Q(a,b) a%b
main()
{int c,d,t;
scanf("%d %d",&c,&d);
t=Q(c,d);
printf("t=%d\n",t);
}
9.3三角形面积为:
其中S=(a+b+c)/2,a、b、c为三角形的三边。定义两个带参的宏S,一个用来求area,另一个宏用来求。写程序,在程序中用带实参的宏名来求面积area。
#include"math.h"
#define SSS(m,n,k) (m+n+k)/2
#define AQRT(m,n,k) sqrt(SSS(m,n,k)*(SSS(m,n,k)-m)*(SSS(m,n,k)-n)*(SSS(m,n,k)-k))
main()
{float a,b,c,s,area;
scanf("%f %f %f",&a,&b,&c);
s=SSS(a,b,c);
area=AQRT(a,b,c);
printf("s=%.3f area=%.3f\n",s,area);
}
或
#include"math.h"
#define SSS(m,n,k) (m+n+k)*0.5
#define AQRT(m,n,k) sqrt(((m+n+k)/2)*((m+n+k)/2-m)*((m+n+k)/2-n)*((m+n+k)/2-k))
main()
{float a,b,c,t,area;
scanf("%f %f %f",&a,&b,&c);
t=SSS(a,b,c);
area=AQRT(a,b,c);
printf("t=%.3f;area=%.3f\n",t,area);
}
或
#include"math.h"
#define SSS(m,n,k) ((m+n+k)/2)
#define AQRT(m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k,m,n,k) sqrt(SSS*(SSS-m)*(SSS-n)*(SSS-k))
main()
{float a,b,c,t,area;
scanf("%f %f %f",&a,&b,&c);
t=SSS(a,b,c);
area=AQRT(a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c,a,b,c);
printf("t=%.3f;area=%.3f\n",t,area);
}
9.4给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为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 LEAPYEAR(y) y%4
main()
{int y;
scanf("%d",&y);
if(LEAPYEAR(y)) printf("%d is a not leap year\n",y);
else printf("%d is a lear year\n",y);
}
9.6请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用"6.2f"格式输出。
#define PR1(x) printf("%6.2f\n",x)
#define PR2(x) printf("%6.2f\t%6.2f\n",x,x)
#define PR3(x) printf("%6.2f\t%6.2f\t%6.2f\n",x,x,x)
main()
{float a;scanf("%f",&a);
PR1(a);PR2(a);PR3(a);
}
9.7设计所需的各种各样的输出格式(包括整数、实属、字符串等),用一个文件名"fornat.h",把信息都放到这个文件内,另编一个程序文件,用命令#include "fornat.h"以确保能使用这些格式。
分别用函数和带参的宏,从三个数中找出最大的数。
#define MAX(a,b,c) (a>((b>c)? b:c))? a:((b>c)? b:c)
main()
{float x,y,z,t;
scanf("%f,%f,%f",&x,&y,&z);
t=MAX(x,y,z);
printf("%.4f\n",t);
}
9.10用条件编译方法实现以下功能:
输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如’a’变成’b’……’z’变成’a’其它字符不变)。用命令来控制是否要译成密码。例如:
#define CHANGE 1
则输出密码。若:
#define CHANGE 0
则不译为密码,按原码输出。
#define CHANGE 1
main()
{char str[80],c;int i=0;
gets(str);
while(str[i]!=’\0’)
{
#if CHANGE
if(str[i]==90||str[i]==122) str[i]=str[i]-25;
else if(str[i]>=65&&str[i]<90||str[i]>=97&&str[i]<122) str[i]=str[i]+1;
#endif
i++;
}
puts(str);
}
或
#define CHANGE 1
main()
{char str[80],*c;int i=0;
gets(str);c=str;
while(*c!=’\0’)
{
#if CHANGE
if(*c==90||*c==122) *c=*c-25;
else if(*c>=65&&*c<90||*c>=97&&*c<122) *c=*c+1;
#endif
c++;
}
puts(str);
}
【《C程序设计》(谭浩强著)课后答案下载】相关文章: