Cプログラミング

 Computer >> コンピューター >  >> プログラミング >> Cプログラミング
  1. C言語で作る!キラキラ点滅するクリスマスツリー表示プログラム

    今回は少しユニークなプログラミング課題を紹介します。C言語を使って、クリスマスツリーをランダムに表示する方法です。完成したツリーは、本物のクリスマスイルミネーションのようにキラキラと点滅して見えます。 クリスマスツリーの表示の仕組み クリスマスツリーを描くには、大きさの異なる三角形(ピラミッド)をいくつも縦に積み重ねて出力します。装飾的な葉っぱの部分には、あらかじめ用意した文字リスト(.・*・+・o・O)の中からランダムに1文字を選んで表示します。 ツリーの高さやランダム性の度合いは、ソースコード冒頭のマクロ定数を書き換えるだけで自由に調整できます。 点滅が実現される仕組み このプログラムのポ

  2. C言語のwprintf()とwscanf()関数の使い方を徹底解説

    C言語には、ワイド文字(wide character)を扱うための標準入出力関数として、wprintf()とwscanf()が用意されています。これらは、普段よく使われるprintf()やscanf()のワイド文字版に相当する関数で、ヘッダーファイル<wchar.h>内で定義されています。本記事では、それぞれの関数の基本的な使い方をサンプルコードとともにわかりやすく解説します。wprintf()関数とはwprintf()は、ワイド文字列を標準出力へ出力するための関数です。フォーマット文字列には「%」記号で始まる書式指定子を含めることができ、これらは引数として渡された変数の値に置き換

  3. C/C++で数値定数の先頭に「0」が付くのはどういう意味?8進数リテラルの基本を解説

    CやC++のソースコードを見ていると、数値リテラルの先頭に「0」が付いているケースに遭遇することがあります。実はこれ、単なる装飾ではなくその数値が8進数(octal number)であることを示す記法です。 つまり、8進数リテラルは必ず先頭に0を付けます。例えば、8進数の「25」を表したい場合は、コード中では「025」と記述します。 サンプルコード 以下の例では、8進数リテラル「025」と「063」をint型変数に代入し、printf関数で10進数として出力しています。 #include <stdio.h> int main() { int a = 025; // 8進

  4. C++の名前マングリング(Name Mangling)と extern "C" の仕組みを徹底解説

    C++には関数オーバーロードという便利な機能があります。この機能を使うと、同じ名前の関数を複数定義できます。ただし、引数の型や引数の数が異なっている必要があり、戻り値の型の違いだけではオーバーロードとして認識されません。ここで疑問が生じます。「C++は、オブジェクトコードの中でどのようにオーバーロードされた関数を区別しているのか?」という点です。名前マングリングとは何か?答えは、オブジェクトコードを生成する際に、引数の型情報などを関数名に付加して名前を変換している、というものです。この技術は名前マングリング(Name Mangling)と呼ばれます。重要なポイントとして、C++には名前マングリ

  5. C言語でのファイル処理の基本|書き込み・読み込み・追記のやり方を解説

    C言語におけるファイル処理は、プログラムがデータを永続的に保存・活用するための重要な基礎技術です。この記事では、C言語でよく使われる基本的なファイル操作を、サンプルコードと実行結果とともにわかりやすく解説します。ここで紹介する主なファイル操作は以下の3つです。ファイルへの書き込み(Write)ファイルからの読み込み(Read)ファイルへの追記(Append)1. ファイルへの書き込みまずは、新しいファイルを作成してテキストを書き込む方法です。ファイルを開く際には fopen() 関数を使用し、モードとして w(書き込みモード)を指定します。なお、w モードで既存のファイルを開くと、中身は上書き

  6. C言語の指定初期化子(designated initializer)の使い方を解説

    C90規格では、配列はインデックス0、1、2…というように固定された順序で初期化しなければなりませんでした。しかし、C99規格からは指定初期化子(designated initializer)という機能が導入され、要素を任意の順序で初期化できるようになっています。初期化には配列のインデックス、あるいは構造体のメンバー名を使用できます。なお、この拡張機能はGNU C++では実装されていない点に注意してください。 特定のインデックスに値を指定して初期化する場合は、次のように記述します。 int arr[6] = {[3] = 20, [5] = 40}; または int arr[6] = {[3]

  7. C / C++で変数がNULLかどうかを確認する方法

    C言語やC++には、NULL値を比較するための専用のメソッドや関数は用意されていません。代わりに、if文を使って変数がNULLかどうかを直接判定するのが最も一般的な方法です。ここでは、実際のサンプルプログラムを通してその方法を見ていきましょう。このプログラムでは、システム上に存在しないファイルを読み取りモードで開こうとします。この場合、fopen関数は失敗を示すNULLを返すため、if文でその戻り値をチェックすれば、ファイルが開けたかどうかを判断できます。サンプルコード#include <stdio.h> main() {     // 存在

  8. C/C++で起こる未定義動作(Undefined Behavior)とは?具体例と出力結果を徹底解説

    CやC++には、言語仕様上「未定義動作(Undefined Behavior)」として定められている操作が数多く存在します。未定義動作が発生した場合、プログラムはクラッシュするかもしれないし、一見正常に動作しているように見えることもあり、その挙動はコンパイラによって異なります。この記事では、実際に未定義動作を引き起こすコード例を紹介しながら、それぞれどのような問題が起きるのかをわかりやすく解説します。1. ゼロ除算(0による割り算)整数型の値をゼロで割る操作は、CおよびC++において未定義動作です。多くの環境ではランタイムエラーが発生します。サンプルコード#include <iostre

  9. C・C++・Javaにおける浮動小数点演算と結合法則 ― 計算順序で結果が変わる理由

    C、C++、Javaなどの言語では、浮動小数点数を使ったさまざまな数学演算を行います。本記事では、浮動小数点数が数学における「結合法則」((a + b) + c = a + (b + c))に従うのかどうかを、実際のコードで検証します。 結論から言うと、答えは「NO」です。場合によっては、浮動小数点数は結合法則を満たしません。以下で具体的な例を見ていきましょう。 サンプルコード #include<iostream> using namespace std; main() { float x = -500000000; float y = 500000000;

  10. C/C++のインライン関数:使うべきケースと避けるべきケースを徹底解説

    インライン関数とは?C++には「インライン関数」という便利な機能があります。これは、CやC++で使われるマクロに似た働きをする関数です。インライン関数を利用するには、関数の宣言時にinlineキーワードを指定します。インライン関数は基本的にどこでも使用できますが、効果を最大限に引き出すためには、いくつかのガイドラインに従うことが重要です。ここでは、インライン関数を使うべき場面と、逆に避けるべき場面について詳しく解説します。インライン関数を使うべきケースマクロ(#define)の代替として: 型チェックが行われないマクロと異なり、インライン関数は型安全なため、#define の代わりとして推奨さ

  11. 【C言語】フォーマット指定子の一覧と使い方を徹底解説

    C言語におけるフォーマット指定子(書式指定子)は、入出力処理において欠かせない要素です。printf()関数でデータを出力する際や、scanf()関数で入力を受け取る際に、変数がどの型のデータを扱っているのかをコンパイラに伝える役割を果たします。この記事では、主要なフォーマット指定子の一覧と、実際の使い方をサンプルコード付きでわかりやすく解説します。 フォーマット指定子の一覧 フォーマット指定子対応する型・用途 %c文字(char) %d符号付き整数 %e または %E浮動小数点数の指数表記 %f浮動小数点数(float) %g または %G%e / %E と同様(短い形式で自動選択)

  12. C言語ではコンパイルできるのにC++ではエラーになるプログラム7選

    C++は、C言語にオブジェクト指向などの機能を追加する形で設計された言語です。そのため、C言語で書かれたプログラムの多くはC++コンパイラでもそのままコンパイルできます。しかし、言語仕様の違いにより、Cでは問題なくコンパイルできるのに、C++ではコンパイルエラーになるプログラムも存在します。 以下に、Cコンパイラでは通るものの、C++コンパイラではエラーとなる代表的なコード例を7つ紹介します。 1. 関数を宣言前に呼び出しているケース このプログラムでは、myFunction() を宣言よりも先に呼び出しています。従来のC言語では暗黙的な関数宣言が許されるためコンパイルできますが、C++では

  13. CとC++でコンパイル結果が変わるプログラムの違いを徹底解説

    はじめにここでは、CコンパイラとC++コンパイラのどちらでビルドするかによって、異なる結果を返すプログラムをいくつか紹介します。同じソースコードでも言語仕様の違いにより挙動が変わるケースは数多く存在しますが、本記事では代表的な3つの例を取り上げて解説します。1. 文字リテラルの扱いとサイズCとC++では、文字リテラルの扱い方が異なります。Cでは文字リテラルはint型として扱われるのに対し、C++ではchar型として扱われます。そのため、sizeof()演算子でサイズを確認すると、Cでは4バイト、C++では1バイトという異なる結果が得られます。Cの場合のコード#include<stdio.

  14. C/C++のctime()関数とは?使い方とサンプルコードをわかりやすく解説

    C言語の標準ライブラリ関数 char *ctime(const time_t *timer) は、引数 timer をもとに、現地時間(ローカルタイム)を表す文字列を返す関数です。 返される文字列は次の形式で構成されています。 Www Mmm dd hh:mm:ss yyyy Www … 曜日の略称(例:Thu) Mmm … 月名の英語略称(例:May) dd … 日付 hh:mm:ss … 時:分:秒 yyyy … 年(西暦4桁) 構文 char *ctime(const time_t *timer) この関数は、暦時刻(カレンダー時間)を格納した time_t 型変数へのポインタを引数

  15. C/C++でポインタ配列(ジャグ配列)を使う方法を徹底解説

    まず、3つの整数からなる配列を使用する、次の基本的な例を見てみましょう。 C言語の場合 サンプルコード #include <stdio.h> const int MAX = 3; int main () {    int var[] = {10, 100, 200};    int i;    for (i = 0; i < MAX; i++) {       printf("Value of var[%d] = %d\n", i, var[i] );  

  16. C言語で独自のヘッダーファイルを作成する方法

    C言語では、自分で作成した関数をヘッダーファイルとしてまとめ、他のプログラムから再利用することができます。ここでは、独自のヘッダーファイル「sub.h」を作成し、メインプログラムから呼び出す手順を解説します。 独自ヘッダーファイル作成の手順 まず、関数のコードを記述し、「sub.h」という名前で保存します。 次に、メインプログラム「subtraction.c」を作成します。その際、以下の点に注意してください。 #include ディレクティブで新しいヘッダーファイルを読み込みます。 標準ライブラリのように <sub.h> と書くのではなく、sub.h とダブルクォーテーションで

  17. 標準C/C++でファイルの存在を確認する最良の方法

    標準のC/C++には、ファイルの存在を直接確認するための専用関数は用意されていません。そのため、ファイルが存在するかどうかを確認する最も確実な方法は、実際にファイルを読み取りモード(または書き込みモード)で開いてみることです。 ファイルを開く操作に成功すればファイルは存在し、失敗すれば存在しないと判断できます。以下に、C言語とC++それぞれでの実装例を示します。 C言語の場合 C言語では stdio.h の fopen() 関数を使ってファイルを開きます。指定したファイルが存在しない場合、fopen() は NULL を返すため、戻り値を判定することで存在確認が可能です。 サンプルコード #i

  18. C/C++におけるポインタの活用例をわかりやすく解説

    ポインタはC言語およびC++において最も重要な概念の一つです。単に変数のアドレスを扱うだけでなく、配列操作・動的メモリ確保・関数への参照渡しなど、さまざまな場面で活躍します。本記事では、ポインタの代表的な応用例をCとC++のコード例とともに紹介します。 1. 配列要素へのアクセス 配列名は先頭要素のアドレスを表すため、ポインタ演算を使って配列の各要素にアクセスできます。*(a + i) は a[i] と同じ意味になります。 C言語の場合 #include <stdio.h> int main() { int a[] = { 60, 70, 20, 40 }; p

  19. C言語の関数ポインタとは?宣言方法と基本的な使い方を解説

    関数ポインタ(Function Pointer)とは、通常のポインタが変数のアドレスを指すように、コード(関数)のアドレスを指すポインタのことです。C言語では、関数名を記述するだけでその関数の先頭アドレスを取得できるため、これをポインタ変数に代入することで、関数を間接的に呼び出せるようになります。 関数ポインタを使うと、次のような柔軟なプログラミングが可能になります。 関数を引数として別の関数に渡すことができる(コールバック関数) 関数の戻り値として関数を返すことができる 条件に応じて呼び出す関数を動的に切り替えられる 関数ポインタの宣言方法 関数ポインタは、以下の構文で宣言します。 戻り

  20. C/C++でポインタを比較する方法とは?基本と注意点を解説

    ポインタの比較とは ポインタは、同じ配列を指している場合に意味のある比較を行うことができます。比較には <、>、<=、>= といった関係演算子を使用します。なお、ポインタ同士を掛けたり割ったりすることはできません。 C言語でのポインタ比較の例 #include <stdio.h> int main() { int *p2; int *p1; p2 = (int *)300; p1 = (int *)200; if(p1 > p2) { printf(P1 is greater than p2);

Total 1445 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:18/73  20-コンピューター/Page Goto:1 12 13 14 15 16 17 18 19 20 21 22 23 24