タグ

ブックマーク / www9.plala.or.jp (32)

  • 構造体

    第15章 構造体 複数のデータをまとめて扱うには配列を用いましたが、配列では同じ型のデータしかまとめて扱う事はできません。 実際にプログラムを組んでいると、異なる型のデータをまとめて扱いたい場合がしばしばあります。 たとえば、学生の成績を扱うときに、int型の学生番号と、char型配列の氏名と、double型の点数をまとめて扱えれば便利だと思いませんか。 実は、この章で学習する「構造体」は幾つかの異なる型のデータをまとめて 1つのデータ型として扱うものなのです。 15-1.構造体の使用手順 サンプルプログラムを見ながら構造体の使用手順を説明します。 #include <stdio.h> /* (1)構造体の型枠の宣言 */ struct seiseki { int no; /* 学生番号 */ char name[20]; /* 氏名 */ double average; /* 平均値 *

  • 関数

    第11章 関数 Cプログラムは「関数」という小さなプログラムの集まりで構成されます。 main() も実は関数ですし、printf() や scanf() も関数です。 この章では、「ユーザ関数」と呼ばれる、製作者側で作成する関数について学習します。 11-1.関数の基型 ある規模以上のプログラムを main()だけで作成すると、ステップ数の多い理解しにくいプログラムができあがってしまいます。 ですから、プログラムはいくつかの関数に分けて作成する方が、コンパクトで理解しやすいものとなります。 また、同じような処理を複数の個所で行っている場合、関数としてその処理をまとめてしまうと全体のステップ数も減ることになります。 (1)関数を用いた場合の処理の流れ まず、関数を用いた場合、プログラムはどのような順番で実行されるのかを下図に示します。 下図では main()から wa() という関数が呼

  • for文

    (形式) for (初期化式; 継続条件式; 再初期化式) { 文; } 文は複合文も可。 複数行の文の場合には { } で囲み複合文に。 単文の場合には{ }は省略可能。 再初期化式の後に「;」は入れてはいけない。 (例) 初期化式は通常の代入文を記述。 継続条件式はこの式が真の間、ループを続けるという意味。 「~の間」であって、「~まで」ではないので注意。 再初期化式には「i++」ばかりではなく、 「i--」や「i = i + 2」などいろいろな値をとることが可能。 ループ変数(使用例では i)は int型以外にも char型や double型なども可能。

  • sscanf

    文字列から書式指定に従い入力 【書式】 #include <stdio.h> int sscanf(const char *str, const char *format, ... ); 【説明】 文字列strから書式formatにしたがって、scanf関数と同様の変換を行った入力を、指定されたアドレスに格納します。 要はscanfの入力がキーボードからではなく文字列strになると考えてください。 【引数】 const char *str : 入力元の文字列。 const char *format : 書式指定文字列。 詳しくはscanf関数参照のこと。 ... : 格納可変個引数。この引数が示すアドレスへ書式指定に従い入力します。 書式指定文字列はこの引数と同数必要です。 【戻り値】 成功時 : 入力データの個数 0にもなり得ます。例えばstrに"A"を、書式指定に"%d"を指定した場合

  • ライブラリ関数一覧

    標準ライブラリ関数については 第7章 で簡単に触れましたが、ここでは第7章では扱わなかったANSI標準ライブラリ関数を、簡単な用例も示して詳しく説明することにします。 なお、下記の「☆」はこの付録での書き下ろし、「○」は編へのリンクを示します。 【時刻・日付管理関数】 ヘッダ: time.h ※関数名説明

  • sprintf

    書式指定変換した出力を文字列に格納します 【書式】 #include <stdio.h> int sprintf(char *str, const char *format, ... ); 【説明】 書式formatにしたがって、printf関数と同様の変換を行った出力を、文字列strに格納します。 この関数を知っているのと知らないのとでは、文字列を編集する効率が全然違います。知らないと、文字列を編集するのに、strcat関数などを用い、とんでもない長文を書く羽目になってしまいます。 【引数】 char *str : 変換した出力を格納する文字列。 const char *format : 書式指定文字列。 詳しくはprintf関数を参照のこと。 ... : 可変個引数。この引数を書式指定に従い変換します。書式指定文字列はこの引数と同数必要です。 【戻り値】 成功時 : strに格納した文

  • はじめに

    C言語は、1972年に UNIX というオペレーティングシステムの開発用言語として、AT&Tベル研究所のカーニハンとリッチーによって開発された、システム記述用のコンパイラ言語である。 最初は、DEC社の「PDP-11」というミニコンピュータ上で UNIX専用に用いられていたが、その有用性により現在では、ワークステーション、パーソナルコンピュータなど、さまざまなコンピュータで広く利用されている。カーニハンとリッチーの共著による解説書『The C Programming Language』をもとに作成されたC言語は「K&R準拠のC言語」と呼ばれている。そして、1989年に機能が改良・拡張された標準規格が ANSI によって制定された。この規格に準拠したC言語は「ANSI-C」と呼ばれる。 (特徴) 表現方式が簡潔である。 演算子、データ構造、制御構造を豊富に備えている。 低水準言語に近いビット

  • 制御構造

    C言語では、これらの制御構造を実現する制御文が用意されています。 また、反復処理から脱出するための「break文」や、反復処理をスキップするための「continue文」も用意されています。

  • 型変換

    第4章 型変換 型変換によって、異なる変数の型を同一演算上で用いることが許されます。 4-1.暗黙の型変換 コンパイラが自動的に無難な型変換を行うものです。 (1)代入時の変換 左辺の型と右辺の型が異なっている場合は、左辺の型に変換します。 例えば下の例では、double型変数の x に 浮動小数点数 3.1415 が格納されていても、int型変数 a に代入した時点で小数点以下が切り捨てられて、3 になってしまいます。これは、整数型の int では小数点以下が格納できないために切り捨てられてしまうからです。 (2)式の中で行われる変換 式中で異なる型の定数や変数が現れたときは、精度の高い型に統一します。精度は今まで学習したものでは、下図のように char型 が一番低く、double型が一番高くなります。

  • 基本的な演算子

    第3章 基的な演算子 C言語で扱われる基的な演算子について説明します。 なお、関係演算子と論理演算子については「6-1.if文」を、 ビット演算子、複合代入演算子、条件演算子、sizeof演算子については第13章を参照してください。 3-1.代入演算子(=) 等号の右側の値を左側の変数に代入します。 定数の代入 : a = 3; ・・・ 変数 a に 定数 3 を代入 変数を代入 : a = b; ・・・ 変数 a に 変数 b を代入 式の代入  : a = c + 4; ・・・ 変数 a に 式「c + 4」を計算して代入 自身を更新 : a = a + 2; ・・・ 変数 a 自身を「+2」して代入

  • 少し詳しい型変換の説明

    型変換については、第4章で簡単に説明しましたが、複雑な規則があり、迷うことの多い部分です。ですから、ここで少し詳しく算術型の型変換について説明してみようと思います。 なお、説明中で用いたコードの実行結果は「Borland C++ Compiler 5.5」(int:4バイト short:2バイト char:1バイト)で確認をしています。 1.汎整数拡張 文字型や整数型などの汎整数型の場合、型が、int より小さな場合(char, signed char, unsigned char, short, unsigned short)は、演算の最初に int か、表現できなければunsigned int に変換されます。このとき、符号を含めてその値を変えることはありません。 (例)short a = 30000, b = 30000; printf("sizeof(a) = %d\n", siz

  • 記憶クラス

    第12章 記憶クラス 第11章でユーザ関数についての説明をしましたので、今度は関数間での変数の扱いについて説明したいと思います。 いわゆる「記憶クラス」というものなのですが、初心者にとってはわかりづらいものかもしれません。 このホームページでは分割コンパイルは扱わない予定になっておりますので、初心者がユーザ関数を同一ファイルで扱うときに必要となる記憶クラスのみを説明することにします。 12-1.有効範囲 「有効範囲」とはその変数を参照できる範囲のことです。 C言語では、変数の宣言をソースプログラムのどこに書くかによって「ローカル変数」と「グローバル変数」に分けられ、この有効範囲が異なってきます。 この有効範囲は「記憶クラス」と密接な関係がありますので、まずは有効範囲から理解してください。 (1)ローカル変数(局所変数) 関数内で定義され、その関数内でのみ使用できます。 複数の関数が同一の変

  • ポインタと文字列

    10-3.ポインタと文字列 普通ポインタを用いるときには、配列などのアドレスをポインタに設定して用いますが、 文字列の場合には、配列を使わずにメモリ上に取られた文字列のアドレスを直接ポインタに指定することができます。 (1)1つの文字列をポインタで表す (書き方) char *p = "ABC"; char *p; p = "ABC"; まずメモリ上のどこかに文字列 "ABC" がとられ、その先頭番地がポインタに設定される。

  • 複雑な演算子

    第14章 複雑な演算子 基的な演算子については第4章で説明しましたが、この章では、もう少し複雑な演算子について説明します。 14-1.ビット演算子 ビット単位でデータ操作をするものです。対象は整数に限られます。 【ビット演算子】 演算子説明

  • データ型の修飾

    第13章 データ型の修飾 データ型については第2章で説明しましたが、この章では、データ型の修飾について説明します。 13-1.変数のサイズ修飾 既に学習した「long」はサイズを修飾するものです。 実は「long」は「long int」を略した記述で、その意味は「int型と同じかそれより大きい」となります。 同様に「int型と同じかそれより小さい」を表す「short」(short int の略)も存在します。 ANSI C では short と long のバイト幅は処理系に任されており、以下のようにのみ規定しています。 (整数型)

  • 標準入出力

    第5章 標準入出力関数(1) 標準入力(キーボードからの入力)、標準出力(画面への出力)を行う標準ライブラリ関数のうち、特に使用頻度の高い、printf() と scanf() について説明します。 尚、その他の標準入出力関数については 第8章 をご参照下さい。 標準入出力関数を使用するには、#include <stdio.h> が必要です。 「#include」については「18-2.#include」を参照してください。 5-1.printf() 画面に書式付きで出力します。 printf() の f は "format"(書式) の f です。printf()は書式指定を行うことにより、同じ「65」という数値でも、10進数で出力したり、文字で出力したりというように出力形式を変えることが出来ます。 (書き方)

  • ASCIIコード表

    ASCIIコード表 10進16進文字 0 0x00 NUL(null文字) 1 0x01 SOH(ヘッダ開始) 2 0x02 STX(テキスト開始) 3 0x03 ETX(テキスト終了) 4 0x04 EOT(転送終了) 5 0x05 ENQ(照会) 6 0x06 ACK(受信OK) 7 0x07 BEL(警告) 8 0x08 BS(後退) 9 0x09 HT(水平タブ) 10 0x0a LF(改行) 11 0x0b VT(垂直タブ) 12 0x0c FF(改頁) 13 0x0d CR(復帰) 14 0x0e SO(シフトアウト) 15 0x0f SI(シフトイン) 16 0x10 DLE(データリンクエスケープ) 17 0x11 DC1(装置制御1) 18 0x12 DC2(装置制御2) 19 0x13 DC3(装置制御3) 20 0x14 DC4(装置制御4) 21 0x15 NAK(

  • プリプロセッサ

    #include <stdio.h> #define NINZU 6 /* 学生数 */ int main(void) { int i; int goukei = 0; /* 合計点 */ double heikin; /* 平均点 */ int ten[NINZU] = { 86, 67, 46, 96, 54, 72 }; /* 点数 */ for (i = 0; i < NINZU; i++) { goukei += ten[i]; } heikin = (double) goukei / NINZU; printf("学生数 = %d\n", NINZU); printf("合計 = %d\n", goukei); printf("平均 = %f\n", heikin); return 0; } 【#define のメリット】 単に定数の「6」を用いるよりも、「NINZU」とマクロ

  • ファイル入出力 (fgets( )!=NULL)

    第17章 ファイル入出力 ファイル入出力関数はキーボードや画面ではなく、ファイルに対して入出力を行います。ファイルは画面出力とは異なり出力結果の保存が可能ですので、覚えておくと何かと重宝します。 尚、ファイル入出力関数を使用するには、#include <stdio.h> する必要があります。 17-1.ファイル操作手順 ファイル入出力は通常、以下の手順で行います。 ファイルポインタとはFILE型へのポインタです。 FILE型では入出力の現在位置(ファイル位置指示子)、ファイルの終端に達したかの情報(ファイル終了指示子)、エラー情報(エラー指示子)、関連するバッファへのポインタなどのファイルの入出力を行う上での必要不可欠な情報を管理しています。 ですから、ファイル入出力を行う際には必ず、このファイルポインタを fopen()によって取得しなければなりません。 また、入出力操作の完了とともに必

  • その他の型

    第16章 その他の型 第15章で構造体について説明しましたので、C言語初心者の方が学習すべき「データ型」についてはこれ以上は必要ないような気もします。 ただ、一部の入門書には「typedef」、「union」、「enum」についても説明がありますので、この章で取り上げたいと思います。 16-1.typedef 「typedef」は既にある型に対して新しい名前を作成するもので、次のように記述します。 たとえば、typedef がよく使われるものにビット列があります。 ビット演算をする場合には演算対象の変数は「unsigned(符号なし)」であることが条件ですが、このunsigned型をビット演算の対象である事を強調して次のように宣言したりします。 typedef unsigned char BYTE; と宣言しておくと、このあとは BYTE data; と宣言できます。これは、 unsign