SAK 図書館
パソコン基礎知識 C 言語編 (その七) 数値関数、math.h、stdlib.h、その他
■数値関数 (数学関数) ・数値関数を使用する場合は、math.h をインクルードすること。 尚、sizeof() に math.h は必要ない。 ・stdlib.h には、メモリアロケートと乱数系がある。 ■math.h sin() cos() tan() asin() acos() atan() sinh() cosh() tanh() exp() log() log10() pow() べき乗 sqrt() 平方根 fabs() 絶対値 fmod() /* ======================================================================== sin()、cos() テスト ======================================================================== */ // インクルードヘッダ #include <stdio.h>; #include <math.h>; // 関数プロトタイプ宣言 int main(void); /* ======================================================================== メイン ======================================================================== */ int main(void) { double i; double j = 3.14159; double s; double c; printf("sin()、cos() テスト\n"); for (i = 0; i <= j; i += j / 8) { s = sin(i); c = cos(i); printf("i = %f sin = %f cos = %f\n", i, s, c); } printf("-- 終了 --\n"); return(0); } ■stdlib.h rand() ■stdio.h scanf("%c%c", a, b) | | |_ 変数 | |_ 変数 |_ 変数に読み込む書式 ** 標準入力(キーボード) より、データを受け取る。 ■エスケープシーケンス ・Windows 時代になって、あまり escape code を使うことがない。 \r ラインフィード \n 改行 \0 NULL 文字 ■Windows C ・Windows プログラミングでは、string.h をはじめ、メモリアロケートなど、 標準ライブラリを使うことはほとんどない。 Windows API にそのほとんどが用意されている。 コンソールプログラムを除き、標準の C スタイルとも大きく違う。 次のコードは、Windows C ソースの極一部を抜き出したものである。 ・尚、Windows では、マウスカーソルを「カーソル」、キーボード入力カーソ ルを「キャレット」と呼ぶ。VB などの呼び名と Windows API での呼び名は 微妙に違うので注意する。 /* ======================================================================== ウィンドウメイン ======================================================================== */ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR CmdLine, int CmdShow) { MSG msg; #ifdef SET_ACCS HWND hWnd; HACCEL hAccs; #endif // ウィンドウ準備 #ifdef SET_ACCS if ((hWnd = WinInit(hInstance, hPrevInst, CmdLine, CmdShow, &hAccs)) == NULL) return(ERR_RET); #else if (WinInit(hInstance, hPrevInst, CmdLine, CmdShow) == NULL) return(ERR_RET); #endif // メッセージループ #ifdef SET_ACCS while (GetMessage(&msg, NULL, 0, 0)) { if (TranslateAccelerator(hWnd, hAccs, &msg) == NULL) { TranslateMessage(&msg); DispatchMessage(&msg); } } #else while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } #endif return(msg.wParam); } /* ======================================================================== ウィンドウプロシジャ ======================================================================== */ LRESULT CALLBACK _export WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { // メッセージ処理 switch (message) { // ドラッグ and ドロップ #ifdef SAK_OPEN case WM_DROPFILES: if (AutoTimeID != NULL) { KillTimer(hWnd, ID_AUTOTM); AutoTimeID = NULL; } AutoFile = AutoOpen = NULL; return(DragAndDrop(hWnd, wParam)); #endif // ウィンドウ作成 case WM_CREATE: CreateOwn(hWnd); return(0); // サイズ固定 case WM_GETMINMAXINFO: MinMaxOwn(lParam); return(0); // サイズ変更 case WM_SIZE: SizeOwn(hWnd, lParam); return(0); // ウィンドウ移動 case WM_MOVE: MoveOwn(lParam); return(0); // アクティブ #ifdef SAK_BMP case WM_ACTIVATE: if (wParam != 0) { PaintBmpNow(hScreen); ValidateRect(hScreen, NULL); } return(0); #endif // パレット変更 #ifdef BMP_SCROLL case WM_PALETTECHANGED: ChgPal(hWnd, wParam, hPal); return(0); #endif // フォーカス case WM_SETFOCUS: SetFocus(hScreen); return(0); // 再画像 case WM_PAINT: #ifdef SCROLL_BAR #ifdef SMART_ICON if (Smart) { PaintOwn(hWnd, SMART_HEIGHT, VScrMx, HScrMx); } else { PaintOwn(hWnd, NULL, VScrMx, HScrMx); } #else PaintOwn(hWnd, SMART_HEIGHT, VScrMx, HScrMx); #endif #else #ifdef SMART_ICON if (Smart) { PaintOwn(hWnd, SMART_HEIGHT, NULL, NULL); } else { PaintOwn(hWnd, NULL, NULL, NULL); } #else PaintOwn(hWnd, SMART_HEIGHT, NULL, NULL); #endif #endif return(0); // タイマー case WM_TIMER: if (wParam == ID_AUTOTM) { KillTimer(hWnd, ID_AUTOTM); AutoTimeID = NULL; if (!IsIconic(hWnd)) PostMessage(hWnd, WM_COMMAND, IDM_OPEN, NULL); } else { TimerProc2(hWnd); } return(0); // メニュー選択 #ifdef SET_MENU case WM_COMMAND: if (AutoTimeID != NULL) { KillTimer(hWnd, ID_AUTOTM); AutoTimeID = NULL; } MenuOwn(hWnd, wParam); return(0); #endif // コントロールメニュー選択 #ifndef SET_MENU case WM_SYSCOMMAND: if (MenuOwn(hWnd, wParam)) return(0); break; #endif // アイコンオープン case WM_QUERYOPEN: if (!Desk) break; return(0); // ウィンドウクローズ case WM_CLOSE: #ifdef END_MESSAGE if (EndMsg == END_MSG && !hPrevInst) { MessageBeep(0); if (MsgBox(hWnd, IDS_NLEND, BEEP_OFF, MB_YESNO | MB_ICONQUESTION) == IDNO) return(0); } #endif #ifdef SAK_SAVE if (ChkSave(hWnd, CurDir, FileNm, IDM_SAVE)) return(0); #endif break; // ウィンドウ廃棄 case WM_DESTROY: PostQuitMessage(Fine(hWnd, 0)); return(0); } // デフォルトメッセージ処理 return(DefWindowProc(hWnd, message, wParam, lParam)); } ■パソコン基礎知識 C 言語編資料
■プログラミング言語資料
■パソコン基礎知識 ハード編資料
■パソコン基礎知識 画像編資料
■パソコン基礎知識 Windows 編資料
■コンピュータシステム導入編資料