C

ヒストグラム

C K&R

K&R本 演習1-13 入力した単語の長さをヒストグラムにしてプリントするプログラムを書け。 動的にデータの長さが変わると難しいのでとりあえず固定値でやってみた #include <stdio.h> #include <math.h> #include "mylib.h" int main(void) { int num[] = { 1,2,3,2, 1,2,3,4, </math.h></stdio.h>…

キュー

http://www.geocities.jp/ky_webid/algorithm/009.htmlスタックとは違い、データの追加は後ろですが、データの取り出しは先頭からになります。 #include <stdio.h> typedef struct { int data[100]; int end; int start; } queue; void enqueue (queue *q,int data) {</stdio.h>…

スタック

http://www.geocities.jp/ky_webid/algorithm/008.htmlデータの扱い方の話ですかね。簡単に言うと配列の後ろに追加、また後ろから削除、という感じでしょうか。とりあえず適当に実装してみます。 #include <stdio.h> typedef struct { int data[100]; int index; } st</stdio.h>…

勉強用にmylib.hを作る

C

ここまでずっとC言語の勉強をしてきたわけですが、値の交換処理や配列の出力をするのにいちいちコピペでやってきました。そろそろ勉強用に良く使う関数をどこか一箇所にまとめておきたいなと思い、mylib.hなるものを作って今後はそこに何度も使う小さなプロ…

二分探索法(バイナリサーチ)

http://www.geocities.jp/ky_webid/algorithm/007.html 二分探索法は、あらかじめ配列を昇順あるいは降順にソートしておくことが前提になります。そして、まず配列の中央にある要素を調べます。もし目的の値と異なっていれば、目的の値とその位置にある値と…

入力文字を単語に切り分ける

C K&R

K&R本 演習1-12 入力した単語を1行に一つずつ印字するプログラムを書け。 表示させるだけなら単純。 #include <stdio.h> int main(void) { int c; int line = 0; while ( (c = getchar()) != EOF ) { if ( c == ' ' ) { line = 1; } else { if ( line ) { line = 0; p</stdio.h>…

単語のカウント

C K&R

K&R本 1.5.4 サンプルもあるが、自分で実装してみる。 #include <stdio.h> #include <ctype.h> // K&R 1.5.4 int main (void) { int c; int count = 0; int word = 0; FILE *fp; if ( (fp = fopen("test.txt","r")) == NULL ) { puts("file open error"); return 1; } while ( </ctype.h></stdio.h>…

空白、タブ、改行を数える

C K&R

K&R本 演習1-8 空白、タブ、改行を数えるプログラムを書け #include <stdio.h> int main (void) { int c; int count = 0; FILE *fp; if ( (fp = fopen("test.txt","r")) == NULL ) { puts("file open error"); return 1; } while( (c = fgetc(fp)) != EOF ) { switch(</stdio.h>…

getchar()

C K&R

K&R 1.5.1 #include <stdio.h> int main (void) { int c; c = getchar(); while ( c != EOF ) { putchar(c); c = getchar(); } return 0; } キーボードからの入力をそのまま出力このようなwhile文はもっとコンパクトに書けるイディオムがある。 #include <stdio.h> int main (v</stdio.h></stdio.h>…

線形探索法(リニアサーチ)

http://www.geocities.jp/ky_webid/algorithm/006.htmlソートの話は一旦置いておいて今度は探索アルゴリズム。 これは、データ列の先頭から末尾に向かって1つずつ探索していくアルゴリズムです。運良く、先頭近くで見つかれば非常に高速だし、運悪く、末尾…

シェルソート

http://www.geocities.jp/ky_webid/algorithm/005.htmlシェルソートのお時間です。 シェルソートは、ある一定距離だけ離れた要素同士で交換処理を行い、この距離を少しずつ縮めていき、最後には普通に挿入ソートを実行することでソートを行います。 なるほど…

ベンチマークコード

C

C言語でベンチマークを計るコードを書いてみました。標準のライブラリに恐らく存在するとは思いますが、time.hのclock関数の使い方に慣れるという意味で実装してみました。 #include <time.h> #include <stdio.h> double benchmark(int,void (*)(void)); double benchmark(int</stdio.h></time.h>…

挿入ソート

http://www.geocities.jp/ky_webid/algorithm/004.html挿入ソートの実装です。 1番目と2番目を比較し、順番が逆であれば入れ換える。次に、3番目の要素を、正しい順に並ぶように「挿入」する。(挿入する際、右側のデータを後ろに一つずつずらす)この操作で…

選択ソート

http://www.geocities.jp/ky_webid/algorithm/003.htmlお次は選択ソートの話です。 データ列中で一番小さい値を探し、1番目の要素と交換する。次に、2番目以降のデータ列から一番小さい値を探し、2番目の要素と交換する。これを、データ列の最後まで繰り返す…

バブルソート

http://www.geocities.jp/ky_webid/algorithm/002.html バブルソートとはソートアルゴリズムの中でも基本中の基本。別名として単純交換法とか基本交換法と呼ばれるらしい。 バブルソートは、隣接する要素同士を比較し、目的の順序に並んでいなければ、その要…

