-
なぜ C/C++ では a[i] と i[a] が同じ動作をするのか?
C/C++ には、あまり知られていない興味深い言語仕様があります。配列の要素へアクセスする際の添字表記 A[i] は、実は i[A] と書き換えてもまったく同じように動作するのです。一見不思議に思えますが、これには明確な理由があります。 なぜ a[i] と i[a] が同じになるのか C/C++ の規格では、添字演算子 E1[E2] は *((E1) + (E2)) として定義されています。つまり、コンパイラは内部的にポインタ演算を行うことで配列要素へアクセスしているのです。 二項演算子 + に適用される型変換の規則により、E1 が配列オブジェクトで E2 が整数である場合、E1[E2]
-
C/C++におけるint main()とint main(void)の違い
C言語およびC++において、main関数はプログラムの実行開始点となる特別な関数です。その宣言には「int main()」と「int main(void)」という2つの形式がありますが、これらの扱いはCとC++で異なります。本記事では、両者の違いをサンプルコードと出力例をもとに詳しく解説します。 C言語の場合 C言語では、関数の宣言時にパラメータが指定されていない場合、その関数は任意の個数の引数を受け取ることができます。しかし、C++では同じことが当てはまらず、引数を渡すとコンパイルエラーになります。このため、C言語ではint main()とint main(void)はほぼ同じ意味を持ちま
-
C言語における%dと%i書式指定子の違い|printfとscanfでの挙動を徹底解説
書式指定子(フォーマット指定子)とは C言語には、%dと%iという2つの整数用の書式指定子があります。%dは変数を「10進数(decimal)」として扱い、%iは「整数(integer)」として扱います。 printf()関数で出力する場合、%dと%iに実質的な違いはありません。どちらを指定しても同じ結果が出力されます。違いが現れるのは、scanf()関数で入力を読み込むときです。scanf()では%iを使うと入力文字列から基数を自動的に判別しますが、%dは常に基数を10と見なして読み込みます。 サンプルコード(C言語) #include <stdio.h> int main()
-
C言語の const int*・int const*・const int* const の違いをわかりやすく解説
ポインタとはC言語において、*p はポインタが指し示す先に格納された値を表し、p はその値が格納されているアドレス(メモリ上の場所)を表します。このアドレスを保持する変数のことを「ポインタ」と呼びます。const int* と int const*const int* と int const* はまったく同じ意味であり、どちらも「定数intへのポインタ」を表します。このポインタが指し示す先のint型の値は変更できませんが、ポインタ自体は定数ではないため、別の定数intを指すように後から変更することが可能です。const int* constconst int* const は「定数intへの定
-
C言語における「const char*」「char* const」「const char* const」の違いを徹底解説
ポインタとconstの基本C言語において、*pはポインタが指し示す先に格納されている値を表し、pはその値が格納されているアドレス(メモリ上の場所)を表します。このアドレスを保持する変数が「ポインタ」と呼ばれます。ポインタ宣言にconstを組み合わせることで、「指し示す先の値」を変更できるかどうかと、「ポインタ自体」を変更できるかどうかを個別に制御できます。この2つの組み合わせにより、以下の3つのパターンが生まれます。1. const char*(char const* と同じ)const char* および char const* は、「定数charへのポインタ」を意味します。このポインタが指
-
C言語の配列とポインタの違いとは?基本からサンプルコードまで徹底解説
C言語において、配列は同じ型の複数の要素を連続的に格納するためのデータ構造です。一方、ポインタは変数のアドレス(メモリ上の場所)を保持するための特殊な変数です。 実は配列変数自体にもアドレスが存在するため、ポインタを使ってその先頭アドレスを指すことができます。さらに、ポインタ演算を利用すれば配列内の各要素を順番にたどることも可能です。 配列に対してポインタを使用するメリットは主に2つあります。1つ目は、動的に確保した配列のアドレスをポインタに格納できること、2つ目は、関数へ配列を渡す際にポインタを利用できることです。以下に、配列とポインタの主な違いをまとめます。 配列とポインタの主な違い s
-
C/C++におけるstrncmp()とstrcmp()の違いを徹底解説
strncmp()とstrcmp()は、どちらもASCII文字コードに基づいて2つの文字列を比較するC/C++の標準ライブラリ関数です。両者の最大の違いは、strncmp()には「比較する最大文字数」を指定する引数が1つ追加されている点です。 strcmp()は、文字列の終端を示すヌル文字(\0)を検出するまで比較を続けます。そのため、文字列が正しく終端されていない場合(ヌル文字が存在しない場合)、関数が正常に終了できず、メモリの範囲外を読み込んでしまう危険があります。 一方、strncmp()は指定された文字数に達した時点で比較を終了するため、終端文字の有無に依存せずに動作します。この特性
-
C言語で配列の下三角行列と上三角行列を出力するプログラム
プログラムの説明 本記事では、入力された配列(行列)から下三角行列と上三角行列を出力するC言語のプログラムを紹介します。 三角行列とは 三角行列とは、下三角行列または上三角行列のいずれかに該当する行列の総称です。 下三角行列 正方行列において、主対角線より上側のすべての要素が0である行列を「下三角行列」と呼びます。 上三角行列 正方行列において、主対角線より下側のすべての要素が0である行列を「上三角行列」と呼びます。 次のような形状を持つ行列は下三角行列(左三角行列)と呼ばれます。 $${\displaystyle L={\begin{bmatrix}\ell _{1,1}&&&&0\\\e
-
C言語で正方行列をZ字形に表示するプログラム
プログラムの概要本記事では、C言語を使って正方行列の要素を「Z」の字形に沿って出力するプログラムを解説します。正方行列とは、行数と列数が等しい行列のことです。n行n列の行列は「n次の正方行列」と呼ばれ、2×2、3×3、4×4などの行列が該当します。Z字形出力のアルゴリズム行列の要素をZ字形で表示するには、次の3つの部分を順番に出力します。最上行(1行目):左端から右端までのすべての要素対角成分:右上から左下へ向かう斜めの要素(両端の角は除く)最下行(最終行):すべての要素これらを順につなげると、アルファベットの「Z」の形が完成します。3×3の行列の場合: a00 a01 a02
-
C言語で正弦波パターンの鏡像を出力する方法
プログラムの概要 正弦波(サイン波)とは、滑らかな周期的な振動を表す数学的な曲線です。正弦波は連続的な波であり、その名前は「正弦(サイン)」関数に由来し、まさにその関数のグラフそのものです。正弦波は純粋数学や応用数学だけでなく、物理学、工学、信号処理など、幅広い分野で頻繁に登場します。 本記事では、波の高さ(Wave Height)と波の長さ(Wave Length)を入力として受け取り、それに基づいて正弦波パターンの鏡像をコンソール上に出力するC言語プログラムを紹介します。 アルゴリズム このプログラムの処理手順は以下の通りです。 1. ユーザーから波の高さと波の長さを入力として受け取りま
-
C言語で鏡像の中空平行四辺形を出力するプログラムの書き方
本記事では、C言語を使ってコンソールに「鏡像(ミラー型)の中空平行四辺形」を出力する方法を解説します。まず平行四辺形の基本的な性質を確認した上で、具体的なアルゴリズムとサンプルコードを紹介します。 プログラムの説明 平行四辺形とは、向かい合う2組の辺がそれぞれ平行になっている四角形のことです。 平行四辺形には、押さえておくべき重要な性質が6つあります。 対辺は等しい(AB = DC)。 対角は等しい(∠D = ∠B)。 隣り合う角は補角の関係にある(∠A + ∠D = 180°)。 1つの角が直角であれば、すべての角が直角になる。 平行四辺形の対角線は互いに他方を二等分する。 各
-
C言語で指定した数値の掛け算九九表を出力する方法
プログラムの概要このプログラムは、ユーザーが入力した任意の数値に対して、その掛け算九九表(乗算表)を出力するものです。C言語の基礎的な入出力処理と for ループの使い方を学ぶのに最適なサンプルです。アルゴリズム1. 九九表を作成したい数値を、ユーザーから入力として受け取ります。2. ループ変数 i の初期値を 1 に設定し、入力された数値との積を計算します。3. i の値を 1 ずつ増加させながら掛け算を繰り返し、i が 12 以下である間、計算結果を出力し続けます。サンプルコード/* 指定された数値の掛け算九九表を出力するプログラム */ #include <stdio.h>
-
C言語で非平方数(完全平方数以外の数)を出力する方法
プログラムの概要ある数の「平方」とは、その数にその数自身を掛け合わせた値のことです。「平方数」または「完全平方数」とは、ある整数を二乗することで得られる整数を指します。完全平方数は自然数を二乗した数であり、具体的には以下のような数になります。1, 4, 9, 16, 25, 36, 49, 64, 81, 100以下は、1から100までの各完全平方数とその平方根の一覧です。√1 = 1 (12 = 1 であるため) √4 = 2 (22 = 4 であるため) √9 = 3 (32 = 9 であるため) √16 = 4 (42 = 16 であるため) √25 = 5 (52 = 25 であるため
-
【C言語】数字パターンを出力するプログラムの作り方
プログラムの概要 数値パターンとは、「パターンルール」と呼ばれる規則に基づいて生成された数列のことです。パターンルールでは、1つまたは複数の数学的操作を用いて、数列内の連続する数値同士の関係を表現します。 C言語では、for文による繰り返し処理を組み合わせることで、このような規則性のある数字パターンを簡単に出力できます。本記事では、代表的な2種類のパターン(三角形型とひし形型)を出力するプログラムを紹介します。 パターンの例 パターン1(三角形型) 1 2 6 3 7 10 4 8 11 13 5 9 12 14 15 パターン1では、各行の先頭の数字が行番号と一致し、隣の要素は直前の値に「
-
C言語で自然数を列方向に出力するプログラムの作り方
プログラムの概要 本記事では、C言語を使って自然数を列方向(縦方向)に並べたパターンを出力する方法を解説します。完成イメージは以下のとおりです。 1 2 6 3 7 10 4 8 11 13 5 9 12 14 15 一見複雑に見えるこの数列も、行と列の関係さえ理解できれば、シンプルなループ処理だけで実現できます。 アルゴリズムの考え方 変数 i は行番号、j は列番号を表し、ここでは5行分のパターンを作成します。 外側のループで各行(i = 1〜5)を順に処理する 内側のループに入る前に、k を i の値で初期化する 内側のループで各列(j = 1〜i)を処理する 現在の k の値を表示
-
C言語でダイヤモンドパターンを出力するプログラム
プログラムの概要 ダイヤモンドパターンは、正ピラミッドパターンと逆ピラミッドパターンを組み合わせたものです。上半分は数字が増えていくピラミッド形状、下半分はそれが逆さになった形状を出力することで、全体としてダイヤモンド(ひし形)が描かれます。 アルゴリズム このプログラムでは、1から始まる連続した数字を使ってダイヤモンド型のパターンを表示します。各行の出力内容は以下のとおりです。 1行目:1 を表示 2行目:1,2,3 を表示 3行目:1,2,3,4,5 を表示 4行目:1,2,3,4,5,6,7 を表示 5行目:1,2,3,4,5,6,7,8,9 を表示 6行目以降:5行目から4行目までの
-
C言語で数値パターンを出力するプログラムの作り方
プログラムの概要 このプログラムは、ユーザーから行数を入力してもらい、それに応じた数値パターンを画面に出力するものです。 例として、入力が「5行」の場合、次のようなパターンが出力されます。 1 6 2 10 7 3 13 11 8 4 15 14 12 9 5 一見複雑に見えるこのパターンにも、きちんとした規則性があります。各行の先頭の数値は「1、6、10、13、15」と増加幅が5→4→3→2と1ずつ減っていき、行の中でも右に進むほど差が大きくなる仕組みです。 アルゴリズム ・各行の末尾側から順にパターンを出力する ・まず各行の最後の列を確定させる ・2行目以降は後ろから2番目の列から出力を
-
C言語でN番目の項までの五胞体数を出力するプログラム
五胞体数(ペンタトープ数)とは 五胞体数とは、パスカルの三角形の各行に現れる5番目の数のことで、「1 4 6 4 1」という5項目の行から始まり、行を左から右へ、あるいは右から左へ読んだときに位置する数です。 五胞体数の最初のいくつかは次のとおりです。 1, 5, 15, 35, 70, 126, 210, 330, 495, 715, 1001, 1365 五胞体数は、規則的で離散的な幾何学パターンとして表現できる「図形数」の一種です。4次元の単体である五胞体に対応する数列であり、三角形数や四角錐数などをさらに一般化した概念といえます。 n番目の五胞体数を求める公式 n番目の五胞体数は、二
-
C言語でピラミッド型パターンを表示するプログラム
プログラムの概要 ピラミッドとは、多角形の底面と、頂点(アペックス)と呼ばれる1点を結ぶことで形成される多面体です。底面の各辺と頂点を結んだ三角形は「側面」と呼ばれます。ピラミッドは、多角形を底面とする錐体の一種であり、底面が n 辺形であるピラミッドは、頂点が n+1 個、面が n+1 枚、辺が 2n 本あるという特徴を持ちます。また、すべてのピラミッドは自己双対であることも知られています。 アルゴリズム ユーザーからピラミッドの段数(行数)を入力してもらう 指定された行数に達するまでループを繰り返す: 1行目には星(*)を1つ表示する 行数に応じて星の数を増やしていく サンプルコード
-
C言語でフロイドの逆三角形を出力するプログラムの書き方
プログラムの概要フロイドの三角形(Floyds Triangle)は、自然数を直角三角形状に並べた数の配列で、コンピュータサイエンス教育の場でよく使われる定番の題材です。名称は計算機科学者のロバート・フロイド(Robert Floyd)にちなんでいます。左上隅の「1」を起点として、連続する自然数を行ごとに順番に埋めていくことで定義されます。 1 15 14 13 12 11 2 3 10 9 8 7 4 5 6 6 5 4 7 8 9 10 3 2 11