カテゴリ:PG言語:C |
|
このブログについて
万年二流(三流?)ソフトウェア・エンジニアのメモ帳です カテゴリ
全体
PG言語:Java PG言語:Perl PG言語:C PG言語:php web モバイル XML DB UNIX vi ツール がらくた プライバシー 業界小噺 初心者講座 SOAP リンク 検索 Windows iPhone/iPad その他 未分類 タグ
以前の記事
2011年 10月
2011年 06月 2011年 05月 2011年 04月 2011年 03月 2011年 01月 2010年 12月 2010年 10月 2010年 09月 2010年 08月 2008年 06月 2008年 02月 2007年 05月 2007年 03月 2007年 02月 2007年 01月 2006年 11月 2006年 09月 2006年 03月 2006年 02月 2006年 01月 2005年 10月 2005年 09月 2005年 08月 2005年 07月 2005年 06月 2005年 05月 2005年 03月 2005年 02月 2005年 01月 2004年 11月 2004年 10月 2004年 09月 2004年 08月 2004年 07月 2004年 06月 2004年 05月 2004年 04月 2004年 03月 2004年 02月 おすすめキーワード(PR)
ファン
|
2004年 02月 23日
・コンソールとの1文字入出力:getchar,putchar
--------------- #include #include main(){ int c=getchar(); while((c=getchar()) != EOF){ putchar(c); } } --------------- ・getcharによる入力データ型はintでうけ、 getcharによる入力の終了=EOFでとる char(ANSI C):-128..127 だが、char(一部 C): 0..255 も混在するため。 getcharは入力終了通知にEOF(-1)を返すが、0..255のcharでは-1ではなく255と認識されてしまうため、入力終了を検知できない。 ※EOF=-1はstdio.hで定義されている #ctrl+z : キーボードからEOFを入力する ・コンソールとの1行入出力:gets, puts --------------- #include main(){ char s[80]; while(gets(s) != NULL){ gets(s); /*sに標準入力からの改行が送られるまでの文字列を格納(空白可)*/ puts(s); /*標準出力へ出力後、改行*/ } } --------------- ・getsによる入力の終了=NULLでとる ・コンソールとの数値入出力:scanf, printf --------------- #include main(){ int n; scanf("%d", &n); /* 数値を変数nのアドレスに設定 */ printf("%d\n",n); } --------------- ・scanfによる入力の終了=NULLでとる ・scanfで数値変数aに値を設定するには&aを引数とする(aではない!) ・printf・scanfでは変換文字列を使って出力フォーマットを指定
2004年 02月 20日
基本は主な言語と同じ。ただ、else if なのか elsifなのかとかでいつもこんがらかるんだよね。ループ制御も混同しやすいので、perl分についてもそのうちまとめておきたいと思う。
・分岐 If - else if - else switch(式){ case 定数式1: break; default: /* 省略可 */ } #式は整数を結果とする定数式。 ・繰り返し for(初期化式;継続条件式;再初期化式) while(継続条件式):前判定ループ do-while:後判定ループ do{ } while(継続条件式); /* ; を忘れないこと!*/ ・while(1),for(;;)とすることで無限ループにできる ・ループ制御 break ... ループがネストされていても抜けるのはひとつだけ continue ... for,while, do-whileで記述位置からループ終端部までの記述をスキップする
2004年 02月 19日
・プロトタイプは関数の引数の数と型をチェックしてくれる
たとえば#include ヘッダファイルの拡張子は慣習的にhとなっている。 ・標準関数のプロトタイプはマニュアルにより指定されたヘッダファイルにあらかじめ記述されている。 ・「#include ・自分でもプロトタイプは作成できる(自作の関数については自分でプロトタイプを書く)。
2004年 02月 14日
ここらへんは特にJavaとかと違いなし?
もっと細かく見ていくと違うのかも。 ・算術演算子:+,-,*,/,%(余り) int a=10, b=3; printf("a%%b=%d\n",a%b); ↑%は書式指示に用いられるため、リテラルとして指定 ・関係演算子:<, <=, >, >=, ==, != ・論理演算子:!, &&, || ・インクリメント++/デクリメント--演算子: int b=5; int a=++b; 先加算。a=6,b=6となる int b=5; int a=b++; 後加算。a=5,b=6となる
2004年 02月 09日
主要なデータ型
char 1byte 0128~127 :1バイトの整数型。 int ?byte (実行環境上で、最も効率よく処理できる自然な整数幅) 2byte(16 bit) -32768~32767:68000系MPUを使ったマシンなど,MS-DOS 4byte(32 bit) -2147483648 2147483647:Windows, UNIX long 4 -2147483648 2147483647 (long int, 通常intを省略してlong a;と書く) float 4 約10 -38~10 38, 有効桁7桁 double 8 約10 -308~10 308, 有効桁15桁 ・文字列の表現 文字列型はなく、charの配列を文字列表現に用いる。 文字列の最後には文字コード0を置く。配列の長さよりも長く文字を設定した場合エラーは起こらず、単にメモリ上の隣接部分にはみ出して書き込まれる。 →配列は、使用する文字列の最大長+1(終了コード0分)を確保する ・文字列の設定 方法1:配列に設定し、最後に0を設定 方法2:strcpy(varchar, "abcdefg"); 上のvarcharで、varchar[3]=0;(= varchar[3]='\0'; )とすると printf("%s\n",varchar); の出力結果は →"abc" となる 文字列クリア: strcpy(varchar,""); あるいは varchar[0]='\0'; ・変数の初期化 ex) int a=12; char c='A'; int a[5] = {1,2,3}; int c[] = {2,3,4}; char s[6] = {65,66,67,68,69,0}; char s[6] = {'A','B','C','D','E','\0'}; char s[6] = "ABCDE";
2004年 02月 06日
プログラムの作成手順
1. edit:ソースプログラム(.c)を作成 2. compile:オブジェクトファイル(オブジェクトモジュール)を作成 3. link:作成したオブジェクトファイルに標準ライブラリルーチンの組込み及び他オブジェクトファイルと関連付け コマンド ・Microsoft C/C++ cl test1.c ...test1.cをコンパイルしtest1.objを作成・リンクしtest1.exeを作成 cl /c test1.c ...test1.cをコンパイルしtest1.objを作成 cl test1.obj ...test1.objをリンクしtest1.exeを作る。コンパイルしない。 cl test1.c test2.c ...test1.cとtest2.cをコンパイルし、test1.objとtest2.objをリンクしてtest1.exeを作成 cl test1.c test2.obj ...test1.cをコンパイルし作成したtest1.objをtest2.objとリンクしてtest1.exeを作成 ・Unix C cc test1.c ...デフォルト実行ファイルa.outが作成される。 cc -o test1 test1.c ...-oスイッチで指定された名称の実行ファイル(test1)が作成される cc -c test1.c ...コンパイルのみでリンクしない ※gcc -o test1 test1.c :gccというコンパイラもある メモ ・コンパイル時のメッセージにはエラーメッセージと警告メッセージがある 警告メッセージではコンパイルは中止されず、プログラムもたいてい動く。 Cでは軽い警告メッセージはなるべく表示しない方針がとられている。これは警告メッセージのレベルを帰ることで表示・非表示を指定できる(Microsoft C/C++) ・エラーと表示された行にエラーがあるとは限らない。 エラーという判定を下したときに着目していた行がエラー行として表示されるため、その行より前にエラーがあることがある。 また、ひとつのエラーによる二次的エラー発生の可能性もあり、この場合一番最初のエラーを解決すれば解決できることもある。 ・よくあるエラーは"{}","()",二重引用符の対応ミスと;の忘れなので、まずこれを注意 ・リンク時エラー:関数の綴り誤りによる「未解決エラー」が多い コンパイラは未定義の関数を見つけても、リンク時に解決される可能性があるのでエラーとしないが、リンク時にはエラーとなる。
2004年 02月 02日
ず~っと逃げていたのだけど、とうとうCをかじらざるを得なくなった。
のでそのメモ。結構新鮮♪ 1.1 特徴 ・ポインタを用いる 変数などのアドレスを指定してアセンブラ的処理が可能 ・プリプロセッサ付である プリプロセッサ:コンパイルに先立ち、テキストレベルの前処理を行う これにより、記号定数の使用やよく使うファイルのコンパイル時の取り込み、マクロ定義などが可能。 ・特殊文字の表現が可能 ・プロトタイプ宣言ができる ・プログラムは関数で構成される。 main関数が最初に実行される関数であり、必須 入出力機能なども全て外部関数として定義される 1.2 プログラムについて ・文にはセミコロン;が必要 行の概念がなく、行末復改記号は空白と同一視される。 ;だけを書いた場合は空文となる。 ・コメントは/* */で囲む ・変数は宣言が必要 ・関数は{で始まり}で終わる ・変数の値を出力するには書式設定が必要 ・制御文はただひとつの文を制御する。二つ以上の文を制御したい場合はブロック文 を用いる。 for (i=0; i<5; i++) s=s+i; ... この行のみ繰り返される s=s+s; →(sはいくつになるでしょう?) ・条件式にかっこを用いる IF ... THEN ... ではなく、if (...) ... となる ・名前は英数字と下線_で31文字以内で書く。32文字以上の場合、32文字目以降は無 視される。(コンパイルは通るが、31文字までしか認識しない) ・定数には数値定数(0xFF),文字定数('a'),文字列定数("abcde")がある 数値定数 8進数 0を先頭につける 011, 0345 16進数 0xか0Xを先頭につける 0xab, 0x2BCD 指数 eかEをつける 5e2(=500), 6E3(=6000) 少数点 ピリオドを使う 1.23 文字定数 c = 'A'; ... 'A'の文字コード=65が入る。→c = 65 エスケープ文字列 \n, \t \a:[ascii 07]警告音 \ooo:[ascii ooo] 8進数ooo \xhh:[ascii hh] 16進数hh \0:[ascii 00] 文字コード0 単一文字コードで記述するときは'\t'のように、文字列に埋め込むときは"test\t" のように書く 文字列定数 "string"など。 char st[10] = "string"; ...文字列stに文字列"string"を設定 strcpy(st, "Hello"); ...... 文字列stに文字列"Hello"を設定 ・記号定数として定数を設定できる #define TRUE 1 #define FALSE 0 ... if (n=TRUE){...} < 前のページ次のページ >
| |||||||||||||||||||