#include <stdio.h> void swap(int *p1, int *p2); int main() { int a, b, c; int *pointer_1, *pointer_2, *pointer_3; printf("please enter a,b and c:\n"); scanf("%d,%d,%d", &a, &b, &c); pointer_1 = &a; pointer_2 = &b; pointer_3 = &c; if (*pointer_1 < *pointer_2) { swap(pointer_1, pointer_2); } if (*pointer_1 < *pointer_3) { swap(pointer_1, pointer_3); } if (*pointer_2 < *pointer_3) { swap(pointer_2, pointer_3); } printf("这三个数的从大到小的排序为:%d>%d>%d", *pointer_1, *pointer_2, *pointer_3); return 0; } void swap(int *p1, int *p2) { int temp = *p1; *p1 = *p2; *p2 = temp; }为什么结果不正确
时间: 2024-02-23 20:57:27 浏览: 76
从代码上来看,这个程序应该可以正确地将三个数从大到小排列。但是,如果你输入的三个数中有相同的数,那么这个程序可能会出现错误,因为它没有考虑到相同数的情况。例如,如果你输入的是 3, 3, 1,那么程序的输出应该是 3>3>1,但是它实际上会输出 3>1>3,这显然是错误的。如果你确保输入的三个数都不相同,那么这个程序应该是正确的。
相关问题
以下程序功能为通过函数调用实现两个变量值交换,填空完成程序。#include<stdio.h> void swap(int *pa,int *pb) int t; t=*pa;*pa=*pb; /***************FILL****************/ 1_ ; void main() int a,b,*p1=&a,*p2=&b; p1=&a; /***************FILL****************/ 2_; scanf("%d%d",&a,&b); printf("A=%d,B=%d\n",a, b) ; swap(pl,p2); printf("A=%d,B=%d\n",a,b); }
以下是正确的程序代码:
```
#include<stdio.h>
void swap(int *pa,int *pb) {
int t;
t = *pa;
*pa = *pb;
*pb = t;
}
void main() {
int a, b, *p1 = &a, *p2 = &b;
p1 = &a;
p2 = &b;
scanf("%d %d", &a, &b);
printf("A=%d,B=%d\n", a, b);
swap(p1, p2);
printf("A=%d,B=%d\n", a, b);
}
```
注:程序中填空部分应该为 `*pb=t;`。
#include <stdio.h> #include <math.h> struct point { int x; int y; }; typedef struct rectangle{ struct point p1; struct point p2; }rectangle; void swap(int *,int *); int main() { struct point p; rectangle r; scanf("%d%d", ,&p.y); scanf("%d%d%d%d", ,&r.p1.y,&r.p2.x,&r.p2.y); if(r.p1.x>r.p2.x) { swap( );//让r.p1.x值小于等于r.p2.x } if(r.p1.y>r.p2.y) { swap( );//让r.p1.y值小于等于r.p2.y } if( ) { printf("YES"); } else { printf("NO"); } return 0; } void swap(int *a,int *b){ t=*a; *a=*b; *b=t; }补完这个代码
好的,这段代码有一些问题,但是我尝试把它补完整。
```c
#include <stdio.h>
#include <math.h>
struct point {
int x;
int y;
};
typedef struct rectangle{
struct point p1;
struct point p2;
}rectangle;
void swap(int *,int *);
int main() {
struct point p;
rectangle r;
scanf("%d%d", &p.x, &p.y); // 读入点坐标
scanf("%d%d%d%d", &r.p1.x, &r.p1.y, &r.p2.x, &r.p2.y); // 读入矩形坐标
if(r.p1.x > r.p2.x) {
swap(&r.p1.x, &r.p2.x); // 让 r.p1.x 坐标小于等于 r.p2.x 坐标
}
if(r.p1.y > r.p2.y) {
swap(&r.p1.y, &r.p2.y); // 让 r.p1.y 坐标小于等于 r.p2.y 坐标
}
// 判断点是否在矩形内部
if(p.x >= r.p1.x && p.x <= r.p2.x && p.y >= r.p1.y && p.y <= r.p2.y) {
printf("YES");
}
else {
printf("NO");
}
return 0;
}
void swap(int *a,int *b){
int t = *a;
*a = *b;
*b = t;
}
```
在这段代码中,我们读入了一个点和一个矩形的坐标,然后利用 `swap` 函数让矩形的两个点按照从左到右、从下到上的顺序排列。最后我们判断点是否在矩形内部,如果在则输出 `YES`,否则输出 `NO`。
需要注意的是,这段代码还有一些问题,例如没有对变量进行初始化,可能会导致程序出现未定义的行为。因此,如果您要使用这段代码,请务必小心谨慎。
阅读全文