#include <stdio.h> #defineM(x, y) x*y int s=0; voidf1() {int k=1; s=s+k; k++; } void f2(int n ) if(n>3) f2(n/4); printf(“%d”, n%4); void main() inti,a=2,b=3; printf(“%d\n”, M(a+b, a-b)); printf(“%d\n”, s ); for( i=1; i<3; i++) f1(); printf("%d\n", s ); f2(100); }输出结果并解释
时间: 2023-12-10 11:05:49 浏览: 66
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
输出结果:
-1
0
2
解释:
第一行输出 M(a+b, a-b) 的值,由于宏定义 M(x, y) x*y 中没有加括号,因此会先计算 a-b,再与 a+b 相乘,结果为 -1。
第二行输出全局变量 s 的值,初始值为 0,没有被修改过,因此输出为 0。
第三行先声明并初始化变量 i 为 1,然后执行三次 f1() 函数,在 f1() 中,k 的值每次都被重置为 1,因此每次执行完后 s 都会加 1,最终输出为 3。
第四行调用 f2(100) 函数,f2() 函数递归调用自己,每次将 n 除以 4,直到 n<=3 时停止递归,然后按照从内到外的顺序输出 n%4 的值,因此输出为 2。
阅读全文