Skip to content

第3章 演算と演算子

この章では、C#で計算や文字列の組み立てを行うための 演算演算子 を学習します。

第1章では、数値を直接計算して表示しました。

Console.WriteLine(100 + 5);

第2章では、変数に値を保存する方法を学習しました。

int price = 120;
int quantity = 4;

この章では、変数に入っている値を使って計算したり、計算結果を別の変数に保存したりします。

たとえば、次のような処理ができるようになります。

単価 × 数量 で合計金額を求める
合計金額を人数で割る
余りを求める
数値の型を変換する
キーボードから入力された文字列を数値に変換する
文字列と変数を組み合わせて表示する

プログラムでは、計算や文字列の組み立てを頻繁に行います。

この章では、今後の条件分岐、繰り返し、配列、オブジェクト指向につながる基本として、演算と演算子を学習します。


この章でできるようになること

Section titled “この章でできるようになること”

この章を終えると、次のことができるようになります。

  • 演算と演算子の意味を説明できる
  • +-*/% を使った計算ができる
  • 整数同士の割り算の結果を説明できる
  • 余りを求める % 演算子を使える
  • +=*= などの代入演算子を使える
  • intdouble の違いを意識して計算できる
  • キャストによる型変換を使える
  • int.Parse を使って文字列を整数に変換できる
  • + を使って文字列を連結できる
  • 文字列補間を使って、変数の値を分かりやすく表示できる
  • 計算式を読みやすく書く意識を持てる

項目内容
開発環境Visual Studio 2022
プロジェクト種類コンソール アプリ
対象フレームワーク.NET 8
プロジェクト名Chapter03_Operators

作業を始める前に、次の内容を確認してください。

  • Visual Studio 2022でコンソールアプリを作成できる
  • .NET 8.0 を選択できる
  • Program.cs を編集できる
  • Console.WriteLine を使って表示できる
  • int 型と string 型の変数を作成できる
  • 変数に値を代入できる
  • 第2章の内容をGitに提出済みである

演算とは、値を使って計算や処理を行うことです。

たとえば、次のような処理は演算です。

100 + 5
120 * 4
totalPrice / memberCount
firstName + lastName

数値の計算だけでなく、文字列をつなげる処理も演算の一種です。


演算子とは、演算を行うための記号です。

たとえば、足し算には +、掛け算には * を使います。

演算子意味
+足し算、文字列連結
-引き算
*掛け算
/割り算
%割り算の余り
=代入
+=加算して代入
*=掛け算して代入

プログラムでは、数学と似た記号を使いますが、意味が少し違うものもあります。

特に = は、数学の「等しい」ではなく、C#では主に 右側の値を左側の変数に代入する という意味で使います。

int total = 100 + 50;

このコードは、次のように読みます。

100 + 50 を計算し、その結果を total に代入する

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

実行結果は次のようになります。

13
7
30
3
1

注目してほしいのは、次の結果です。

Console.WriteLine(number1 / number2);

10 / 3 の結果は、数学では 3.333... です。

しかし、上のコードでは 3 と表示されます。

これは、number1number2 がどちらも int 型だからです。

int 型同士の割り算では、小数部分が切り捨てられます。

10 / 3 = 3

余りを知りたい場合は % を使います。

10 % 3 = 1

% は、割り算の余りを求める演算子です。

Console.WriteLine(10 % 3);

実行結果:

1

余りは、今後の条件分岐でよく使います。

たとえば、偶数か奇数かを判定するときに使えます。

int number = 8;
Console.WriteLine(number % 2);

実行結果:

0

2で割った余りが 0 なら偶数です。
この考え方は、第4章の条件分岐で使います。


業務アプリでは、金額や数量を計算する場面がよくあります。

次のコードでは、単価と数量から合計金額を求めます。

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円

このように、変数名を適切に付けると、何を計算しているか分かりやすくなります。


次のコードでは、合計金額を人数で割ります。

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 = 10050;

が全角記号だからです。

正しくは、半角の + を使います。

int total = 100 + 50;

C#のコードでは、演算子や記号は基本的に半角で入力してください。


単項演算子とは、1つの値に対して使う演算子です。

この章では、符号を表す +- を確認します。

int x = +100;
int y = -50;

+100 は正の値、-50 は負の値を表します。


次のコードを入力して実行してください。

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
結果:70

penalty-10 が入っているため、basePoint + penalty80 + (-10) という意味になります。


式全体に - を付けることもできます。

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
取消金額:-360

