Relative Content

明解C言語入門

5.2 多次元配列

  前回の演習 演習5-4(p115) List5-6を書き換えて、配列aの要素の並びを逆順にしたものをbにコピーするプログラムを作成さよ。 #include <stdio.h> #define NUMBER 5 int main(void) { int i; int va[NUMBER] = {15, 20, 30}; int vb[NUMBER]; for(i = 0; i < 5; i++) { vb[i] = va[NUMBER – i – 1]; } puts(” va vb”); puts(“——-“); for(i = 0; i < 5; i++) { printf(“%3d%3d\n”, va[i], vb[i]); } return(0); } […]

7.2 bitwise

第9章 ビットを意識する 整数型の指定 整数値を扱うための型には,( signed, unsigned ) char 型と int 型とがあることは説明したが, それら以外にもある.ここで,まとめて簡単に解説する. バイト数 ビット数 最小値 最大値 unsigned char 1 8 0 255 signed char 1 8 -128 127 unsigned short int 2 16 0 65535 signed short int 2 16 -32768 32767 unsigned int 4 32 0 4294967295 signed int 4 32 -2147483648 2147483647 unsigned long […]

5.1 配列

配列 同じ型の変数が並んだものを「配列」と言います。C以外でも多くの高級言語に採用されている。 通常の変数は int num; のように型と名前を示して宣言しますが、配列ではさらに要素数を加えて以下のように宣言します。 int num[10]; 名前(上の例では”num”)が変数名で、それに続く[ ]内に示した”10″が、配列の要素数です。上記のように宣言すると int 型の変数が10個確保され その全体を“num”という名前で扱える ようになります。 配列の各要素は添字(またはインデックス)と呼ばれる番号で一意に指定できます。Cでは先頭が0で、1ずつ増加します。   配列の走査 配列の各要素に規則性を持った値を代入するには、forループを使うのが便利です。例えば、10個の要素を持つint 型の配列に、100・200・300……と100ずつ増加する値を代入する処理は、リスト1のように記述できます。 カウンタ変数iは0から1ずつ増加するので、その値を配列の添字に使い、同時に(i + 1)の100倍を添字で示す要素の値として代入します。 継続条件は「i < 10」となっているので、iが9になるまでループが繰り返され、10になったら処理をせずにループを抜けるので、配列のすべての要素に値が代入されます。 リスト1:配列に100ずつ増加する値を代入していく int num[10];    /* 整数を格納する配列 */ int i;    /* カウンタ変数 */ for(i =0; i <10; i++){ num[i]=(i +1)*100; } 配列の初期化 配列は同じ型の変数が並んだものですから、個々の要素の扱いは通常の変数と変わりません。配列の個々の要素に値を代入するには、以下のように代入演算子=を使います。 num[0]=100; num[1]=200; num[2]=300; : もちろん、通常はこんな悠長な記述はしません。配列の宣言時にすべての要素の値を示し、初期化することができます。 int num[]={100,200,300,400,500,600}; { }内に値を「,」で区切って列挙するだけです。このようにすれば、[ ]内に最大要素数を示す必要はありません。{ }内に列挙した値の数だけの要素が自動的に確保されます。 配列のコピー 他の変数と同じように配列をコピーしたプログラム […]

C言語検定(2級)

