6/26(金)〜7/3(金) の学習ログです(主にC言語)

おはようございます。安藤です。

いつもありがとうございます。

私の学習ログです。

 

 

 

2020.6.26(金) 
C言語(web記事「苦しんで覚えるC言語」)
第3部 アルゴリズム入門編
アルゴリズム入門編
アルゴリズムの概要
アルゴリズムとは
アルゴリズムとは、ある問題を解くための手順、即ち、公式のこと。
言い方を変えると、明確で有限個の手順を有限回繰り返す計算方法のこと。


「冷蔵庫からヨーグルトを取ってきて」というのは不明確な命令。
「18度回転、182cm前進、36度回転、腕を90度上昇…」は明確な命令。

有限個の手順とは、少し不思議な表現だが、手順が無限になることは一般には考えにくいので、あまり気にしなくていい。

有限回繰り返す計算とは、いつか必ず計算が終わる、ということ。
無限に続く円周率の計算も、ある程度まで計算した段階で強制的に終了させてしまう。

これらの条件はコンピュータに計算させて問題を解く場合には必ず必要。
人間が問題を解く場合には、ある程度経験や勘に頼ったりするが、
コンピュータには、そのような機能はないので明確な手順は必須。

アルゴリズムは原則として、プログラミング言語に依存しない。
Cでも、Javaでも同じアルゴリズムを使うことができる。

アルゴリズムの性能
コンピュータは純粋な理論の世界なので、現実世界と異なり物理的な制約がない。
そのため、問題を解く場合でも、様々な方法を考えることができる。

※コンピュータと宗教
実は、コンピュータ業界は宗教的なところがある。
物理的な制約を無視し、様々な考え方ができるから。
そのため同じことをやるにしても人によって方法が全く異なり、場合によっては、どの方法を信じるのか、というレベルの争いになるため、だから。

ここでどこで優れた方法と判断するするか、つまり、性能評価が問題になる。
アルゴリズムの性能を比べる基準としては、次の基準がよく使われる。
・計算速度(早く終わるほど優秀)
・メモリ使用量(少なく済むほど優秀)
・計算の精度(正確に計算できるほど優秀)
・プログラムの作りやすさ(簡単に作れるほど優秀)

この中で最も注目すべきは、何と言っても計算速度。
というのも、そのほかの基準は、アルゴリズムによる差がさほどないが、計算速度だけは天と地ほどの違いがある。

他の基準について。
メモリ使用量もアルゴリズムによって異なる。
高速なアルゴリズムでは、2〜3倍必要だが、速度ほどの差はない。
計算の精度もアルゴリズムによって異なるが、速度ほどの差はない。
重要なのが、プログラムの作りやすさ、これは、高度なアルゴリズムほど時間がかかりバグが起こりやすいので、無視できる程度の速度差なら簡単な方が良い。

・O(おー)記法
アルゴリズムの比較は、計算回数を元にして行う。
アルゴリズムの計算で時間がかかるのは、繰り返し処理の部分。
繰り返しを行なっていない部分の時間は非常に短いため、無視できる。
計算元のデータの増加に対して繰り返し回数がどれだけ増加するのかが重要。

このような理由から
アルゴリズムの計算速度には、O記法が使われる。

O記法…データ件数に対して繰り返し回数の増加を漸近的に求めた値。

O記法では、n個のデータに対して繰り返し回数がnに比例するなら、O(n)と表す。
ただし、n個のデータに対して繰り返し回数が2nとなる場合でもO(n)と表す。
2乗などに比べ整数倍の影響はたかがしれているため、整数倍は無視する。

※2乗の記号
コンピュータ文字では、2乗を表しにくいので、^2という記号を使う。

O記法を使用すると、コンピュータで実行せずともアルゴリズムの性能がわかる。
しかも、データ件数が増えるとどれだけ計算が遅くするのかが分かるため、アルゴリズムの性能判断に有効。

 


◎今日のビジネス関連の読書
・グーグルが消える日 著:ジョージ・ギルダー
・宇宙と宇宙をつなぐ数学 著:加藤文元
・営業はいらない 著:三戸政和
・ディズニーCEOが実践する10の原則 著:ロバート・アイガー
・次のテクノロジーで世界はどう変わるのか 著:山本康正
・Think Smart 著:ロルフ・マインド

 

 

 

 

2020.6.27(土) 
C言語(web記事「苦しんで覚えるC言語」)


第3部 アルゴリズム入門編
アルゴリズム入門編
アルゴリズムの概要

・データ構造
データ構造とは、一見アルゴリズムと関係がなさそうだが、データ構造とアルゴリズムの関係は重要。

データ構造…情報の表現方法のこと。

データ構造とは、情報を記憶するときにどのような形を取るかを意味する。
配列は、同じ型の変数を複数並べることで、複数の情報を表現している。
構造体は、異なる型の変数をまとめて、関連性のある情報を表現している。
これらは単純なデータ構造だが、いずれも普通の変数では表現は難しい情報。

 

●整列(ソート)
バブルソート

・整列とは
整列とは、デタラメに並べられたデータを順番通りに並び変えること。
ソートアルゴリズムでは、高速性のほか、安定性が必要なことがある。
安定とは、ソート後に同じ値のデータの並び順が変化しないこと。

ソートの目的は、検索のため。
データが揃えられていると目的の値がどこにあるか見当がつき、データがデタラメに並んでいる場合よりも早く検索できる。

 

バブルソート
考え方は、1つ目と2つ目のデータを比べ、2つ目が小さい場合はデータを交換する。
次は、2つ目と3つ目を比較する。これをデータの最後まで繰り返す。
データの最後まできたら、また1つ目から比較と交換を繰り返す。
これをデータの個数回繰り返せば、データが整列される。
速度は遅いので、あまり優秀とは言えない。

 


◎今日のビジネス関連の読書
・昨日も22時に寝たので僕の人生は無敵です 著:井上皓史
・どこでも誰とでも働ける 著:尾原和啓
・トップも知らない星野リゾート 著:前田はるみ

 

 

 

2020.6.28(日) 
C言語(web記事「苦しんで覚えるC言語」)
第3部 アルゴリズム入門編

●暗号化
*シーザー、排他的論理和

・暗号化とは
暗号化とは、元のデータを変形させて、意味が分からないようにする技術。
元に戻せることが前提。
元のデータに戻すことを復号化と呼び、元のデータ自体を平文と呼ぶ。
暗号化の意図は第三者にデータ盗まれないため。
暗号強度が何よりも重視される。

・シーザー暗号
世界で初めて暗号を使用したのは、シーザー・カサエルと言われている。
その方法は、文字を数文字ずつずらすだけ。

