题目: 9.1定义一个带参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值
- 代码
#include <stdio.h>
#define SWAP(a,b)t=a;a=b;b=t;
int main(){
int x,y,t;
scanf("%d%d",&x,&y);
SWAP(x,y);
printf("%d %d",x,y);
return 0;
}
- 运行结果
题目:9.6请设计输出实数的格式,实数用"%6.2f"格式输出。要求:
(1)一行输出1个实数
(2)一行内输出2个实数
(3)一行内输出3个实数
- 代码实现
#include <stdio.h>
#define PRINTF printf
#define NL printf("\n");
#define PT1(a) PRINTF("%6.2f",a); //一行输出一个
#define PT2(a,b) PT1(a) PRINTF("%6.2f",b); //一行输出两个
#define PT3(a,b,c) PT2(a,b) PRINTF("%6.2f"); //一行输出三个
int main(){
float a,b,c;
PRINTF("输入a,b,c三个数:\n");
scanf("%f%f%f",&a,&b,&c);
PT1(a);
NL
PT1(b);
NL
PT1(c);
NL
PT2(a,b);
NL
PT1(c);
NL
PT3(a,b,c);
NL
return 0;
}
- 运行结果
题目:9.8分别用函数和带参数的宏,从3个数中找出最大值
- 代码实现
#include <stdio.h>
#define MAX(a,b,c) (a>b ? (a>c ? a : c) : (b>c ? b : c))//注意三目运算
int max();
int main(){
int a,b,c,ans;
scanf("%d%d%d",&a,&b,&c);
// ans=max(a,b,c);//函数的调用
printf("%d",MAX (a,b,c));
return 0;
}
int max(int a,int b,int c){
int ans=b;
if(a>b){
ans=a;
}
if(ans<c){
ans=c;
}
return ans;
}
- 运行结果
题目:9.10 用条件编译方法实现以下功能
输入一行电报文字,可以任选两种输出:一为原文输出;一为将字母变成其下一字母(如’a’变成’b’,…,‘z’变成’a’),其他非字母字符不变,用#define命令来控制是否要编译成密码。例如:
#define CHANGE 1
则输出密码。若
#define CHANGE 0
则不编译密码,按原码输出。
- 代码实现
#include <stdio.h>
#define CHANGE 1//可以修改为0
int main(){
char str[20];//保存字符串
int i;
printf("输入一行字符串:\n");
gets(str);
printf("输出字符串:\n");
if(CHANGE){//根据宏进行判断,CHANGE==1
for(i=0;i<20;i++){
if(str[i]!='\0'){
if(str[i]>='a'&&str[i]<'z'||str[i]>='A'&&str[i]<'Z'){
str[i]++;
}else if(str[i]=='z'||str[i]=='Z'){
str[i]-=25;
}
}
}
}
printf("%s",str);//输出结果
}
- 运行结果