#include <stdio.h> intx=2,y=3; void sub( int y ) {x++;y++;} void main() {intx=4;sub(x); printf("x+y=6d\n",x+y);
时间: 2023-12-02 22:02:10 浏览: 114
这段程序有语法错误,因为在函数 `sub` 的定义中,形式参数 `y` 的类型没有指定,应该是 `int` 类型。同时,在 `printf` 函数中,应该使用 `%d` 格式化输出整数,而不是 `%6d`。修正后的程序如下:
```c++
#include <stdio.h>
int x = 2, y = 3;
void sub(int y) {
x++;
y++;
}
void main() {
x = 4;
sub(x);
printf("x+y=%d\n", x + y);
}
```
程序的输出结果是:
```
x+y=8
```
首先定义了全局变量 `x` 和 `y`,并分别赋值为 2 和 3。然后定义了函数 `sub`,其中的形式参数 `y` 是一个局部变量,与全局变量 `y` 没有关系。在 `main` 函数中,将全局变量 `x` 赋值为 4,然后调用函数 `sub`,将全局变量 `x` 作为实际参数传递给 `sub` 函数。在 `sub` 函数中,将全局变量 `x` 的值加 1,将局部变量 `y` 的值加 1,但这个操作并没有影响到全局变量 `y` 的值。最后使用 `printf` 函数输出全局变量 `x` 和 `y` 的和,即 8。
相关问题
1. 以下程序的运行结果是( )。#include <stdio.h>int x=1, y=3;void sub( int y ){ x++;y++; }void main( ){ int x=2;sub(x);printf("x+y=%d\n",x+y);
运行结果是 x+y=6。
程序中定义了全局变量 x 和 y,以及一个名为 sub() 的函数,该函数接受一个整数参数 y。在 main() 函数中,又定义了一个局部变量 x,并将其初始化为 2。然后调用 sub() 函数,将局部变量 x 的值作为参数传递进去。
在 sub() 函数中,全局变量 x 的值加 1,局部变量 y 的值也加 1,但这个 y 只是 sub() 函数的一个局部变量,对 main() 函数中定义的变量 y 没有影响。
最后,printf() 函数输出 x+y 的值,由于 main() 函数中定义的局部变量 x 和全局变量 y 的值相加,所以结果是 6。
#include <stdio.h>int x1 = 30, x2 = 40;void sub(int x, int y) { x1 = x; x = y; y = x1; }int main() { int x3 = 10, x4 = 20; sub(x3, x4); sub(x2, x1); printf("%d,%d,%d,%d\n", x3, x4, x1, x2); return 0;}
这段代码的输出结果是:
```
10,20,40,30
```
解释如下:
1. 首先定义了两个全局变量 `x1` 和 `x2`,它们的初始值分别为 `30` 和 `40`。
2. 定义了一个函数 `sub`,它接受两个整型参数 `x` 和 `y`。在函数内部,执行了以下操作:
- 将全局变量 `x1` 的值修改为 `x`。
- 将 `x` 的值修改为 `y`。
- 将 `y` 的值修改为 `x1`(即修改为 `x` 修改之前 `x1` 的值)。
这样看来,`sub` 函数没有实现任何交换操作,因为 `y` 的值被修改为 `x1`,而不是 `x2`。
3. 在 `main` 函数中,定义了两个局部变量 `x3` 和 `x4`,它们的初始值分别为 `10` 和 `20`。然后分别调用了两次 `sub` 函数,第一次传入了 `x3` 和 `x4`,第二次传入了 `x2` 和 `x1`。
4. 最后调用了 `printf` 函数,输出了四个变量的值,分别是 `x3`、`x4`、`x1` 和 `x2`,它们的值分别为 `10`、`20`、`40` 和 `30`。这个结果与我们预期的不太一致,因为在 `sub` 函数中,没有实现交换操作。
阅读全文