-
C言語で数値内の特定の桁を別の数字に置き換えるプログラム
整数 n が与えられたとき、その数値に含まれる特定の桁 x を、別の数字 m に置き換えるプログラムを考えます。手順としては、まず置き換えたい桁が数値の中に存在するかどうかを確認し、存在する場合にのみ、該当する桁 x を別の数字 m へと置き換えます。 たとえば、「123」という数値に対して、m を 5、置き換え対象の桁 x を「2」と指定した場合、結果は「153」になります。 入出力例 Input: n = 983, digit = 9, replace = 6 Output: 683 Explanation: 数値 983 の先頭の桁が 9 であるため、9 を 6 に置き換えた結果 68
-
C言語で2つの文字列が同じかどうかを判定するプログラムの作成方法
2つの文字列 str1 と str2 が与えられたとき、その2つが同じ文字列であるかどうかを判定します。例えば「hello」と「hello」のように、まったく同一の文字列であれば「同じ」とみなされます。 「見た目が似ている文字列」と「完全に一致する文字列」の違い 「Hello」と「hello」のように、一見すると同じように見えても大文字と小文字が異なるため、実際には等しくない文字列があります。これに対して、「World」と「World」のように1文字たりとも違わず完全に一致する場合のみ、「同じ文字列」として扱われます。 例 入力: str1[] = {Hello}, str2[] = {Hel
-
C言語で点がX軸またはY軸に平行かどうかを判定するプログラム
グラフ上に与えられた n 個の点について、その点群がX軸に平行なのか、Y軸に平行なのか、それともどちらの軸にも平行でないのかを判定する方法を解説します。グラフとは、直角に交わる2つの軸に沿って測定した2つの変数の関係を表す図のことです。「平行」とは、線と線の間隔がどこでも等しい状態を指し、鉄道の線路のように、2本の線がすべての地点で同じ距離を保っている関係をいいます。 つまりここで求めたいのは、「各点の座標と軸との位置関係がすべての点で揃っているかどうか」、すなわち点群がX軸またはY軸に対して平行に並んでいるかどうかという判定です。 軸とは何か グラフはX軸とY軸という2つの軸によって構成さ
-
C言語で数値がその桁の合計で割り切れるかどうかを判定するプログラム
数値 n が与えられたとき、その桁の合計が n を割り切れるかどうかを判定します。判定するには、一の位から順にすべての桁を合計し、その合計値で元の数値を割ればよいのです。例えば「521」という数値の場合、桁の合計は「5 + 2 + 1 = 8」となります。しかし、521 を 8 で割ると余りが残るため、割り切れないことがわかります。別の例として「60」を見てみましょう。桁の合計は「6 + 0 = 6」であり、6 は 60 を余りなく割り切ることができます。入出力例入力: 55 出力: No 説明: 5+5 = 10; 55は10で割り切れない 入力: 12 出力: Yes 説明: 1+2 =
-
【C言語】再帰を使って配列が回文かどうかを判定するプログラム
配列 arr[n](n は配列のサイズ)が与えられたとき、再帰を用いてその配列が回文かどうかを判定するのが本記事のテーマです。回文とは、前から読んでも後ろから読んでも同じになる並びのことで、「MADAM」や「NAMAN」などが代表的な例です。配列が回文かどうかを調べるには、先頭と末尾から順に要素を比較していきます。再帰的なアプローチでも同様に、start と end の値を更新しながら比較を続けます。start と end が交差(すれ違う)すれば回文と判定でき、途中で要素が一致しなかった場合はそこで処理を打ち切り、false を返します。入力例と出力例入力: arr[] = { 2, 3,
-
C言語で2つの行列の減算を行うプログラム
2つの行列 MAT1[row][column] と MAT2[row][column] が与えられたとき、両者の差を求め、減算結果を出力するプログラムを作成します。行列の減算は MAT1[n][m] − MAT2[n][m] のように表されます。行列同士の減算を行うためには、両方の行列の行数と列数が同じである必要があります。実行例Input: MAT1[N][N] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}} MAT2[N][N] = { {9, 8, 7}, {6, 5, 4}, {3, 2, 1}} Output: -8 -6 -
-
C言語でアロースターパターン(矢印型)を出力するプログラムの作り方
整数 n が与えられたとき、最大 n 個の星(アスタリスク)で構成される矢印型のパターンを出力するCプログラムを紹介します。星形パターンの出力は、二重ループ(ネストしたforループ)の理解を深めるのに最適な練習問題です。たとえば、入力が 4 の場合、出力は次のような矢印の形になります。出力例Input: 3 Output:Input: 5 Output:アプローチこのパターンを出力するための基本的な考え方は以下の通りです。整数値を入力として受け取ります。まず、n 個のスペースと n 個の星を出力します。n > 1 となる間、行ごとに星の数を減らしながら出力します。次に、n に達するまで星
-
C言語で配列の全要素の積を求めるプログラム
n個の要素を含む配列 arr[n] が与えられたとき、その配列内のすべての要素の積を求めることが課題となります。例えば、7つの要素からなる配列 arr[7] の場合、積は以下のように計算されます。例入力: arr[] = { 10, 20, 3, 4, 8 } 出力: 19200 説明: 10 × 20 × 3 × 4 × 8 = 19200 入力: arr[] = { 1, 2, 3, 4, 3, 2, 1 } 出力: 144解き方のアプローチ配列を入力として受け取る。配列のサイズを求める。配列を反復処理しながら、各要素を掛け合わせる。結果を表示する。アルゴリズム開始 関数 int pro
-
C言語プログラム:数値がその桁に含まれる数字で割り切れるかどうかを判定する方法
ある数値 n が与えられたとき、その数値を構成する各桁の数字の中に、元の数値を余りなく割り切れるものが存在するかどうかを判定するのが本記事の目的です。例えば、数値 128625 を考えてみましょう。この数値は 5 で割り切れますが、5 はまさにこの数値の桁に含まれています。このように、数値自身の桁の数字が約数になっているケースをチェックします。入出力例入力: 53142 出力: Yes 説明: この数値は 1、2、3 のいずれでも割り切れます。 これらはすべて数値の桁に含まれる数字です。 入力: 223 出力: No 説明: この数値は 2 でも 3 でも割り切れません。解決アプローチ以下の
-
C言語のメモリ割り当てとコンパイルプロセスに関する選択問題(MCQ)5問を徹底解説
この記事では、C言語におけるメモリ割り当てとコンパイルプロセスに関する選択式問題(MCQ)を5問取り上げ、それぞれの正解と詳しい解説を紹介します。C言語の基礎固めや試験対策にぜひ活用してください。 問題1:共用体(union)を使ったコードの出力結果は? 次のコードを実行すると、どのような出力になるでしょうか。 #include <stdio.h> #include <stdlib.h> int main() { union my_union { int i; float f; char c; };
-
C/C++の配列とは?宣言・初期化・要素へのアクセス方法をサンプルコード付きで解説
配列(Array)とは、同じデータ型の要素を固定した個数だけまとめて扱うことができるデータ構造です。配列の各要素は、メモリ上の連続した領域に順番に格納されます。配列の各要素には、配列名と角括弧「[]」を使ってインデックス番号を指定することでアクセスできます。たとえば a[0] や a[3] のように記述します。なお、C/C++の配列のインデックスは0から始まる点に注意しましょう。配列の宣言C/C++言語では、データ型と配列の長さ(要素数)を指定することで配列を宣言します。基本的な構文は以下の通りです。data_type array_name[length];たとえば、float型で要素数10の
-
C/C++で整数をfloatに代入するとどうなるか?挙動と比較結果を解説
整数型とfloat型の基本整数型は、正の値・負の値・ゼロなど、小数部分を持たない数値を定義するためのデータ型です。そのため、小数点以下の値を保持することはできません。一方、float(浮動小数点型)は、小数部分を持つ数値を定義するためのデータ型です。整数値はもちろん、小数も扱うことができます。それでは、同じ値をfloatと整数の両方に代入した場合、コンパイラがどのような値を出力するのかを実際に確認してみましょう。例1:同じ整数値をfloatとunsigned intに代入#include <iostream> using namespace std; int main(){
-
二分ヒープの配列表現を徹底解説!最小ヒープ・最大ヒープの違いとインデックス計算法
ヒープ順序の性質を満たす完全二分木のことを二分ヒープ(バイナリヒープ)と呼びます。二分ヒープは、優先度キューやヒープソートなど、多くのアルゴリズムの基礎となる重要なデータ構造です。 二分ヒープの種類 ノード間の大小関係に基づいて、二分ヒープは次の2種類に分類されます。 最小ヒープ(Min Heap) 各ノードの値が、必ず親ノードの値以上になるようなヒープです。この性質により、根(ルート)ノードには常に木全体の中で最も小さい値が格納されます。 最大ヒープ(Max Heap) 各ノードの値が、必ず親ノードの値以下になるようなヒープです。根ノードには常に木全体の中で最も大きい値が格納されます。 二分
-
バックトラッキングとは?基本概念からN-クイーン問題などの応用例まで徹底解説
バックトラッキングとは バックトラッキング(Backtracking)は、問題を解決するためのアルゴリズム技法の一つです。再帰呼び出しを活用し、解となる候補を一歩ずつ構築しながら探索を進めていきます。探索の過程で、与えられた制約条件を満たさない候補――すなわち最終的な解につながらない選択肢――はその時点で切り捨て、ひとつ前の分岐点に戻って別の道を試します。この「行き詰まったら引き返す」という動作が、バックトラッキングという名前の由来です。 バックトラッキングが適用される主な問題の種類 決定問題: 問題に対して実行可能な解が存在するかどうかを判定し、一つの実行可能解を見つけます。 最適化問
-
無線周波数(RF)スペクトルの帯域とは?VLFからEHFまでの周波数帯と用途を解説
無線周波数(RF)とは無線周波数(RF:Radio Frequency)とは、交流電流や交流電圧、あるいはその他の振動体が20kHz〜300GHzの周波数範囲で振動する現象を指します。あるデバイスの無線周波数スペクトルとは、そのデバイスが捕捉・処理・再生できる周波数範囲のことです。一般的には20Hz〜20kHz程度の範囲が該当します。また、「帯域(バンド)」とは、超低周波から極高周波までの広い範囲を分割した周波数区間のことです。各帯域はスペクトルのごく一部を担う小さな周波数範囲として定義されています。無線周波数スペクトルにおける帯域の一覧周波数範囲(Frequency Range)とは、上限周
-
C言語のbar()関数とは?グラフィックスで塗りつぶし矩形を描く方法
bar() 関数は、C言語のグラフィックス描画に使用される関数の一つです。図形を描くための各種関数がまとめられた graphics.h ヘッダーファイルの中に定義されており、このヘッダーをインクルードすることで利用できます。bar()関数の構文void bar(int left, int top, int right, int bottom);bar() 関数は、棒グラフの「バー」のような2次元の図形、すなわち塗りつぶされた長方形を描画するために使われます。引数は4つあり、それぞれ以下の座標を指定します。left / top: 長方形の左上隅の (X, Y) 座標right / bottom:
-
数値が素数かどうかを判定するBashプログラムの書き方
Bash(GNU bash)は、Unix系オペレーティングシステムで広く利用されているコマンド言語兼シェルスクリプトのコマンドラインインタプリタです。Brian Foxによって設計され、従来のBourneシェル(sh)を置き換えるフリーソフトウェアとして1989年に初めてリリースされました。現在では、LinuxやmacOSなど多くのOSで標準のログインシェルとして採用されています。 素数とは、1とその数自身という2つの約数しか持たない正の整数のことです。例えば、2、3、5、7、11、13、17、19、23、29などが該当します。 この記事では、与えられた数値が素数であるかどうかを判定するBas
-
C言語で16進数を8進数に変換するプログラムの書き方【サンプルコード付き】
文字列として与えられた16進数を、8進数へ変換するのがこのプログラムの目的です。16進数から8進数への直接変換は複雑なため、次の2段階の手順で行います。16進数を一度2進数に変換するその2進数を8進数に変換する16進数とは16進数は基数が16の記数法です。0〜9の数字に加え、10以上の値はアルファベットで表され、A=10、B=11、C=12、D=13、E=14、F=15 に対応します。16進数を2進数に変換するときは、各桁ごとに4ビットの2進数へ置き換え、それらを連結して1つの2進数を作ります。8進数とは8進数は基数が8の記数法で、0〜7の数字だけで表されます。コンピュータの内部では、2進数を
-
配列やループを使わずにC言語で{1, 2, 3, … n}のすべての部分集合を出力する方法
正の整数 n が与えられたとき、配列やループを一切使用せずに、集合 {1, 2, 3, 4, … n} のすべての部分集合(サブセット)を出力することを目標とします。 例えば 3 が与えられた場合、集合 {1, 2, 3} のすべての部分集合、つまり {1 2 3}、{1 2}、{2 3}、{1 3}、{1}、{2}、{3}、{ } を出力します。 ただし、これらの出力にはループも配列も使用できません。したがって、この種の問題を配列やループなしで解決するには、再帰呼び出しを利用する方法が唯一の選択肢となります。 例 入力: 3 出力: { 1 2 3 }{ 1 2 }{ 1 3
-
数値を英語の単語に変換するCプログラムの書き方
数値で構成された文字列が与えられたとき、その数値を英語の単語(スペル表記)へ変換するのが本記事の課題です。例えば、入力が「361」であれば、出力は「Three hundred sixty one」となるようにします。この問題を解くためには、一の位・十の位・百の位・千の位など、それぞれの数字がどの桁に位置しているのかを意識することが重要です。なお、今回紹介するコードは最大4桁、つまり0から9999までの数値に対応しています。したがって、入力は0〜9999の範囲である必要があります。例として「1,111」を考えてみましょう。各桁は以下のように対応します。千の位:1(one thousand)百の位