合計 昨日 今日

ポインタを使用した2つの整数の記憶場所を交換するプログラムについて

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: Makoto
[URL]
Date: 2017年5月14日(日) 20:11
No: 1
(OFFLINE)

 ポインタを使用した2つの整数の記憶場所を交換するプログラムについて

2つの整数の記憶場所を交換するにはどのようにすればよいのでしょうか?下は問題文です。
intへのポインタ引数xとyをもつswap関数を定義し,2つの整数の記憶場所を交換するプログラムを作成しなさい.
void swap(int *x, int *y);
/* ポインタ引数x, yが指す変数の値を入れ替える */
main関数では,scanf関数を使って2つの整数を入力し,swap関数を呼んでから2つの整数値を出力する.
swap関数にはprintf, scanfを書いてはいけない.main関数にはif文を書いてはいけない.大域変数を使ってはいけない.
実行例
整数を2つ入力
7 -1
swap前:7 -1
swap後:-1 7

int main(void)
{
int a, b;

printf("整数を2つ入力¥n");
scanf("%d %d", &a, &b);
printf("swap前:%d %d¥n", a, b);
swap( … );
printf("swap後:%d %d¥n", a, b);

return 0;
}
コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
void swap(int *x, int *y);
 
int main(void)
{
    int a, b;
 
    printf("整数を2つ入力\n");
    scanf("%d %d", &a, &b);
    printf("swap前:%d %d\n" a, b);
    swap();
    printf("swap後:%d %d\n" a, b);
   
    return 0;
}
 
void swap(int *x, int *y)
{
    *y = ;    
    *x = ;
    return a, b;
}

Name: 白い変人
[URL]
Date: 2017年5月14日(日) 20:33
No: 2
(OFFLINE)

 Re: ポインタを使用した2つの整数の記憶場所を交換するプログラムについて

main関数にもミスが見られるようですが、凡ミスなのか本当に分からなかったのかでは意味が違いますので、何処が間違いだったのかは質問者様で探してご確認下さい。

swap関数に関しては、戻り値の型にvoidを指定しておきながら、返却値を記述しているのかが不明ですし、しかも複数・・・。
基本的な文法の確認もしておくべきかと思います。

以下、動作する程度に添削した回答例。(これで動くみたいだからOKではなく、何故動くようになったのかは、添削前のプログラムと比較して理解しましょう。)

コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
#include <stdio.h>
 
void swap(int *x, int *y){
    if(x==y || *x==*y) return;
 
    *x+=*y;
    *y=*x-*y;
    *x=*x-*y;
}
 
int main(void){
    int a, b;
     
    printf("整数を2つ入力\n");
    scanf("%d %d", &a, &b);
    printf("swap前:%d %d\n", a, b);
    swap(&a,&b);
    printf("swap後:%d %d\n", a, b);
   
    return 0;
}

Name: Makoto
[URL]
Date: 2017年5月15日(月) 21:26
No: 3
(OFFLINE)

 Re: ポインタを使用した2つの整数の記憶場所を交換するプログラムについて

[解決!]

白い変人さん、理解して解決できました!回答ありがとうございましたm(_ _)m

Name: かずま
[URL]
Date: 2017年5月15日(月) 21:33
No: 4
(OFFLINE)

 Re: ポインタを使用した2つの整数の記憶場所を交換するプログラムについて

別解です。こちらも理解できますか?
コード[C]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
void swap(int *x, int *y);
 
int main(void)
{
    int a, b;
     
    printf("整数を2つ入力\n");
    scanf("%d%d", &a, &b);
    printf("swap前: %d %d\n", a, b);
    swap(&a,&b);
    printf("swap後: %d %d\n", a, b);
    return 0;
}
 
void swap(int *x, int *y)
{
    int t;
 
    t = *x;
    *x = *y;
    *y = t;
}

出題者は、「ポインタを使うと、呼出し元の変数を読み書きできる」と
いうことを理解させようとしているのではないでしょうか?
一時変数を使わずに値の交換を行うことは想定していないと思うんですが。


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[6人]