C言語では、標準ライブラリに多くの便利な関数が用意されています。これらの関数は、プログラムの効率を高め、コードの可読性を向上させます。
例えば、文字列操作にはstrcpy
やstrlen
、strcat
などがあり、これらは文字列のコピー、長さの取得、連結を行います。
入出力操作にはprintf
やscanf
があり、これらはコンソールへの出力や入力を簡単に行うことができます。
メモリ管理にはmalloc
やfree
があり、動的メモリの確保と解放を行います。
これらの関数を適切に使用することで、C言語プログラムの開発がよりスムーズになります。
- 標準入出力関数の使い方と応用例
- 文字列操作関数を用いた文字列処理
- メモリ管理関数による動的メモリの効率的な使用
- 数学関数を用いた計算とグラフ描画
- ファイル操作関数を用いたファイルの読み書きとエラー処理
- 時間関連関数を用いた時間の取得と計測方法
標準入出力関数
C言語の標準入出力関数は、コンソールを通じてデータを入力したり出力したりするための基本的な機能を提供します。
これらの関数を理解することで、ユーザーとのインタラクションを行うプログラムを作成することができます。
printf関数
printf関数
は、フォーマットされた出力を行うための関数です。
様々なデータ型を指定した形式でコンソールに出力することができます。
#include <stdio.h>
int main() {
int number = 10;
printf("数値は%dです。\n", number); // %dは整数を出力するためのフォーマット指定子
return 0;
}
数値は10です。
この例では、整数型の変数number
の値を%d
フォーマット指定子を使って出力しています。
scanf関数
scanf関数
は、標準入力からデータを読み取るための関数です。
ユーザーからの入力を受け取る際に使用します。
#include <stdio.h>
int main() {
int number;
printf("数値を入力してください: ");
scanf("%d", &number); // %dは整数を読み取るためのフォーマット指定子
printf("入力された数値は%dです。\n", number);
return 0;
}
数値を入力してください: 25
入力された数値は25です。
この例では、ユーザーから整数を入力してもらい、その値を変数number
に格納しています。
getchar関数
getchar関数
は、標準入力から1文字を読み取るための関数です。
主に文字単位での入力を処理する際に使用します。
#include <stdio.h>
int main() {
char ch;
printf("1文字を入力してください: ");
ch = getchar();
printf("入力された文字は%cです。\n", ch);
return 0;
}
1文字を入力してください: A
入力された文字はAです。
この例では、ユーザーから1文字を入力してもらい、その文字を変数ch
に格納しています。
putchar関数
putchar関数
は、1文字を標準出力に書き込むための関数です。
単一の文字を出力する際に使用します。
#include <stdio.h>
int main() {
char ch = 'B';
printf("出力する文字: ");
putchar(ch);
printf("\n");
return 0;
}
出力する文字: B
この例では、変数ch
に格納された文字をputchar関数
を使って出力しています。
gets関数とfgets関数
gets関数
は、標準入力から文字列を読み取るための関数ですが、安全性の問題から使用は推奨されていません。
代わりにfgets関数
を使用します。
#include <stdio.h>
int main() {
char buffer[100];
printf("文字列を入力してください: ");
fgets(buffer, sizeof(buffer), stdin); // fgetsはバッファサイズを指定して安全に文字列を読み取る
printf("入力された文字列は%sです。\n", buffer);
return 0;
}
文字列を入力してください: Hello, World!
入力された文字列はHello, World!
です。
この例では、fgets関数
を使って文字列を安全に読み取っています。
puts関数
puts関数
は、文字列を標準出力に書き込むための関数です。
文字列の末尾に自動的に改行を追加します。
#include <stdio.h>
int main() {
char message[] = "こんにちは、世界!";
puts(message); // putsは文字列を出力し、改行を追加する
return 0;
}
こんにちは、世界!
この例では、message
に格納された文字列をputs関数
を使って出力しています。
puts関数
は出力後に自動的に改行を行います。
文字列操作関数
C言語では、文字列を操作するための様々な関数が用意されています。
これらの関数を使用することで、文字列のコピー、結合、比較、検索などの操作を簡単に行うことができます。
strcpy関数
strcpy関数
は、文字列を別の文字列にコピーするための関数です。
コピー先のバッファが十分なサイズを持っていることを確認する必要があります。
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello, World!";
char destination[50];
strcpy(destination, source); // sourceの内容をdestinationにコピー
printf("コピーされた文字列: %s\n", destination);
return 0;
}
コピーされた文字列: Hello, World!
この例では、source
の内容をdestination
にコピーしています。
strcat関数
strcat関数
は、2つの文字列を結合するための関数です。
結合先のバッファが十分なサイズを持っていることを確認する必要があります。
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[] = ", World!";
strcat(str1, str2); // str1にstr2を結合
printf("結合された文字列: %s\n", str1);
return 0;
}
結合された文字列: Hello, World!
この例では、str1
にstr2
を結合しています。
strlen関数
strlen関数
は、文字列の長さを取得するための関数です。
終端のヌル文字は含まれません。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
size_t length = strlen(str); // 文字列の長さを取得
printf("文字列の長さ: %zu\n", length);
return 0;
}
文字列の長さ: 13
この例では、str
の長さを取得しています。
strcmp関数
strcmp関数
は、2つの文字列を比較するための関数です。
文字列が等しい場合は0を返し、異なる場合は正または負の値を返します。
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2); // str1とstr2を比較
if (result == 0) {
printf("文字列は等しいです。\n");
} else {
printf("文字列は異なります。\n");
}
return 0;
}
文字列は異なります。
この例では、str1
とstr2
を比較し、異なることを確認しています。
strchr関数とstrrchr関数
strchr関数
は、文字列内で指定した文字を最初に見つけた位置を返します。
一方、strrchr関数
は、指定した文字を最後に見つけた位置を返します。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *first = strchr(str, 'o'); // 'o'を最初に見つける
char *last = strrchr(str, 'o'); // 'o'を最後に見つける
printf("最初の'o'の位置: %ld\n", first - str);
printf("最後の'o'の位置: %ld\n", last - str);
return 0;
}
最初の'o'の位置: 4
最後の'o'の位置: 8
この例では、str
内の’o’の最初と最後の位置を取得しています。
strstr関数
strstr関数
は、文字列内で指定した部分文字列を最初に見つけた位置を返します。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *substr = strstr(str, "World"); // "World"を見つける
if (substr != NULL) {
printf("部分文字列の位置: %ld\n", substr - str);
} else {
printf("部分文字列は見つかりませんでした。\n");
}
return 0;
}
部分文字列の位置: 7
この例では、str
内の”World”の位置を取得しています。
メモリ操作関数
C言語では、動的メモリ管理を行うための関数が用意されています。
これらの関数を使用することで、プログラムの実行時に必要なメモリを効率的に管理することができます。
malloc関数とfree関数
malloc関数
は、指定したバイト数のメモリを動的に確保するための関数です。
確保したメモリは、free関数
を使って解放する必要があります。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *array;
int n = 5;
array = (int *)malloc(n * sizeof(int)); // n個のint型メモリを確保
if (array == NULL) {
printf("メモリの確保に失敗しました。\n");
return 1;
}
for (int i = 0; i < n; i++) {
array[i] = i * 10;
printf("array[%d] = %d\n", i, array[i]);
}
free(array); // 確保したメモリを解放
return 0;
}
array[0] = 0
array[1] = 10
array[2] = 20
array[3] = 30
array[4] = 40
この例では、malloc関数
を使って整数型の配列を動的に確保し、free関数
で解放しています。
calloc関数
calloc関数
は、指定した要素数とサイズのメモリを確保し、すべてのビットをゼロに初期化します。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *array;
int n = 5;
array = (int *)calloc(n, sizeof(int)); // n個のint型メモリをゼロ初期化して確保
if (array == NULL) {
printf("メモリの確保に失敗しました。\n");
return 1;
}
for (int i = 0; i < n; i++) {
printf("array[%d] = %d\n", i, array[i]);
}
free(array); // 確保したメモリを解放
return 0;
}
array[0] = 0
array[1] = 0
array[2] = 0
array[3] = 0
array[4] = 0
この例では、calloc関数
を使ってゼロ初期化された整数型の配列を確保しています。
realloc関数
realloc関数
は、既に確保されたメモリブロックのサイズを変更するための関数です。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *array;
int n = 5;
array = (int *)malloc(n * sizeof(int)); // 初期メモリ確保
if (array == NULL) {
printf("メモリの確保に失敗しました。\n");
return 1;
}
for (int i = 0; i < n; i++) {
array[i] = i * 10;
}
n = 10;
array = (int *)realloc(array, n * sizeof(int)); // メモリサイズを変更
if (array == NULL) {
printf("メモリの再確保に失敗しました。\n");
return 1;
}
for (int i = 5; i < n; i++) {
array[i] = i * 10;
}
for (int i = 0; i < n; i++) {
printf("array[%d] = %d\n", i, array[i]);
}
free(array); // 確保したメモリを解放
return 0;
}
array[0] = 0
array[1] = 10
array[2] = 20
array[3] = 30
array[4] = 40
array[5] = 50
array[6] = 60
array[7] = 70
array[8] = 80
array[9] = 90
この例では、realloc関数
を使って配列のサイズを拡張しています。
memcpy関数
memcpy関数
は、メモリ領域を別のメモリ領域にコピーするための関数です。
重複しないメモリ領域のコピーに適しています。
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello, World!";
char destination[50];
memcpy(destination, source, strlen(source) + 1); // sourceをdestinationにコピー
printf("コピーされた文字列: %s\n", destination);
return 0;
}
コピーされた文字列: Hello, World!
この例では、memcpy関数
を使って文字列をコピーしています。
memmove関数
memmove関数
は、重複する可能性のあるメモリ領域を安全にコピーするための関数です。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
memmove(str + 7, str, 5); // "Hello"を"World"の位置に移動
printf("移動後の文字列: %s\n", str);
return 0;
}
移動後の文字列: Hello, Hello!
この例では、memmove関数
を使って重複するメモリ領域を安全に移動しています。
memset関数
memset関数
は、メモリ領域を特定の値で埋めるための関数です。
#include <stdio.h>
#include <string.h>
int main() {
char buffer[50];
memset(buffer, '*', sizeof(buffer) - 1); // バッファを'*'で埋める
buffer[49] = '#include <stdio.h>
#include <string.h>
int main() {
char buffer[50];
memset(buffer, '*', sizeof(buffer) - 1); // バッファを'*'で埋める
buffer[49] = '\0'; // 終端文字を追加
printf("埋められたバッファ: %s\n", buffer);
return 0;
}
'; // 終端文字を追加
printf("埋められたバッファ: %s\n", buffer);
return 0;
}
埋められたバッファ: *************************************************
この例では、memset関数
を使ってバッファを’*’で埋めています。
数学関数
C言語には、数学的な計算を行うための様々な関数が用意されています。
これらの関数を使用することで、数値の絶対値、べき乗、平方根、三角関数、対数などの計算を簡単に行うことができます。
abs関数
abs関数
は、整数の絶対値を計算するための関数です。
負の数を正の数に変換します。
#include <stdio.h>
#include <stdlib.h>
int main() {
int value = -10;
int absoluteValue = abs(value); // 絶対値を計算
printf("絶対値: %d\n", absoluteValue);
return 0;
}
絶対値: 10
この例では、value
の絶対値を計算しています。
pow関数
pow関数
は、べき乗を計算するための関数です。
指定した基数を指定した指数で累乗します。
#include <stdio.h>
#include <math.h>
int main() {
double base = 2.0;
double exponent = 3.0;
double result = pow(base, exponent); // 2の3乗を計算
printf("べき乗の結果: %.2f\n", result);
return 0;
}
べき乗の結果: 8.00
この例では、base
をexponent
で累乗した結果を計算しています。
sqrt関数
sqrt関数
は、平方根を計算するための関数です。
非負の数の平方根を求めます。
#include <stdio.h>
#include <math.h>
int main() {
double number = 16.0;
double squareRoot = sqrt(number); // 平方根を計算
printf("平方根: %.2f\n", squareRoot);
return 0;
}
平方根: 4.00
この例では、number
の平方根を計算しています。
sin関数とcos関数
sin関数
とcos関数
は、それぞれ正弦と余弦を計算するための関数です。
角度はラジアンで指定します。
#include <stdio.h>
#include <math.h>
int main() {
double angle = M_PI / 4; // 45度をラジアンに変換
double sineValue = sin(angle); // 正弦を計算
double cosineValue = cos(angle); // 余弦を計算
printf("sin(45度): %.2f\n", sineValue);
printf("cos(45度): %.2f\n", cosineValue);
return 0;
}
sin(45度): 0.71
cos(45度): 0.71
この例では、45度の正弦と余弦を計算しています。
tan関数
tan関数
は、正接を計算するための関数です。
角度はラジアンで指定します。
#include <stdio.h>
#include <math.h>
int main() {
double angle = M_PI / 4; // 45度をラジアンに変換
double tangentValue = tan(angle); // 正接を計算
printf("tan(45度): %.2f\n", tangentValue);
return 0;
}
tan(45度): 1.00
この例では、45度の正接を計算しています。
log関数とexp関数
log関数
は、自然対数を計算するための関数です。
一方、exp関数
は、eのべき乗を計算するための関数です。
#include <stdio.h>
#include <math.h>
int main() {
double number = 2.71828; // eに近い値
double naturalLog = log(number); // 自然対数を計算
double exponentValue = exp(1.0); // eの1乗を計算
printf("自然対数: %.2f\n", naturalLog);
printf("eの1乗: %.2f\n", exponentValue);
return 0;
}
自然対数: 1.00
eの1乗: 2.72
この例では、number
の自然対数とeの1乗を計算しています。
ファイル操作関数
C言語では、ファイルを操作するための様々な関数が用意されています。
これらの関数を使用することで、ファイルの読み書きや位置の移動、エラーの検出などを行うことができます。
fopen関数とfclose関数
fopen関数
は、ファイルを開くための関数です。
ファイルを開いた後は、fclose関数
を使ってファイルを閉じる必要があります。
#include <stdio.h>
int main() {
FILE *file;
file = fopen("example.txt", "w"); // ファイルを開く(書き込みモード)
if (file == NULL) {
printf("ファイルを開くことができませんでした。\n");
return 1;
}
fprintf(file, "こんにちは、ファイル!\n"); // ファイルに書き込む
fclose(file); // ファイルを閉じる
return 0;
}
ファイル "example.txt" に "こんにちは、ファイル!" が書き込まれます。
この例では、example.txt
というファイルを開き、文字列を書き込んでから閉じています。
fread関数とfwrite関数
fread関数
とfwrite関数
は、バイナリデータをファイルから読み込んだり、ファイルに書き込んだりするための関数です。
#include <stdio.h>
int main() {
FILE *file;
int numbers[5] = {1, 2, 3, 4, 5};
int readNumbers[5];
file = fopen("numbers.bin", "wb"); // バイナリファイルを開く(書き込みモード)
fwrite(numbers, sizeof(int), 5, file); // 配列をファイルに書き込む
fclose(file);
file = fopen("numbers.bin", "rb"); // バイナリファイルを開く(読み込みモード)
fread(readNumbers, sizeof(int), 5, file); // ファイルから配列を読み込む
fclose(file);
for (int i = 0; i < 5; i++) {
printf("readNumbers[%d] = %d\n", i, readNumbers[i]);
}
return 0;
}
readNumbers[0] = 1
readNumbers[1] = 2
readNumbers[2] = 3
readNumbers[3] = 4
readNumbers[4] = 5
この例では、整数の配列をバイナリファイルに書き込み、再度読み込んで表示しています。
fprintf関数とfscanf関数
fprintf関数
とfscanf関数
は、テキストデータをフォーマットしてファイルに書き込んだり、ファイルから読み込んだりするための関数です。
#include <stdio.h>
int main() {
FILE *file;
int number;
char name[50];
file = fopen("data.txt", "w"); // テキストファイルを開く(書き込みモード)
fprintf(file, "%d %s\n", 25, "Taro"); // データをファイルに書き込む
fclose(file);
file = fopen("data.txt", "r"); // テキストファイルを開く(読み込みモード)
fscanf(file, "%d %s", &number, name); // ファイルからデータを読み込む
fclose(file);
printf("読み込んだデータ: %d, %s\n", number, name);
return 0;
}
読み込んだデータ: 25, Taro
この例では、整数と文字列をテキストファイルに書き込み、再度読み込んで表示しています。
fseek関数とftell関数
fseek関数
は、ファイル内の位置を移動するための関数です。
ftell関数
は、現在のファイル位置を取得するための関数です。
#include <stdio.h>
int main() {
FILE *file;
long position;
file = fopen("example.txt", "r"); // ファイルを開く(読み込みモード)
if (file == NULL) {
printf("ファイルを開くことができませんでした。\n");
return 1;
}
fseek(file, 0, SEEK_END); // ファイルの終端に移動
position = ftell(file); // 現在の位置を取得
printf("ファイルサイズ: %ld バイト\n", position);
fclose(file);
return 0;
}
ファイルサイズ: 18 バイト
この例では、ファイルの終端に移動してファイルサイズを取得しています。
feof関数とferror関数
feof関数
は、ファイルの終端に達したかどうかを確認するための関数です。
ferror関数
は、ファイル操作中にエラーが発生したかどうかを確認するための関数です。
#include <stdio.h>
int main() {
FILE *file;
char ch;
file = fopen("example.txt", "r"); // ファイルを開く(読み込みモード)
if (file == NULL) {
printf("ファイルを開くことができませんでした。\n");
return 1;
}
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}
if (feof(file)) {
printf("\nファイルの終端に達しました。\n");
}
if (ferror(file)) {
printf("ファイル読み込み中にエラーが発生しました。\n");
}
fclose(file);
return 0;
}
ファイルの内容が表示され、終端に達したことが示されます。
この例では、ファイルの内容を読み込み、終端に達したことを確認しています。
時間関連関数
C言語には、時間を扱うための様々な関数が用意されています。
これらの関数を使用することで、現在の時刻の取得や時間の差の計算、時間のフォーマットなどを行うことができます。
time関数
time関数
は、現在のカレンダー時刻を取得するための関数です。
取得した時刻は、time_t型
で表されます。
#include <stdio.h>
#include <time.h>
int main() {
time_t currentTime;
currentTime = time(NULL); // 現在の時刻を取得
printf("現在の時刻: %ld\n", currentTime);
return 0;
}
現在の時刻: 1633072800
この例では、time関数
を使って現在の時刻を取得し、time_t型
の値として表示しています。
clock関数
clock関数
は、プログラムの実行時間を計測するための関数です。
プロセッサ時間をクロック単位で返します。
#include <stdio.h>
#include <time.h>
int main() {
clock_t start, end;
double cpu_time_used;
start = clock(); // 計測開始
// 何らかの処理
for (volatile long i = 0; i < 100000000; i++);
end = clock(); // 計測終了
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
printf("処理時間: %f 秒\n", cpu_time_used);
return 0;
}
処理時間: 0.123456 秒
この例では、clock関数
を使ってプログラムの実行時間を計測しています。
difftime関数
difftime関数
は、2つの時刻の差を秒単位で計算するための関数です。
#include <stdio.h>
#include <time.h>
int main() {
time_t start, end;
double difference;
start = time(NULL); // 開始時刻を取得
// 何らかの処理
for (volatile long i = 0; i < 100000000; i++);
end = time(NULL); // 終了時刻を取得
difference = difftime(end, start); // 時刻の差を計算
printf("経過時間: %.f 秒\n", difference);
return 0;
}
経過時間: 2 秒
この例では、difftime関数
を使って2つの時刻の差を計算しています。
mktime関数
mktime関数
は、struct tm
構造体をカレンダー時刻に変換するための関数です。
#include <stdio.h>
#include <time.h>
int main() {
struct tm timeinfo = {0};
timeinfo.tm_year = 2021 - 1900; // 年は1900年からのオフセット
timeinfo.tm_mon = 9 - 1; // 月は0から11
timeinfo.tm_mday = 30;
time_t calendarTime = mktime(&timeinfo); // カレンダー時刻に変換
printf("カレンダー時刻: %ld\n", calendarTime);
return 0;
}
カレンダー時刻: 1632960000
この例では、mktime関数
を使ってstruct tm
をカレンダー時刻に変換しています。
strftime関数
strftime関数
は、struct tm
構造体をフォーマットされた文字列に変換するための関数です。
#include <stdio.h>
#include <time.h>
int main() {
time_t currentTime;
struct tm *timeinfo;
char buffer[80];
time(¤tTime);
timeinfo = localtime(¤tTime);
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", timeinfo); // フォーマットされた文字列に変換
printf("フォーマットされた時刻: %s\n", buffer);
return 0;
}
フォーマットされた時刻: 2021-09-30 12:34:56
この例では、strftime関数
を使って現在の時刻をフォーマットされた文字列に変換しています。
応用例
C言語の基本的な関数を組み合わせることで、様々な応用プログラムを作成することができます。
ここでは、いくつかの応用例を紹介します。
ファイルのコピーを行うプログラム
このプログラムは、指定されたファイルを別のファイルにコピーします。
fopen
、fread
、fwrite関数
を使用します。
#include <stdio.h>
int main() {
FILE *sourceFile, *destFile;
char buffer[1024];
size_t bytesRead;
sourceFile = fopen("source.txt", "rb");
if (sourceFile == NULL) {
printf("ソースファイルを開くことができませんでした。\n");
return 1;
}
destFile = fopen("destination.txt", "wb");
if (destFile == NULL) {
printf("宛先ファイルを開くことができませんでした。\n");
fclose(sourceFile);
return 1;
}
while ((bytesRead = fread(buffer, 1, sizeof(buffer), sourceFile)) > 0) {
fwrite(buffer, 1, bytesRead, destFile);
}
fclose(sourceFile);
fclose(destFile);
printf("ファイルのコピーが完了しました。\n");
return 0;
}
このプログラムは、source.txt
の内容をdestination.txt
にコピーします。
バッファを使用して効率的にデータを転送します。
文字列の逆順表示プログラム
このプログラムは、入力された文字列を逆順に表示します。
strlen関数
を使用して文字列の長さを取得します。
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
printf("文字列を入力してください: ");
fgets(str, sizeof(str), stdin);
size_t length = strlen(str);
if (str[length - 1] == '\n') {
str[length - 1] = '#include <stdio.h>
#include <string.h>
int main() {
char str[100];
printf("文字列を入力してください: ");
fgets(str, sizeof(str), stdin);
size_t length = strlen(str);
if (str[length - 1] == '\n') {
str[length - 1] = '\0'; // 改行を削除
length--;
}
printf("逆順の文字列: ");
for (int i = length - 1; i >= 0; i--) {
putchar(str[i]);
}
printf("\n");
return 0;
}
'; // 改行を削除
length--;
}
printf("逆順の文字列: ");
for (int i = length - 1; i >= 0; i--) {
putchar(str[i]);
}
printf("\n");
return 0;
}
このプログラムは、ユーザーから入力された文字列を逆順に表示します。
メモリ効率を考慮したデータ処理
このプログラムは、動的メモリを使用して整数の配列を処理します。
malloc
とfree関数
を使用します。
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
printf("配列のサイズを入力してください: ");
scanf("%d", &n);
int *array = (int *)malloc(n * sizeof(int));
if (array == NULL) {
printf("メモリの確保に失敗しました。\n");
return 1;
}
for (int i = 0; i < n; i++) {
array[i] = i * 2;
}
printf("配列の内容: ");
for (int i = 0; i < n; i++) {
printf("%d ", array[i]);
}
printf("\n");
free(array);
return 0;
}
このプログラムは、ユーザーが指定したサイズの整数配列を動的に確保し、処理を行います。
数学関数を用いたグラフ描画
このプログラムは、数学関数を使用して簡単なグラフを描画します。
sin関数
を使用します。
#include <stdio.h>
#include <math.h>
int main() {
for (int i = 0; i < 360; i += 10) {
double radians = i * M_PI / 180.0;
double value = sin(radians);
int offset = (int)((value + 1) * 10); // -1から1を0から20に変換
printf("%3d: ", i);
for (int j = 0; j < offset; j++) {
putchar(' ');
}
printf("*\n");
}
return 0;
}
このプログラムは、0度から360度までの正弦波を簡単なテキストグラフとして描画します。
時間計測を用いたパフォーマンス分析
このプログラムは、clock関数
を使用して特定の処理の実行時間を計測します。
#include <stdio.h>
#include <time.h>
int main() {
clock_t start, end;
double cpu_time_used;
start = clock(); // 計測開始
// 何らかの処理
for (volatile long i = 0; i < 100000000; i++);
end = clock(); // 計測終了
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
printf("処理時間: %f 秒\n", cpu_time_used);
return 0;
}
このプログラムは、ループ処理の実行時間を計測し、パフォーマンスを分析します。
よくある質問
まとめ
C言語の基本的な関数を理解し、適切に使用することで、様々なプログラムを効率的に作成することができます。
この記事では、標準入出力、文字列操作、メモリ管理、数学計算、ファイル操作、時間管理の各関数について解説しました。
これらの知識を活用して、より複雑なプログラムを作成し、C言語のスキルを向上させましょう。