-
C言語とPythonの違いとは?主要な6つの相違点を徹底比較
CとPythonは、現在もっとも広く使われているプログラミング言語の2つです。それぞれが持つ特性や機能によって、アプリケーション開発の世界で高い人気を誇っています。本記事では、これらの特徴をもとに、CとPythonの主な違いをわかりやすく解説します。 C言語とPythonの主な違い一覧 以下の表は、C言語とPythonの重要な違いを6つの観点からまとめたものです。 番号項目C言語Python 1定義Cは汎用プログラミング言語で、非常に人気が高く、シンプルかつ柔軟性に富んでいます。マシンに依存しない構造化言語として、さまざまなアプリケーションで幅広く利用されています。Pythonは、イン
-
C言語におけるscanf()とgets()の違いを徹底解説
C言語には、外部ソースから入力を受け取り、システムに渡すための関数として scanf() と gets() が定義されています。どちらも標準入力を扱う関数ですが、動作の仕組みにはいくつかの重要な違いがあります。scanf() と gets() の主な違い以下の表は、C言語における scanf() と gets() の重要な違いをまとめたものです。番号比較項目scanf() 関数gets() 関数1定義キーボードからの入力を読み取り、指定された書式指定子に従って格納します。空白文字・改行・EOFに遭遇すると読み取りを終了します。改行またはEOFに遭遇するまで、キーボードからの入力を受け取ります。
-
【C言語】ループ・再帰・制御構造を使わずに「ABCD」を繰り返し出力するプログラムの作成方法
問題概要この記事では、ループ(for文・while文)、再帰呼び出し、そしてif文などの制御構造を一切使わずに、文字列「ABCD」を繰り返し出力するC言語プログラムを作成します。通常、同じ処理を繰り返し実行する場合、ループや再帰、条件分岐といった制御構造を使うのが一般的です。しかし今回はこれらの手法がすべて禁止されているため、まったく別のアプローチが必要になります。解決のアプローチポイントとなるのは、system() 関数です。この関数を使うと、OSのコマンドを実行できるため、プログラムの中から自分自身の実行ファイルを再度起動することができます。つまり、「同じブロックのコードを無限に実行する」
-
C言語でセミコロンを使わずに「Tutorials Point」を出力するプログラムの作成方法
この記事では、C言語においてセミコロン(;)を一切使わずに「Tutorials Point」という文字列を出力するプログラムの書き方を解説します。C言語では、文の終わりにセミコロンを付けるのが基本ルールです。通常、printf関数による出力も、文末にセミコロンがあって初めて実行されます。では、セミコロンなしで文字列を出力するにはどうすればよいのでしょうか?その鍵となるのが、printf関数の戻り値です。printf関数は、実際に出力された文字数(整数)を返り値として返します。この仕様を利用することで、セミコロンを使わずに文字列を出力できます。printf関数の構文int printf(cons
-
【Bash入門】awk・sed・headを使ってファイルから特定の行を抽出・表示する方法
この記事では、text.txtというファイルから特定の行だけを抜き出して表示する方法を解説します。Bashスクリプトで特定の行を取得するには、主にawk、sed、head(tailと組み合わせ)の3つの方法があります。それぞれのコマンドには特徴があり、状況に応じて使い分けることで効率的にテキスト処理が行えます。基本構文まず、各コマンドの基本的な書式を確認しておきましょう。LINE_NUMBERには表示したい行番号、filenameには対象のファイル名を指定します。$> awk {if(NR==LINE_NUMBER) print $0} filename $> sed -n LIN
-
C言語でCtrl+Cを押しても終了しないプログラムを作成する方法
この記事では、Ctrl+Cを押してもプログラムが終了せず、代わりに「Ctrl + C cannot terminate the program」というメッセージを表示するプログラムをC言語で作成する方法を解説します。 解決のカギ:シグナルハンドリング キーボードからCtrl+Cを入力すると、OSはプロセスに対してSIGINT(割り込みシグナル)を送信し、通常であればプログラムは強制終了されます。 この動作を回避するには、signal()関数を使ってSIGINTシグナルを捕捉(キャッチ)し、独自のハンドラ関数で処理します。これにより、デフォルトの「終了する」という動作を上書きすることができます
-
【C言語】アナグラム部分文字列検索プログラムの実装方法
この記事では、長さnのテキスト文字列と長さmのパターン文字列が与えられたとき、テキスト中にパターン本体およびそのすべての順列(アナグラム)が出現する位置を見つける「アナグラム部分文字列検索」のプログラムをC言語で実装する方法を解説します。問題の概要与えられたテキストの中から、パターンそのものだけでなく、パターンを構成する文字を並べ替えた文字列(アナグラム)も含めて、すべての出現位置を検出するのが課題です。入力例text = xyztrwqyzxfg pattern = xyz出力例Found at index 0Found at index 7この例では、テキストの0番目にあるxyzと、7番目
-
反復マージソートをC言語で実装する方法|サンプルコードと実行結果を解説
マージソート(Merge Sort)は、分割統治法(Divide and Conquer)に基づく代表的な整列アルゴリズムの一つです。時間計算量はO(n log n)と非常に効率的で、まず配列を同じ大きさの半分に分割し、その後決められた手順で結合(マージ)していくことで、整列済みの配列を作り上げます。反復マージソートとは反復マージソートでは、要素を半分ずつに分割していく処理に再帰的なアプローチを採用し、分割された部分配列を整列済みの状態で結合して戻す処理に反復的なアプローチを使用します。反復マージソートのCプログラム以下は、マージソートをC言語で記述したサンプルプログラムです。merge()関
-
【C言語】KMPアルゴリズムでパターン検索を行うプログラムの実装方法
この問題では、テキスト(text)とパターン(pattern)という2つの文字列が与えられます。求められているのは、KMP(Knuth Morris Pratt)アルゴリズムを用いたパターン検索プログラムを作成し、テキスト文字列の中にパターンが出現するすべての位置(インデックス)を見つけ出すことです。それでは、具体的な例を使って問題を確認してみましょう。入力例text = xyztrwqxyzfg pattern = xyz出力例Found at index 0 Found at index 7この例では、テキスト「xyztrwqxyzfg」の中に、パターン「xyz」がインデックス0とインデッ
-
C言語で実装するラビン・カープ(Rabin-Karp)アルゴリズムによるパターン検索プログラム
文字列処理の分野において、長いテキストの中から特定のパターンを探し出す「パターンマッチング」は非常に重要な課題です。本記事では、テキスト文字列とパターンの2つの文字列が与えられたとき、ラビン・カープ(Rabin-Karp)アルゴリズムを用いて、テキスト内にパターンが出現するすべての位置(インデックス)を見つけるC言語プログラムを解説します。 問題の定義と具体例 テキスト(text)とパターン(pattern)が与えられ、テキスト中にパターンが出現するすべてのインデックスを出力することが求められます。 入力例 text = xyztrwqxyzfg pattern = xyz 出力例 Found
-
C言語で学ぶ再帰的挿入ソートのプログラムと実装方法
挿入ソート(Insertion Sort)は、その場(インプレース)で比較を行うソートアルゴリズムの一つです。このアルゴリズムは、各要素を「その要素より前の部分配列(すでにソート済みのサブ配列)」の中の正しい位置へ順次挿入していくことで、配列全体を整列させます。アルゴリズムの手順ステップ1:1からn-1までループを回し、以下の処理を行います。ステップ2.1:位置iにある要素 array[i] を選択します。ステップ2.2:その要素を、ソート済みサブ配列 array[0]〜arr[i] の中の適切な位置に挿入します。具体例で理解しよう配列 = [34, 7, 12, 90, 51]i = 1 の
-
連結リストを反転するCプログラムの解説【反復法・再帰法の2通り】
この記事では、連結リスト(Linked List)が与えられたときに、それを反転するプログラムの作成方法を解説します。 作成するプログラムは、与えられた連結リストのリンクの向きを逆にし、反転後の連結リストを返します。 連結リストとは 連結リストとは、データ項目を格納するノードがリンクで順につながったデータ構造です。各ノードには、次のノードへの接続(ポインタ)が含まれています。 連結リストの反転とは 「連結リストの反転」とは、リスト内のリンクの向きをすべて逆向きにして、新しい連結リストを作る操作のことです。反転後は、元のリストの先頭ノードが末尾ノードになり、元の末尾ノードが新しい先頭(head)
-
【C言語】fork()とpipe()を使って2つのプロセス間で文字列を連結する方法
本記事では、Linux環境で動作するC言語プログラムを作成し、fork()とpipe()の動作を実際に確認します。題材は「2つのプロセスによる文字列連結」です。一方のプロセスがユーザー入力を受け取ってもう一方へ送信し、受け取った側がその文字列を事前に定義しておいた文字列と連結して、結果を元のプロセスへ返すという流れになります。fork()とpipe()のおさらいfork() … 子プロセスを新しく生成するシステムコールです。生成された子プロセスは、新しいPID(プロセスID)とPPID(親プロセスID)を持ちます。pipe() … Unix・Linuxにおけるシステムコールの一つで、プロセス間
-
C言語でトークンを検出するプログラムの作成方法|字句解析の基本と実装例
本記事では、C言語のソースコードからトークンを検出するCプログラムを作成します。これはコンパイラにおける字句解析(レキシカルアナリシス)のフェーズに相当します。字句解析器(レキサー)はコンパイラの構成要素の一つであり、プログラムからトークンを切り出し、後段の構文解析器(パーサー)へ受け渡す役割を担います。 トークンとは何か トークンとは、ソースコードを構成する最小単位のことです。C言語におけるトークンは、主に次のいずれかに分類されます。 キーワード(予約語) 識別子(変数名・関数名など) 定数 文字列リテラル 記号(演算子・区切り文字) C言語における各種トークンの例 キーワード : fo
-
行列連鎖乗積問題をC言語で解く方法|動的計画法による最小乗算回数の求め方
この記事では、行列(マトリックス)の列(配列)が与えられたときに、行列連鎖乗積(Matrix Chain Multiplication)を効率的に計算するCプログラムを紹介します。目的は、必要な乗算の回数が最小になるように、行列を掛ける順序を見つけることです。 行列の次元は、n個の要素を持つ配列 arr[] によって定義され、i番目の行列のサイズは arr[i-1] × arr[i] として表されます。 問題例で理解しよう 入力 array[] = {3, 4, 5, 6} 出力 150 解説 この場合、各行列のサイズは以下のようになります。 Mat1 = 3×4, Mat2 = 4×5, M
-
【C言語】ディレクトリ内のすべてのファイルとサブディレクトリを一覧表示する方法
この記事では、指定されたディレクトリ内に存在するすべてのファイルとサブディレクトリを一覧表示するC言語プログラムの作成方法を解説します。ディレクトリとサブディレクトリとはディレクトリとは、複数のファイルを格納・管理するための場所(領域)のことです。Windowsでは「フォルダ」と呼ばれることもあります。サブディレクトリとは、ルートディレクトリ(最上位のディレクトリ)の中に作られたディレクトリのことで、さらにその中に別のサブディレクトリを持つこともできます。このように、ディレクトリは階層構造で整理されています。C言語では、<dirent.h>ヘッダーに含まれるopendir()関数や
-
【C++】指定された文字列のすべての順列を出力するプログラム
この問題では、1つの文字列が与えられます。私たちの課題は、その文字列のすべての順列(パーミュテーション)を出力するC++プログラムを作成することです。このプログラムは、与えられた文字列から作り得るすべての組み合わせを見つけ出し、それらをすべて出力します。順列とは、対象を構成するすべての要素を、可能な限りのあらゆる順序で並べた配置のことを指します。具体例を使って問題を理解してみましょう。入力xyz出力xyz, xzy, yxz, yzx, zxy, zyx説明上記は、順序を変えて並べたすべての順列です。この問題を解くためには、バックトラッキングという手法を使用します。具体的には、文字列の各文字を
-
C言語で環境変数を出力するプログラムの書き方
はじめにこの記事では、環境変数を一覧表示するC言語のプログラムを作成する方法を解説します。環境変数(Environment Variable)とは、実行中のプロセスがシステム上でどのように振る舞うかに影響を与えることができるグローバル変数のことです。OSやアプリケーションの設定情報(パス、ユーザー名、システム構成など)が格納されており、プログラムから参照することで動作を柔軟に制御できます。main関数の第3引数「envp」とは通常、main関数は argc と argv の2つの引数を受け取りますが、実は第3引数として環境変数を受け取ることも可能です。argc:コマンドライン引数の個数argv
-
C言語でループを使わずに数列を出力するプログラムの書き方
この問題では、2つの整数 N と K が与えられます。求められているのは、ループ(for文・while文など)を一切使わずに特定の規則に従った数列を出力するプログラムを作成することです。出力すべき数列は、N から始まり、K ずつ減算していき、値が0以下になった時点で今度は K ずつ加算して、再び N に戻るまで続けます。そして重要なのは、この一連の処理においていかなる種類のループも使用してはならないという点です。入出力例具体的な例を見て、問題の内容を確認しましょう。入力n = 12 , k = 3出力12 9 6 3 0 3 6 9 1212から始まって3ずつ減り、0になった後は3ずつ増えて再
-
【C言語】テキスト内の単語を別の指定した単語に置き換えるプログラムの作り方
この記事では、3つの文字列 text(元のテキスト)、oldWord(置き換え対象の単語)、newWord(新しい単語)が与えられたとき、テキスト内の単語を別の指定した単語にすべて置き換えるCプログラムの作成方法を解説します。プログラムは、テキスト内に存在する oldWord の出現箇所をすべて検索し、それぞれを newWord で置き換えた結果を出力します。問題を理解するための具体例入力text = I am learning programming oldWord = learning newWord = practicing出力I am practicing programmingこの例