本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
第26回 | 受け取った値を「しまう」話|C言語の変数と代入をやさしく理解する|データと関数をつなぐ仕組み

はじめてのC言語 | 第26回
はじめに
前回は、関数が計算した値を戻り値として返すしくみを学びました。
今回は、その戻り値を変数にしまい、あとから使う流れを見ていきます。
戻り値は、受け取って終わりではありません。
変数に入れておくことで、表示したり、計算したり、次の処理に使ったりできます。
変数は、値を入れておく場所
C言語では、値を入れておく場所を変数と呼びます。
前回の関数を使って、まずは値段を受け取る例を見てみます。
int calculate_drink_price(void) {
int price = 500;
price = price + 100;
return price;
}この関数は、計算した値段を return price; で返します。
返ってきた値を使いたいときは、次のように変数へ入れます。
int price = calculate_drink_price();この1行で、calculate_drink_price() が返した値を、price という変数にしまっています。
型と変数名をセットで書く
変数を作るときは、型と変数名を書きます。
int price;これは、int 型の値を入れるために、price という名前の変数を用意する、という意味です。
intは、整数を入れる型priceは、変数の名前
作ると同時に値を入れることもできます。
int price = calculate_drink_price();このように、変数を作ることと、値を入れることを同時に書けます。
= は「同じ」ではなく「代入」
C言語の = は、数学の「等しい」という意味ではありません。
C言語では、= は代入を表します。
右側を計算して、その結果を左側の変数に入れる。
たとえば、次の1行を見てみます。
int price = calculate_drink_price();- 右側の
calculate_drink_price()を実行する - 戻り値として
600が返ってくる - その値を左側の
priceに入れる
この向きが大切です。
代入では、左側に「値を入れられる場所」が必要です。
変数に入れると、あとで使える
変数に入れた値は、あとから何度でも使えます。
#include <stdio.h>
int calculate_drink_price(void) {
int price = 500;
price = price + 100;
return price;
}
int main(void) {
int price = calculate_drink_price();
printf("ドリンクの値段は %d 円です\n", price);
if (price > 500) {
printf("少し高めのドリンクです\n");
}
return 0;
}ここでは、price を2回使っています。
- 1回目は、値段を表示するため
- 2回目は、値段が高めかどうか判断するため
戻り値を変数に入れておくと、このように次の処理へつなげられます。
レシピデータも、変数にしまえる
ここからは、少し発展です。
整数だけでなく、構造体のようなまとまったデータも変数に入れられます。
ミックスジュースの材料を、Recipe という構造体でまとめてみます。
typedef struct {
double banana;
double mikan;
double momo;
double milk;
double ice;
} Recipe;Recipe は、材料の量をひとまとめにした型です。
この型を使うと、次のようにレシピデータを変数へ入れられます。
Recipe my_recipe = make_juice();この1行では、make_juice() が返した Recipe 型のデータを、my_recipe という変数に入れています。
Recipeは、変数の型my_recipeは、変数名make_juice()は、Recipe型の値を返す関数
整数の戻り値でも、構造体の戻り値でも、基本は同じです。
返ってきた値を、型の合う変数に入れます。
しまったデータを使う
構造体の中の値を使うときは、. を使ってメンバーを指定します。
printf("Banana : %.1f pcs\n", my_recipe.banana);
printf("Milk : %.0f ml\n", my_recipe.milk);my_recipe.banana は、my_recipe の中にある banana の値を表します。
変数にしまっておくことで、あとから必要な値を取り出して使えるようになります。
人数に合わせてレシピを調整する
最後に、変数と代入を使って、人数に合わせたレシピを作るプログラムを見てみます。
ここでは、2人分の基本レシピをもとに、入力された人数に合わせて材料の量を変えます。
#include <stdio.h>
typedef struct {
double banana; // 本
double mikan; // g
double momo; // g
double milk; // ml
double ice; // g
} Recipe;
double scale_factor(int base_servings, int target_servings) {
return (double)target_servings / (double)base_servings;
}
Recipe scale_recipe(Recipe base, double factor) {
Recipe result;
result.banana = base.banana * factor;
result.mikan = base.mikan * factor;
result.momo = base.momo * factor;
result.milk = base.milk * factor;
result.ice = base.ice * factor;
return result;
}
int main(void) {
Recipe base = {
1.0, // banana
150.0, // mikan
120.0, // momo
300.0, // milk
100.0 // ice
};
int base_servings = 2;
int target_servings;
printf("何人分作りますか?: ");
if (scanf("%d", &target_servings) != 1) {
printf("数値を入力してください。\n");
return 1;
}
if (target_servings <= 0) {
printf("人数は1以上で入力してください。\n");
return 1;
}
double factor = scale_factor(base_servings, target_servings);
Recipe scaled = scale_recipe(base, factor);
printf("\n=== MIX JUICE RECIPE CARD ===\n");
printf("Servings: %d\n", target_servings);
printf("----------------------------\n");
printf("Banana : %.1f pcs\n", scaled.banana);
printf("Canned mikan: %.0f g\n", scaled.mikan);
printf("Peach : %.0f g\n", scaled.momo);
printf("Milk : %.0f ml\n", scaled.milk);
printf("Ice : %.0f g\n", scaled.ice);
printf("----------------------------\n");
printf("1) Put all ingredients in a blender.\n");
printf("2) Blend until smooth.\n");
printf("3) Pour into glasses and serve.\n");
printf("============================\n");
return 0;
}このコードでは、代入が何度も出てきます。
Recipe base = ...で、基本レシピを変数に入れるdouble factor = ...で、倍率を変数に入れるRecipe scaled = ...で、調整後のレシピデータを変数に入れる
値を受け取り、変数にしまい、必要な場所で使う。
この流れが、プログラムを組み立てる基本です。
実行イメージ
何人分作りますか?: 4
=== MIX JUICE RECIPE CARD ===
Servings: 4
----------------------------
Banana : 2.0 pcs
Canned mikan: 300 g
Peach : 240 g
Milk : 600 ml
Ice : 200 g
----------------------------
1) Put all ingredients in a blender.
2) Blend until smooth.
3) Pour into glasses and serve.
============================まとめ
変数は、値を入れておく場所です。
- 変数を作るときは、型と変数名を書く
=は、右側の値を左側へ入れる代入- 戻り値は、変数に入れるとあとで使える
- 構造体のようなまとまったデータも、変数に入れられる
- 入力された値も、変数に入れて処理に使う
「受け取る」「しまう」「使う」という流れを意識すると、C言語のコードは読みやすくなります。
次は、入力された値によって処理を分ける、条件分岐 if の考え方を見ていきます。
次回予告
次回は、しまっておいた値を使いながら、処理をひとまとまりにする「関数」を見ていきます。同じ作業を何度も書くのではなく、名前を付けたレシピカードとして呼び出す感覚をつかんでいきましょう。
復習してみよう
復習したい方は、こちらもあわせてご覧ください。













