第3章 演算と演算子
この章の目的
Section titled “この章の目的”この章では、C#で計算や文字列の組み立てを行うための 演算 と 演算子 を学習します。
第1章では、数値を直接計算して表示しました。
Console.WriteLine(100 + 5);第2章では、変数に値を保存する方法を学習しました。
int price = 120;int quantity = 4;この章では、変数に入っている値を使って計算したり、計算結果を別の変数に保存したりします。
たとえば、次のような処理ができるようになります。
単価 × 数量 で合計金額を求める合計金額を人数で割る余りを求める数値の型を変換するキーボードから入力された文字列を数値に変換する文字列と変数を組み合わせて表示するプログラムでは、計算や文字列の組み立てを頻繁に行います。
この章では、今後の条件分岐、繰り返し、配列、オブジェクト指向につながる基本として、演算と演算子を学習します。
この章でできるようになること
Section titled “この章でできるようになること”この章を終えると、次のことができるようになります。
- 演算と演算子の意味を説明できる
+、-、*、/、%を使った計算ができる- 整数同士の割り算の結果を説明できる
- 余りを求める
%演算子を使える +=や*=などの代入演算子を使えるintとdoubleの違いを意識して計算できる- キャストによる型変換を使える
int.Parseを使って文字列を整数に変換できる+を使って文字列を連結できる- 文字列補間を使って、変数の値を分かりやすく表示できる
- 計算式を読みやすく書く意識を持てる
本章で使用する環境
Section titled “本章で使用する環境”| 項目 | 内容 |
|---|---|
| 開発環境 | Visual Studio 2022 |
| プロジェクト種類 | コンソール アプリ |
| 対象フレームワーク | .NET 8 |
| プロジェクト名 | Chapter03_Operators |
作業前チェック
Section titled “作業前チェック”作業を始める前に、次の内容を確認してください。
- Visual Studio 2022でコンソールアプリを作成できる
-
.NET 8.0を選択できる -
Program.csを編集できる -
Console.WriteLineを使って表示できる -
int型とstring型の変数を作成できる - 変数に値を代入できる
- 第2章の内容をGitに提出済みである
3-1 演算とは? 演算子とは?
Section titled “3-1 演算とは? 演算子とは?”演算とは、値を使って計算や処理を行うことです。
たとえば、次のような処理は演算です。
100 + 5120 * 4totalPrice / memberCountfirstName + lastName数値の計算だけでなく、文字列をつなげる処理も演算の一種です。
演算子とは、演算を行うための記号です。
たとえば、足し算には +、掛け算には * を使います。
| 演算子 | 意味 |
|---|---|
+ | 足し算、文字列連結 |
- | 引き算 |
* | 掛け算 |
/ | 割り算 |
% | 割り算の余り |
= | 代入 |
+= | 加算して代入 |
*= | 掛け算して代入 |
プログラムでは、数学と似た記号を使いますが、意味が少し違うものもあります。
特に = は、数学の「等しい」ではなく、C#では主に 右側の値を左側の変数に代入する という意味で使います。
int total = 100 + 50;このコードは、次のように読みます。
100 + 50 を計算し、その結果を total に代入する3-2 算術演算
Section titled “3-2 算術演算”基本的な計算
Section titled “基本的な計算”C#では、次の演算子を使って基本的な計算ができます。
| 演算子 | 意味 | 例 |
|---|---|---|
+ | 足し算 | 10 + 3 |
- | 引き算 | 10 - 3 |
* | 掛け算 | 10 * 3 |
/ | 割り算 | 10 / 3 |
% | 余り | 10 % 3 |
次のコードを入力して実行してください。
using System;
class Program{ static void Main() { int number1 = 10; int number2 = 3;
Console.WriteLine(number1 + number2); Console.WriteLine(number1 - number2); Console.WriteLine(number1 * number2); Console.WriteLine(number1 / number2); Console.WriteLine(number1 % number2); }}実行結果は次のようになります。
1373031整数同士の割り算
Section titled “整数同士の割り算”注目してほしいのは、次の結果です。
Console.WriteLine(number1 / number2);10 / 3 の結果は、数学では 3.333... です。
しかし、上のコードでは 3 と表示されます。
これは、number1 と number2 がどちらも int 型だからです。
int 型同士の割り算では、小数部分が切り捨てられます。
10 / 3 = 3余りを知りたい場合は % を使います。
10 % 3 = 1余りを求める
Section titled “余りを求める”% は、割り算の余りを求める演算子です。
Console.WriteLine(10 % 3);実行結果:
1余りは、今後の条件分岐でよく使います。
たとえば、偶数か奇数かを判定するときに使えます。
int number = 8;
Console.WriteLine(number % 2);実行結果:
02で割った余りが 0 なら偶数です。
この考え方は、第4章の条件分岐で使います。
商品金額を計算する
Section titled “商品金額を計算する”業務アプリでは、金額や数量を計算する場面がよくあります。
次のコードでは、単価と数量から合計金額を求めます。
using System;
class Program{ static void Main() { int unitPrice = 180; int quantity = 5; int totalPrice = unitPrice * quantity;
Console.WriteLine($"単価:{unitPrice}円"); Console.WriteLine($"数量:{quantity}個"); Console.WriteLine($"合計:{totalPrice}円"); }}実行結果:
単価:180円数量:5個合計:900円このように、変数名を適切に付けると、何を計算しているか分かりやすくなります。
1人あたりの金額を求める
Section titled “1人あたりの金額を求める”次のコードでは、合計金額を人数で割ります。
using System;
class Program{ static void Main() { int totalPrice = 1000; int memberCount = 3;
int pricePerPerson = totalPrice / memberCount; int remainder = totalPrice % memberCount;
Console.WriteLine($"合計金額:{totalPrice}円"); Console.WriteLine($"人数:{memberCount}人"); Console.WriteLine($"1人あたり:{pricePerPerson}円"); Console.WriteLine($"余り:{remainder}円"); }}実行結果:
合計金額:1000円人数:3人1人あたり:333円余り:1円int 型同士の割り算では、小数は表示されません。
そのため、余りが必要な場合は % を使います。
エラーになる例:全角記号を使う
Section titled “エラーになる例:全角記号を使う”次のコードはエラーになります。
int total = 100 + 50;+ が全角記号だからです。
正しくは、半角の + を使います。
int total = 100 + 50;C#のコードでは、演算子や記号は基本的に半角で入力してください。
3-3 単項演算子
Section titled “3-3 単項演算子”単項演算子とは
Section titled “単項演算子とは”単項演算子とは、1つの値に対して使う演算子です。
この章では、符号を表す + と - を確認します。
int x = +100;int y = -50;+100 は正の値、-50 は負の値を表します。
符号を反転する
Section titled “符号を反転する”次のコードを入力して実行してください。
using System;
class Program{ static void Main() { int basePoint = 80; int penalty = -10;
int result = basePoint + penalty;
Console.WriteLine($"基準点:{basePoint}"); Console.WriteLine($"減点:{penalty}"); Console.WriteLine($"結果:{result}"); }}実行結果:
基準点:80減点:-10結果:70penalty に -10 が入っているため、basePoint + penalty は 80 + (-10) という意味になります。
式全体にマイナスを付ける
Section titled “式全体にマイナスを付ける”式全体に - を付けることもできます。
using System;
class Program{ static void Main() { int price = 120; int quantity = 3;
int amount = price * quantity; int cancelAmount = -amount;
Console.WriteLine($"金額:{amount}"); Console.WriteLine($"取消金額:{cancelAmount}"); }}実行結果:
金額:360取消金額:-3603-4 代入演算子
Section titled “3-4 代入演算子”第2章で学習したように、変数に値を入れることを代入といいます。
int count = 1;このコードは、count という変数に 1 を代入しています。
変数の値を更新する
Section titled “変数の値を更新する”変数の値は、後から更新できます。
using System;
class Program{ static void Main() { int count = 1;
Console.WriteLine(count);
count = count + 1;
Console.WriteLine(count); }}実行結果:
12次の行に注目してください。
count = count + 1;これは、数学の式として見ると不自然です。
しかし、C#では次の意味になります。
現在の count の値に 1 を加え、その結果を count に代入するつまり、count の値を1増やしています。
複合代入演算子
Section titled “複合代入演算子”count = count + 1; は、次のように短く書けます。
count += 1;+= は、現在の値に右側の値を加えて、同じ変数に代入する演算子です。
using System;
class Program{ static void Main() { int count = 1;
count += 1; Console.WriteLine(count);
count += 5; Console.WriteLine(count); }}実行結果:
27主な複合代入演算子
Section titled “主な複合代入演算子”| 演算子 | 意味 | 例 |
|---|---|---|
+= | 加算して代入 | x += 3 |
-= | 減算して代入 | x -= 3 |
*= | 掛け算して代入 | x *= 3 |
/= | 割り算して代入 | x /= 3 |
%= | 余りを代入 | x %= 3 |
ポイントを加算する例
Section titled “ポイントを加算する例”次のコードでは、利用者のポイントを加算します。
using System;
class Program{ static void Main() { int points = 100;
Console.WriteLine($"現在のポイント:{points}");
points += 20; Console.WriteLine($"20ポイント加算後:{points}");
points -= 10; Console.WriteLine($"10ポイント利用後:{points}"); }}実行結果:
現在のポイント:10020ポイント加算後:12010ポイント利用後:110このように、現在の値をもとに増減させる処理では、複合代入演算子がよく使われます。
エラーではないが読みにくい例
Section titled “エラーではないが読みにくい例”次のコードは動作します。
points=points+20;しかし、読みやすいコードとはいえません。
次のように、空白を適切に入れると読みやすくなります。
points = points + 20;さらに、意図が「20加算する」なら、次のように書くこともできます。
points += 20;研修では、動くだけでなく、読みやすいコードを書くことも意識してください。
3-5 数値の型変換
Section titled “3-5 数値の型変換”int型とdouble型
Section titled “int型とdouble型”int は整数を扱う型です。
int number = 10;double は小数を扱う型です。
double rate = 1.5;整数同士の割り算では、小数部分が切り捨てられます。
using System;
class Program{ static void Main() { int total = 1000; int memberCount = 3;
int pricePerPerson = total / memberCount;
Console.WriteLine(pricePerPerson); }}実行結果:
333小数まで求めたい場合は、double を使います。
using System;
class Program{ static void Main() { double total = 1000; double memberCount = 3;
double pricePerPerson = total / memberCount;
Console.WriteLine(pricePerPerson); }}実行結果:
333.3333333333333キャストによる型変換
Section titled “キャストによる型変換”int 型の値を、一時的に double 型として扱いたい場合があります。
そのようなときは、キャストを使います。
using System;
class Program{ static void Main() { int total = 1000; int memberCount = 3;
double pricePerPerson = (double)total / memberCount;
Console.WriteLine(pricePerPerson); }}実行結果:
333.3333333333333次の部分に注目してください。
(double)totalこれは、total を一時的に double として扱う、という意味です。
小数を整数に変換する
Section titled “小数を整数に変換する”double の値を int に変換することもできます。
using System;
class Program{ static void Main() { double source = 15.8; int number = (int)source;
Console.WriteLine(number); }}実行結果:
15小数部分は切り捨てられます。
注意
(int)15.8は四捨五入ではありません。 小数部分が切り捨てられます。
エラーになる例:型が合わない代入
Section titled “エラーになる例:型が合わない代入”次のコードはエラーになります。
double source = 15.8;int number = source;double 型の値を、そのまま int 型の変数に代入しようとしているためです。
小数部分が失われる可能性がある変換は、C#が自動では行いません。
明示的にキャストします。
double source = 15.8;int number = (int)source;入力された文字列を数値に変換する
Section titled “入力された文字列を数値に変換する”Console.ReadLine で入力された値は、文字列として扱われます。
次のコードでは、入力された文字列を int.Parse で整数に変換しています。
using System;
class Program{ static void Main() { Console.WriteLine("購入数を入力してください。");
string input = Console.ReadLine(); int quantity = int.Parse(input);
int unitPrice = 180; int totalPrice = unitPrice * quantity;
Console.WriteLine($"合計金額:{totalPrice}円"); }}実行例:
購入数を入力してください。5合計金額:900円int.Parseとは
Section titled “int.Parseとは”int.Parse は、文字列を int 型に変換するための命令です。
int quantity = int.Parse(input);このコードは、input に入っている文字列を整数に変換し、quantity に代入しています。
エラーになる例:数字以外を入力する
Section titled “エラーになる例:数字以外を入力する”次のプログラムで、購入数に abc と入力するとエラーになります。
string input = Console.ReadLine();int quantity = int.Parse(input);abc は整数に変換できないためです。
abc は int 型に変換できないこのような入力ミスへの対応は、後の章で学ぶ 例外処理 で扱います。
この章では、まず次のことを覚えておきましょう。
Console.ReadLineの結果は文字列数値として使いたい場合は変換が必要int.Parseは文字列を整数に変換する数字以外を変換しようとするとエラーになる3-6 文字列の連結
Section titled “3-6 文字列の連結”+演算子で文字列をつなげる
Section titled “+演算子で文字列をつなげる”+ は、数値では足し算を行います。
しかし、文字列に対して使うと、文字列をつなげる働きをします。
using System;
class Program{ static void Main() { string lastName = "山田"; string firstName = "太郎";
string fullName = lastName + firstName;
Console.WriteLine(fullName); }}実行結果:
山田太郎文字列と数値をつなげる
Section titled “文字列と数値をつなげる”文字列と数値を + でつなげることもできます。
using System;
class Program{ static void Main() { string itemName = "ノート"; int price = 180;
string message = itemName + "の価格は" + price + "円です。";
Console.WriteLine(message); }}実行結果:
ノートの価格は180円です。このように、文字列と数値を連結すると、数値は文字列として扱われます。
文字列連結の注意点
Section titled “文字列連結の注意点”次の2つを比べてください。
Console.WriteLine(100 + 20);Console.WriteLine("100" + "20");実行結果:
120100201行目は数値の足し算です。
2行目は文字列の連結です。
100 + 20 → 数値の足し算"100" + "20" → 文字列の連結" で囲むかどうかで、結果が変わります。
文字列補間を使う
Section titled “文字列補間を使う”文字列と変数を組み合わせて表示する場合は、文字列補間を使うと読みやすくなります。
using System;
class Program{ static void Main() { string itemName = "ノート"; int price = 180; int quantity = 5; int totalPrice = price * quantity;
Console.WriteLine($"{itemName}を{quantity}個購入しました。"); Console.WriteLine($"合計金額は{totalPrice}円です。"); }}実行結果:
ノートを5個購入しました。合計金額は900円です。$"..." の中で {変数名} と書くと、変数の値を埋め込めます。
文字列補間をおすすめする理由
Section titled “文字列補間をおすすめする理由”次の2つのコードを比べてください。
string message = itemName + "を" + quantity + "個購入しました。";string message = $"{itemName}を{quantity}個購入しました。";どちらも同じように表示できます。
しかし、文字列補間を使った方が、文章の形が分かりやすくなります。
本研修では、複雑な表示を行うときは文字列補間を積極的に使います。
よくあるつまずき
Section titled “よくあるつまずき”この章でよくあるつまずきを確認します。
| つまずき | 原因 | 対応 |
|---|---|---|
10 / 3 が 3 になる | int 同士の割り算になっている | 小数が必要なら double やキャストを使う |
% の意味が分からない | 割り算の商と余りを混同している | 10 / 3 は 3、10 % 3 は 1 と考える |
count = count + 1 が分かりにくい | 数学の等号として見ている | 右側を先に計算し、左側に代入すると読む |
int number = 1.5; がエラーになる | int に小数を代入している | double を使うか、明示的にキャストする |
int.Parse でエラーになる | 入力値が数値ではない | 数字を入力する。入力エラー対応は例外処理で学ぶ |
"100" + "20" が 120 にならない | 文字列として連結されている | 数値として計算したいなら " で囲まない |
$ を付け忘れる | 文字列補間にならない | $"..." の形になっているか確認する |
| 全角の演算子を使っている | 日本語入力がONになっている | 半角の +、-、*、/、% を使う |
学んだことチェック
Section titled “学んだことチェック”次の項目について、自分で説明できるか確認してください。
- 演算とは何かを説明できる
- 演算子とは何かを説明できる
-
+、-、*、/を使って計算できる -
%が余りを求める演算子であることを説明できる -
int同士の割り算では小数部分が切り捨てられることを説明できる -
+=を使って変数の値を増やせる -
count = count + 1の意味を説明できる -
doubleを使って小数を扱える - キャストによる型変換を使える
-
int.Parseで文字列を整数に変換できる -
+で文字列を連結できる - 文字列補間を使って変数を表示できる
研修の進め方によっては、隣の人またはチーム内で説明確認を行います。
次の内容を、自分の言葉で説明してください。
10 / 3と10 % 3の違いは何ですか。count = count + 1;は何をしているコードですか。+=はどのような意味ですか。intとdoubleの違いは何ですか。Console.ReadLineで受け取った値を計算に使うには、何が必要ですか。"100" + "20"の結果が10020になる理由は何ですか。
説明するときは、完全な答えでなくても構いません。
自分の言葉で説明しようとすることが大切です。
この章の演習課題に取り組みます。
制限時間は 45分 です。
時間内にすべて完成しなくても構いません。
できたところまでを保存し、Gitに提出してください。
提出について
制限時間になったら、完成・未完成に関わらず作業を止めます。 できたところまでをGitにcommitし、pushしてください。 未完成の場合は、どこまでできたかを報告できるようにしておきましょう。
まずは、全員が必須課題に取り組んでください。
課題3-1 商品金額計算
Section titled “課題3-1 商品金額計算”次の条件で、商品の合計金額を計算して表示してください。
| 項目 | 値 |
|---|---|
| 商品名 | "ボールペン" |
| 単価 | 120 |
| 数量 | 7 |
実行結果例:
商品名:ボールペン単価:120円数量:7個合計金額:840円条件:
- 単価、数量、合計金額を変数で管理する
- 合計金額は計算で求める
- 表示には文字列補間を使う
課題3-2 割り勘計算
Section titled “課題3-2 割り勘計算”次の条件で、1人あたりの金額と余りを求めてください。
| 項目 | 値 |
|---|---|
| 合計金額 | 3500 |
| 人数 | 4 |
実行結果例:
合計金額:3500円人数:4人1人あたり:875円余り:0円条件:
/を使って1人あたりの金額を求める%を使って余りを求める- 変数名は意味が分かる名前にする
課題3-3 ポイント加算
Section titled “課題3-3 ポイント加算”現在のポイントが 100 あります。
次の処理を順番に行い、各段階のポイントを表示してください。
20ポイント加算15ポイント利用2倍キャンペーンで現在ポイントを2倍実行結果例:
開始時:10020ポイント加算後:12015ポイント利用後:1052倍後:210条件:
+=、-=、*=を使う- 各段階の値を表示する
課題3-4 入力された数量で金額計算
Section titled “課題3-4 入力された数量で金額計算”単価 180 円の商品について、購入数をキーボードから入力し、合計金額を表示してください。
実行例:
購入数を入力してください。5合計金額:900円条件:
Console.ReadLineを使うint.Parseを使って入力値を整数に変換する- 合計金額は計算で求める
必須課題が終わった人は、発展課題に取り組んでください。
課題3-5 税込金額計算
Section titled “課題3-5 税込金額計算”次の条件で、税込金額を計算してください。
| 項目 | 値 |
|---|---|
| 商品名 | "マウス" |
| 税抜価格 | 2480m |
| 消費税率 | 1.10m |
実行結果例:
商品名:マウス税抜価格:2480円税込価格:2728.0円条件:
decimal型を使う- 数値の末尾に
mを付ける - 税込価格は計算で求める
課題3-6 平均点計算
Section titled “課題3-6 平均点計算”3つの点数を変数に代入し、合計点と平均点を表示してください。
| 項目 | 値 |
|---|---|
| 点数1 | 80 |
| 点数2 | 75 |
| 点数3 | 92 |
実行結果例:
合計点:247点平均点:82.33333333333333点条件:
- 合計点を
int型で求める - 平均点は小数が表示されるようにする
- キャストを使って平均点を求める
ヒント:
double average = (double)total / 3;課題3-7 自己紹介文を組み立てる
Section titled “課題3-7 自己紹介文を組み立てる”次の情報を変数に入れ、1つの文章として表示してください。
| 項目 | 値の例 |
|---|---|
| 氏名 | "山田太郎" |
| 部署 | "開発部" |
| 研修日数 | 3 |
実行結果例:
山田太郎さんは開発部に所属しています。C#研修3日目です。条件:
- 文字列補間を使う
- 変数を3つ以上使う
課題3-8 入力された単価と数量で計算する
Section titled “課題3-8 入力された単価と数量で計算する”単価と数量をキーボードから入力し、合計金額を表示してください。
実行例:
単価を入力してください。250数量を入力してください。6合計金額:1500円条件:
Console.ReadLineを2回使うint.Parseを2回使う- 単価と数量を変数に保存する
- 合計金額を計算して表示する
Gitへの提出
Section titled “Gitへの提出”課題が終わったら、できたところまでをGitに提出します。
まず、現在の状態を確認します。
git status変更されたファイルを追加します。
git add .コミットします。
git commit -m "Chapter03 演算と演算子"ファイルサーバー上のリポジトリへpushします。
git pushGitの操作でエラーが出た場合は、自己判断で同じ操作を繰り返さず、講師に確認してください。
提出前チェックリスト
Section titled “提出前チェックリスト”提出前に、次の項目を確認してください。
- プログラムをVisual Studioから実行できる
-
+、-、*、/を使った計算ができている -
%を使って余りを求めている - 計算結果を変数に保存している
-
+=などの代入演算子を使っている - 小数が必要な計算で
doubleまたはキャストを使っている -
Console.ReadLineの入力値をint.Parseで数値に変換している - 文字列補間を使って分かりやすく表示している
- セミコロンの付け忘れがない
- 全角記号が混ざっていない
- インデントが整っている
- Gitにcommitしている
- Gitにpushしている
この章のまとめ
Section titled “この章のまとめ”この章では、演算と演算子について学習しました。
この章で学んだ主な内容は次の通りです。
- 演算とは、値を使って計算や処理を行うこと
- 演算子とは、演算を行うための記号である
+、-、*、/を使って基本的な計算ができる%を使うと割り算の余りを求められるint型同士の割り算では、小数部分が切り捨てられる+=、-=、*=などで変数の値を更新できるintとdoubleでは扱える値の種類が違う- キャストを使うと、一時的に別の型として扱える
Console.ReadLineの結果は文字列であるint.Parseを使うと、文字列を整数に変換できる+は文字列の連結にも使える- 文字列補間を使うと、変数の値を文章の中に埋め込める
次章では、条件に応じた処理 を学習します。
条件分岐を使うと、入力された値や計算結果に応じて、実行する処理を変えられるようになります。