排他的論理和暗号
2進数の計算で同じ数が入力された時に出力が0となる。
排他的論理和では、一見するとデタラメな数値になるため、暗号化に適している。
C言語排他的論理和を計算するには、^記号を使う。

・長いパスワード
複数の数値を繰り返して使う。

擬似乱数の応用
排他的論理和の結果は一見デタラメだが、同じ計算は簡単に行われてしまう。
これを防ぐには、擬似乱数を使って計算内容が分からないようにする。


※乱数のアルゴリズム
コンパイラが異なれば標準ライブラリの乱数アルゴリズムも異なる。
そのため、異なるコンパイラでは、計算結果が異なることになる。
これを防ぐには、乱数のアルゴリズムも自分で作る必要がある。

C言語コラム編
*K&R
K&Rとは、世界初のまともなC言語の解説書であり、C言語の開発者自身が執筆していたこともあり、世界中で大ヒットした。
コンピュータ業界最大のベストセラーとも言われている。
細かい部分まで説明してあり、当時はこの本を元にして、コンパイラが作られたほど。

・SWAPマクロ
SWAPとは、2つの変数の値を交換するマクロや関数。

C言語簡易リファレンス
*単語と記号

予約語
auto  break  case  char  const  continue  default  do  double  else  enum  extern  float  for  goto  if   int  long  register  return  short  signed  sizeof  static  struct  switch  typedef  union  unsigned  void  volatile  while

コンパイラによっては、これ以外にも予約語を定義していることもある。

・出力変換指定子
変換指定子の書式
% オプション 長さ.精度 型

これらをつなげて指定する。型以外は省略することができる。

<オプション一覧>
-  左詰めで表示
+  右詰めで表示
# 0、あるいは小数点の抑制を行わない。

<長さと精度の書式>
長さの数値をL、精度の数値をPとする。
L  最低でもL桁で出力する。余白はスペースで埋める。
0L  最低でもL桁で出力する。余白は0で埋める。
L .P  全体を最低でもL桁、小数点以下をP桁で出力。
L .0  全体を最低でもL桁、小数点以下は出力しない。

<型一覧>
d,i  整数の10進数。
o   整数の8進数符号なし。
x,X  整数の16進数符号なし。xは小文字、Xは大文字。
u  整数10進数符号なし。
f  実数。
e,E  実数の指数形式。eは小文字、Eは大文字。
g,G  通常形式か指数形式。
c  char型の文字。
s  空白を含まないchar型の文字列。
p   ポインタの値。
n   これまでに読み込まれた文字数を代入。データを読み込まない。
%  何もしない。無意味な指定。

入力変換指定子は、代入を行うので型の指定が厳しくなる。
上の一覧には、double型はないが、これはサイズ指定子の l  と組み合わせて指定する。

演算子と優先順位
Cの演算子の優先順位はとてもうまく考えられているので、一般的な使用では明示的に()をつける必要はなく、数式の通りに書くことでうまくいくことがほとんど。
ただ、優先順位が不安な時は、この表を見て比べるよりも、()をつけるのが簡単で現実的。

C言語演算子と優先順位>
上にあるものほど優先順位が高くなっている。
区切られた各部分の記号は同じ優先順位となる。
呼び方には特に決まりはないが、一般的だと思われる呼び名を使用した。

名前  記号  機能  結合規則  項数

・配列添字  [ ]   配列の要素番号の指定  左から右  単項
・関数呼び出し  ()  関数を呼び出す  左から右  単項
・要素選択  .   構造体の要素を選択  左から右  単項

・アロー  ->   構造体ポインタの要素を選択  左から右  単項
・後置インクリメント  ++  変数の値を1増やす  なし  単項
・後置デクリメント  ーー  変数の値を1減らす  なし  単項
・前置インクリメント  ++  変数の値を1増やす  なし  単項
・前置デクリメント  ーー  変数の値を1減らす  なし  単項
・参照  ・  ポインタのさす変数にアクセス  なし  単項
・アドレス  &  変数のアドレスにアクセス  なし  単項
・単項プラス  +  正の値にする  なし  単項
・単項マイナス  ー  負の値にする  なし  単項
・論理否定  !  真と偽の状態を反転  なし  単項
・サイズオブ  sizeof  変数や配列や型のサイズを取得  なし  単項
・キャスト  (型)  指定の型に強制変換  右から左  単項

・乗算  *   掛け算  左から右  2項
・除算  /   割り算  左から右  2項
・剰余  %  余り  左から右  2項

・加算  +  足し算  左から右  2項
・減算  ー  引き算  左から右  2項

・左シフト  <<  変数の値を1ビット左にずらす(2倍)  左から右  単項
・右シフト  >>  変数にお値を1ビット右にずらす(半分)  左から右  単項

・小なり  <  左側の値が右より小さい時に真  左から右  2項
・大なり  >  左側の値が右より大きい時に真  左から右  2項
・以下  <=  左側の値が右以下の時に真  左から右  2項
・以上  >=  左側の値が右以上の時に真  左から右  2項

・等価  ==  左と右の値が等しいとき真  左から右  2項
・不等価  !=  左と右の値が異なるとき真  左から右  2項

・ビットAND   &  ANDを取る  左から右  2項

・ビット排他的論理和  ^   排他的論理和を取る  左から右  2項

・ビットOR   |   ORを取る  左から右  2項

・論理AND   &&  左と右の両方が真の時に真  左から右  2項

・論理OR   ||   左と右のどちらかが真の時に真  左から右  2項

・条件  ?と:  真の時は前式を、偽の時は後式を代入  右から左  3項

・代入  =  左の変数に右の式の値を代入  右から左  2項
・代入乗算  *=   左の変数に右の式との値の掛け算を代入  右から左  2項
・代入除算  /=  左の変数に右の式との値の掛け算を代入  右から左  2項
・代入剰余  %=  左の変数に右の式との値の余りを代入  右から左  2項
・代入加算  +=  左の変数に右の式との値を足し算を代入  右から左  2項
・代入除算  -=   左の変数に右の式との値を引き算を代入  右から左  2項
・左シフト代入  <<=   左の変数に右の式との値の左シフトを代入  右から左  2項
・右シフト代入     >>=   左の変数に右の式との値の右シフトを代入  右から左  2項
・ビットAND代入  &=  左の変数に右の式との値のANDを代入  右から左  2項
・ビット排他的論理和代入  ^=   左の変数に右の式との値の排他的論理和を代入  右から左  2項
・ビットOR代入  =  左の変数に右の式との値のORを代入  右から左  2項

