#include "stdio.h" int main() { int a,b,t,*p1,*p2; scanf("%d%d",&a,&b); p1=a; p2=b; /*ERROR*/ t=p1; p1=p2; p2=t; /*ERROR*/ printf("%d %d\n",p1,p2); /*ERROR*/ return 0; }
时间: 2024-03-14 11:44:25 浏览: 32
好的,以下是修改后的程序代码,注释中标注了修改的地方:
```c
#include <stdio.h>
int main() {
int a, b, t, *p1, *p2;
scanf("%d %d", &a, &b);
p1 = &a; // 修改1:p1 指向 a 的地址
p2 = &b; // 修改2:p2 指向 b 的地址
t = *p1;
*p1 = *p2;
*p2 = t;
printf("%d %d\n", a, b); // 修改3:输出 a 和 b 的值
return 0;
}
```
原程序中出现了三处错误:
1. 指针 p1 和 p2 没有指向变量 a 和 b 的地址,应该使用 &a 和 &b 分别给 p1 和 p2 赋值。
2. 在交换两个变量时,应该交换它们的值,而不是它们的指针。所以需要修改为 `t = *p1; *p1 = *p2; *p2 = t;`。
3. 输出时应该输出变量 a 和 b 的值,而不是指针 p1 和 p2 的值。
相关问题
#include<stdio.h> void swap(int *p1,int*p2) { int t; t=p1; p1=p2; p2=t; } int main() { int a,b,*p1,*p2; scanf("%d %d",a,b); *p1=&a; *p2=&b; swap(p1,p2); printf("%d %d",*p1,*p2); return 0; } 请改正程序的错误
这段代码有几个错误,以下是修正后的代码:
```c++
#include <stdio.h>
void swap(int *p1, int *p2) {
int t;
t = *p1; // 这里应该取指针所指的值
*p1 = *p2;
*p2 = t;
}
int main() {
int a, b, *p1, *p2;
scanf("%d %d", &a, &b); // 修正了输入格式
p1 = &a;
p2 = &b;
swap(p1, p2);
printf("%d %d", *p1, *p2);
return 0;
}
```
主要的问题有:
1. `swap` 函数中,指针所指的值没有交换,而是交换了指针本身,应该改为:
```c++
t = *p1;
*p1 = *p2;
*p2 = t;
```
2. `scanf` 函数的第二个参数应该是 `&a` 和 `&b`,表示将输入的值存储到变量 `a` 和 `b` 的地址中。
```c++
scanf("%d %d", &a, &b);
```
3. 在程序中没有为指针 `p1` 和 `p2` 分配内存,应该改为:
```c++
int *p1, *p2;
p1 = &a;
p2 = &b;
```
【程序改错】 功能:以下程序把两个数按由大到小的顺序输出来. #include stdio.h /****=*****ERROR*===* void swap(int *p1*p2) int p; p=*p1;*p1=*p2;*p2=p;
【程序改错】
功能:以下程序把两个数按由大到小的顺序输出来.
1. 缺少了头文件的尖括号 "<>"。
2. swap函数的参数中,指针类型的声明缺少了逗号。
3. swap函数中,变量p没有声明类型。
4. swap函数中,变量p的赋值语句缺少了分号。
5. swap函数中,指针变量*p1和*p2所指向的值应该互换。
改正后的程序如下:
```c
#include <stdio.h>
void swap(int *p1, int *p2);
int main(void) {
int a, b;
scanf("%d%d", &a, &b);
if (a < b) {
swap(&a, &b);
}
printf("%d %d\n", a, b);
return 0;
}
void swap(int *p1, int *p2) {
int p = *p1;
*p1 = *p2;
*p2 = p;
}
```