2级C程序设计.10个题目,有耐心的来.

来源:百度知道 编辑:UC知道 时间:2024/07/02 02:59:02
49.下面程序.
int ff(int n)
{ static int f=1;
f=f*n;
return f;
}
main()
{ int i;
for(i=1;i<=5;i++)printf("%d ",ff(i0);
}
(这个里的f的值不是始终为1吗?????怎么结果是120去了??)
50.这个我真的饿不明白
#define f(x) x*x
main()
{ int i;
i=f(4+4)/f(2+2);
printf("%d\n", i);
}
(郁闷,这里的i=后面的式子是怎么定义规则计算的啊?不是8/4吗?...................

51.#define sqr(x) x*x
main()
{ int a=16,k=2,m=1;
a/=sqr(k+m)/sqr(k+m);printf("%d\n",a);
}
(求解释怎样做?)
52.FOR中循环了几次??
#define N 2
#define M N+1
#define NUM 2*M+1
main()
{ int i;
for(i=1;j<=NUM;i++)printf("%d\n",i); }
(我怎么搞的7次啊...晕)
52.下面程序结果
#define PT 5.5
#define S(x) PT*X*X
main(){ int a=1,b=2;printf("%4.1f\n",S(a+b)); }
(呀,我算的是49.5....为什么答案是9.5....)
52.下面结果
#define MA(x) x*(x-1)
mai

49.因为你用static来声明i,所以局部变量的值在函数调用结束后不消失而保留原值.你可以想成static int f=1;这一句只执行了1次.执行完ff(1)f为1,执行完ff(2)f为2,执行完ff(3)f为2*3=6,执行完ff(4)f为6*4=24,执行完ff(5)f为24*5=120.

怎么好几道52题

第2,3,5,6道是同一个道理:
#define f(x) x*x 和 #define f(x) (x)*(x)两者是不一样的,建议你以后都用后者这种写法.
如果是#define f(x) x*x 那么f(3+4)就变成了 3+4*3+4
如果是#define f(x) (x)*(x) 那么f(3+4)就是 (3+4)*(3+4)
这么说,你应该懂了吧

第4道和上面这个道理类似:宏定义只是用宏名代替一个字符串,只是简单的置换.
#define N 2
#define M N+1
#define NUM 2*M+1 这里NUM就是 2*N+1+1也就是2*2+1+1

54题的话:
我只能引用这几句话:
typedef int size; 此声明定义了一个 int 的同义字,名字为 size。注意 typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要 int 的上下文中使用 size

53道:我也不明白
p=(double *) malloc(sizeof(double)) 因为 malloc()返回值类型是void*,用(double*)强行转换,另一个就不懂了
知道的补充下

49.你那题目是不是写错了呀?后面ff()里的参数i0是什么意思啊?是不是)打成了0呀?
static声明局部变量时,函数调用后变量的值不消失而保留原值,就是在下一次该函数调用该变量的值是上一次函数调用结束时的值。
第一次调用结束后f=1,第二次调用时f就等于1乘以2,此时f的值为2,并且再下一次调用是它还是2,并没有改变(即它没有再变成1)
以此类推,结果是1 2