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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: ポインタを使用した2つの整数の記憶場所を交換するプログラムについて

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

#4

by かずま » 7年前

別解です。こちらも理解できますか?

コード:

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

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

#3

by Makoto » 7年前

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

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

#2

by 白い変人 » 7年前

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

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

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

コード:

 
#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;
}

 

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

#1

by Makoto » 7年前

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;
}

コード:

#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;
}

ページトップ