・順次  ,   式を結合  左から右  2項


参照演算子とは、ポインタ変数を通常変数モードに切り替える演算子
ポインタ変数を宣言する時につける*とは文法上は関連性はない。

配列添字演算子とは、配列につけられる[ ] のことを意味しており、その機能はアドレスへ変数のバイトサイズ分の足し算を行うこと。
配列を宣言する時につける[ ]とは文法上は関連性はない。

条件演算子とは、条件式を簡単に作るものである。
変数=(条件式)?式1:式2;

条件式が真の時は式1が実行され、偽の時は式2が実行される。
その結果が変数に代入されるが、変数を指定しなくても使える。
if文より条件判断に簡便に書けるので、これを好んで使う人もいる。
この演算子は、C言語で唯一3項を使うので、3項演算子ともいう。

順次演算子とは、2つの式を1つにまとめてしまおうというもの。
j=(I=3,i+2);

この例では、先にi=3が計算され、次にi+2が計算される。
最終的には、jに5が代入される。


・記憶クラス指定子
C言語には、以下の記憶クラス指定子が用意されている。しかし、すでに使われなくなったものも多い。
<記憶クラス指定子>
・auto
・register
・static
・extern
・typedef

<auto指定子>
変数が自動変数であることを意味する。
しかし、関数の内部では自動的に自動変数になるし、関数外ではエラーになるので無意味な指定子。

<register指定子>
その変数が頻繁に使用されることを意味する。
昔はこの変数をレジスタに割り当てることで、処理の高速化を行っていたが、現在ではコンパイラの最適化機能が優先される。

<static指定子>
その変数がプログラム終了まで残り続けることを意味する。
関数内では、変数の値が関数の中で保持されるようになる。
関数外では、変数がそのソースファイルの中だけ有効になる。

<extern指定子>
変数などの定義が他のソースファイルで行われていることを意味する。
ヘッダーファイル内で共通変数を宣言するのに使われる。

<typedef指定子>
新しい型を宣言する。
型宣言を簡単にできる上、コンパイラによるチェックも行える。


エスケープ文字
画面には表示できないけど、文字列の表示などを操作する目的で使われるもの。
改行を行う\nが有名だが、他にも次のようなものがある。

エスケープ文字>
エスケープ文字  16進数  機能

・\a  0x07   ビープ音を鳴らす
・\b    0x08   カーソル位置を1つ後ろにずらす
・\t    0x09   カーソル位置を次のタブ位置に移動する
・\n   0x0A   カーソル位置を次の行に移動(改行)
・\f    0x0C      紙を排出する(プリンタの場合のみ)
・\r    0x0D   カーソル位置を行の1番左に移動(Macでは改行)
・\\    0x5C   \を表示する
・\’    0x2C   ’を表示する
・\”    0x22       “を表示する
・\?    0x3F   ?を表示する
・\数字 8進数で同じ  対応する8進数の文字コードを表示
・\x数字  数字と同じ  対応する16進数の文字コードを表示

この中でよく使われているのは、\nと\t。
\fは、プリンタへの出力の時にのみ使えるが一般的ではない。
\rは、Macでは改行なので、現在では他のOSでも改行となる。

エスケープ文字は、その表記に2文字以上使うが、実際はあくまでも1文字。


・定義済み定数
C言語では、処理系の情報や、デバッグに使える情報などを、定義済みの定数として用意している。

デバッグ用定数>
__LINE__  実行されている行番号
__FILE__  実行されているソースファイル名
__DATE__  コンパイルされた日付
__TIME__  コンパイルされた時刻

__FILE__と__LINE__を使うことで、プログラムの実行時にエラーの発生した行番号を突き止めることができる。
ログファイルに吐いたり、簡易デバッガに使うと便利。


<整数型サイズの定義済み定数>
これらの定数の使用には、#define <limits.h>が必要。

CHAR_BIT      char型のビット単位のサイズ。
CHAR_MAX    char型の最大値。
CHAR_MIN       char型の最小値。
INT_MAX       int型の最大値。
INT_MIN        int型の最小値。
LONG_MAX     long型の最大値。
LONG_MIN      long型の最小値。
SCHAR_MAX      signed char型の最大値。
SCHAR_MIN       singed char型の最小値。
SHART_MAX     short型の最大値。
SHART_MIN      short型の最小値。
UCHAR_MAX     unsigned char型の最大値。
UCHAR_MIN      unsigned char型の最小値。
ULONG_MAX     unsigned long型の最大値。
USHRT_MAX     unsigned short型の最大値。

char型を符号づけにするかはコンパイラ依存。
どちらも文字の記憶には支障はない。

 


◎今日のビジネス関連の読書
・モチベーション革命 著:尾原和啓
ライフハック 人生と仕事を変える小さな習慣250 著:掘正岳
老子 著:老子
・一億三千万人のための「論語」教室 著;高橋源一郎
・スタートアップで働くということ 起業家ではなく参加者(ジョイナー)として会社を立ち上げる 著:ジェフリー・バスギャング
・未来型国家エストニアの挑戦電子政府がひらく世界 著:ラウル・アリキヴィ、前田陽二

 

 

 

2020.6.29(月) 
C言語(web記事「苦しんで覚えるC言語」)
第3部 アルゴリズム入門編

C言語簡易リファレンス
*標準ライブラリ関数一覧

・入出力 <stdio.h>
主にファイルを取り扱う関数。
C言語では、ディスク以外の周辺機器もファイル扱いできる。
また、規定のファイルポインタとしてこれらを扱うことができる。
<規定のファイルポインタ>
stdin  標準入力(普通はキーボード)
stdout    標準出力(普通はディスプレイ)
stderr    標準エラー出力(普通はディスプレイ)

これらはリダイレクトなどの方法でユーザーが変更することもできる、環境によっては、別の機器に関連づけられたり、無効になっていることもある。

<fopen>
関数型:FILE *fopen(const char *filename, const char *mode);
引数:ファイル名、モード文字列
戻り値:開いたファイルポインタ。失敗した場合はNULL。
機能:ファイルを開く。
モード:r読み込み、w新規、a追加。b付加でバイナリ、+付加で入出力両用。

<fclose>
関数型:int close(FILE *fp);
引数:ファイルポインタ
戻り値:成功した場合は0、失敗した時はEOF
機能:ファイルを閉じる。

<fgetc>
関数型:int fletcher(FILE *fp);
引数:ファイルポインタ
戻り値:読み出した文字。失敗したか終わりに到達した場合はEOF。
機能:ファイルから1文字読み出す。

<getc>
機能:fgetcと同じ。
注意:マクロになっていることがあるので副作用に注意。

