auの日記

プログラミング初心者の日記。(auはハンドルネームです)

C言語

可変長のint型のリストの初期化方法

auです。以前、C言語のint型の配列の初期化方法を書きました。しかしあれは、固定長のリストでした。可変長になった場合、あの初期化方法が通用しなかったのでやり方を書いておこうと思います。 可変長の宣言 そもそも可変長のリストは以下のように宣言しま…

C言語で使われるディレクティブとは

auです。今日は、ディレクティブという用語について調べました。C言語のOpenMPやOpenACCを学んでいるときに出てきた用語です。 ディレクティブとは ディレクティブとは、直訳で「指示文」という意味になります。コンパイル時に、このディレクティブ(指示文)…

並列プログラムを可能にするOpenMPとは

auです。並列プログラミングをするに当たって、OpenMPという共有メモリで並列化に対応することができるAPIがあるようなので調べてみました。 OpenMPとは OpenMPとは、共有メモリ型のシステムで並列プログラミングを可能にするAPIです。APIということは、incl…

プログラマーが集まるインターン4日目

auです。プログラマーが集まるインターンシリーズ4日目です。今日は決められていた仕様書通りの実装をすることができました。それに、自分なりにですがリファクタリングも行いました。2時間かけました。それなりに見やすくなったと思います。今日の実装で一…

C言語のシングルクォーテーションとダブルクォーテーションは違う

auです。今日はif文で条件式を書いた際に、文字区切り(c[i] == 'c'みたいな)をしようとした際に、シングルクォーテーションとダブルクォーテーションで結果が違うということに気づきました。紛らわしい。 確認する ダブルクォーテーションを組みました。 #in…

C言語でfor文でgotoを使うとcontinueでできないことができる

auです。今回は、for文で回してる時に「continueを使うとその時のループは終わっちゃって困るなー」と思ったのでなんとかしてみました。 0~9の偶数をcontinueするプログラムを組む #include <stdio.h> int main(void) { for (int i = 0; i < 10; i++) { if (i % 2 == </stdio.h>…

C言語の競合状態とは

auです。マルチスレッドについて調べていると、競合状態という用語が出てきたので調べてみました。 競合状態(race condition)とは 競合状態とは、複数のスレッド(マルチスレッド)で、一つの変数の値を変更してタイミングがずれてしまい、本来の結果が得られ…

C言語のint型の配列を初期化しなかったらバグった

auです。今回は、C言語でint型の初期化をしなかったら痛い目を見たので記事にしようと思います。こんな感じのプログラムを組みました。 動かす前は、「word = 1」のような感じで結果が返ってくると思っていました。 しかし、実際に動かしてみると全然違う結…

標準エラー出力(stderr)とは

auです。今回は「標準エラー出力(stderr)」について調べました。 標準エラー出力とは 標準エラー出力とは、エラーメッセージや警告(Warning)メッセージを出力するためのストリームです。標準出力の"stdout"があるじゃないと思うかもしれませんが、"stdout"と…

C言語: puts関数はNULL文字(\0)で改行される

auです。今回は「puts関数」を使用していた際に、改行しようとしていないのに改行されているので、どんな風に処理されているのだろうと思い調べてみました。 puts関数 #include <stdio.h> int puts(char* s) サンプル #include <stdio.h> #include <string.h> int main(void) { char c[] </string.h></stdio.h></stdio.h>…

バッファとは

auです。 今回は、「バッファ」について調べてみました。 プログラム系の調べ物をしている際に、たまに見かける用語でした。 バッファとは バッファとは、「データを蓄えておく領域」のことです。"buffer"の直訳では「緩衝材」という意味になります。 「一時…

C言語でシフト演算子を使う

auです。 前回は10進数を2進数に変換するプログラムを組みました。 今回は、2進数をシフト演算子を使って変化させたいと思います。 シフト演算子とは シフト演算子とは、ビット演算子(0か1で表すことのできる演算子)の一つで、桁を移動することができる演算…

C言語で10進数で入力された文字を2進数に変換する

auです。 今回は10進数を2進数に変換するプログラムを組みました。元々はシフト演算子について調べていたのですが、10進数を2進数に変換する方法を調べていたら組みたくなったので組んでみました。 #include <stdio.h> int main(void) { int decimal = 0; int binary </stdio.h>…

C言語の演算子の優先順位

auです。 今回は、C言語の演算子の優先順位について調べました。計算問題を解く際に、3 + (2 - 1)などの問題があった際に、計算する順序があると思います。 これと同じように、C言語にも同じように計算の優先順位があります。 C言語の優先順位は以下のように…

プログラムを正常に終了する関数exitについて

auです。 今回はstdlib.hで呼び出せる、一般ユーティリティライブラリにある「exit」について調べてみました。 exitとは exitは、プログラムを終了させたいときに使います。 exitは、プログラムのどこでも使用することができ、"exit(0)"とすることで正常終了…

C言語の配列の初期化

auです。 今回はC言語で配列を使用した際の初期化のやり方について調べました。 初期化については以前まとめています。 program-shoshinsya.hatenablog.com しかし、このときは文字列の初期化のことしかまとめていません。 配列の初期化の仕方 配列の初期化…

