Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

【C言語】ループ・再帰・制御構造を使わずに「ABCD」を繰り返し出力するプログラムの作成方法

問題概要

この記事では、ループ(for文・while文)、再帰呼び出し、そしてif文などの制御構造を一切使わずに、文字列「ABCD」を繰り返し出力するC言語プログラムを作成します。

通常、同じ処理を繰り返し実行する場合、ループや再帰、条件分岐といった制御構造を使うのが一般的です。しかし今回はこれらの手法がすべて禁止されているため、まったく別のアプローチが必要になります。

解決のアプローチ

ポイントとなるのは、system() 関数です。この関数を使うと、OSのコマンドを実行できるため、プログラムの中から自分自身の実行ファイルを再度起動することができます。

つまり、「同じブロックのコードを無限に実行する」代わりに、「同じプログラムを何度も起動し続ける」という発想で問題を解決します。system() 関数に実行ファイル名を渡せば、プログラムは次々と自分自身を呼び出し、結果として「ABCD」が出力され続けることになります。

サンプルプログラム

以下が実際のソースコードです。ここでは実行ファイル名を main としています。

// プログラムファイル名は main として保存
#include<stdio.h>
#include<stdlib.h>
int main(){
   printf("ABCD\t");
   system("main");
   return 0;
}

実行結果

ABCD ABCD ABCD ABCD ...(プログラムを停止するまで無限に出力され続けます)

このプログラムを実行すると、ユーザーが手動で実行を中断するまで「ABCD」が延々と出力され続けます。強制終了する場合は、ターミナルで Ctrl + C を押してください。

コードの解説と注意点

  • printf("ABCD\t"): 文字列「ABCD」とタブ文字を出力します。
  • system("main"): OSに対して「main」というコマンド(実行ファイル)の実行を依頼します。これにより、自分自身のプログラムが新たに起動されます。
  • #include<stdlib.h>: system() 関数を使用するために必要なヘッダーファイルです。

注意: system() 関数に渡すファイル名は、実際にコンパイルして生成された実行ファイル名と一致している必要があります。Linux環境で gcc main.c -o main のようにコンパイルした場合は上記のままで動作しますが、Windows環境で実行ファイルが main.exe となる場合は、system("main.exe") と記述してください。

また、この手法はあくまで学習目的のものです。実際の開発では、自分自身を無限に起動し続けるプログラムはシステムリソースを大量に消費する可能性があるため、本番環境での使用は避けてください。

  1. 【Python】ループを使わずに数列を出力する方法:再帰呼び出しを活用した実装

    はじめに 本記事では、以下の問題に対する解決策について詳しく解説します。 問題の概要 2つの整数 N と K が与えられたとき、N が 0 より大きい間は N から K を引き続けます。そして N が 0 以下になったら、今度は元の値 N に戻るまで K を足していきます。 入力例 N = 10 K = 4 出力例 10 6 2 -2 2 6 10 アルゴリズムの考え方 N が 0 より大きい間、関数を再帰的に呼び出し続けます(各呼び出しごとに N から K を減算します)。 数値が 0 以下になったら、元の値に戻るまで各呼び出しごとに K を加算します。 加算と減算は同じ1つの関数

  2. ループを使わずに数列を出力するPythonプログラム|再帰とフラグで実現する方法

    本記事では、for文やwhile文などのループ構文を一切使わずに数列を表示するという問題の解法について解説します。問題の定義問題: 2つの数値 N と K が与えられます。まずNが0より大きい間はNからKを繰り返し引き、Nが0以下(ゼロまたは負)になったら、今度は逆にKを足していきます。そして値が元の数値Nに戻った時点で処理を終了します。実行例N = 10K = 4出力: 10 6 2 -2 2 6 10アルゴリズムNが0より大きい間、関数を再帰的に呼び出し続けます。各呼び出しのたびにNからKを減算します。数値が0以下になったら加算モードに切り替え、各呼び出しごとにKを加算します。元の数値Nに