C言語検定試験について 主催・認定 サーティファイ情報処理能力認定委員会 試験名 C言語プログラミング能力認定試験 (C-Language Programming Skills Qualification Test) 試験目的 C言語を駆使して応用プログラム(言語処理系、ユーティリティなど)を作成する能力を認定します。 認定基準 一級 C言語を駆使し、応用プログラム(言語処理系、ユーティリティなど)が作成できる能力を有する。また使用しているOSについて理解をしている。 二級 小規模のプログラム(500行程度)が適切に(理路整然、簡潔、正しく、速く)書ける。また各種基本アルゴリズムを理解している。 三級 C言語の概念を理解し、簡単なプログラムが書ける。   参考(2級出題範囲) 出題内容 定数 浮動小数点定数 指数形式を許す 浮動小数点接尾語はf、l、F、Lのいずれか 整数定数 整数接尾語として長語接尾語(l、L)を含む 文字定数 拡張表記は8進拡張表記、16進拡張表記を含む 文字列リテラル 拡張表記は8進拡張表記、16進拡張表記を含む 列挙定数 演算子 ビット演算子、条件演算子、代入演算子、キャスト演算子、ポインタ/アドレス演算子、構造体演算子、sizeof演算子 宣言指定子 void、short、long、float、double、構造体共用体指定子(struct、union)、列挙型指定子(enum)、型修飾子(const)、typedef 変数 上記型指定子の単純変数、配列 外部定義 プリプロセッサ機能 ファイルの包含 ライブラリ関数 数学関数<math.h> double cos(double x); double sin(double x); double tan(double x); double exp(double […]

C code II 指南

C言語プログラミングⅠの前期試験解説 試験後、解説が行われたので、質問があれば、答えする。 (質問応答は、日本語の他に、英語、中国語も可能!)

4.2 break & continue

break文 switch文のところでbreakというのが何回も登場しました。 switch文での意味は「switch文から抜け出す」という意味でしたね。 breakはswitch文以外にもfor文やwhile文のループの中でも使うことが出来ます。 この時もbreakは「for文やwhile文のループから抜け出す」という意味を持っています。 break文を使って抜けられるのはループひとつだけです。ですから、二重、三重のループを抜けるには、その度にbreak文を使うようになります。 continue文 continueはfor文やwhile文などのループ処理をスキップさせるに用います。 breakとは違い、continueはスキップした後は、ループの先頭に戻ります。 #include <stdio.h> int main(void) { int i = 1, n, sum; sum = 0; while (i <= 5) { printf(“正の整数を入力 : “); scanf(“%d”, &n); if (n < 0) continue; sum = sum + n; i++; } printf(“sum = %d\n”, sum); return 0; }   無限ループ while(1)とすると、基本的に処理は無限に繰り返されます。これは、条件式が偽の場合は、0、真の場合はそれ以外の値をとることを利用した方法で、無限に繰り返されます。 […]

6.3 変数の有効範囲

変数の通用範囲 自動変数のことを局所変数、外部変数のことをグローバル変数(大域変数)ともいいます。 変数のスコープの範囲を図で表してみます。 赤色で囲った部分がグローバル変数の有効範囲です。 青色で囲った部分がローカル変数の有効範囲です。 この図ではローカル変数の寿命を関数内と説明しましたが、正確にはブロック内です。 ブロックとは、{}で囲まれている範囲のことを指しています。 記憶クラス Cで扱う記憶領域は一般に、プログラム領域、静的領域、スタック領域、ヒープ領域の 4つに大別されます。 記憶クラスには、4つあり、自動、静的、外部、レジスタがあります。 記憶クラス 記憶領域 スコープ 記憶クラス指定子 自動変数 スタック { } の内側 auto( 不要 ) 静的変数 静的領域 { } の内側* static 外部変数 静的領域 全域 extern** レジスタ変数 レジスタまたはスタック { } の内側 register * { }の外側で宣言された時は、その行以降 ** 他のファイルにある時、externを付け、その変数を宣言(メモリを確保)しているファイルでは何も付けない。 自動変数は使う前に何らかの値を代入します。このことを、初期化するといいます。 静的変数は初期化の式がなくても、コンパイル時に0に初期化されます。 変数の名前 変数は名前を付けなければ、使えません。C言語では、名前(識別子)は、英字または’_’(アンダースコア)で始まり、英数字または’_’が0個以上続くという決まりになっています。’_’一つまたは二つで始まる変数は、システムに密着したデータに使います。例えば、コンパイラのプログラム等で使われます。 変数に名前を付ける時、外部変数は定義されている所から遠い所でも使われるので、その変数の用途を想像できるような名にすることが推奨されています。 例:timetable, itemindex, thisyear 自動変数は通用範囲が狭いので、何の変数かがすぐわかるので、タイピングの手間を省く意味でも、短くて良いとされています。 例:i, j, […]

C code2 (c) Command line arg.

今まで、main 関数へ引数なしを意味する int main(void) と記述、 実は main関数にも引数を渡すことができます。 この main関数に渡す引数のことを「コマンドライン引数」といいます。 コマンドライン引数 main関数へ渡せる引数は、 引数の総個数 引数の文字列を指すポインタの配列 の 2つです。 一般に int main(int argc, char *argv[]) と記述し、 int argc: 引数の総個数(プログラム名も含む) char *argv[]: 引数の文字列を指すポインタの配列を表します。 とりあえず、下の例を見てみましょう。 (例) #include <stdio.h> int main(int argc,char *argv[]) { int i; printf(“引数の総個数 = %d\n”, argc); for (i = 0; i < argc; i++) { printf(“%d番目の引数 = %s\n”, […]

4.3 for文

  for文構文 定められた回数だけ反復制御を行います。 for (初期化式; 継続条件式; 後始末) { 文; } 再初期化式の後に「;」は入れてはいけない。 例題: #include <stdio.h> int main(void) { int i; for (i = 1;i <= 10;i++) { printf(“%02d 回目\n”,i); } return 0; }   for文とwhile文の交換性 一般的にfor文は「指定した回数分だけ処理を繰り返す」、while文は「指定した条件を満たすまで処理を繰り返す」と言う意味で、for文とwhile文は似ているようで定義されている意味は違います。 while文は、for文の条件式だけと同じです。 逆に言えば、for文はwhile文を拡張した文だと言えるでしょう。 実は、この2つは、同じような使い方をすることが可能です。 while文をfor文のように使う場合、次のようにします。 初期化式; while (継続条件式) {   繰り返す文;   後始末; } for文をwhile文のように使う場合、次のようにします。 for (;継続条件式;) {   繰り返す文; } 演習  演習4-12 (A, Bクラス) […]

8.4 Recursive call

東京魅力PRサークル会員募集中 http://svn.mki.biz/pukiwiki/index.php?u-tokyo 興味があれば、ぜひコメントください。 階乗の計算 皆さんは「階乗の計算」を覚えていますか? 5の階乗なら「5!」と表記し, 5! = 5 × 4 × 3 × 2 × 1 と計算します。つまり答えは120です。 0 の階乗:1 1 の階乗:1 2 の階乗:2 × 1 3 の階乗:3 × 2 × 1 – – – – – – – n の階乗: n × (n – 1) × (n – 2) – – – 3 × […]