C语言编程题

如下宏定义。求s1、s2值,请附步骤∶
#define MAX(x,y) (x)>(y) ? (x):(y)
#define T(x,y,r) x*r*y/4
main()
{
int a=1,b=3,c=5,s1,s2;
s1=MAX(a=b,b-a);
s2=T(a++,a*++b,a+b+c);
}
注∶参阅答案,s1=3、s2=28。

宏是直接替换之后,再进行编译的,替换发生在预编译阶段
由于:

#define MAX(x,y) (x)>(y) ? (x):(y)
#define T(x,y,r) x*r*y/4
把下面的式子,直接替换掉,注意,是直接替换:
main()
{
int a=1,b=3,c=5,s1,s2;
s1=(a=b)>(b-a)? (a=b):(b-a); //s1=MAX(a=b,b-a);
s2=a++ * a+b+c * a*++b /4; //s2=T(a++,a*++b,a+b+c);
}
直接替换后:
main()
{
int a=1,b=3,c=5,s1,s2;
s1=(a=b)>(b-a)? (a=b):(b-a);
s2=a++ * a +b+ c*a*++b/4;
}
s1: (a=b) 把b的值赋给a,所以a变成3,整个式子的值为3
(b-a)a和b的值一样,都是3,所以值为0
(a=b)>(b-a)成立
s1=(a=b)=b=3;
s2: a的++自增运算在a后面,b的自增在前面,所以式子相当于:
b++;
s2=a * a+b+c*a*b/4;
a++;
b原值为3,自增b++后,值为4
注意由于求s1,a的值已经变成了3
s2式子中a为原值运算,所以s2=3*3+4+3*4*5/4=13+15=28
然后再运行a++,最后a的值变成了4
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-04-04
#define MAX(x,y) (x)>(y) ? (x):(y)
#define T(x,y,r) x*r*y/4
改成
#define MAX((x),(y)) (x)>(y) ? (x):(y)
#define T((x),(y),(r)) (x)*(r)*(y)/4
望采纳

请编程c语言:求出555555的约数中最大的三位数是多少?
通过C语言编程解决求解555555的约数中最大的三位数问题,我们首先需要理解题目的实质。题目要求我们找出555555这个数的所有约数中,最大的三位数。为了实现这个目标,我们可以编写一个程序,从1000开始循环减小,直到100为止,逐个检查当前的循环变量i是否能整除555555。如果能整除,则输出该数并结束循环。下...

大学福音经典编程题适用于专升本
24.给数组删除重复的元素 25.C语言编程题求1! + 2! + 3! + 4!...+N 26.C语言编程题求斐波那契数(循环法与递归法 27.C语言编程输入n,k求n的k次幂(递归与非递归)28.(递归)输入一个数,把他的每一位相加在输出出来;29,实现函数把字符数组的元素逆序 如“abc“,逆序成“cba“30.递归...

c语言for循环例题
c include int main { int i;for { printf;} return 0;} 解释:for循环的基本结构 C语言中的for循环具有特定的语法结构,通常包括初始化声明、循环条件和更新表达式。其基本形式为:c for { \/\/ 循环体 } 本题中的for循环分析 在给出的例子中,我们使用了for循环来打印数字1到10。这里,`i`...

请用C语言帮我完成一道编程题
在进行编程题解答时,首先请根据说明输入一个整数。程序将提示您输入一个整数。请确保输入的整数大于1,以确保接下来的计算能够进行。接着,程序将检查输入的整数是否小于2。如果是,程序会输出一条提示信息,并立即终止。在确认输入的整数大于1之后,程序将开始对整数进行验证。它会从2开始,逐步递增到整...

急 两道基本C语言编程题
在C语言编程中,你可能会遇到两种基本问题:一个涉及数组排序,另一个涉及数组转置。首先,我们来看一下排序问题。这里的伪代码要求确保数组`a`中第一个元素大于第二个元素。如果`a[0]`小于`a[1]`,程序将交换它们的位置。如果`a[0]`大于`a[1]`,但`a[0]`小于`a[i]`,并且`a[i]`大于...

10道经典的C语言例题(含参考程序)
1.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一个“水仙花数”,因为153=1^3+5^3+3^3。include include int main(){ int bai_wei,shi_wei,ge_wei,i,sum=0;for(i=100;i<1000;i++){ bai_wei=i\/100;shi_wei=(i%100)\/...

c语言小题目。急急急
五、编程题 1. 编程实现:从键盘上接收10个整数,并对其进行排序(要求排成升序)main(){int a[10],i,j,k,t;for(i=0;i<10;i++) scanf("%d",&a[i]);for(i=0;i<9;i++){k=i;for(j=i+1;j<10;j++)if(a[j]<a[k]) k=j;if(k!=i){t=a[k];a[k]=a[i]; a...

如何使用c语言编程最简单的算术题?
include<stdio.h> int main(){ int a,b,c,max;printf("请输入三个数:\\n");scanf("%d%d%d",&a,&b,&c);if(a>b)max=a;if(c>max)max = c;printf("三个数中最大的数为:%d",max);return 0;}

c语言编程题?
2020-06-15 C语言编程题? 2020-05-27 C语言编程题? 2018-01-29 C语言编程题 2020-04-06 C语言编程题? 1 更多类似问题 > 为你推荐: 特别推荐 男子婚检查出是“女性”,婚检到底能查出什么? 神舟13号此次任务达成了哪些目的? 一分钟的MBTI性格测试靠谱吗? 从神舟1号到13号,我国航天技术有了哪些飞跃...

C语言问题编程问题?
int main(){ int i,j,n=-1;float scores[30],sum=0,temp;printf("请输入n的值(0~30):");while(n<0 || n>30) scanf("%d",&n);if(!n) return 0;for(i=0;i<n;scanf("%f",&scores[i]),sum+=scores[i],i++)printf("请输入学生%d分数:",i+1);printf("%d名学生的...

相似回答