アプリ版:「スタンプのみでお礼する」機能のリリースについて

(a,b,c):10 20 30
(a,b,c)=(10,20,30)
最大値 : 30
最小値 : 10

↑のように実行例にしたいのですが関数の部分がわかりません

3つの変数のポインタ(n1, n2, n3)と求めたい値を指定する整数rank(最大値を求めるなら1を、最小値なら3を指定する)を引数として指定し、返り値として最大値(最小値)を持つ変数のポインタを返す関数
int * ranking(int *n1, int *n2, int *n3, int rank)
を作成し、以下のプログラムを完成させなさい。



#define MAX 1
#define MIN 3

int * ranking(int *n1, int *n2, int *n3, int rank) {
/* rankが1なら最大値、3なら最小値を返す */
/* 関数を作成 */
}

int main() {
int a, b, c, i;
printf("(a,b,c):");
scanf("%d %d %d", &a, &b, &c);
printf("(a,b,c)=(%d,%d,%d)\n", a, b, c);
printf("最大値 : %d\n", *ranking(&a, &b, &c, MAX));
printf("最小値 : %d\n", *ranking(&a, &b, &c, MIN));

A 回答 (2件)

ranking関数のみ書くと、下のようになるかと。


最大値、最小値の求め方は愚直です。
もっと良い方法があれば、それを選択してください。

#include <stdlib.h>
int * ranking(int *n1, int *n2, int *n3, int rank) {
if(rank == MAX)
{
if(*n1 > *n2)
{
if(*n1 > *n3) return n1;
else return n3;
}
else
{
if(*n2 > *n3) return n2;
else return n3;
}

}
else if(rank == MIN)
{
if(*n1 < *n2)
{
if(*n1 < *n3) return n1;
else return n3;
}
else
{
if(*n2 < *n3) return n2;
else return n3;
}
}
else
{
fprintf(stderr , "error\n");
exit(1);
}
}
    • good
    • 0

何故ポインタを使うのか全く理解できません。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!