交換のアルゴリズム

http://www.geocities.jp/ky_webid/algorithm/001.htmlある値AとBを交換しようと思ったら一時変数に代入しないと交換できない work = a; a = b; b = work; 因みにPerlという言語の場合は一時変数を用意しなくても代入できる。 ($a,$b) = ($b,$a); 一時変数を…

プログラミング言語C(通称K&R本)

C K&R

プログラミング言語C 第2版 ANSI規格準拠作者: B.W.カーニハン,D.M.リッチー,石田晴久出版社/メーカー: 共立出版発売日: 1989/06/15メディア: 単行本購入: 28人 クリック: 721回この商品を含むブログ (201件) を見る WebでのC言語の勉強も一通りおわり、区切…

65章 終了関数

C

http://www.geocities.jp/ky_webid/c/065.htmlとうとうここまで来ました。最後の章です。stdlib.hに定義されているexit関数は、それを呼び出した瞬間に即座にプログラムを終了させます。mainでのreturnと同じですね。exitの場合は何処でも呼び出せるのでいつ…

64章 文字列判定関係の関数

C

http://www.geocities.jp/ky_webid/c/064.htmlずらーっとありますね。ctype.hにて定義されているようです。ちょっと表にまとめてみます。 関数名 判定内容 islower() 小英字判定 isupper() 大英字判定 isalpha() 英字判定 isdigit() 数字判定 isxdigit() 16…

63章 数学系関数

C

http://www.geocities.jp/ky_webid/c/063.html数学関係の色々な標準ライブラリの紹介ですね。まとめるとこんな感じ abs関数(labs,fabs関数) ceil関数とfloor関数 pow関数 sqrt関数 sin,cos,tan関数 試しに使ってみます。 #include <stdio.h> #include <math.h> #include <assert.h> int </assert.h></math.h></stdio.h>…

62章 標準サーチ関数 bsearch

C

http://www.geocities.jp/ky_webid/c/062.htmlbsearchとはバイナリサーチ関数です bsearch(検索対象データ,対象配列,配列全体のサイズ,一要素のサイズ,サーチ関数ポインタ)という定義になります。また さて、バイナリサーチの仕組みを知っていれば分かると思…

61章 標準ソート関数 qsort

C

http://www.geocities.jp/ky_webid/c/061.html qsort(対象配列,配列全体のサイズ,一要素のサイズ,ソート関数ポインタ)このような定義になっている。第四引数に渡す関数ポインタは int 関数名(const void*, const void*);となっている。strcmpと同じで正、負…

VCのclでコンパイルするときに警告レベルを最大にする

C

今までずっと小さなコードばかり書いていたのでいちいちVC使うのが面倒臭くてclでコマンドラインからコンパイルしていました。でそうするとstdio.hとかincludeし忘れててもprintfが動くんですよね。なんだか嫌だなぁとは思いつつもそのままにしていたのです…

60章 インクルードガード

C

http://www.geocities.jp/ky_webid/c/060.htmlこれはヘッダファイルが別々の場所から何度も呼ばれないようにするためのロック処理みたいな物です。変数単位でよいならexternで宣言だけ書くということもできますが、そもそもヘッダファイルが2度以上呼ばれな…

59章 表明プログラミング

C

http://www.geocities.jp/ky_webid/c/059.htmlアサートというものが出てきました。これは「表明」と呼ばれるものです。使い方は簡単です。assertという関数(マクロ)が提供されるので真偽値を渡すだけです。表明、つまり、これは○○のはずだ!という条件を指…

58章 メモリ操作関数

C

http://www.geocities.jp/ky_webid/c/058.htmlメモリ操作と書いてますが、サンプル等を読む限り、ポインタに対して参照書き込みしてるのと同じようにしか見えないのですが、これはそういったプロセスをすっとばして直接書き込んでるということなのでしょうか…

57章 可変引数

C

http://www.geocities.jp/ky_webid/c/057.html引数の数を可変にできるということでしょうか。実は既にそういった可変引数を扱う関数を使ったことがあります。そうprintfですね。つまりあのような仕様の関数を定義できるということになります。これは楽しそう…

56章 再帰呼び出し

C

http://www.geocities.jp/ky_webid/c/056.html自分で定義した関数の中で、その定義した関数を再度呼ぶ。これを再帰といいます。ある種無限ループですね。どこで終了させるかがわかりにくいのが特徴です。 問題1 100から引数の値まで、1ずつ減らしながら画面…

54章 時間と乱数

C

http://www.geocities.jp/ky_webid/c/054.htmlライブラリ関数の紹介ですね。今回は時間関係の関数と乱数についてのお話のようです。ここで覚えることは以下ですね。 tm構造体 time_t型 clock_t型 time関数 ctime関数 localtime関数 mktime関数 rand関数 sran…

53章 事前定義マクロ

C

http://www.geocities.jp/ky_webid/c/053.htmlC言語に予め存在しているマクロというのがあるみたいです。この章ではそれらのお勉強ということになりますか。 __FILE__ __LINE__ __DATE__ __TIME__ __STDC__ これだけの種類があるみたいです。全部四文字なん…