<fgets>
関数型:char *fgets(char *s, int n, FILE *fp);
引数:文字列を格納するバッファ、バッファサイズ、ファイルポインタ
戻り値:引数で指定したバッファ。失敗したか終わりに到達した場合はNULL。
機能:ファイルから1行読み出す。結果に改行を含む。

<fputc>
関数型:int fputc(int c, FILE *fp);
引数:文字、ファイルポインタ
戻り値:出力文字。失敗した時はEOF。
機能:ファイルに1文字書き込む。

<putc>
機能:fputcと同じ。
注意:マクロになっていることがあるので副作用に注意。

<fputs>
関数型:int puts(const char *s, FILE *fp);
引数:文字列、ファイルポインタ
戻り値:成功した場合は真、失敗した時はEOF。
機能:ファイルに文字を書き込む。

<fread>
関数型:size_t bread(void *ptr, size_t size, size_t Belem, FILE *fp);
引数:読み込み結果を格納するバッファ、1項目のサイズ、項目数、ファイルポインタ
戻り値:読み込んだ項目数。失敗した場合は0。
機能:ファイルから固定サイズの項目を読み込む。

<fwrite>
関数型:size_t write(const void *ptr, size_t size, size_t nelem, FILE *fp);
引数:書き込むバッファ、1項目のサイズ、項目数、ファイルポインタ
戻り値:書き込んだ項目数。失敗した場合は0。
機能:ファイルに固定サイズの項目を書き込む。

<fprintf>
関数型:int fprintf(FILE *fp, const char *fomat, …);
引数:ファイルポインタ、書式付き文字列、可変個の変数
戻り値:出力文字数。失敗した時は負の値。
機能:ファイルに書式付き文字列を書き込む。

<fscanf>
関数型: int fscanf(FILE *fp, const char *format, …);
引数:ファイルポインタ、変換指定文字列、可変個のバッファ
戻り値:変換に成功した後。失敗した場合は-1。
機能:ファイルから文字列を読み込みされた形式に変換する。

<ftell>
関数型:long tell(FILE *fp);
引数:ファイルポインタ
戻り値:現在のファイル位置
機能:ファイル位置を取得する。

<fseek>
関数型:int seek(FILE *fp, long offset, int ptrname);
引数:ファイルポインタ、ファイル位置の移動数、ファイル位置の基準
戻り値:成功した場合は0、失敗した時は0以外。
機能:ファイル位置を変更する。
位置:SEEK_SET 先頭、SEEK_CUR現在の位置、SEEK_END終わり

<fgetpos>
関数型:int fgetpos(FILE *fp, epos_t *ptr);
引数:ファイルポインタ、ファイル位置を格納する変数のポインタ
戻り値:成功した場合は0、失敗した時は0以外。
機能:現在のファイル位置を格納する。

<fsetpos>
関数型:int fsetpos(FILE *fp, const epos_t *ptr);
引数:ファイルポインタ、ファイル位置を格納する変数のポインタ
戻り値:成功した場合は0、失敗した場合は0以外。
機能:ファイル位置を変更する。

<feof>
関数型:int foes(FILE *fp);
引数:ファイルポインタ
戻り値:終わりに到達した場合は真、到達していない場合は偽。
機能:ファイルが終わりに到達したか調べる。

<ferror>
関数型:int error(FILE *fp);
引数:ファイルポインタ
戻り値:エラー発生した場合は真、発生していない場合は偽。
機能:ファイルにエラーが発生したか調べる。

<clearerr>
関数型:void clearers(FILE *fp);
引数:ファイルポインタ
機能:ファイルのエラーの時に回復する。

<fflush>
関数型:int flush(FILE *fp);
引数:ファイルポインタ
戻り値:成功した場合は0、失敗した場合は偽。
機能:出力バッファを強制出力する。
注意:コンパイラによっては入力バッファをクリアできる。ただし邪道。

<freopen>
関数型:FILE *freopen(const char *filename, const char *mode, FILE *fp);
引数:ファイル名、モード文字列、ファイルポインタ
戻り値:引数で指定されたファイルポインタ。失敗した場合はNULL。
機能:ファイルポインタの再割り当て。

<rename>
関数型:int rename(const char *oldname, const char *newname);
引数:現在のファイル名、新しいファイル名
戻り値:成功した場合は0、失敗した場合は0以外。
機能:ファイルの名前を変更する。

<remove>
関数型:int remove(const char *filename);
引数:ファイル名
戻り値:成功した場合は0、失敗した場合は0以外。
機能:ファイルを削除する。

<getchar>
関数型:int getchars(void);
戻り値:読み出した文字。失敗した場合はEOF。
機能:標準入力(キーボード)から1文字読み込む。

<putchar>
関数型:int put char(char c);
引数:文字
戻り値:出力文字。失敗した場合はEOF。
機能:標準出力(ディスプレイ)に1文字書き込む。

<gets>
関数型:char *gets(char *s);
引数:読み込んだ文字列を格納するバッファ
戻り値:引数で指定したバッファ。失敗したか終わりに到達した場合はNULL。
機能:標準入力(キーボード)から1行読み出す。結果に改行は含まれない。
注意:バッファオーバーラン(ウィルス侵入)の原因になるので使ってはいけない。

<puts>
関数型:int puts(const char *s);
引数:文字列
戻り値:成功した場合は0、失敗した場合は0以外。
機能:標準出力(ディスプレイ)に1行書き込む。改行される。

<perror>
関数型:void terror(const char *s);
引数:表示する文字列。
機能:指定した文字列と一緒に直前に発生したエラーを表示する。

<printf>
関数型:int printf(const char *format,  …);
引数:書式付き文字列、可変個の変数。
戻り値:出力文字数。失敗した場合は−1。
機能:標準出力(ディスプレイ)に書式付き文字列を書き込む。

<scanf>
関数型:int scarf(const char *format, …);
引数:変換指定文字列、可変個のバッファ
戻り値:変換に成功した数。失敗した場合は−1。
機能:標準入力(キーボード)から文字列を読み込み指定された形式に変換する。
注意:他の入力関数と一緒に使うと思わぬ動作をすることがある。

  


◎今日のビジネス関連の読書
・筋の良い仮説を生む問題解決の「地図」と「武器」 著:高松康平
・フルライフ 著:石川善樹
・人は、なぜ他人を許せないのか? 著:中野信子
・リーダーとして覚えておいてほしいこと 著:野村克也

 

 

 

2020.6.30(火) 
C言語(web記事「苦しんで覚えるC言語」)
第3部 アルゴリズム入門編

