背景
- 以下のプログラムを読み、問に答えよう。実行結果を予想しよう。
#include <stdio.h> int main (void) { int a, b, tmp; printf("a = "); scanf("%d", &a); printf("b = "); scanf("%d", &b); printf ("BEFORE : a = %3d, b = %3d \n", a, b); tmp = a; a = b; b = tmp; printf (" AFTER : a = %3d, b = %3d \n", a, b); return (0); }
a = 4 b = 6 BEFORE : a = 4, b = 6 AFTER : a = 6, b = 4問題
- このプログラムで呼び出されるscanf("%d", &a);の&は、なぜ必要か。&をつけないと、どういう意味になるか。
- int型の変数bが確保されたアドレスをプリントする文を追加せよ。
- 上のプログラムを改良する。swap関数を作成して、aとbの値を入れ替えなさい。下はmain関数からの呼び出し部である。
- swapプログラムを完成させたら、配列要素の交換にも、利用しよう。 (0701の問題を変形)
例題集ページ
- 0701 配列要素の交換
#include <stdio.h> void swap (int *x, int *y); int main (void) { int a, b; printf("a = "); scanf("%d", &a); printf("b = "); scanf("%d", &b); printf ("BEFORE : a = %3d, b = %3d \n", a, b); swap(&a, &b); printf (" AFTER : a = %3d, b = %3d \n", a, b); return (0); } /* swap関数 */ void swap(int *x, int *y) { int tmp; tmp = *x; *x = *y; *y = tmp; }