题目 1036:
[编程入门]带参数宏定义练习
时间限制: 3s 内存限制: 192MB 提交: 16515 解决: 13587
题目描述
定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。
输入格式
两个数,空格隔开
输出格式
交换后的两个数,空格隔开
样例输入
复制
1 2
样例输出
复制
2 1
实现代码:
#include <stdio.h>
#define Swap(x,y) (t=x,x=y,y=t)
//等价于#define Swap(x,y) t=x,x=y,y=t;
//感觉带参宏定义有点像函数
int main(void)
{
int m,n,t;
//t的定义在主函数中,不要在宏定义时定义t
scanf("%d%d",&m,&n);
Swap(m,n);
printf("%d %d",m,n);
return 0;
}
错误原因:
1.#define Swap(x,y) (t=x,x=y,y=t)//等价于#define Swap(x,y) t=x,x=y,y=t;
这里格式忘记了,导致错误
题目 1041:
[编程入门]宏定义之找最大数
时间限制: 3s 内存限制: 192MB 提交: 15338 解决: 11470
题目描述
分别用函数和带参的宏,从三个数中找出最大的数。
输入格式
3个实数
输出格式
最大的数,输出两遍,先用函数,再用宏。 保留3位小数。
样例输入
复制
1 2 3
样例输出
复制
3.000 3.000
实现代码:
#include <stdio.h>
#include <math.h>
#define Mix(a,b,c) c>(max=(a>b?a:b))?c:max
//主要是判断的表达式要写出来就好说了
double Max(double x,double y,double z)
{
double max;
if(x>y)
max=x;
else
max=y;
if(z>max)
max=z;
return max;
}
int main(void)
{
double x,y,z;
double max;
scanf("%lf%lf%lf",&x,&y,&z);
printf("%.3lf\n",Max(x,y,z));
printf("%.3lf",Mix(x,y,z));
return 0;
}