C言語簡易リファレンス
*標準ライブラリ関数一覧

・汎用 <stdlib.h>
特に分類されない汎用的な関数の集まり。
メモリ関連、プロセス関連、変換など。

<malloc>
関数型:void *malloc(size_t n);
引数:確保するメモリサイズ
戻り値:確保したメモリのアドレス。確保できなかった場合はNULL。
機能:メモリを動的に確保する。

<calloc>
関数型:void *calloc(size_t int nelem, size_t elsize);
引数:要素数、1要素のサイズ
戻り値:確保したメモリのアドレス。確保できなかった場合はNULL。
機能:メモリを動的に確保する。確保したメモリはゼロクリアされる。
注意:ゼロクリアされるからバグが減ると勘違いしないこと。

<realloc>
関数型:void *realloc(void *ptr, size_t size);
引数:確保したメモリのアドレス、新しいメモリサイズ。
戻り値:確保したメモリのアドレス。確保できなかった場合はNULL。
機能:確保したメモリサイズに変更する。中身は維持される。
補足:メモリアドレスが変更される可能性があることに注意。

<free>
関数型:void free(void *p);
引数:確保したメモリのアドレス
機能:動的に確保したメモリを解放。

<abs>
関数型:int abs(int n);
引数:数値
戻り値:数値の絶対値
機能:絶対値を求める。

<labs>
関数型:long labs(long n);
引数:数値
戻り値:数値の絶対値
機能:絶対値を求める。

<atof>
関数型:double atop(const char *s);
引数:数字を含む文字列
戻り値:変換後の値。変換できない場合は0。
機能:数字を含む文字列を実数値に変換。

<atoi>
関数型:int atom(const char *s);
引数:数字を含む文字列
戻り値:変換後の値。変換できない場合は0。
機能:数字を含む文字列を整数値に変換。

<atol>
関数型:long atop(const char *s);
引数:数字を含む文字列
戻り値:変換後の値。変換できない場合は0。
機能:数字を含む文字列を整数値に変換。

<strtod>
関数型:double started(const char *s, char **endptr);
引数:数字を含む文字列、終了位置のアドレス
戻り値:変換後の値。変換できない場合は0。
機能:数字を含む文字列を実数値に変換。

<strtol>
関数型:long stratal(const char *s, char **endptr, int base);
引数:数字を含む文字列、終了位置のアドレス、数値の基数(2進数や16進数)
戻り値:変換後の値。変換できない場合は0。
機能:数字を含む文字列を整数値に変換。

<strtoul>
関数型:unsigned long strtoul(const char *s, char **endptr, int base);
引数:数字を含む文字列、終了位置のアドレス、数値の基数(2進数、16進数)
戻り値:変換後の値。変換できない場合は0。
機能:数字を含む文字列を符号なし整数値に変換。

<div>
関数型:div_t div(int num, int denom);
引数:割られる数、割る数。
戻り値:割り算の結果。
機能:商と余りを同時に計算。
構造体:div_t構造体 int quit 商、 int rem 余り。
補足:この関数より、演算子 / や%を使うことを勧める。

<ldiv>
関数型:ldiv_t ldiv(long num, long denom);
引数:割られる数、割る数。
戻り値:割り算の結果。
機能:商と余りを同時に計算。
構造体:ldiv_t構造体 long quit 商、  long rem 余り。
補足:この関数より、演算子 / や%を使うことをお勧め。

<rand>
関数型:int rand(void);
戻り値:ランダムな値。範囲は処理系による。
機能:乱数を得る。
使用方法:#define RAMDOM(MIN,MAX) *1;   が定番。

<exit>
関数型:void exit(int n);
引数:終了コード。一般にEXIT_SUCCESSは正常終了、EXIT_FAILUREは異常終了。
機能:プログラムを終了させる。

<abort>
関数型:void abort(void);
機能;プログラムを異常終了させる。
補足:エラーが発生した時の終了に使用する。

<atexit>
関数型:int ataxia(void (*func)(void));
引数:関数のアドレス
戻り値:成功した場合は0、失敗した場合は0以外。
機能:プログラム終了時に実行する関数を登録する。

<getenv>
関数型:char *getenv(const char *name);
引数:名前
戻り値:値を格納した文字列の先頭アドレス。見つからない場合はNULL。
機能:環境変数を取得する。

<bsearch>
関数型:void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *x, const void *y));
引数:探す値、配列の先頭、探索数、1要素のサイズ、比較関数のアドレス
戻り値:見つかった要素のアドレス。見つからない場合はNULL。
機能:2分探索を行う。データは昇降に整列されていなくてはならない。
比較:比較関数は、x > yの場合は正、x = yの場合は0、x < y の場合は負を返すこと。

<qsort>
関数型:void sort(void *base, size_t nel, size_t width, int(*compar)(const void *x, const void *y));
引数:配列の先頭、整列個数、1要素のサイズ、比較関数のアドレス
機能:配列を昇降に整列する。クイックソートを使っていることが多い。
比較:比較関数は、x > y の場合は正、 x = yの場合は0、 x < y の場合は負を返すこと。

<system>
関数型:int system(const char *string);
引数:コマンド文字列
戻り値:処理系のコマンド依存。コマンドを実行できなかった場合は−1。
機能:処理系が用意しているコマンドを実行する。
補足:コマンドは処理系が異なると互換性がない。
 :NULLを指定すると、コマンドが利用できない環境では0を返す。


・文字処理 <ctype.h>
半角文字1文字を取り扱う関数群。
マクロとして実現されていることがほとんど。

<isalpha>
関数型:int is alpha(int c);
引数:文字
戻り値:文字がアルファベットなら0以外、異なる場合は0。
機能:文字がアルファベットか判定する。

<isupper>
関数型:int sipper(int c);
引数:文字
戻り値:文字が英大文字なら0以外、異なる場合は0。
機能:文字が英大文字か判定する。

<islower>
関数型:int slower(int c);
引数:文字
戻り値:文字が英小文字なら0以外、異なる場合は0。
機能:文字が英小文字か判定する。

<isdigit>
関数型:int isdigit(int c);
引数:文字
戻り値:文字が数字なら0以外、異なる場合は0。
機能:文字が数字か判定する。

<issapce>
関数型:int is space(int c);
引数:文字
戻り値:文字が空白文字なら0以外、異なる場合は0。
機能:文字が空白文字か判定する。

<isalnum>
関数型:int isalnum(int c);
引数:文字
戻り値:文字がアルファベットまたは数字なら0以外、異なる場合は0。
機能:文字がアルファベットまたは数字か判定する。

