コンソールアプリを使って、C# の基本的な動きを体験します。プログラムがどう実行されるか、値とは何か、そして値を保存するための「変数」を学びます。
Console.WriteLine で値を出力できるコードは原則として上の行から下の行へ、1行ずつ順番に実行されます。この実行順序を逐次実行と呼びます。
1
2
3
Console.WriteLine("1行目");
Console.WriteLine("2行目");
Console.WriteLine("3行目");
1
2
3
1行目
2行目
3行目
上のコードを実行すると、必ず「1行目」→「2行目」→「3行目」の順に出力されます。順番を入れ替えると出力も入れ替わります。この「書いた順に実行される」というシンプルな原則が、プログラムの基本です。
Console.WriteLine — 渡した値をコンソールに出力し、改行します。
書式:Console.WriteLine メソッド
1
void Console.WriteLine(object? value);
| パラメータ | 型 | 説明 |
|---|---|---|
value |
object? |
出力する値。文字列・数値・真偽値など何でも渡せる |
1
2
3
4
Console.WriteLine("こんにちは"); // 文字列を出力
Console.WriteLine(42); // 整数を出力
Console.WriteLine(3.14); // 小数を出力
Console.WriteLine(true); // 真偽値を出力
1
2
3
4
こんにちは
42
3.14
True
💡 ポイント:
Console.Writeという改行しないバージョンもあります。Console.WriteLineは末尾に自動で改行を加えます。
コードに直接書く値をリテラルと呼びます。リテラルにはそれぞれ型(かた) が決まっています。型は「この値がどんな種類のデータか」を表します。
| 書き方の例 | 型 | 説明 |
|---|---|---|
"こんにちは" |
string(文字列) |
" で囲んだテキスト |
42 |
int(整数) |
小数点なしの数値 |
3.14 |
double(小数) |
小数点を含む数値 |
true / false |
bool(真偽値) |
正しい/正しくない |
型はコンパイラーが値の扱い方を決めるために使います。たとえば "42" と 42 は見た目が似ていますが、前者は文字列、後者は整数です。コンパイラーはこれらを別の種類のデータとして扱います。
算術演算を学ぶ前に、式(expression) の書き方を確認します。
書式:二項演算式
1
左辺 演算子 右辺
| 要素 | 説明 |
|---|---|
左辺 |
演算の対象となる左側の値 |
演算子 |
演算の種類を表す記号 |
右辺 |
演算の対象となる右側の値 |
2つの値を演算子でつなげた書き方を二項演算式と呼びます。式全体が1つの値(演算結果)として扱われます。たとえば 3 + 2 という式全体が 5 という値になります。
C# の基本的な算術演算子は次のとおりです。
| 演算子 | 意味 | 例 | 結果 |
|---|---|---|---|
+ |
加算 | 3 + 2 |
5 |
- |
減算 | 3 - 2 |
1 |
* |
乗算 | 3 * 2 |
6 |
/ |
除算 | 7 / 2 |
3 |
% |
剰余(余り) | 7 % 2 |
1 |
演算結果を直接 Console.WriteLine に渡すことができます。
1
2
3
4
5
Console.WriteLine(3 + 2); // 5
Console.WriteLine(3 - 2); // 1
Console.WriteLine(3 * 2); // 6
Console.WriteLine(7 / 2); // 3
Console.WriteLine(7 % 2); // 1
int 同士の / 演算は小数点以下を切り捨てた整数を返します。
1
2
3
4
5
// ❌ NG: 3.5 が返ってくると思いがち
Console.WriteLine(7 / 2); // 実際は 3
// ✅ OK: 小数で計算したいときは double を使う
Console.WriteLine(7.0 / 2); // 3.5
7.0 と書くと double リテラルになります。int と double を混ぜて計算するとき、C# は自動的に double として計算します。
変数とは、値に名前をつけて保存しておく仕組みです。プログラムの中で同じ値を何度も使うとき、変数に入れておくと便利です。
変数に関連する操作には 宣言・初期化子・代入 の3つがあります。これらは別々の操作です。
書式:変数宣言
1
型 変数名;
| 要素 | 説明 |
|---|---|
型 |
変数に入れられる値の種類(int・double・string など) |
変数名 |
プログラム内で変数を識別するための名前 |
1
int score;
型名 変数名; の形で変数を宣言します。これはメモリに「score という名前の int 型の箱」を用意する操作です。この時点では箱の中身は決まっていません。
書式:変数宣言(初期化子あり)
1
型 変数名 = 式;
| 要素 | 説明 |
|---|---|
型 変数名 |
変数宣言(型と名前) |
= |
初期化子の開始を示す |
式 |
変数に入れる初期値。リテラルや演算式など |
1
int score = 100;
宣言の = 以降を初期化子と呼びます。箱を用意しながら最初の値を入れる操作です。宣言と初期化子はまとめて書くことが多いですが、これは「宣言」と「最初の代入」を一度に行っているにすぎません。
書式:代入文
1
変数名 = 式;
| 要素 | 説明 |
|---|---|
変数名 |
値を入れる変数(すでに宣言済みのもの) |
= |
代入演算子。右辺の値を左辺の変数に入れる(数学の「等号」とは異なる) |
式 |
代入する値。リテラル・変数・演算式など |
1
2
3
4
5
int score = 100;
Console.WriteLine(score); // 100
score = 200; // 代入: 箱の中身を入れ替える
Console.WriteLine(score); // 200
変数名 = 値; の形で変数に新しい値を入れることを代入と呼びます。= は「右辺の値を左辺の変数に代入する」という意味で、数学の「等しい」とは異なります。
1
2
3
4
5
6
int score; // ① 宣言: 箱を用意する(中身なし)
score = 0; // ② 代入: 箱に値を入れる
int level = 1; // ③ 宣言 + 初期化子: 箱を用意して同時に値も入れる
level = level + 1; // ④ 代入: 現在の値を取り出して計算し、また入れる
Console.WriteLine(score); // 0
Console.WriteLine(level); // 2
💡 ポイント:
level = level + 1;は「levelの現在の値(1)を取り出して 1 を足し、その結果(2)をlevelに代入する」という意味です。
var による型推論 — 初期化子があるとき、var を使うと型を省略できます。
1
2
var message = "Hello"; // コンパイラーが string と推論する
var score = 100; // コンパイラーが int と推論する
コンパイラーが右辺の値から型を自動判定するため、コードが短く書けます。ただし、初期化子がない宣言では var は使えません。
1
2
int score;
Console.WriteLine(score); // ❌ コンパイルエラー: 未割り当てのローカル変数 'score'
C# は宣言しただけで値を入れていない変数を読み取ろうとするとコンパイルエラーにします。変数を使う前に必ず値を代入してください。
1
2
int score = 0; // ✅ OK: 初期化子で 0 を入れてから使う
Console.WriteLine(score);
1
2
double result = 7 / 2;
Console.WriteLine(result); // ❌ 3 (3.5 ではない)
右辺 7 / 2 は int 同士の計算なので先に 3(整数)になり、その後 double に変換されます。
1
2
double result = 7.0 / 2; // ✅ OK: 3.5
Console.WriteLine(result);
Console.WriteLine で値を出力できるstring・int・double・bool)+ - * / %)で計算できる。int 同士の / は小数点以下を切り捨てる型名 変数名; — 箱を用意する= 値 — 宣言と同時に値を入れる変数名 = 値; — 後から値を入れ替える次のコードの出力結果を答えてください。
1
2
Console.WriteLine(10 / 3);
Console.WriteLine(10 % 3);
次のコードには問題があります。何が問題ですか?
1
2
3
int count;
count = count + 1;
Console.WriteLine(count);
次のコードの x の型は何になりますか?
1
var x = 2.5;
3、2行目は 1。10 / 3 は整数除算なので小数点以下が切り捨てられる。count が宣言されているが初期化されていない(値が入っていない)。初期化されていない変数は読み取れないためコンパイルエラーになる。int count = 0; のように初期化子を付ければよい。double。2.5 は小数点を含む数値リテラルなので double 型として推論される。プリミティブ型と型変換 では、数値型の表現範囲・符号・文字・文字列・型変換のルールを学びます。