#include<stdio.h> int main() { int t=10; printf("%d %d",sqr(t),t); } int sqr(x) int x; { x=x*x; return (x); }
时间: 2023-12-16 15:05:48 浏览: 87
这段代码有问题,缺少函数声明,应该在 main 函数前加上 int sqr(int x); 的声明。另外,函数 sqr 的定义也应该加上返回类型 int。修改后的代码如下:
```
#include<stdio.h>
int sqr(int x);
int main() {
int t=10;
printf("%d %d",sqr(t),t);
}
int sqr(int x) {
x=x*x;
return (x);
}
```
这样就可以正常编译和运行了,输出结果为 100 10。
相关问题
#define SQR(X) X* X #include<stdio.h> int main() { int a = 10, k = 2, m = 3; a /= SQR(m) / SQR(k); printf("%d\n", a); return 0; }
这段代码会输出 120。
宏定义 SQR(X) X * X 展开后,a /= SQR(m) / SQR(k) 会被展开为 a /= m * m / k * k,因为除法运算符 / 和乘法运算符 * 的优先级相同,都是从左到右结合,所以会先计算 m * m 和 k * k 的值,再进行除法运算。因此,a 最终的值为 10 / (3*3)/(2*2) = 120。
#include<stdio.h> #define sqr(x) x*x int main() { int a, k = 3; a = ++sqr(k+1); printf("%d\n",a); }为什么等于9
宏定义 `#define sqr(x) x*x` 中的 `sqr(k+1)` 会被替换成 `(k+1)*(k+1)`,所以 `a = ++sqr(k+1)` 实际上是 `a = ++((k+1)*(k+1))`。由于前置自增运算符 `++` 的优先级比乘法运算符高,所以会先对 `(k+1)*(k+1)` 进行自增运算,然后再赋值给 `a`。因为 `k = 3`,所以 `k+1 = 4`,因此 `(k+1)*(k+1) = 16`,然后再进行自增运算,变成了 `17`,最后赋值给 `a`,所以 `a` 的值为 `17`。