代码是关于将三个双变量的地址作为参数 并将最小变量的值移动到第一个变量中间值 到第二个变量,最大值到第三个变量。
#include<stdio.h>
void swapy(double *x, double *y, double *z);
int main()
{
double no1,no2,no3;
printf("Enter three numbers\n");
printf("no1 = ");
scanf("%lf",&no1);
printf("no2 = ");
scanf("%lf",&no2);
printf("no3 = ");
scanf("%lf",&no3);
swapy(&no1,&no2,&no3);
printf("The numbers will be printed in increasing order!\n");
printf("no1 = %lf\n",no1);
printf("no2 = %lf\n",no2);
printf("no3 = %lf\n",no3);
}
void swapy(double *x, double *y, double *z)
{
double *max;
double *mid;
double *min;
if(*x>*y && *x>*z) {
*max = *x;
}
else if(*y>*x && *y>*z) {
*max = *y;
}
else {
*max = *z;
}
if(*x<*y && *x<*z) {
*min = *x;
}
else if(*y<*x && *y<*z) {
*min = *y;
}
else {
*min = *z;
}
if(*x != *max && *x != *min) {
*mid = *x;
}
else if(*y != *max && *y != *min) {
*mid = *y;
}
else {
*mid = *z;
}
*x = *min;
*y = *mid;
*z = *max;
return;
}
代码是关于将三个双变量的地址作为参数 并将最小变量的值移动到第一个变量中间值 到第二个变量,第三个变量的最大值。
答案 0 :(得分:1)
您的问题很明显:max
,mid
和min
未初始化。尝试:
void swapy(double *x, double *y, double *z)
{
double max;
double mid;
double min;
if( (*x>*y) && (*x>*z)) {
max = *x;
}
else if((*y>*x) && (*y>*z)) {
max = *y;
}
else {
max = *z;
}
if((*x<*y) && (*x<*z)) {
min = *x;
}
else if((*y<*x) && (*y<*z)) {
min = *y;
}
else {
min = *z;
}
if((*x != max) && (*x != min)) {
mid = *x;
}
else if((*y != max) && (*y != min)) {
mid = *y;
}
else {
mid = *z;
}
*x = max;
*y = min;
*z = mid;
}
您可以注意到我在if
条件中添加了括号。这是一个很好的习惯,否则有时会导致不必要的行为。
答案 1 :(得分:0)
max
,min
和mid
是未启动的指针,然后您正在执行导致分段错误的*max = *x;
。
首先分配max
,min
和min
有效地址,然后再进行操作。
您可以动态分配8个字节,然后存储值。
double *max=malloc(sizeof(double));
double *mid=malloc(sizeof(double));
double *min=malloc(sizeof(double));
完整功能
void swapy(double *x, double *y, double *z)
{
double *max=malloc(sizeof(double));
double *mid=malloc(sizeof(double));
double *min=malloc(sizeof(double));
if(*x>*y && *x>*z) {
*max = *x;
}
else if(*y>*x && *y>*z) {
*max = *y;
}
else {
*max = *z;
}
if(*x<*y && *x<*z) {
*min = *x;
}
else if(*y<*x && *y<*z) {
*min = *y;
}
else {
*min = *z;
}
if(*x != *max && *x != *min) {
*mid = *x;
}
else if(*y != *max && *y != *min) {
*mid = *y;
}
else {
*mid = *z;
}
*x = *max;
*y = *min;
*z = *mid;
// return;//wrong .. return type mentioned as void
}