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

●2つの整数a,bを入力し、aがbより大きいとき、aとbを入れ替える場合、どのようなプログラムを作成すればよいのでしょうか?

●aとbを入れ替えるには、入れ替え作業用の領域tempを使い、次の処理を行う。 a→temp, b→a, temp→b

【プログラム作成例】
a =>10 a=>10
b =>5 b=>20
a=5 b=10 a=10 b=20

上記のような問題の解答は下記のようになるのですが、下記以外の解答方法はありませんでしょうか?
C言語に詳しい方、解答の方よろしくお願いします!

#include <stdio.h>

main()
{
int a,b,temp;

/* データの入力 */
printf("a=>"); scanf("%d",&a);
printf("b=>"); scanf("%d",&b);

/* a>bのときにデータを入れ替える */
if(a>b){
temp = a;
a = b;
b = temp;
}

printf("a=%d b=%d\n",a, b);

return (0);
}

A 回答 (3件)

この課題ですと、hamasaki-- さんが書かれたコードが最もシンプルな書き方になります。

プロの世界では、最もシンプルで効率の良い書き方が最も良い(お金がかからない)とされています。(但し、効率を求めて複雑なコードを書く場合はあります) なので、それ以上どのようなコードが書けるか、と言うことは通常追求しません。ちょっと趣向を変え、敢えて難しく書く方法を考えてみます。
-----------------------------
(方法1)
・a>b のとき、aとbを入れ替えるならば、a<b すなわち、a には小さいほうの数が、b には大きいほうの数が入る。2つの数のうち小さいほうを得るマクロ min() と大きいほうを得るマクロ max() を3項演算子によって実現します。

:
(前略)
:
#define min(a,b) ((a)<(b) ? (a) : (b))
#define max(a,b) ((a)>(b) ? (a) : (b))
:
(中略)
:
int a, b, temp_a, temp_b;
:
(中略)
:
temp_a = a; temp_b = b;
a = min(temp_a, temp_b);
b = max(temp_a, temp_b);
:
(後略)
:

-----------------------------
(方法2)
・考え方は(方法1)と同じですが、2つの数を配列に入れ、昇順に並び替える方法で実現します。並び替えには、C言語の標準関数である qsort() 関数を使用します。qsort() の動作原理は、(参考URL)を参照してください。

:
(前略)
:
#include <stdlib.h>

/* クイックソート関数から呼び出される比較関数の宣言 */
int comp_sub(int *a, int *b);
:
(中略)
:
int a, b, array[2];
:
(中略)
:
array[0] = a; array[1] = b;
qsort(array, 2, sizeof(int), comp_sub);
a = array[0];
b = array[1];
:
(中略)
:
/* クイックソート関数から呼び出される比較関数の実体 */
int comp_sub(int *a, int *b)
{
if (*a == *b) {
return (0);
} else if (*a < *b) {
return (-1);
} else {
return (1);
}
}

-----------------------------
(こちらから逆質問)
学校が出す課題としたら、異様なほどシンプルですね。hamasaki-- さんがプログラミングに興味があり、独学で勉強しようと思われたのでしょうか? また、最近の学生さんは C言語より Java言語を勉強すると聞きます。それなのに敢えて C言語を選ばれたのには、何か訳があるのでしょうか?

参考URL:http://ja.wikipedia.org/wiki/%E3%82%AF%E3%82%A4% …
    • good
    • 0

●aとbを入れ替えるには、入れ替え作業用の領域tempを使い、次の処理を行う。

a→temp, b→a, temp→b
↑の条件でしたらほとんどの人が
if(a>b){
temp = a;
a = b;
b = temp;
}
と書くでしょうね
これ以外には考えつきません
    • good
    • 0

 


 a, bが必ず別の変数であるなら、

#include <stdio.h>

int main(void)
{
int a = 2, b = 3;

printf("a = %d, b = %d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("a = %d, b = %d\n", a, b);
return 0;
}
 
    • good
    • 0

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