#include<stdio.h> void fun(int a, int b) { if(a==b) printf("%d", a); else fun(a+1,b); } int main() { fun(1, 2); return 0; }
时间: 2024-04-04 14:13:45 浏览: 19
这段代码是一个 C 语言程序,实现的是一个递归函数的示例。
首先,定义了一个名为 fun 的递归函数,该函数接受两个整型参数 a 和 b。如果 a 等于 b,则输出 a 的值。否则,递归调用 fun 函数,并将 a 加 1 作为新的参数传入。
在 main 函数中,调用 fun 函数,将 1 和 2 作为参数传入。
在这个示例中,fun 函数的作用是输出从 a 到 b 之间的所有整数,如果 a 和 b 相等,则只输出一个数。由于 fun 函数是递归调用的,因此在每次调用中都会将 a 加 1,直到 a 等于 b。因此,在本例中,fun 函数将输出 1。
相关问题
#include<stdio.h> void fun(int *a, int *b) { int *t; t=a;a=b;b=t; } void main( ) { int x=3, y=4; fun(&x, &y); printf("%d, %d", x, y);
这段代码的作用是交换变量x和y的值。但是代码有一个小错误,main函数的返回值类型应该是int而不是void。
正确的代码应该是这样的:
```
#include <stdio.h>
void fun(int *a, int *b) {
int *t;
t = a;
a = b;
b = t;
}
int main() {
int x = 3, y = 4;
fun(&x, &y);
printf("%d, %d", x, y);
return 0;
}
```
运行结果会输出 "3, 4",因为指针变量a和b在fun函数内部交换了指向的地址,但是并没有改变x和y的值。如果想要交换x和y的值,可以修改fun函数的实现,如下所示:
```
void fun(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
```
这样运行结果就会输出 "4, 3"。
#include <stdio.h> void fun(int a, int b) { int t; t = *b; *b = *a; *a = t; } void main() { int a, b; scanf("%d%d", &a, &b); fun(&a, &b); printf("%d,%d\n", a, b); }
这段代码有一些错误,我来解释一下:
1. 函数`fun`的参数类型应该是指针类型,因为我们需要修改`a`和`b`指向的内存中的值,而不是仅仅修改函数内部的局部变量。
2. 函数`fun`内部变量`t`的类型应该是int型指针,因为我们需要交换`a`和`b`指向的内存中的值,而不是仅仅交换`a`和`b`指针指向的地址。
3. 函数`main`中调用`fun`时应该传入`&a`和`&b`,因为我们需要将变量的地址传递给函数,而不是仅仅传递变量的值。
下面是修改后的代码:
```
#include <stdio.h>
void fun(int* a, int* b)
{
int* t;
t = b;
b = a;
a = t;
}
void main()
{
int a, b;
scanf("%d%d", &a, &b);
fun(&a, &b);
printf("%d,%d\n", a, b);
}
```
这个程序的作用是输入两个整数,然后交换它们的值,并输出交换后的结果。