C言語でセミコロンを使わずに「Tutorials Point」を出力するプログラムの作成方法
この記事では、C言語においてセミコロン(;)を一切使わずに「Tutorials Point」という文字列を出力するプログラムの書き方を解説します。
C言語では、文の終わりにセミコロンを付けるのが基本ルールです。通常、printf関数による出力も、文末にセミコロンがあって初めて実行されます。では、セミコロンなしで文字列を出力するにはどうすればよいのでしょうか?
その鍵となるのが、printf関数の戻り値です。printf関数は、実際に出力された文字数(整数)を返り値として返します。この仕様を利用することで、セミコロンを使わずに文字列を出力できます。
printf関数の構文
int printf(const char *format, ...)
printf関数は可変個の引数を受け取ることができ、第1引数には出力したい文字列を指定します。そして戻り値として、出力した文字の総数を整数で返します。
この性質を活かし、条件分岐やループの条件式の中でprintf関数を呼び出すことで、セミコロンなしでも文字列を出力できるのです。具体的には、if文・switch文・whileループ・マクロの4つの方法があります。それぞれ順番に見ていきましょう。
方法1:if文を使う
if文の条件式の中でprintf関数を呼び出します。printfは出力に成功すると0以外の値を返すため、「!」演算子で反転すると条件は偽となり、空のブロックだけが実行されます。
サンプルコード
#include<stdio.h>
int main(){
if (!printf("Tutorials Point") )
{ }
}実行結果
Tutorials Point
方法2:switch文を使う
switch文の判定式の中でprintf関数を呼び出す方法です。こちらも同様に、条件評価の時点で文字列が出力されます。
サンプルコード
#include<stdio.h>
int main(){
switch (!printf("Tutorials Point") )
{ }
}実行結果
Tutorials Point
方法3:whileループを使う
while文の条件式の中でprintf関数を呼び出します。1回目の条件評価時に文字列が出力され、その後ループ本体の空ブロックが一度だけ実行されます。
サンプルコード
#include<stdio.h>
int main(){
while(!printf("Tutorials Point") )
{ }
}実行結果
Tutorials Point
方法4:マクロを使う
#defineディレクティブでprintf関数の呼び出しをマクロとして定義し、それをif文の条件式内で使用する方法です。マクロ定義自体にはセミコロンが不要なため、この手法も成立します。
サンプルコード
#include<stdio.h>
#define printstr printf("Tutorials Point")
int main(){
if (!printstr)
{ }
}実行結果
Tutorials Point
まとめ
セミコロンなしで文字列を出力するポイントは、printf関数の戻り値を条件式として利用することです。if文、switch文、whileループ、マクロのいずれの方法でも、条件式が評価されるタイミングでprintfが実行され、文字列が出力されます。これはC言語の関数の戻り値と制御構造の仕組みを深く理解するのに役立つ、興味深いテクニックと言えるでしょう。
-
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メモリを無制限に使えばこの問題は簡単に解けますが、そ
-
【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つの関数