Cプログラミング

 Computer >> コンピューター >  >> プログラミング >> Cプログラミング
  1. 【C言語】文字列の配列を逆順に並べ替える方法を解説

    この記事では、「文字列の配列が与えられるので、それを逆順に並べ替えるCプログラムを作成する」という問題を扱います。配列の要素を逆順にするというのは、最後の要素を先頭に、最後から2番目の要素を2番目に……といった具合に、前後を入れ替えていくことを意味します。問題を理解するための具体例まずは入力と出力の例を見てみましょう。入力strarr[] = {learn, programming, at, tutorialspoint}出力strarr[] = {tutorialspoint, at, programming, learn}このように、配列内の文字列の順序が完全に反転しています。解決のアプロ

  2. 【C言語】片方向リンクリストの各ノードの値を反転するプログラム

    はじめに 本記事では、連結リストが与えられた際に、各ノードが保持する値を反転させるC言語プログラムの作成方法を解説します。 リンクリスト内の各ノードを順番に取り出し、そのノードの数値を桁ごとに逆順へ並べ替えていきます。 連結リストとは、データの要素(ノード)同士がポインタによって次々と連結された、線形データ構造の一種です。 具体例を使って問題を確認しましょう。 入力 34 12 89 56 72 出力 43 21 98 65 27 解決のためのアプローチ この問題は、以下の手順で解くことができます。 片方向リンクリストを先頭から末尾まで走査します。 現在のノードの値を取り出し、数値として反転

  3. C言語で非決定性有限オートマトン(NFA)をシミュレートする方法

    この記事では、非決定性有限オートマトン(NFA)をシミュレートするCプログラムの作成方法について解説します。 NFA(Non-deterministic Finite Automata:非決定性有限オートマトン)とは、ある入力記号に対して複数の状態への遷移が可能な有限状態機械のことです。つまり、入力に対して機械がどの状態に移動するかが一意に定まらない点が特徴です。 NFAの形式的定義 NFA/NDFA(非決定性有限オートマトン)は、次の5つ組(Q, Σ, δ, q0, F)で表現できます。 Q:状態の有限集合 Σ:アルファベットと呼ばれる記号の有限集合 δ:遷移関数。δ: Q × Σ →

  4. C言語で名前・文字列の配列をソートする方法|qsort()とstrcmp()の使い方

    この記事では、文字列(名前)の配列を受け取り、それをアルファベット順(昇順)に並べ替えるC言語プログラムを作成します。入力として与えられたすべての名前を、辞書順にソートするのが目的です。 まずは具体例で問題を確認しましょう。 入力 namesArray = [Rishabh, Jyoti, Palak, Akash] 出力 [Akash, Jyoti, Palak, Rishabh] 解決のアプローチ この問題は、C言語の標準ライブラリに用意されている汎用ソート関数 qsort() を使うことで解決できます。整数値の配列をソートする場合と基本的な考え方は同じですが、今回異なるのは、比較対象が

  5. C言語グラフィックスで学ぶフラッドフィル(領域塗りつぶし)アルゴリズムの実装方法

    基本概念 フラッドフィル(Flood Fill:領域塗りつぶし)アルゴリズムは、指定した1点を起点として、同じ色でつながっている隣接ピクセルを順番に新しい色へ置き換えていく手法です。ペイントソフトの「塗りつぶしツール(バケツツール)」などでも使われている、コンピュータグラフィックスにおける基本的なアルゴリズムの一つです。 本記事では、C言語のグラフィックスライブラリ(graphics.h)を利用し、与えられた長方形の内部をフラッドフィルアルゴリズムで塗りつぶす方法を解説します。 入力例 rectangle(left = 50, top = 50, right = 100, bottom =

  6. C言語のfillpoly()関数とは?図形の塗りつぶし方法を解説

    概要C言語のグラフィックス用ヘッダーファイル「graphics.h」には、三角形、四角形、五角形、六角形などの多角形(ポリゴン)を描画し、その内部を塗りつぶすための fillpoly() 関数が用意されています。この関数は、線のみを描く drawpoly() 関数と同じ引数を受け取る点が特徴です。構文void fillpoly( int number, int *polypoints );各引数の意味は以下の通りです。number:頂点の数を n とした場合、「n + 1」個の点の数を指定します。polypoints:「n × 2」個の整数からなる配列へのポインタです。整数は2つで1組となり、

  7. C言語でマージソートの最悪ケースを引き起こす順列を見つける方法

    概要与えられた要素の集合に対して、「どのような順列(並べ方)ならマージソートの最悪ケースになるか」を求めるのが本記事のテーマです。マージソートは漸近的には常に O(n log n) の時間計算量で動作することが知られています。しかし、実際の処理時間は比較回数に大きく依存するため、比較回数が最も多くなる入力ほど、実行時間も長くなります。そこでここでは、標準的なマージソートアルゴリズムでソートした際に比較回数が最大となる入力順列を求めることを目指します。例:ソート済み配列として次の要素を考えます。11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26これに対

  8. C++でAとBのXORがCと等しくなるようにフリップする最小ビットをカウントします

    長さNの3つの2進数列 A、B、C が与えられます。それぞれの数列は1つの2進数を表しています。このとき、A と B のXOR(排他的論理和)の結果が C と一致するようにするために、A または B のビットを反転(フリップ)する必要のある最小回数を求めるのが本記事の目的です。XOR演算の真理値表まず、XOR演算の真理値表をおさらいしておきましょう。XYX XOR Y000011101110上の表からわかるように、X と Y が同じ値であれば X XOR Y は 0 となり、異なる値であれば 1 となります。この性質を利用することで、A と B のどのビットを反転すれば C に到達できるかを効

  9. C言語で1つのプロセス内に作成できるスレッドの最大数を調べる方法

    はじめにこの記事では、C言語で1つのプロセス内に作成できるスレッドの最大数を調べるプログラムについて解説します。スレッドは「軽量プロセス」とも呼ばれ、スケジューラによって独立して管理されます。スレッドはプロセスの構成要素であるため、1つのプロセスに対して複数のスレッドを関連付けることができます。また、プロセスよりも軽量なため、コンテキストスイッチにかかる時間も短くなります。スレッドはプロセスに比べて必要なリソースが少なく、同一プロセス内の他のスレッドとメモリを共有できる点も大きな特徴です。オペレーティングシステムは、ユーザーレベルのすべてのスレッドを1つのタスクとして扱います。そのため、スレッ

  10. C言語で学生のレコードを構造体として保存し、名前順にソートする方法

    この記事では、学籍番号(student_id)、氏名(student_name)、成績(student_percentage)からなる学生のレコードを扱います。目標は、これらの学生レコードを構造体として保存し、氏名のアルファベット順にソートして表示するCプログラムを作成することです。問題の例まず、具体的な入力と出力を見て、問題の内容を理解しましょう。入力: 学生レコード ={{ student_id = 1, student_name = Nupur, student_percentage = 98}, { student_id = 2, student_name = Akash, stude

  11. Cプログラミング言語の標準規格とは?main関数の正しい書き方を解説

    この記事では、Cプログラミング言語で定義されている標準規格について解説します。標準規格とは、開発コミュニティによって定められた、プログラムがコンパイラによって理想的にコンパイルされるべき標準的な方法のことです。 理解を深めるために、誰もが一度は目にしたことのある、よくあるCプログラムの例を取り上げてみましょう。問題に気づいていても、その背景まで踏み込んで考えたことはないかもしれません。 main()関数のvoid戻り値型の問題 まず、次のプログラムを見てください。 void main() { // プログラムコード } このプログラムは、Turbo Cコンパイラを使用すれば正常に動

  12. C言語で2つの整数をビット演算で再帰的に加算する方法

    この問題では、2つの整数が与えられ、ビット演算を用いた再帰的な加算を行うCプログラムを作成することが課題となります。 ビット演算で加算する仕組み ビット演算で和を求める考え方は、幼い頃に学んだ「筆算のやり方」と本質的に同じです。各桁の数字を順番に足していき、繰り上がりが発生したら、その繰り上がりを次の桁に加算します。 今回のアプローチでもまったく同じことを行います。XOR(排他的論理和)演算子で和を計算し、AND(論理積)演算で繰り上がりの有無を確認します。繰り上がりが存在すれば、それを再度数値に加算し、なければそこで処理を完了します。 実はこれは、デジタル電子回路で学ぶ半加算器(Half-A

  13. C言語で1つ目の配列の最大値と2つ目の配列の最小値の積を求める方法

    問題概要 それぞれ n1 個と n2 個の要素を持つ2つの整数型配列 arr1[] と arr2[] が与えられたとき、「1つ目の配列 arr1[] の最大要素」と「2つ目の配列 arr2[] の最小要素」を掛け合わせた積を求めるのが本記事のテーマです。 例えば、arr1[] = {5, 1, 6, 8, 9} なら最大値は 9、arr2[] = {2, 9, 8, 5, 3} なら最小値は 2 となります。したがって答えは 9 × 2 = 18 です。この計算を行うC言語のプログラムを作成していきましょう。 入出力例 入力例1 arr1[] = {6, 2, 5, 4, 1} arr2[]

  14. 【C言語】数値Nと最大の奇数の桁との積を求める方法

    問題概要ある数値Nが与えられたとき、Nとその各桁の中で最も大きい奇数との積を求める必要があります。もし奇数の桁が一つも存在しない場合は、-1を出力します。例えば、Nを「153」で初期化した場合、この数に含まれる最大の奇数の桁は5なので、結果は153 × 5 = 765となります。一方、「246」のように奇数の桁がまったく含まれていない数の場合は、出力は-1となります。入力 − N = 198出力 − 1782説明 − 198 × 9 = 1782入力 − N = 15382出力 − 76910説明 − 15382 × 5 = 76910問題を解くためのアプローチこの問題は、以下の手順で解決でき

  15. C言語で文字列に特殊文字が含まれているか判定するプログラム

    文字列 str[] が与えられたとき、その文字列に特殊文字が含まれているかどうかを判定します。特殊文字が含まれている場合は「The String is not accepted(文字列は受け付けられません)」と出力し、含まれていない場合は「The string is accepted(文字列は受け付けられます)」と出力します。 ここでいう特殊文字とは、数字でもアルファベットでもない文字のことで、具体的には以下のような記号が該当します。 !@#$%^&*()+=-][;/.,{}|:<>?`~ C言語では、if-else 文を使ったアプローチでこの問題を解決できます。 入力:

  16. C言語で配列がソート済みかどうかを判定するプログラム(再帰・反復の両アプローチを解説)

    要素数 n の配列 arr[] が与えられたとき、その配列がソート済み(昇順)であるかどうかを判定するのが本記事のテーマです。ソート済みであれば「The array is in sorted order」を出力し、そうでなければ「The array is not in sorted order」を出力します。この問題は再帰と反復(ループ)という2つのアプローチで解くことができます。ここでは、それぞれの方法を順番に詳しく解説していきます。再帰によるアプローチ再帰とは、求める結果が得られるまで関数自身を繰り返し呼び出す手法のことです。再帰を用いる場合、関数が返す値はスタックメモリに保存されるという

  17. C言語で2つの分数を比較して大きい方を求めるプログラム

    分子 nume1・nume2 と、それぞれに対応する分母 deno1・deno2 を持つ2つの分数が与えられたとき、両者を比較してより大きい方の分数を求めるのが本記事の課題です。たとえば分数 1/2 と 2/3 を比べた場合、1/2 の値は 0.5、2/3 の値は約 0.66667 となるため、大きいのは 2/3 です。入出力例例1入力:first.nume = 2, first.deno = 3 second.nume = 4, second.deno = 3出力:4/3説明:2/3 = 0.66667 < 4/3 = 1.33333例2入力:first.nume = 1, first

  18. 【C言語】奇数次正方行列の中央の行と列の積を求める方法

    はじめに 正方行列 mat[row][column](行数と列数が等しい行列)を考えます。このとき、行と列の長さが奇数、つまり 2 で割り切れない値である場合、その行列の中央の行と中央の列に含まれる各要素の積を求めるのが本記事の目的です。 たとえば下図のような 3×3 の行列では、2 行目が中央の行、2 列目が中央の列に相当します。 制約条件 入力は必ず正方行列(行数 = 列数)であること。 行と列の長さは必ず奇数であること。 入出力例 例 1 入力: mat[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} 出力: 中央の行の積 = 120 中央の列の積

  19. C言語で2つの複素数の和を求めるプログラム

    a1 + ib1 と a2 + ib2 の形式で表される2つの複素数が与えられたとき、これら2つの複素数の和を求めるのが本記事の目的です。複素数とは「a + ib」の形で表すことのできる数のことです。ここで「a」と「b」は実数、「i」は虚数単位と呼ばれる虚数です。虚数単位 i は方程式 x² = −1 の解であり、この等式を満たす実数は存在しないため、虚数と呼ばれています。入出力例例1入力a1 = 3, b1 = 8 a2 = 5, b2 = 2出力複素数1: 3 + i8 複素数2: 5 + i2 複素数の和: 8 + i10解説(3+i8) + (5+i2) = (3+5) + i(8+2

  20. C言語でN個の分数の積を既約分数として求める方法

    N個の分数について、それぞれの分子(num)と分母(den)が与えられたとき、それら全ての積を計算し、結果を既約分数(約分された形)で出力することが課題です。例えば、「4/5」と「3/4」という2つの分数の場合、1つ目の分数の分子に2つ目の分数の分子を掛け、1つ目の分数の分母に2つ目の分数の分母を掛けることで積を求めます。このとき最終的な結果は「12/20」になりますが、これは約分できるため、出力は「3/5」となります。本記事では、この問題を解くプログラムをC言語で作成していきます。入力fraction f[3] = {{1,2}, {2,1}, {5,6}}出力5/6説明 − 1/2 × 2

Total 1445 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:48/73  20-コンピューター/Page Goto:1 42 43 44 45 46 47 48 49 50 51 52 53 54