a = f[0] + f[1] + f[2] + f[3]//9+19+29+39=96,没问题
a = a / f[0]//a=10,OK,小数去掉
b = f[0] + f[2] + f[3] //9+29+39=77,OK
b = b / a //b=7,OK,小数去掉
c = (b * f[1] + a) / f[2]//c=7*19/29=4,这里应该是c=(7*19+10)/29=4,结果倒是不变的,小数去掉
d = f[(b / c ) % 4] //d= 4,这里不对,d=f[(7/4)%4]=f[1%4]=f[1]=19,这里的%表示取余数,即1除以4余数是1;
if(f[(a + b + c + d) % 4] >f[2]) //6>29,f[(a+b+c+d)%4]=f[(10+7+4+19)%4]=f[40%4]=f[0],所以是判断9>29?
printf("%d\n", a + b)
else
printf("%d\n", c + d) //4+4=8,4+19=23
return 0
#include <stdio.h>#define M(x, y) x*y //宏替换 将M(x,y) 替换为x*y
int s = 0//全局变量
void f1()
{
int k = 1
s = s + k//s=s+1
k++//这句没用 因为k是局部变量 函数执行完毕 这个变量就失效了
}
void f2(int n)
{
if (n>3)
f2(n / 4)//如果 n>3 递归调用f2函数
printf("%d", n % 4)//输出取余的值
}
void main()
{
int i, a = 2, b = 3
printf("%d\n", M(a + b, a - b))//输出 a+b*a-b 的值 2+3*2-3 = 5 注意上面的宏里没有括号 (x)*(y) 运算优先级不一样……
printf("%d\n", s)//输出s原始值 0
for (i = 1 i<3 i++)//循环两次 调用f1函数
f1()
printf("%d\n", s)//输出s 经过f1累加后的值 上面调用两次 所以输出2
f2(100)//调用递归函数输出值
//递归过程
/*
n=100
n>3
n2=100/4 n2=25
n2>3
n3=25/4 n3=6
n3>3
n4=6/4 n4=1
n4就不大于3了 不继续递归了
开始回溯
输出 1%4 = 1
输出 6%4 =2
输出 25%4 = 1
输出 100%4 = 0
所以输出结果是 1210
*/
scanf("%d", &i)
}