| 
第九章  预处理
1. 单项选择题 
(1)【答】D 
(2)【答】C 
(3)【答】D 
(4)【答】D 
(5)【答】D 
(6)【答】D 
(7)【答】B 
(8)【答】B 
(9)【答】C 
(10)【答】D 
2. 填空题 
(1)【答】a=9 a=9 a=11 
(2)【答】10 
(3)【答】x=93 
(4)【答】a=3,b=7,c=5 
3.
 编程题 
(1)编写一个宏定义AREA(a,b,c),用于求一个边长为a、b和c的三角形的面积。其公式为:s=(a+b+c)/2 
【解】对应的宏如下: 
#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))) 
(2)编写一个程序,定义一个判断字符是大写字母的宏,一个判断字符是小写字母的宏以及实现大小写字母相互转换的宏,并将用户输入的一个字符串中的大小写字母互换。 
【解】判断为大写字母的宏是isupper(c),判断为小写字母的宏是islower(c),将大写字母转换为小写字母的宏是tolower(c),将小写字母转换为大写字母的宏是toupper(c)。程序如下: 
#include
<stdio.h> 
#define
isupper(c) ((c)>='A'
&&
(c)<='Z') 
#define
islower(c) ((c)>='a'
&&
(c)<='z') 
#define
tolower(c) (isupper(c) ? ((c)+('a'-'A')):(c)) 
#define
toupper(c) (islower(c) ? ((c)-('a'-'A')):(c)) 
main() 
{ 
    char
s[20]; 
    int
i; 
   
printf("输入字符串:"); 
   
scanf("%s",s); 
    for
(i=0;s[i];i++) 
       
if (isupper(s[i])) 
           
s[i]=tolower(s[i]); 
       
else if (islower(s[i])) 
           
s[i]=toupper(s[i]); 
   
printf("转换的结果:%s\n",s); 
} 
(3)编写一个程序,用户输入一个字符串,可以原样输出,也可以逆序输出。使用条件编译的方法加以控制。 
【解】程序如下: 
#include
<stdio.h> 
#define
CONVERSE 
main() 
{ 
    char
str[50],*p=str; 
   
printf("输入一字符串:"); 
   
scanf("%s",str); 
   
printf("输出结果:"); 
    #ifndef
CONVERSE 
   
   
printf("%s\n",str);
   
    
   
#else 
   
    while
(*p++!='\0');
   
    
   
   
p-=2; 
   
    while
(p>=str) 
       
   
printf("%c",*p--); 
   
   
printf("\n"); 
   
#endif 
} |