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言語による多分木の実装と可視化機能
多分木データ構造は様々な応用分野で利用されますが、実装方法は使用目的によって大きく異なります。本実装は組み込みシステム向けに設計されたシンプルな多分木で、スレッド管理などの用途を想定しています。
データ構造定義
#define MAX_CHILDREN 32
#define NODE_NAME_LENGTH 32
typedef struct tree_node {
long identifier;
struct tree_node* parent_ptr; ...
6月26日 16:56 投稿
C言語文字列処理関数の実装とメモリ操作の実践的解説
C言語における文字列処理は、プログラミングの基本中の基本です。しかし、标准ライブラリ提供的`strcpy`や`printf`などの関数がどのように実装されているかを見たことがありますか?本稿では、南京大学ICS-PA2实验で取り上げられているように、从零から这些関数を実装していく过程を追います。これは単なる演习ではなく、コンピュータシステムの底层 동작を理解する绝好の ...
6月24日 00:03 投稿
ポインタと配列を組み合わせた入社試験問題の詳細解説
問題1:ポインタ演算とメモリ配置の理解
#include <stdio.h>
int main() {
int a[4] = {1, 2, 3, 4};
int* ptr1 = (int*)(&a + 1);
int* ptr2 = (int*)((int)a + 1);
printf("%x %x\n", ptr1[-1], *ptr2);
return 0;
}
&a は配列全体のアドレスを指し、その型は int (*)[4] です。
&a + 1 は配列全体を飛び越えたアドレスを示しま ...
6月23日 21:40 投稿
C言語における多次元配列操作の実践的実験
実験課題1
ソースコード:
1 #include <stdio.h>
2 #define ROWS 4
3 #define COLS 2
4
5 void test1() {
6 int data[ROWS] = {1, 9, 8, 4};
7 int index;
8
9 // 配列dataが占めるメモリバイト数を出力
10 printf("sizeof(data) = %d\n", sizeof(data));
11
12 // 各要素のアドレスと値を出力
13 for (ind ...
6月22日 19:21 投稿
C言語プログラミング演習:学籍番号抽選と条件判定
学籍番号生成プログラム
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<time.h>
4 #define 抽選回数 5
5 #define コンピュータ下限 397
6 #define コンピュータ上限 476
7 #define キアン上限 21
8
9 int main() {
10 int カウンター = 0;
11 int 学科コード, 番号;
12 srand(time(NULL));
13
14 while (カウン ...
6月21日 22:20 投稿
C言語:ループと分岐(数字当てゲーム)
分岐文
(1)if文
if(条件式) // 条件式が0の場合は偽、非0の場合は真。&&で論理積、||で論理和を使用
{
// 実行する内容、複数行ある場合は中括弧が必要
}
else if // 以前の条件が満たされない場合に実行。elseの後にifをネスト可能
{
}
elseの関連付けに注意。elseは最も近いifと組み合わされます。必要に応じて中括弧を使用してください。
...
6月20日 22:52 投稿
C言語でのSQLite3データベース操作実例
SQLite3データベースの基本操作
SQLiteは軽量でサーバレスなデータベースエンジンであり、C言語プログラムに組み込むことが可能です。
主要なSQLコマンド例
// テーブル作成
"CREATE TABLE PRODUCTS "
"(PRODUCT_ID INTEGER PRIMARY KEY AUTOINCREMENT,"
" PRODUCT_NAME TEXT NOT NULL, "
" STOCK_QTY INTEGER NOT NULL, "
" UNIT_PRICE REAL)"
// テーブル削除
"DROP T ...
6月19日 20:51 投稿
単方向連結リストの設計原理と実装手法
1. 連鎖記憶方式の基本概念
線形リストを物理メモリ上に配置する際、隣接する論理要素が連続したアドレスを持つ必要はない。この配置方式は非順序記憶とも呼ばれ、任意のメモリ領域にデータを分散させ、ポインタによって前後の論理関係を維持する。これにより、要素の追加や削除が配列に比べて効率的に行える一方、インデックスによる直接アクセスは不可能となる。
1.1 基 ...
6月19日 18:41 投稿
C言語によるファイル操作の実装方法
C言語でのファイル入出力処理に関する基本的なサンプルコードを以下に示します。
ファイルへの書き込み
#include <stdio.h>
int main() {
FILE *fp;
// 書き込みモードでファイルを開く(存在しない場合は作成し、既存の場合は内容をクリア)
fp = fopen("sample.txt", "w");
if (fp == NULL) {
printf(&q ...
6月18日 23:09 投稿