C言語プログラミング演習問題集

プログラミング問題と解説 問題1: 再帰関数の呼び出し回数 #include <stdio.h> int count = 0; int fibonacci(int num) { count++; if (num == 0) return 1; if (num == 1) return 2; return fibonacci(num - 1) + fibonacci(num - 2); } int main() { fibonacci(8); printf("%d", count); return 0; } 実行結果: 67 問題2: do-whi ...

6月27日 20:33 投稿

C言語文字列処理関数の実装とメモリ操作の実践的解説

C言語における文字列処理は、プログラミングの基本中の基本です。しかし、标准ライブラリ提供的`strcpy`や`printf`などの関数がどのように実装されているかを見たことがありますか?本稿では、南京大学ICS-PA2实验で取り上げられているように、从零から这些関数を実装していく过程を追います。これは単なる演习ではなく、コンピュータシステムの底层 동작を理解する绝好の ...

6月24日 00:03 投稿

C++関数とモジュールの実践演習

7.12 復習問題 1. 関数の宣言、定義、呼び出しの順序について説明せよ 2. 以下の関数プロトタイプを作成せよ a. void igor(); b. float tofu(int n); c. double mpg(double d1, double d2); d. long summation(long data[], int size); e. double doctor(const string s); f. void ofcourse(boss b); g. string plot(map *m); 3. 配列要素を指定値で初期化する関数 void ...

6月13日 22:51 投稿

C言語のポインタ:概念・仕組み・実用例(前編)

C言語におけるポインタ(pointer)は、多くの学習者にとって最初の難関です。本稿では、ポインタの背景にある設計思想と実際の動作原理を、具体的なコード例を交えながら段階的に解説します。 1. ポインタの必要性と抽象化の evolution ポインタが導入された根本的な理由は、「効率的なメモリ操作を可能にすること」です。抽象的に述べれば、データ構造や関数間通信にお ...

6月12日 19:20 投稿

C++ 面接問題集:ポインタ、配列、const の基礎

1. for ループと while ループの変換 for 文は while 文に書き換え可能である。同様に do-while 文でも実現できる。条件判定のタイミングが異なるが、制御構造の本質は同じである。C++ ではループ制御の書き換えが容易であり、可読性向上のために適宜選択する。 2. 二次元配列の文字列出力 #include <cstring> #include <cstdio> int main() { char data ...

6月12日 18:56 投稿

C言語における一次元配列とポインタの関係

一次元配列のメモリ上の配置 #include <stdio.h> int main() { int numbers[8]; int index; for (index = 0; index < 8; index++) { printf("int型のサイズ: %zu ", sizeof(int)); printf("&numbers[%d] = %p ", index, &numbers[index]); } return 0; } int型のサイズ: 4 &numbers[0] = 0 ...

6月11日 19:39 投稿

C言語における構造体と共用体の実践的応用

はじめに 本記事では、C言語の構造体、共用体、および構造体ポインタを活用した具体的なプログラミング例を解説します。各セクションで異なるデータ構造の特性を活かした実装方法を学びます。 構造体変数の活用:年間経過日数の算出 年月日を管理する構造体を定義し、入力された日付がその年の何日目に当たるかを計算するプログラムを作成します。 実装コード #include & ...

6月9日 20:34 投稿

ポインタと参照の基礎

ポインタの基本演算子 C++におけるポインタには2つの主要な演算子があります: *(間接参照演算子):ポインタに適用すると、そのポインタが指すアドレスに格納されている値を取得します。 &(アドレス演算子):変数に適用すると、その変数のメモリアドレスを取得します。 ポインタ自体も変数であるため、ポインタのアドレスを取得することも可能です。このアドレス ...

6月9日 00:28 投稿

C言語におけるアドレス演算子と間接参照の使い分け

概要 C言語において、& と * はポインタ操作やメモリ管理の基本となる演算子です。これらを正しく理解することで、関数間でのデータ共有や効率的なメモリ操作が可能になります。本記事では、これらの演算子の動作原理と使用方法を具体的なサンプルコードを交えながら解説します。 アドレス取得演算子 & & は変数のメモリアドレスを取得するための演算子です。 ...

6月4日 20:01 投稿

C言語における単方向連結リストの仕組みと実装方法

連結リストの基本概念とノード定義配列などのシーケンシャルなデータ構造では、要素の挿入や削除に伴うデータの移動コストが高くなる。この問題を解決するため、各要素をポインタで連結する連鎖構造(単方向連結リスト)が用いられる。単方向連結リストには以下の特徴がある。論理的に隣接する要素が物理的なメモリ上でも隣接している必要がない。ランダムアクセスが不可能 ...

5月29日 08:29 投稿