第2章で学習したように、変数に値を入れることを代入といいます。

int count = 1;

このコードは、count という変数に 1 を代入しています。


変数の値は、後から更新できます。

using System;
class Program
{
static void Main()
{
int count = 1;
Console.WriteLine(count);
count = count + 1;
Console.WriteLine(count);
}
}

実行結果:

1
2

次の行に注目してください。

count = count + 1;

これは、数学の式として見ると不自然です。

しかし、C#では次の意味になります。

現在の count の値に 1 を加え、その結果を count に代入する

つまり、count の値を1増やしています。


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

実行結果:

2
7

演算子意味
+=加算して代入x += 3
-=減算して代入x -= 3
*=掛け算して代入x *= 3
/=割り算して代入x /= 3
%=余りを代入x %= 3

次のコードでは、利用者のポイントを加算します。

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

実行結果:

現在のポイント:100
20ポイント加算後:120
10ポイント利用後:110

このように、現在の値をもとに増減させる処理では、複合代入演算子がよく使われます。


エラーではないが読みにくい例

Section titled “エラーではないが読みにくい例”

次のコードは動作します。

points=points+20;

しかし、読みやすいコードとはいえません。

次のように、空白を適切に入れると読みやすくなります。

points = points + 20;

さらに、意図が「20加算する」なら、次のように書くこともできます。

points += 20;

研修では、動くだけでなく、読みやすいコードを書くことも意識してください。


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

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 として扱う、という意味です。


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 は、文字列を 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は文字列を整数に変換する
数字以外を変換しようとするとエラーになる

+ は、数値では足し算を行います。

しかし、文字列に対して使うと、文字列をつなげる働きをします。

using System;
class Program
{
static void Main()
{
string lastName = "山田";
string firstName = "太郎";
string fullName = lastName + firstName;
Console.WriteLine(fullName);
}
}

実行結果:

山田太郎

文字列と数値を + でつなげることもできます。

using System;
class Program
{
static void Main()
{
string itemName = "ノート";
int price = 180;
string message = itemName + "の価格は" + price + "円です。";
Console.WriteLine(message);
}
}

実行結果:

ノートの価格は180円です。

このように、文字列と数値を連結すると、数値は文字列として扱われます。


次の2つを比べてください。

Console.WriteLine(100 + 20);
Console.WriteLine("100" + "20");

実行結果:

120
10020

1行目は数値の足し算です。

2行目は文字列の連結です。

100 + 20 → 数値の足し算
"100" + "20" → 文字列の連結

" で囲むかどうかで、結果が変わります。


文字列と変数を組み合わせて表示する場合は、文字列補間を使うと読みやすくなります。

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}個購入しました。";

どちらも同じように表示できます。

しかし、文字列補間を使った方が、文章の形が分かりやすくなります。

本研修では、複雑な表示を行うときは文字列補間を積極的に使います。


この章でよくあるつまずきを確認します。

つまずき原因対応
10 / 33 になるint 同士の割り算になっている小数が必要なら double やキャストを使う
% の意味が分からない割り算の商と余りを混同している10 / 3310 % 31 と考える
count = count + 1 が分かりにくい数学の等号として見ている右側を先に計算し、左側に代入すると読む
int number = 1.5; がエラーになるint に小数を代入しているdouble を使うか、明示的にキャストする
int.Parse でエラーになる入力値が数値ではない数字を入力する。入力エラー対応は例外処理で学ぶ
"100" + "20"120 にならない文字列として連結されている数値として計算したいなら " で囲まない
$ を付け忘れる文字列補間にならない$"..." の形になっているか確認する
全角の演算子を使っている日本語入力がONになっている半角の +-*/% を使う

次の項目について、自分で説明できるか確認してください。

  • 演算とは何かを説明できる
  • 演算子とは何かを説明できる
  • +-*/ を使って計算できる
  • % が余りを求める演算子であることを説明できる
  • int 同士の割り算では小数部分が切り捨てられることを説明できる
  • += を使って変数の値を増やせる
  • count = count + 1 の意味を説明できる
  • double を使って小数を扱える
  • キャストによる型変換を使える
  • int.Parse で文字列を整数に変換できる
  • + で文字列を連結できる
  • 文字列補間を使って変数を表示できる

研修の進め方によっては、隣の人またはチーム内で説明確認を行います。

次の内容を、自分の言葉で説明してください。

  1. 10 / 310 % 3 の違いは何ですか。
  2. count = count + 1; は何をしているコードですか。
  3. += はどのような意味ですか。
  4. intdouble の違いは何ですか。
  5. Console.ReadLine で受け取った値を計算に使うには、何が必要ですか。
  6. "100" + "20" の結果が 10020 になる理由は何ですか。