<iscntrl>
関数型:int iscntrl(int c);
引数:文字
戻り値:文字がコントロール文字なら0以外、異なる場合は0。
機能:文字がコントロール文字か判定する。

<isgraph>
関数型:int is graph(int c);
引数:文字
戻り値:文字がスペース以外の印刷できる文字なら0以外、異なる場合は0。
機能:文字がスペース以外の印刷できる文字か判定する。

<isprint>
関数型:int misprint(int c);
引数:文字
戻り値:文字が印刷できる文字なら0以外、異なる場合は0。
機能:文字が印刷できる文字か判定する。

<ispunct>
関数型:int isounct(int c);
引数:文字
戻り値:文字が区切りなら0以外、異なる場合は0。
機能:文字が区切り文字か判定する。

<isxdigit>
関数型:int isxdigit(int c);
引数:文字
戻り値:文字が16進数用の文字なら0以外、異なる場合は0。
機能:文字が16進数用の文字か判定する。

 

 

◎今日のビジネス関連の読書
・2020年6月30日にまたここで会おう 著:瀧本哲史
統計では、100社のうち3社くらい、ベンチャーで成功するのは。だからたくさんこなすこと。
失敗は織り込んで仮説を試すこと。
QRコードの奇跡 著:小川進
もともと、トヨタの発注先のデンソーが開発した技術。
Quick Responseの略称だったのか。
・未来を創るプレゼン 著:伊藤羊一、澤円
プレゼンはプレゼント。
・不可能を可能にせよ!NET FLIX成功の流儀 著:マーク・ランドルフ
ドラえもんを本気でつくる 著:大澤正彦
・勝利の神髄1928-2016  著:長田渚左

 

 

 

2020.7.1(水) 
C言語(web記事「苦しんで覚えるC言語」)
第3部 アルゴリズム入門編
 
C言語簡易リファレンス
*標準ライブラリ関数一覧
 
・文字処理 <ctype.h>
半角文字1文字を取り扱う関数群。
マクロとして実現されていることがほとんど。
 
<isalpha>
関数型:int is alpha(int c);
引数:文字
戻り値:文字がアルファベットなら0以外、異なる場合は0。
機能:文字がアルファベットか判定する。
 
<isupper>
関数型:int sipper(int c);
引数:文字
戻り値:文字が英大文字なら0以外、異なる場合は0。
機能:文字が英大文字か判定する。
 
<islower>
関数型:int slower(int c);
引数:文字
戻り値:文字が英小文字なら0以外、異なる場合は0。
機能:文字が英小文字か判定する。
 
<isdigit>
関数型:int isdigit(int c);
引数:文字
戻り値:文字が数字なら0以外、異なる場合は0。
機能:文字が数字か判定する。
 
<issapce>
関数型:int is space(int c);
引数:文字
戻り値:文字が空白文字なら0以外、異なる場合は0。
機能:文字が空白文字か判定する。
 
<isalnum>
関数型:int isalnum(int c);
引数:文字
戻り値:文字がアルファベットまたは数字なら0以外、異なる場合は0。
機能:文字がアルファベットまたは数字か判定する。
 
<iscntrl>
関数型:int iscntrl(int c);
引数:文字
戻り値:文字がコントロール文字なら0以外、異なる場合は0。
機能:文字がコントロール文字か判定する。
 
<isgraph>
関数型:int is graph(int c);
引数:文字
戻り値:文字がスペース以外の印刷できる文字なら0以外、異なる場合は0。
機能:文字がスペース以外の印刷できる文字か判定する。
 
<isprint>
関数型:int misprint(int c);
引数:文字
戻り値:文字が印刷できる文字なら0以外、異なる場合は0。
機能:文字が印刷できる文字か判定する。
 
<ispunct>
関数型:int isounct(int c);
引数:文字
戻り値:文字が区切りなら0以外、異なる場合は0。
機能:文字が区切り文字か判定する。
 
<isxdigit>
関数型:int isxdigit(int c);
引数:文字
戻り値:文字が16進数用の文字なら0以外、異なる場合は0。
機能:文字が16進数用の文字か判定する。
 
 
・文字列処理 <string.h>
主に文字列処置を行う関数群。
汎用のメモリ処理と共用できる関数も多い。
半角文字を基準とするので、全角文字の処理には注意。
 
<strcpy>
関数型:char *strcpy(char *s, const char *t);
引数:文字配列、文字列
戻り値:引数の文字配列をそのまま返す
機能:文字配列に文字列をコピーする。文字列の代入に使用する。
 
<strncpy>
関数型:char *strncpy(char *s, const char *t, size_t n);
引数:文字配列、文字列、最大コピー文字数
戻り値:引数の文字配列をそのまま返す。
機能:文字配列に指定文字数だけ文字列をコピーする。
注意:文字数が多い場合にはナル文字を付加しないので、必ず、s[n]=‘\0’;として文字を付加すること。
 
<strcat>
関数型:char *strcat(char *s, const char *t);
引数:文字配列、文字列
戻り値:引数の文字配列をそのまま返す。
機能:文字配列の後ろに文字列をつなげる。
 
<strncat>
関数型:char *strncat(char *s, const char *t, size_t  n);
引数:文字配列、文字列、最大連結文字数
戻り値:引数の文字配列をそのまま返す。
機能:文字配列の後ろに指定文字数だけ文字列をつなげる。
 
<strlen>
関数型:size_t strlen(const char *s);
引数:文字列
戻り値:文字列の長さ。ナル文字は含めない。
機能:文字列の長さを返す。
 
<strcmp>
関数型:int strcmp(const char *s, const char *t);
引数:文字列1、文字列2
戻り値:文字列1が大きい時は正、同じ時は0、文字列2が大きい時は負。
機能:文字列1と文字列2を比較する。
 
<strncmp>
関数型:int strncmp(const char *s, const char *t, size_t n);
引数:文字列1、文字列2、比較文字数
戻り値:文字列1が大きい時は正、同じ時は0、文字列2が大きい時は負。
機能:文字列を指定文字数だけ比較する。
 
<strchr>
関数型:char *strchr(const char *s, int c);
引数:文字列、文字
戻り値:見つかった位置のアドレス、見つかった場合はNULL。
機能:文字列の先頭から文字を検索する。
 
<strrchr>
関数型:char *strrchr(const char *s, int c);
引数:文字列、文字
戻り値:見つかった位置のアドレス、見つからない場合はNULL。
機能:文字列の後ろから文字を検索する。
 
<strcspn>
関数型:size_t strcspn(const char *s, const char *t);
引数:対象文字列、検索文字列
戻り値:見つかった位置までの文字数。
機能:対象文字列の中から検索文字列に含まれる文字を検索する。
 
