Cプログラミング

 Computer >> コンピューター >  >> プログラミング >> Cプログラミング
  1. C言語で高さを計算せずに完全二分木の中間レベルを出力する方法

    このプログラムは、二分木の中間レベルに存在するノードを出力するものです。例えば、二分木が4つのレベルを持つ場合、2番目のレベルのノードを出力します。ここでのポイントは、木の高さ(深さ)を事前に計算することなく中間レベルを求めるという点です。完全二分木とは?完全二分木(Perfect Binary Tree)とは、すべての内部ノードが必ず2つの子ノードを持ち、すべての葉ノードが同じレベル(深さ)に位置する木のことです。上図の場合:内部ノードである21と32は、どちらも子ノードを持っています。葉ノードである41、59、33、70は、すべて同じレベルに配置されています。この2つの性質を満たしているた

  2. C言語で二分木の右側ビュー(Right View)を出力する方法

    この記事では、与えられた二分木の「右側ビュー(Right View)」――すなわち、木を右側から見たときに見えるノード――を出力するC言語プログラムについて解説します。まずデータを挿入して二分木を構築し、その後、完成した木の右側ビューを画面に表示します。 上の図は、ノード10・42・93・14・35・96・57・88から構成される二分木を表しています。この中で木の右側に位置するノードが選ばれ、画面に表示されます。たとえば、10・93・57・88がこの二分木における最も右側のノードに該当します。 実行例 入力:10 42 93 14 35 96 57 88 出力:10 93 57 88 二分

  3. 【C言語】連結リストを実際には反転せずに逆順で表示する方法

    この課題では、再帰関数を使用して、与えられた連結リスト(リンクリスト)を逆順に表示します。ポイントは、リストそのものを反転させるのではなく「逆順に表示する」だけである点です。つまり、ノードのつながりの順序は元のまま一切変わりません。 仕組みとしては、先頭ノードのアドレスを持つヘッドポインタが、リストの末尾ノードに格納されている NULL が見つかるまで次々と次のノードへ移動し、その後、呼び出しが戻りながら各ノードのデータを表示していきます。 実行例 Input: 29 34 43 56 Output: 56 43 34 29 まず、ノードをリストに挿入し、ポインタを挿入済みのノードに向けます。

  4. Cプログラムで行列を対角パターンに沿って数値出力する方法

    この課題は、n×nの行列を対角パターンで出力することです。 例えば n が 3 の場合、対角パターンに従って行列を出力すると、次のような配置になります。 そして、実際の出力結果は以下の通りです。 実行例 Input: 3 Output: 1 2 4 3 5 7 6 8 9 Input: 4 Output: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 考え方 一見すると、「数値 n を受け取り n×n の行列を生成し、それを対角方向に走査しながら別の行列へ値を格納する」というアプローチが思い浮かびます

  5. C言語で連結リストの交互ノードを出力する方法(反復法)

    この問題では、与えられた連結リストから交互のノードを出力するプログラムを作成します。つまり、1つ飛ばしでノードを表示していく処理を、反復法(イテレーティブな手法)を用いて実装します。 反復法とは、条件が真(true)である限り繰り返し実行されるループを使用する手法のことです。 例えば、リストに 29、34、43、56、88 というノードが格納されている場合、出力結果は交互ノードである 29、43、88 となります。 例 入力: 29->34->43->56->88 出力: 29 43 88 アプローチ 基本的な考え方は、リストを最後のノードまで走査するというものです。走

  6. C言語の再帰を使って連結リストの末尾からk個のノードを表示する方法

    本記事では、再帰(リカーシブ)アプローチを用いて、連結リスト(リンクリスト)の末尾からk個のノードを表示する方法を解説します。 再帰的アプローチとは、関数が終了条件を満たすまで自分自身を繰り返し呼び出し、その過程で結果を保持していく手法のことです。連結リストは前方へのポインタしか持たないため、末尾側から処理を行いたい場合には再帰が特に有効です。 例えば、リストが 29、34、43、56、88 というノードを持っており、k の値が 2 である場合、出力は末尾から 2 個のノード、つまり「88」と「56」になります。 実行例 連結リスト: 29->34->43->56->

  7. C言語でO(1)の追加メモリ領域のみを使ってn×nのスパイラル行列を出力する方法

    正の整数 n が与えられたとき、追加の作業用メモリを O(1) しか使用せずに、時計回り方向の n×n スパイラル行列を生成して出力する方法を解説します。スパイラル行列とは、円の原点から出発し、時計回りに渦を描くように値を埋めていく行列のことです。ここでは、2 → 4 → 6 → 8 → 10 → 12 → 14 → 16 → 18 というように偶数を渦状に配置した行列を、O(1) の空間計算量で出力することを目標とします。以下にスパイラル行列の例を示します。実行例入力: 3 出力: 9 8 7 2 1 6 3 4 1メモリを無制限に使えばこの問題は簡単に解けますが、そ

  8. 連結リストの末尾k個のノードを逆順に出力する方法【C言語・反復アプローチ】

    本記事では、連結リスト(リンクリスト)の末尾からk個のノードを逆順に表示するプログラムを、反復アプローチ(繰り返し処理)を用いてC言語で実装する方法を解説します。反復法とは、条件式が真(true)である限りループを繰り返し実行する手法のことです。再帰呼び出しを使わずにシンプルなループ処理だけで問題を解決できる点が特徴です。例えば、リストが「29 → 34 → 43 → 56 → 88」というノードで構成されており、k = 2 が与えられた場合、出力は末尾から2つのノードである「56」と「88」になります。入力例と出力例Linked List: 29->34->43->56-&

  9. C言語で連結リストの指定インデックスのノードを出力・検索する方法

    連結リスト(リンクリスト)において、指定されたインデックス位置にあるノードのデータを出力する方法を解説します。配列と異なり、連結リストには一般的にインデックスという概念が存在しないため、リスト全体を先頭から順に走査し、目的の位置に到達した時点でデータを出力する必要があります。例えば、リストが 29、34、43、56、88 というノードを保持しており、指定するインデックスが 1、2、4 である場合、出力はこれらのインデックスに対応するノード、すなわち 34、43、88 となります。例連結リスト: 29->34->43->56->88入力: 1 2 4出力: 34 43 8

  10. C言語で対称的な二重三角形パターンを出力する

    指定された行数に基づき、最小限の計算量で対称的な二重三角形パターンを出力するCプログラムを解説します。 実行例 入力: 5 出力: X X O X O X X O X O X X O X O X X この問題は大きく分けて3つのパートで構成されます。 上半分の出力: nが奇数ならn-1行、偶数ならn-2行 中央部分の出力: nが奇数なら1行、偶数なら3行 下半分の出力: nが奇数ならn-1行、偶数ならn-2行 アルゴリズムの概要 パターン生成の手順は以下の通りです。 初期化: nが偶数の場合

  11. 【C言語】合計がNになるように、0と1のみで構成される数を出力するプログラム

    問題概要整数 n が与えられたとき、0と1のみで構成される数を組み合わせて、その合計がちょうど n になるような組み合わせを出力するのが課題です。0と1だけで表現できる数には「1」「10」「11」などがあります。これらの数を足し合わせて合計が n と等しくなるように、該当する数を順番に出力します。たとえば n = 31 を入力した場合、「10 + 10 + 11」または「10 + 10 + 10 + 1」といった組み合わせが答えになります。入力例と出力例Input: 31Output: 10 10 10 1アルゴリズム残りの値に応じて「10」「11」「1」を選びながら合計を組み立てていくシンプ

  12. C言語で配列の重複を削除し、ソート済みの一意な要素を出力する方法

    整数型の要素を持つ配列が与えられたとき、重複する値を取り除き、一意な(distinct)要素だけをソートして出力するのが本記事の目的です。例として、次のような整数値を格納した配列を考えてみましょう。4, 6, 5, 3, 4, 5, 2, 8, 7, 0この配列を単純にソートすると「0, 2, 3, 4, 4, 5, 5, 6, 7, 8」となりますが、この結果にはまだ重複値である 4 と 5 が含まれています。これらを削除し、最終的な出力結果は次のようになります。0, 2, 3, 4, 5, 6, 7, 8入力と出力の例Input: array[] = {4, 6, 5, 3, 4, 5,

  13. Cプログラムで文字列を画面に出力するための最短パスを求める方法

    文字列が与えられたとき、その文字列を画面上に出力するまでの最短パス(移動手順)を表示するCプログラムを紹介します。画面には、アルファベットが以下のように1行に5文字ずつ配置されているものとします。 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z カーソルは初期状態で左上の「A」の位置におり、各文字の位置へ最短ルートで移動しながら文字を出力していきます。 例 入力: HUP 出力: Move Down Move Down Move Down destination reached Move Left Move Left Move Down

  14. C言語でスネークパターン(蛇行順)に行列を出力する方法

    n×nサイズの2次元配列が与えられたとき、要素の元の位置を一切変更せずに、スネークパターン(蛇行する順序)で配列の要素を出力するCプログラムを紹介します。例入力: arr[]= 100 99 98 97 93 94 95 96 92 91 90 89 85 86 87 88 出力: 100 99 98 97 96 95 94 93 92 91 90 89 88 87 86 85このプログラムでは、行列の各行を順番に走査し、その行が偶数行か奇数行かを判定することで処理を切り替えます。偶数行(0行目、2行目など)の場合:その行の要素を左から右へ出力します。奇数行(1行

  15. C言語で行列をスネークパターンで出力する方法(最後の列から開始)

    n×nサイズの2次元配列が与えられたとき、元のデータの並びを一切変更せずに、最後の列から蛇行(スネーク)パターンで要素を出力するプログラムをC言語で作成します。つまり、各行の末尾(arr[i][n-1])から出力を始め、行ごとに方向を交互に切り替えながら全体をなぞっていくイメージです。処理のイメージ例えば以下のような4×4の行列があるとします。Input: arr[]= 100 99 98 97    93 94 95 96    92 91 90 89    85 86 87 88 Output: 97 98 99 100 96 9

  16. C言語で行列をジグザグ(波状)形式に出力する方法

    行数と列数を持つ行列 mat[row][col] が与えられたとき、その行列を下の図のようにジグザグ(波状)形式で出力する必要があります。 期待される出力は以下のとおりです。 Output: 10 20 40 70 50 30 60 80 90 この問題に対しては、行列を対角線に沿って走査し、1本の対角線の要素を出力し終えるたびに走査方向を反転させるというシンプルなアプローチを採用しています。 アルゴリズム 開始 ステップ1:k = 3、l = 3 を宣言して設定する ステップ2:行列 mat[][3] を宣言する ステップ3:row = 0、col = 0、flag = false を宣言

  17. C#プログラミングにおけるボクシングとアンボクシングの違いを徹底解説

    C#には、値型(value type)と参照型(reference type)を相互に変換するための仕組みとして、「ボクシング(Boxing)」と「アンボクシング(Unboxing)」の2つが用意されています。ボクシングは値型からオブジェクト型への変換を行う処理であり、アンボクシングはその逆で、オブジェクト型から値型へ変換する処理を指します。本記事では、ボクシングとアンボクシングの重要な違いを比較表とサンプルコードを使ってわかりやすく解説します。ボクシングとアンボクシングの主な違い番号項目ボクシングアンボクシング1処理内容値型をオブジェクト型として扱えるようにする変換処理です。ボックス化された

  18. CとC++の違いとは?6つの観点で徹底比較

    プログラミング言語の世界において、「C」と「C++」は最も歴史が長く、今なお幅広い分野で活用されている二大言語です。どちらもアプリケーション開発に使用されますが、設計思想や提供する機能には大きな違いがあります。最大の相違点は、Cがクラスやオブジェクトの概念を持たない手続き型プログラミング言語であるのに対し、C++は手続き型とオブジェクト指向プログラミングの両方の特徴を兼ね備えた言語であるという点です。 本記事では、CとC++の重要な違いを6つの観点から詳しく解説します。 CとC++の違い 比較表 No.項目CC++ 1開発の経緯デニス・リッチーによって、1969年頃にAT&Tベ

  19. 値渡し(Call by Value)と参照渡し(Call by Reference)の違いを徹底解説

    プログラミングにおいて、関数へ引数を渡す方法は大きく分けて2種類あります。それが「値渡し(Call by Value)」と「参照渡し(Call by Reference)」です。 名前が示す通り、値渡しでは引数の実際の値そのものを関数に渡すのに対し、参照渡しでは引数のメモリ上の場所(アドレス・参照)を渡します。この違いにより、関数内でのデータの扱いや変更の影響範囲が大きく異なってきます。 以下の表に、値渡しと参照渡しの重要な違いをまとめました。 No.項目値渡し(Call by Value)参照渡し(Call by Reference) 1命名の由来引数の「値」そのものを渡して関数を

  20. Cプログラムにおけるコンパイル時エラーと実行時エラーの違いを徹底解説

    エラーや例外とは、コードの実行が何らかの原因で中断され、期待していた結果が最終的に得られなくなる現象を指します。エラーが発生・検出されるタイミングによって、コンパイル時エラー(Compile Time Error)と実行時エラー(Runtime Error)の2種類に分類できます。本記事では、両者の重要な違いを比較表とサンプルコードを使ってわかりやすく解説します。No.項目コンパイル時エラー実行時エラー1対象主に構文や意味(セマンティクス)に関する誤りに対して発生します。コードを実行している最中に発生するエラーです。2検出開発段階でコンパイラによって検出されます。コンパイラでは検出できず、プロ

Total 1445 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:35/73  20-コンピューター/Page Goto:1 29 30 31 32 33 34 35 36 37 38 39 40 41