C primer plus 第六版 第九章 第六題 程式設計練習答案

Aeron-A發表於2018-06-01

Github 地址:這裡這裡φ(>ω<*)

/*
    本程式應 習題 - 6 建立。
  題目要求: 編寫並測試一個函式,該函式以三個double型別變數的地址為引數;
              把最小值放入第一個變數,中間值放入第二個,最大值放入第三個變數。
*/


#include<stdio.h>


void test(double *, double *, double *);


int main(void)
{
// 三個 double 變數。
double one = 0;
double two = 0;
double three = 0; 


int i = 0;  // 迴圈用。


for (i = 1; i < 4; i++)
{
if (i == 1)
{
printf("Please input first numbers :");
scanf_s("%lf", &one);
putchar(getchar());
}
else if (i == 2)
{
printf("Please input second numbers :");
scanf_s("%lf", &two);
putchar(getchar());
}
else if(i == 3)
{
printf("Please input third numbers :");
scanf_s("%lf", &three);
putchar(getchar());
}
else
{
printf("Wrring ! The program is close now !\n");
}
}


test(&one, &two, &three);


printf("現在三個值的大小關係為 %lf > %lf > %lf .\n", one, two, three);
printf("Bye !\n");

getchar();


return 0;
}


void test(double * one, double * two, double * three)
{
double change = 0;


if (*one > *two)
{
// 在 one > two 的情況下。拿 one 與 three 比較。


if (*two > *three)
{
// 如果 two > three 。 那麼大小關係是 one > two > three 不做任何修改。
;
}

else if (*one > *three)
{
// 在 two 不大於 three 的情況下。
// 如果 one > three ,則大小關係為 one > three > two 。 修改相應 指標 的值。
change = *two;


*two = *three;
*three = change;
}

else 
{
// 現在的大小關係為 three > one > two 。 進行修改對應 指標 值。
change = *two;

*two = *one;
*one = *three;
*three = change;
}
}

else if (*two > *three)
{
// 在 one 小於 two的情況下。 

if (*three > *one)
{
// 在 three > one 的情況下, 則大小關係為  two > three > one 。修改相應 指標 的值。
change = *one;


*one = *two;
*two = *three;
*three = change;
}


else if (*three < *one)
{
// 在 one > three 的情況下, 則大小關係為 two > one > three 。 修改相應 指標 的值。
change = *one;

*one = *two;
*two = change;
}
}


else
{
// 現在為 one < two , 但 two < three 的情況下。
// 大小關係為 three > two > one 。 修改對應 指標 的值。
change = *one;

*one = *three;
*three = change;
}


// 不寫 return 0; 是因為編譯器會報錯函式的void返回值預設為 int 。
return;
}

相關文章