<strspn>
関数型:size_t strops(const char *s, const char *t);
引数:対象文字列、検索文字列
戻り値:見つからない位置までの文字数。
機能:対象文字列の中から検索文字列に含まれない文字を検索する。
 
<strpbrk>
関数型:char *strpbrk(const char *s, const char *t);
引数:対象文字列、検索文字列
戻り値:見つかった最初の文字へのポインタ、見つからない場合はNULL。
機能:対象文字列の先頭から検索文字列に含まれる文字を検索する。
 
<strstr>
関数型:char *strstr(const char *s, const char *t);
引数:対象文字列、検索文字列
戻り値:見つかった位置へのポインタ、見つからない場合はNULL。
機能:対象文字列から検索文字列を検索する。
 
<strtok>
関数型:char *strtok(char *s, const char *t);
引数:文字配列、区切り文字列
戻り値:区切られた単語へのポインタ。見つからない場合はNULL。
機能:文字配列を、区切り文字列に含まれる文字がある位置で区切る。
 文字配列をNULLにして呼び出すと次の単語を取得できる。
 
<strerror>
関数型:char *sreerror(int n);
引数:エラー番号
戻り値:エラーメッセージが格納された配列。対応するエラーがない時は空文字列。
機能:エラーメッセージを取得する。
注意:取得した配列の中身は書き換えないようにする。
 
<memcpy>
関数型:void *memcpy(void *dest, const void *source, size_t count);
引数:コピー先、コピー元、コピーサイズ
戻り値:引数のコピー先を返す
機能:メモリ内容をコピーする。コピー領域が重なっているとうまくいかない。
 
<memmove>
関数型:void *memmove(void *dest, const void *source, size_t count);
引数:コピー先、コピー元、コピーサイズ
戻り値:引数のコピー先を返す
機能:メモリ内容をコピーする。コピー領域が重なっていても問題ない。
補足:moveという名前だが、移動ではないので注意。
 
<memset>
関数型:void *memset(void *addr, int byte, size_t count);
引数:配列、数値、代入サイズ
戻り値:引数の配列をそのまま返す
機能:メモリ内容の指定サイズ分の要素全てに数値を代入。文字にも使用できる。
 
<memcmp>
関数型:int memcmp(const void *addr1, const void *addr2, size_t n);
引数:配列1、配列2、比較サイズ
戻り値:配列1が大きい時は正、同じ時は0、配列2が大きい時は負。
機能:メモリ同士を比較する。文字列の比較もできる。
 
<memchr>
関数型:void *memchr(const void *addr, int byte, size_t count);
引数:配列、1バイトの数値、検索するサイズ
戻り値:見つかった位置のアドレス、見つからない場合はNULL。
機能:メモリ内から数値を検索する。1文字検索にも使える。
 
 
 
 
◎今日のビジネス関連の読書
・START UP優れた起業家は何を考え、どう行動したか 著:琴坂将広、堀新一郎
・サイバーセキュリティ 著:松原実穂子
・イノベーターズⅡ 著:ウォルター・アイザックソン
 
 
 

2020.7.2(木) 
C言語(web記事「苦しんで覚えるC言語」)
第3部 アルゴリズム入門編

C言語簡易リファレンス
*標準ライブラリ関数一覧

・数学関数 <math.h>
基本的な数学関数群。
角度はラジアンで表されるので注意すること。
度からラジアンへの変換は次の通り。
ラジアン=(度 *3.14159/180)

<fabs>
関数型:double fabs(double x);
引数:実数値
戻り値:絶対値
機能:絶対値を計算する。

<sqrt>
関数型:double sqrt(double x);
引数:任意の実数値
戻り値:平方根
機能:平方根を計算する

<pow>
関数型:double pow(double x, double y);
引数:累乗される値、指数
戻り値:xをy乗した値
機能:累乗を求める。

<fmod>
関数型:double food(double x, double y);
引数:割られる数、割る数
戻り値:余り
機能:実数値の余りを求める。

<sin>
関数型:double sin(double x);
引数:ラジアン単位の角度
戻り値:サイン値
機能:サインを計算する

<cos>
関数型:double cos(double x);
引数:ラジアン単位の角度
戻り値:コサイン値
機能:コサインを計算する

<tan>
関数型:double tan(double x);
引数:ラジアン単位の角度
戻り値:タンジェント
機能:タンジェントを計算する。

<acos>
関数型:double acos(double x);
引数:コサインの値
戻り値:アークコサイン(ラジアン)値
機能:アークコサインを計算する

<asin>
関数型:double asin(double x);
引数:サインの値
戻り値:アークサイン(ラジアン)値
機能:アークサインを計算する。

<atan>
関数型:double atan(double x);
引数:タンジェントの値
戻り値:アークタンジェントを計算する。
機能:アークタンジェントを計算する。値はπ÷2の範囲となる。

<atan2>
関数型:double atan2(double y, double x);
引数:縦の値、横の値
戻り値:アークタンジェントラジアン)値
機能:アークタンジェントを計算する。値はπの範囲となり、引数xが0でも計算できる。


<sinh>
関数型:double sink(double x);
引数:ラジアン単位の角度
戻り値:ハイパボリックサイン値
機能:ハイパボリックサイン値を計算する。(exp(x)-exp(-x))/2 と同じ。

<cosh>
関数型:double cosh(double x);
引数:ラジアン単位の角度
戻り値:ハイパボリックコサイン値を計算する。 (exp(x)+exp(-x))/2 と同じ。

<tanh>
関数型:double tanh(double x);
引数:ラジアン単位の角度
戻り値:ハイパボリックタンジェント
機能:ハイパボリックタンジェント値を計算する。sin(x)/cosh(x)と同じ。

<ceil>
関数型:double ceil(double x);
引数:任意の実数値
戻り値:入力値以上の整数値
機能:実数値を整数値に丸める。

<floor>
関数型:double floor(double x);
引数:任意の実数値
戻り値:入力値以下の整数値
機能:実数値を整数値に丸める。

<exp>
関数型:double exp(double x);
引数:実数値
戻り値:自然対数の底のx乗
機能:指数を計算する。

<log>
関数型:double log(double x);
引数:任意の実数値
戻り値:自然対数を求める
機能:自然対数を求める。

<log10>
関数型:double log(double x);
引数:任意の実数値
戻り値:常用対数値
機能:常用対数を求める。

<modf>
関数型:double mods(double x, double *ip);
引数:任意の実数値、返される整数部の部分の値
戻り値:小数部分の値
機能:実数値を整数部分と小数部分に分ける。