エスケープシーケンスとは

auです。 久しぶりに用語について調べてみました。 今回は、エスケープシーケンスについてです。 エスケープシーケンスとは エスケープシーケンスとは、文字を表示する際に、文字色の変更、改行などをする特殊な文字列のことです。よく使っているエスケープ…

きのうのプログラムをまた修正した

auです。 きのうのプログラムをいじっていたらいい感じに出力できたので記事にしてみました。 最初に思いついたのは、改行されてしまうなら"\n"を読み込まないようにfscanfのところを[^\n]にすればいいのではとやったらループし、"\r"としても同じくループし…

きのう作成したstudent.txtの中身をターミナル上に出力する

auです。 きのう、student.txtの中身に出力するプログラムを作成しました。 program-shoshinsya.hatenablog.com 今回はその中身を出力したいとおもいます。 student.txtの中身 cat student.txt id: 1 name: au id: 2 name: Satofscanfという関数を利用して中…

きのうのプログラムに追加登録機能を実装した

auです。 今回は、きのうのプログラムに追加登録機能を実装し、追加で登録すると改行されないことに気づいたので修正をしました。 きのうの記事 program-shoshinsya.hatenablog.comプログラム #include <stdio.h> #include <stdlib.h> void new_reg(void) { int id = 0; char na</stdlib.h></stdio.h>…

以前作成したstudent.txtに出力するプログラムを修正した

auです。 今回は、以前作成してうまくいかなかったfprintf関数を使用して"student.txt"に文字列を出力するプログラムを修正しました。 program-shoshinsya.hatenablog.com以前のコード #include <stdio.h> #include <stdlib.h> void new_reg(void) { int id = 0; char name[256]</stdlib.h></stdio.h>…

再起呼び出しをするプログラムの実行時間を測りたかった

auです。 今回は、以前作成した再起呼び出しをして最大公約数を求めるプログラムは何回か呼び出されると時間は変わってくのかということを調べました。 結果からいうと、プログラムの処理時間が短すぎて数値に出すことができませんでした。 作成したプログラ…

C言語のプログラムがどれくらい時間がかかったのかを計測するプログラム

auです。 今回は"time.h"モジュールを使用して、for文を1000万回繰り返したらどれくらい時間がかかるのか調べてみました。 #include <stdio.h> #include <time.h> int main(void) { int t1 = 0; int t2 = 0; int dt = 0; int t = 0; t1 = clock(); // 処理する前の時間をt1に</time.h></stdio.h>…

fprintf関数を使用して"student.txt"に文字を出力する

auです。 今回はfprintf関数を使用して"student.txt"に文字列を出力するプログラムを組みました。 fprintf関数は、コンソール上に文字を出力するのではなく、指定されたファイルに出力する関数です。 今回は"student.txt"にHello World"と出力するプログラム…

idと名前をstudent.txtに出力することができるプログラムを組みたかった

auです。 今回はidと氏名をstudent.txtに出力するプログラムを組みたかったんですが、何かがいけないためにSegmentation fault (core dumped)とエラーが起きてしまい、うまく動作することができませんでした。 #include <stdio.h> #include <stdlib.h> void new_reg(void) { int</stdlib.h></stdio.h>…

C言語のvoid型を分岐でreturnする方法

auです。 void型の関数を使用していて、int型みたいに"return 0"をしようとするとwarningで返されるのでどうすればいいかと思い調べてみました。 return 0で返そうとしてみる 以下のようなプログラムを組み、void型の中でreturn 0で返そうとしました。 #incl…

再起呼び出しを使用して最大公約数を計算するプログラム

auです。 今回も再起呼び出しを使って最大公約数を呼び出すプログラムを組みました。 #include <stdio.h> int g_common_divisor(int x, int y) { int rem = 0; int res = 0; res = x / y; rem = x % y; if (rem == 0) { return y; } x = y; y = rem; return g_common_</stdio.h>…

再起呼び出しを使って1 ~ nの総和を計算する

auです。 今回は再起呼び出しを使って1~nの総和を計算するプログラムを組みました。 #include <stdio.h> int sum_total(int n) { if (n == 1) { return 1; } return n + sum_total(n - 1); } int main(void) { int n = 0; int result = 0; printf("数字を入力: "); sc</stdio.h>…

再帰処理をして階乗のプログラムを作った

auです。 今回は再起呼出をして階乗のプログラムを作りました。 再起呼出とは、return を使って自身の関数をもう一度呼び出して処理をすることです。 今回のプログラムでは、nの階乗を計算する関数「factorial」を複数回呼び出して計算しています。 #include <stdio.h></stdio.h>…

関数を定義して3つの図形の面積を求めるプログラム

auです。 今回は、関数を作って処理をするプログラムを作ろうと思い、正方形・長方形・円形の3つの図形の面積を求めるプログラムを組みました。 #include <stdio.h> #define PI 3.14f float radius = 0; // (ここから)グローバル関数 float side1 = 0; float side2 = </stdio.h>…