説明するときは、完全な答えでなくても構いません。
自分の言葉で説明しようとすることが大切です。


この章の演習課題に取り組みます。

制限時間は 45分 です。

時間内にすべて完成しなくても構いません。
できたところまでを保存し、Gitに提出してください。

提出について

制限時間になったら、完成・未完成に関わらず作業を止めます。 できたところまでをGitにcommitし、pushしてください。 未完成の場合は、どこまでできたかを報告できるようにしておきましょう。


まずは、全員が必須課題に取り組んでください。


次の条件で、商品の合計金額を計算して表示してください。

項目
商品名"ボールペン"
単価120
数量7

実行結果例:

商品名:ボールペン
単価:120円
数量:7個
合計金額:840円

条件:

  • 単価、数量、合計金額を変数で管理する
  • 合計金額は計算で求める
  • 表示には文字列補間を使う

次の条件で、1人あたりの金額と余りを求めてください。

項目
合計金額3500
人数4

実行結果例:

合計金額:3500円
人数:4人
1人あたり:875円
余り:0円

条件:

  • / を使って1人あたりの金額を求める
  • % を使って余りを求める
  • 変数名は意味が分かる名前にする

現在のポイントが 100 あります。

次の処理を順番に行い、各段階のポイントを表示してください。

20ポイント加算
15ポイント利用
2倍キャンペーンで現在ポイントを2倍

実行結果例:

開始時:100
20ポイント加算後:120
15ポイント利用後:105
2倍後:210

条件:

  • +=-=*= を使う
  • 各段階の値を表示する

課題3-4 入力された数量で金額計算

Section titled “課題3-4 入力された数量で金額計算”

単価 180 円の商品について、購入数をキーボードから入力し、合計金額を表示してください。

実行例:

購入数を入力してください。
5
合計金額:900円

条件:

  • Console.ReadLine を使う
  • int.Parse を使って入力値を整数に変換する
  • 合計金額は計算で求める

必須課題が終わった人は、発展課題に取り組んでください。


次の条件で、税込金額を計算してください。

項目
商品名"マウス"
税抜価格2480m
消費税率1.10m

実行結果例:

商品名:マウス
税抜価格:2480円
税込価格:2728.0円

条件:

  • decimal 型を使う
  • 数値の末尾に m を付ける
  • 税込価格は計算で求める

3つの点数を変数に代入し、合計点と平均点を表示してください。

項目
点数180
点数275
点数392

実行結果例:

合計点: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に提出します。

まず、現在の状態を確認します。

Terminal window
git status

変更されたファイルを追加します。

Terminal window
git add .

コミットします。

Terminal window
git commit -m "Chapter03 演算と演算子"

ファイルサーバー上のリポジトリへpushします。

Terminal window
git push

Gitの操作でエラーが出た場合は、自己判断で同じ操作を繰り返さず、講師に確認してください。


提出前に、次の項目を確認してください。

  • プログラムをVisual Studioから実行できる
  • +-*/ を使った計算ができている
  • % を使って余りを求めている
  • 計算結果を変数に保存している
  • += などの代入演算子を使っている
  • 小数が必要な計算で double またはキャストを使っている
  • Console.ReadLine の入力値を int.Parse で数値に変換している
  • 文字列補間を使って分かりやすく表示している
  • セミコロンの付け忘れがない
  • 全角記号が混ざっていない
  • インデントが整っている
  • Gitにcommitしている
  • Gitにpushしている

この章では、演算と演算子について学習しました。

この章で学んだ主な内容は次の通りです。

  • 演算とは、値を使って計算や処理を行うこと
  • 演算子とは、演算を行うための記号である
  • +-*/ を使って基本的な計算ができる
  • % を使うと割り算の余りを求められる
  • int 型同士の割り算では、小数部分が切り捨てられる
  • +=-=*= などで変数の値を更新できる
  • intdouble では扱える値の種類が違う
  • キャストを使うと、一時的に別の型として扱える
  • Console.ReadLine の結果は文字列である
  • int.Parse を使うと、文字列を整数に変換できる
  • + は文字列の連結にも使える
  • 文字列補間を使うと、変数の値を文章の中に埋め込める

次章では、条件に応じた処理 を学習します。

条件分岐を使うと、入力された値や計算結果に応じて、実行する処理を変えられるようになります。