<frexp>
関数型:double fresh(double x, int p*);
引数:任意の実数値、返される指数部分の値
戻り値:仮数部分の値
機能:浮動小数点値の指数部と仮数部を求める。

<ldexp>
関数型:double ldexp(double x, int p);
引数:仮数部、指数部
戻り値:合成された浮動小数点値
機能:仮数部と指数部から浮動小数点値を求める。

 


◎今日のビジネス関連の読書
豊田章男 著:片山修
EU離脱 著:鶴岡路人
・ティム・クック アップルをさらなる高みへと押し上げた天才 著:リーアンダー・ケイニー

 
 
 

 

2020.7.3(金) 
C言語(web記事「苦しんで覚えるC言語」)
第3部 アルゴリズム入門編
 
C言語簡易リファレンス
*標準ライブラリ関数一覧
 
・時間 <time.h>
時刻を取り扱う関数群。これらの関数はUNIXの慣習から世界協定時刻(UTC)における1970年1月1日0時0分0秒を基準としている。
 
<time>
関数型:time_t time(time_t *t);
引数:時刻を格納する変数のアドレス
戻り値:基準時刻からの経過秒数
機能:現在の時刻を基準時刻からの経過秒数で返す。
補足:引数をNULLで呼び出して戻り値だけを取得できる。環境によっては秒以外の単位を使うこともある。
 
<clock>
関数型:clock_t clock(void);
引数:なし
戻り値:使用プロセス時間
機能:プログラムが使用したプロセス時間を返す。
補足:clock()/CLOCKS_PER_SECとすることで秒単位の値を得られる。
注意:マルチスレッド環境では、経過時刻と一致しない。
 
<difftime>
関数型:double difftime(time_t t1,time_t t2);
引数:基準時刻からの経過秒数1、基準時刻からの経過秒数2
戻り値:2つの経過秒数の差
機能:時刻の引き算をする。環境によっては秒以外の単位を使うこともある。
 
<localtime>
関数型:struct tm *localtime(const time_t *t);
引数:基準時刻からの経過秒数
戻り値:秒数を国内時刻情報に変換した構造体
機能:基準時刻からの経過秒数を国内時刻に変換する。
注意:戻り値はシステム全体で共有されたメモリ領域なので、必ず別途宣言した構造体にコピーしておく必要がある。
 
<gmtime>
関数型:struct tm *gmtime(const time_t *t);
引数:基準時刻からの経過秒数
戻り値:秒数を国際時刻情報に変換した構造体
機能:基準時刻からの経過秒数を国際時刻に変換する。
注意:戻り値はシステム全体で共有されたメモリ領域なので必ず別途宣言した構造体にコピーしておく必要がある。
 
<asctime>
関数型:char *asctime(const struct tm *tm);
引数:時刻を格納した構造体
戻り値:時刻を変換した文字列の先頭アドレス
機能:時刻をWed Fed 17 20 : 14:04 1988 のような文字列に変換する。
注意:戻り値はシステム全体で共有されたメモリ領域なので、必ず別途宣言した構造体にコピーしておく必要がある。
 
<ctime>
関数型:char *ctime(const time_t *t);
引数:基準時刻からの経過秒数
戻り値:時刻を変換した文字列の先頭アドレス
機能:時刻をWed Fed 17 20:14:04 1988 のような文字列に変換する。
注意:戻り値はシステム全体で共有されたメモリ領域なので必ず別途宣言した構造体にコピーしておく必要がある。
 
<strftime>
関数型:size_t strftime(char *s, size_t max, const char *fmt, const struct tm *tp);
引数:文字配列、文字配列のサイズ、時刻書式指定文字列、時刻を格納した構造体
戻り値:配列に書き込まれた文字数。失敗した場合は0。
機能:時刻を指定された書式通りに文字列に変換する。
 
 
・制御
主にプログラムの制御を行う関数群。
これらはそれぞれヘッダーファイルが異なる。
 
<assert.h>を必要とする関数群
関数型:void assert(int expreesion);
引数:診断する変数値
戻り値:なし
機能:デバッグのために診断を行う。
補足:引数に設定された値が0の場合、実行中のソースファイル名と行番号を表示して急性終了する。NDEBUG定数しておくとコンパイルの段階で取り除かれる。
 
<signal.h> を必要とする関数群
関数型:int raise(int sig);
引数:送信するシグナル値
戻り値:成功した場合は0、失敗した場合は0以外。
機能:プログラムにシグナルを送信する。
 
関数型:void(*sidnal(int sig, void(*handler)()))();
引数:設定するシグナル値、シグナルを処理する関数のアドレス
戻り値:以前に設定されていた関数のアドレス、失敗した場合はSIG_ERR。
機能:シグナルを処理する関数を設定する。
 
<setjmp.h> を必要とする関数群
関数型:int setup(amp_buf env);
引数:ジャンプ先の状態を格納する変数のアドレス
戻り値:最初に呼ばれた時は0、longjmpで戻った時はその値。
機能:longjmp関数に備えて状態を保存する。
注意:プログラムの流れをぐちゃぐちゃにする凶悪な関数であり、よほどの事情でもない限り使用してはいけない。
 
関数型:void longjmp(amp_buf env, int val);
引数:ジャンプ先の状態が格納された変数のアドレス、任意の戻り値
戻り値:なし
機能:関数間をまたぐ広域ジャンプを行う
注意:プログラムの流れをぐちゃぐちゃにする凶悪な関数であり、よほどの事情がない限り使用してはいけない。
 
 
「苦しんで覚えるC言語」終わったーーー!!!!!
 
 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 
 
◎今日のビジネス関連の読書
・アート思考 ビジネスと芸術で人々の幸福を高める方法 著:秋元雄史
・決定版リブラ 著:木内登英
・両効きの組織をつくる 大企業病を打破する「攻めと守りの経営」 著:加藤雅則、チャールズ・A・オライリー、ウリケ・シェーデ
 
 
 
ついに、web記事「苦しんで覚えるC言語」全て学び終えることができました。
関わって下さっている全ての方へ感謝です。
 
次は、「まつもとゆきひろ コードの世界 スーパー・プログラマになる14の思考法」を中心に学ばせて頂きたいと思います。
 
それではまた!
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 

 

 

*1:MIN)+(int)(rand()/RAND_MAX*((MAX)-(MIN)+1)))
 とすれば、min〜max間の乱数を得ることができる。

<srand>
関数型:void srand(unsigned int seed);
引数:乱数系列の初期値。
機能:乱数系列の初期値を与える。
使用法:srand((unsigned int)time(0