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;
}
ポインタを使用した2つの整数の記憶場所を交換するプログラムについて
Re: ポインタを使用した2つの整数の記憶場所を交換するプログラムについて
main関数にもミスが見られるようですが、凡ミスなのか本当に分からなかったのかでは意味が違いますので、何処が間違いだったのかは質問者様で探してご確認下さい。
swap関数に関しては、戻り値の型にvoidを指定しておきながら、返却値を記述しているのかが不明ですし、しかも複数・・・。
基本的な文法の確認もしておくべきかと思います。
以下、動作する程度に添削した回答例。(これで動くみたいだからOKではなく、何故動くようになったのかは、添削前のプログラムと比較して理解しましょう。)
swap関数に関しては、戻り値の型にvoidを指定しておきながら、返却値を記述しているのかが不明ですし、しかも複数・・・。
基本的な文法の確認もしておくべきかと思います。
以下、動作する程度に添削した回答例。(これで動くみたいだからOKではなく、何故動くようになったのかは、添削前のプログラムと比較して理解しましょう。)
Re: ポインタを使用した2つの整数の記憶場所を交換するプログラムについて
別解です。こちらも理解できますか?
出題者は、「ポインタを使うと、呼出し元の変数を読み書きできる」と
いうことを理解させようとしているのではないでしょうか?
一時変数を使わずに値の交換を行うことは想定していないと思うんですが。
#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;
}
いうことを理解させようとしているのではないでしょうか?
一時変数を使わずに値の交換を行うことは想定していないと思うんですが。