カテゴリー
C言語

列挙型について知ろう

この章では列挙型について説明します。
「列挙型」は結びつきがある要素をひとまとめにして、新しい型として定義することができる型です。11 列挙型は宣言を行うことが必要ですが、構文は次のようになります。1 例では以下のように列挙型の宣言をしています。このように配列のごとく、データをまとめて記述するのが列挙型です。
11と宣言する事により、要素の中の「定数」に 0 から順に整数値が与えられます。
defineで書き換えると以下のようになります。1 試しに先ほどの例に以下のprint文を付け加えると0が出力されます。1 列挙型の宣言をした後は列挙型の変数を宣言します。1 この例では列挙型の変数の宣言と同時に値を初期化していますが、以下の通り宣言と代入を分けてもいいです。1 これにより変数doubutsuは列挙型を扱う変数として定義されたことになります。
その後はswitch文で判定して、一致した箇所で出力されます。1 caseの値が整数値になっています。11 デフォルト値を設定しないと0 から順に整数値が与えられます。11

カテゴリー
C言語

構造体について知ろう

この章では構造体について説明します。
「構造体」はバラバラの異なる型のデータを持つ変数同士を1つの型として扱うことができます。
それに対して配列は単一のデータ型しかまとめて扱う事はできません。
例えば、学生の情報を扱いたい場合に
「成績はint型」
「身長はdouble型」
「名前はchar型」
など様々なデータ型なので配列では扱うことが出来ません。
このような時に構造体を使います。
では例をみてみましょう。111 構造体の作り方は最初に「構造体の宣言」を以下のように書きます。1 この例では以下の部分が「構造体の宣言」です。1 構造体型を宣言する時はstructを使います。構造体型の名前は自由に付けてください。
そしてstructのブロックの中にメンバ(変数や配列)の宣言をして、終わりに1を付けます。
メンバとは変数や配列の別名だと思ってください。
構造体の宣言は「関数の外」で宣言するとその場所から下のプログラムのすべてで使うことが出来ますが、関数の中で宣言すると関数の中でのみ使うことが出来ます。
構造体型を宣言した後は「構造体型に属する変数」を作ります。
構造体型の変数も普通の変数と同じように変数の宣言と値の代入をしなくてはいけません。
以下の基本構文が構造体型変数の宣言と初期化です。1 この例では以下の箇所が構造体型変数の宣言と初期化です。1 {1,18,”koike”,170.2}は以下の構造体のメンバに上から順に代入されます。1 つまり、以下のようにデータが代入されます。1 構造体型の配列でも以下の構文でメンバに代入することができます。1 構造体型の配列も通常の配列と同じで宣言と同時に初期化することが出来ます。
例では以下のように書いています。1 ではプログラムの説明に入ります。11 この時、気を付けなくてはいけないのは1の中の要素の書き順は構造体の宣言の中のメンバの順番と合わせてください。
例えば1のような書き方はいけません。111 1例えばint id;のデータを得たい時には1という形式で、1と記述します。
これで1が出力されます。
構造体の配列はfor文で出力しています。1 iには0から2がループするごとに代入されます。111 先ほどの例では構造体型の変数と配列の2つを使いましたが、以下のように構造体型の配列だけ使用しても結果は同じになります。111
次に構造体型の型名を短縮する書き方について説明します。111 今までは構造体を宣言するには1 のように長い型名を書かなくてはいけませんでした。
次の構文で書くと構造体型の型名を省略することが出来ます。
〇構造体型の宣言をする時に構造体型名の前にtypedefを付ける。
〇構造体型の変数や配列を宣言する時に1と書く代わりにどのような名前を使いたいかを決めてブロックの終わりに記述します。
この例では1になります。これはstudentではなくても何でもいいです。1 上のように宣言しましたので以下のようにstructを付けないで宣言と初期化をすることが出来ます。1 この書き方はintなどで宣言するのと同じ感覚で書くことができますので、使いやすいです。

次の例では構造体でのscanfの使い方について説明します。11 scanfの使い方が構造体では違うということではありませんが、scanfと構造体の組み合わせで書けることを覚えておいてください。1 この例では以下の箇所が該当します。1 補足ですが、今までは構造体の変数にデータを入れる場合には以下のように書いていました。1 この例の場合には以下のように構造体の宣言をしてから、scanfでデータを入れています。1
次の例では構造体を関数に渡す方法について説明します。11111 実引数が1のように構造体型変数なので、仮引数も1のように構造体変数で受け取ります。
メンバの値を出力するには1という形式で書きます。11 次のyo関数にはseito2という構造体配列を渡しているので、関数側でも引数には構造体型の配列である1を設置します。1 結果は以下の通りです。1
次の例では構造体型のポインタを使用する方法について説明します。1111 1ここでは構造体型の変数のアドレスを実引数にしてhu関数を呼び出しています。
ですので仮引数では以下の通り構造体型のポインタで受けています。1
ここに見慣れない1という記号がありますが、これはアロー演算子と呼ばれています。
アロー演算子は構造体型のポインタから構造体のメンバに1と、アクセスするために使います。
1 ここでは構造体型の配列のアドレスを引数にしてyo関数を呼び出しています。
1 実引数であるseito2配列をyo関数の中の構造体型のポインタ(仮引数)で受けています。
この構造体型の配列の要素にアクセスするには以下のようにポインタを進めながら書きます。この時にはアロー演算子を使います。1 つまり、iの値がループするごとに進むので、ポインタが示す位置も変わります。

次の例では構造体の配列について説明します。
以下の例ではscanfを使って、入力した値を構造体の配列に入れています。111 構造体の配列は以下のようにブロックの末尾に配列名と要素数を配置します。1 この例では以下のscanfで入力した値をメンバに代入します。
scanfの引数にあるメンバはカンマで区切れば複数書くことができます。
変換指定子もメンバの数だけ書いてください。1111 そして、入力した値をprintfで出力します。1 結果は以下の通りです。1

カテゴリー
C言語

関数で星座判定を作ってみよう

「if文で星座の判定をしよう」の章ではif文で星座判定のプログラムを作成しましたが、このプログラムを関数を使って書き換えてみましょう。1111 この例にはポインタ、関数、グローバル変数が含まれていますので、理解を深めてください。11111例えばmonthに1が入り、dayに19が入っているとします。
そうすると1の箇所はiが0の時にifの条件式がtrueになりますので、以下の入れ子のif文の条件式の判定に入ります。1 「day <= day1[i]」の中のdayには19が入り、1にはday1の0番目の要素である19が入っていますので、条件式はtrueになり、nameにはnames配列の0番目の要素であるやぎ座が入ります。
例えばdayに19ではなく23が入っていると仮定すると1はFALSEになるので、1の条件式の判定に入ります。
ここで1にはday2の0番目の要素である31が入っていますのでTRUEになり、name には1に該当する星座が入ります。
1周目では1のiには0が入っていますので1で余りを求めると1になりますので1となり,みずがめ座が入ることになります。
では1の説明をします。
「(i + 1)」の箇所の説明をしますと例えばmonthが1で、day が23の場合には11になりFALSEになるので、1のブロックに入りますが、1月は やぎ座と水瓶座しかなく、やぎ座ではないのならば水瓶座しかないのでnames配列を1つ進めるために1で1を足しています。
「%12」を記述している理由は例えば1の中のiに11が入ると1の箇所が12になりますが、1の箇所がないと仮定すると1となってしまいますが、実際に1という要素はありません。
そこで1で余りを0(12割る12で余り0)にして「やぎ座」が出るようにしています。
つまり、以下の余りの数字がnames配列の添え字になり、その該当するデータがnameに入ります。1 1グローバル変数ですので、プログラムの中のどこからでも使用することが出来ます。
そして、最後にmain関数の中でnameに入っている星座を出力しています。1 結果は以下の通りです。1

カテゴリー
C言語

switch文で占いを判定しよう

この章ではswitch文で占いを作成します。占いは毎回同じ判定ではなく、結果はランダムになるようにします。1111 初めにランダムな数をransuuに入れるのですが、このランダムな数を生成するにはrand関数を使用します。
rand関数を使うためには文頭で1と書かなくてはいけませんので注意してください。
rand関数は0か32767までの数字の中でランダムな数を返しますが、範囲を限定したい場合には例えば1と書きますと1から6までのランダムな数を返すようになります。
0から6までの数値をランダムに返したいのならば1と書きます。
しかし、このrand関数だけではプログラムを何回実行しても同じ結果にしかなりません。理由は乱数を初期化していないからです。
この乱数を初期化するにはsrand関数を使います。1 ではsrand関数の説明をしていきます。
〇「unsigned」は「符号無し整数」で「0を含むプラスの値」が使用できる型です。
〇この関数を使う時には1を記述する必要があります。
〇srand関数はrand関数を使用する時に一緒に使用します。
〇srand関数は乱数の初期値を設定する関数です。
つまり、乱数に使う初期値を変える関数です。
例えば1と書くと初期値が1、1とすると初期値が2の乱数を導き出すことが出来ます。1 初めに1を入れないで、rand関数を実行してみましょう。1 この例の実行結果は以下の通りです。1 ではもう一度実行してみましょう。
結果は以下の通りですが、1回目の結果と同じです。
rand関数はランダムに数値を導き出してくれますが、乱数になるのは初めの1回だけです。1 そこで乱数の初期値を設定する関数であるsrand関数で実行結果を変えることが出来ます。
次の例は先ほどの例に1を追加しただけです。1 結果は何度実行しても以下の通りです。1 初期値を変えたので乱数の値は変わりましたが、この例のようにsrandの中の引数を固定した場合はいつまで経っても同じ値になります。
そこでsrand関数の引数に1を使用します。
この中のtimeはtime関数で、1970年1月1日0時0分0秒からの経過時間を返します。
ですのでtime関数をsrandの引数に使うことで、その瞬間の時刻が引数に入りますので実行の都度違う数値を与えることができます。
time関数を使う時には1を記述する必要があります。1 これで毎回違う結果を出力することが出来ます。11 では占いの例に戻ります。1 ransuuに入った数字で大吉から大凶までをランダムに占い、その結果をポインタのunseiに入れて出力しています。

カテゴリー
C言語

ポインタを使ってみよう

この章ではポインタについての具体例と配列のアドレスについて説明します。
以下の例は変数のアドレスを関数に渡し、ポインタ変数で受け取っている例です。1111 tashizan関数の中では*aと5を足して*aに代入し、*bと5を足して*bに代入しています。
*aには変数xのアドレスが入っているので、*aとxは同じ意味になります。
*bには変数yのアドレスが入っているので、*bとyは同じ意味になります。11
次の例では配列のアドレスとポインタについて説明します。11初めに配列のアドレスを取得する方法について説明します。1 つまり、配列名を書くだけで配列xの一番前のアドレスが取得できます。
配列自体のアドレスは配列の先頭アドレスを指すということです。

1 1 xが先頭のアドレスを示すので、「+1」を付け加えることで先頭から一つアドレスを進めると言う意味になります。
これは1と同じ意味になります。
1は前から2番目のアドレスを意味します。
では前から3番目のアドレスを得るためにはどうしたらいいでしょうか?
結果は以下のように1もしくは1と書いてください。1 次に配列の要素をポインタで取り出す方法について説明します。1 =>*(x+0)と書くと配列の先頭要素を取り出すことが出来ます。1 「数値」に添え字を書きますとその添え字に相当する要素を取得できます。
「*(x+0)」は「*x」と同じですので、以下のようにも書くことができます。1 つまり、「*配列名」と書いても配列の0番目の要素を取得できます。
配列の前から2番目の要素を取得するには1と書きます。
配列の前から3番目の要素を取得するには1と書きます。
結果は以下の通りです。1
次の例ではポインタの加算を使った値の書き換え方法について説明します。11 hairetsu(x);の箇所で配列xのアドレスをhairetsu関数のポインタ変数である1に渡しています。
そして、*(g+0)=34;の箇所で配列の一番前の要素に34を代入して、
*(g+1)=46;の箇所で配列の前から二番目の要素に46を代入して、
*(g+2)=98;の箇所で配列の前から三番目の要素に98を代入しています。1 hairetsu関数内で書き換えた結果、main関数の配列xの要素である「1,2,3」が「34,46,98」に書き換えられます。
先ほどの例をfor文を使って書き換えると以下のようになります。11
次はポインタに関する演算について説明します。11この例ではポインタ*gに配列xのアドレスを入れています。1 gにはxの先頭要素のアドレスが入っているので、「*」を付けることで1番前の要素の値を得ることができます。
結果は4です。1 g++;(加算子)とありますが、これはポインタを1つ先に進めると言う意味です。
つまり、ポインタに加算子を使っているわけです。
最初のg++;でポインタを進めた後に1と出力すると、前から2番目の要素の値である6を得ることが出来ます。
さらに2つ目のg++;でポインタを進めると8が得られます。1
では次の例に進みます。11 これまでは配列のアドレスを関数本体の仮引数に渡す時、ポインタで受け取っていましたが、今度は他の方法で配列を関数に渡します。
hairetsu(x);のように配列のアドレスを渡すまでは同じですが、関数本体のほうは1のように配列で受け取っています。
そして要素の数(3)だけ繰り返しループして、1の結果をg配列に代入しています。
つまりg[i]のiに0から2までが代入され、その都度1の計算結果が代入されることになります。1 配列xと配列gはまったく同じなので(xもgも同じアドレスを示しています)、この例の結果は1になります。

では次の例に進みます。11仮引数にポインタを指定した場合、これまでは1 のように代入していましたが、実はこのような難しい表現を使わなくても、1のようにポインタに1を付けて値を代入することもできます。
g[i]のiに0から2までが代入され、その都度1の計算結果を代入します。1 結果は「6と6と6」です。
次は文字列を扱う配列とポインタの関係について説明します。1 配列の章で学習しましたが、文字列を配列で扱う時には型をcharにして、1のように書きます。
この配列をポインタを使って書き換えると以下のように書くことが出来ます。1 このようにchar型のポインタに文字列を入れることができます。11
では次の例に進みます。11 関数の引数にポインタを使用している場合に、引数の値を変更したくない時があります。
そのような時にconstを仮引数の前に指定します。
関数の引数に const を指定すると、その関数の中では値を書き換えることができなくなります。
ですので、1のような記述はできませんので、この例はエラーになります。

次の例は2次元配列とポインタの関係について説明します。1 複数の文字列を配列に入れるには配列のポインタを使用します。
基本構文は以下の通りです。1 配列のポインタを出力する方法は普通の配列と同じように添え字を使って出力します。11

カテゴリー
C言語

ポインタとは何か?

この章ではポインタについて説明します。
「ポインタ」を理解するためにはコンピュータがどのようにデータを記憶しているのかの理解が必要です。
変数の値をコンピュータが記憶する場合、そのデータはメモリ上に置かれます。
メモリとは, 1バイトの幅の区画がビルの階のように連続してつながっているものと思ってください。
例えば、ビルは下から順番に「1,2…」と階数が付けられますが、メモリも同じで順番に「1バイトの幅の区画」に番号が付けられています。
この番号をアドレスと言います。
このアドレスは例えば0026FDE8のように16進数で表します。
変数を記憶するには1バイトで済むとは限らず、型によっては何バイトも必要になることがあります。
変数の型によって、使う大きさ(バイト数)が決まると言うことです。11 では最初に戻って「アドレス」について詳しく説明します。
例えば2147483647と言う大きな整数を使用して4バイト分を使うとします。
この整数のアドレス(メモリ上において)はどこにあると思いますか?
実はこの整数のアドレスは「その整数に割り当てられたアドレスの先頭のアドレス」にあります。1
では次の例でポインタについて説明します。11
結果は以下の通りです。111 ここではsizeof演算子で変数の大きさを測っています。
結果はバイト単位で表します。
変数iはsizeof演算子で調べた結果、4バイトあることがわかります。11 変数iのアドレスを知るには変数の前に&を付けます。これを付けることによって、変数iの値がメモリのどこに記憶されているか知ることができます。
&をアドレス演算子と言います。
このアドレスは使っているコンピュータによって違います。
例えば1などと出力されます。
そして、そのアドレスを出力するためのprintf関数の変換指定文字は1を使います。1 ここで「ポインタ」について説明します。
ポインタとは変数のアドレスを記憶する特殊な変数のことです(ポインタ変数と言います)。
つまり、アドレス(住所)を記憶するだけの変数を作ることができるのです。
ポインタ変数も普通の変数と同じく宣言しなくてはいけません。1 そしてポインタの宣言をした後で、1のように変数iのアドレスをポインタ変数gに代入します(ポインタとは変数のアドレスを記憶する変数のことでしたね)。11 ここでさらにポインタについての補足をします。
先ほどiのアドレスをポインタgに入れましたが、これにより、iとgは同じアドレスを保有することになりました。
抽象的に言いますと、i君とgさんが同居することを意味していまして、gに起こった出来事はiに起こったことと同じ意味を持つようになります。
ですので一身同体のゆえ、次の5番ではポインタgからiの値を取り出しています。111 *gに2147483600を代入して、printfでiを出力するとどうなると思いますか?1 次の章で具体的なポインタの使い方について説明します。

カテゴリー
C言語

関数のプロトタイプ宣言を知ろう

この章では関数のプロトタイプ宣言について説明します。
関数の定義は関数の呼び出しよりも前に定義しなければいけませんでしたが、関数のプロトタイプ宣言をすることで、このような制約は無くなります。
つまり関数の定義(この例ではhello関数)は関数の呼び出しよりも後に定義することができるということです。
では例をみてみましょう。1 関数のプロトタイプ宣言は以下の通りです。111 次の例は引数がdouble型の関数のプロトタイプ宣言を行っています。11 引数のあるプロトタイプ宣言の場合には以下のように関数の引数を入力して宣言を行います。1 しかし、以下のように引数の箇所はデータ型のみでも問題ありません。1

カテゴリー
C言語

グローバル変数とローカル変数について知ろう

この章ではグローバル変数とローカル変数について説明します。
詳しい説明は例の後に行います。
では例をみてみましょう。11 グローバル変数とは関数の外で宣言された変数のことを言います。
この例で言いますと1がグローバル変数です。
これまではmain関数の中で変数を使用してきましたが、このaのように関数の外で宣言をするとグローバル変数になります。
グローバル変数は以下の通り、どの関数の中でも使用することが出来ます。1
次にローカル変数について説明します。
ローカル変数とは関数の中で宣言された変数のことを言います。1 ローカル変数は宣言をした関数の中でしか使用することができませんので、複数の関数で同じ変数名を使用しても問題ありません。
この例であればmain関数とtashizan関数の中のローカル変数は同じ名前の変数名を付けてもいいです。
例えば以下の例のようにmain関数とa関数の中でnumber変数を使用していますが、これらはお互いに影響を受けることはありません。
つまり、同じ変数名でも全く違う変数です。111 ではもっと理解を深めるために次の例を見てみましょう。111
初めにグローバル変数とローカル変数の確認から始めます。1 function1関数の中で宣言している変数はローカル変数です。
main関数の中で宣言している変数はローカル変数です。1 初めに、main関数内のローカル変数がprintfで出力されて,3と4が出力されます。
ローカル変数の有効範囲は宣言をした関数の中だけです。11
次は変数の寿命について説明します。11関数の外でグローバル変数である1を宣言していますが、グローバル変数はプログラムが実行されてから終了するまで値を記憶しています。1 後ほど説明しますがローカル変数は1が1回実行される度にクリアされるので値を保持することができません。

次はstaticについて説明します。
static int a=0;
関数内で変数にstaticを付けないと、ただのローカル変数になってしまいますが、staticを付けることでグローバル変数と同じ機能を持つことが出来ます。
つまり、プログラムが実行されてから終了するまで値を記憶させておくことが出来ます。
このstaticが付いた変数を「静的変数」と言います。
functionは4つありますが、1回実行される度に静的変数は1により1が足されます。1 結果、1 は値が1つずつ増えて「1,2,3,4」となります。

次はローカル変数について説明します。
function関数内で宣言されている1はローカル変数です。
ローカル変数は関数が実行される度にデータがクリアにされるので情報を保持することはできません。1 結果は以下の通りです。1

カテゴリー
C言語

関数について知ろう

この章では関数について説明します。
関数とは入力したデータ(引数)に基づいて、決められた処理を行い、戻り値という結果を返す機能を持っています。
関数の仕組みはエクセルの関数の仕組みと意味は同じです。111 この章以前の関数は「組み込み関数」と言いまして、C言語によって始めから用意されている関数です。
例えばprintf関数は文字列を出力する関数ですが、C言語でそのような働きを作ってくれています。
組み込み関数の他にC言語では自分で好き勝手に1を作ることができます。
これを「ユーザー定義関数」と言いますが、この関数の作成方法をこの章で説明していきます。
例えば消費税額を自動で計算する関数を自分で作りたいとします。その場合、商品のお金を関数に渡すと関数は商品金額に消費税額を掛けた処理をして、その金額を返すという関数を作ることになります。
関数の構文は以下の通りですが、これを「関数の定義」と呼びます。1 〇引数とは関数が利用するデータのことを言います。
〇関数の中の引数は左端から第1引数,第2引数と順番に数えていきます。
また1個以上の引数を記述する場合はカンマで区切ってください。引数がない場合には1を入れます。
〇returnを記述するときは1という形で書きます。
またreturnは省略できます。returnの詳細は後ほど説明します。
main関数も関数の一種ですが、他にも色々な関数を作ることができます。
main関数は特別で他にどんな関数を作っても一番初めに実行される関数です。
次に関数の実行方法について説明します。
関数はmain関数を除いて関数を定義しただけでは何も動きません。
関数を実行させるためには関数を呼び出す必要があります。
そして、呼び出すことによって関数の中身が実行されます。1 では1番簡単な例から、見てみましょう。1 初めに、プログラムの流れから見てみます。
① main関数とhello関数がありますが、初めに実行されるのはmain関数です。
main関数の中では上から順にプログラムは流れていきます。
ですので、初めに1が実行されます。
②次にhello();を実行します。
関数名に「()」を付け、hello関数を呼び出しています。
hello関数内では1を実行して「こんにちは」を出力します。

③hello関数を実行し終えたのならばmain関数に戻ってきて、プログラムを終了します。1
では関数の構文を詳しく説明します。
初めに「戻り値の型」について説明します。11 関数とは入力したデータ(引数)に基づいて決められた処理を行い、戻り値という実行結果を返す機能を持っていますと説明しましたが、その戻り値の型を関数名の左側に書きます。
戻すための値がない場合には1と書きます。1次に引数について説明します。11 void hello(void)の2つ目のvoidは引数が無いと言う意味です。
つまり、関数の呼び出し元から渡されてくる引数が無いということです。
この例の場合は1の箇所でhello関数を呼び出していますが、引数がカラです。

次は関数名について説明します。
関数名には「hello」と名前が付いていますが、名前の付け方にもルールがあります。
1つ目は1文字目は数字で始めることはできません。
つまり、3nという名前はつけることはできません。
1文字目は
「アンダースコア(_)」
「aからz」
「AからZ」のどれかで書きます。
2つ目は2文字目からは
「アンダースコア(_)」
「aからz」
「AからZ」
「数字」が使えます。
3つ目は31文字まで名前を付けることが出来ます
4つ目は予約語を使うことができません。
5つ目は基本的には小文字で書いてください。

次は関数についての注意点について説明します。
関数の定義は関数の呼び出しよりも前に定義しなければいけません。
つまり、先ほどの例で説明すると1はmain関数の中にあるので、main関数よりhello関数を後ろに書いてはいけないということです。
以下の書き方はエラーです。1
次は引数のある関数についての説明をします。11 プログラムの流れをみてみましょう。
①初めに実行されるのはmain関数です。
「int a=2,b=3;」で変数の宣言と初期化を行っています。
次に1を実行します。

②次に「tashizan(a,b);」の箇所でtashizan関数を呼び出します。
初めの例では1のようにカッコの中の引数はカラでしたが、この例ではtashizan関数に渡す値をa,bという引数で設定しています。
この呼び出し側のカッコの中の引数を実引数と言います。

③次にtashizan関数を実行します。
この関数の中の引数を仮引数と言います。
tashizan関数が呼び出されたのならば1のaの部分がtashizan関数の1の部分にセットされ、1のbの部分がtashizan関数の1の部分にそれぞれセットされます。
つまり、2が1に入り、3が1に入ります。
その後に関数内部のプログラムが実行されます。1 tashizan関数を実行し終えたのならばmain関数に戻ってきて,1でプログラムを終了します。
1111しかし、実引数と仮引数の型が違う場合には型変換の規則に従って自動的に変換されます。
型変換の規則については説明済みですが転載します。11
次は戻り値のある例を見てみましょう。1111111 tashizan関数の中で足し算の計算がされて、変数zにその結果を代入しています。11 このようにreturnは関数の呼び出し元に戻り値を返す役割があります。
では、どのような時に戻り値を返すのか?
それは呼びだし側であるmain関数内でその値を活用したい場合に戻り値を返します。1 この例の場合はreturnで返されるzはint型なのでtashizan関数の戻り値の型もintにしてください。1

カテゴリー
C言語

記号定数について知ろう

この章では記号定数について説明します。
記号定数とは変数のように値を変更することができない値のことを言います
下記のようにdefine構文を使えば、特定の値を記号定数として定義できます。1 では例をみてみましょう。1 この例ではfor文の条件式の中で記号定数を使用しています。
この例の記号定数名はRですが、これは3を意味しています。
つまり、プログラムの中にRと言う文字があるならば3と置き換えますと言う意味です。
以下の3つのfor文の中の条件式に3という箇所がありますが、変更が生じた場合にこれをすべて変更するのは面倒です。
そこでこの3という数値を記号定数にすることで変更が生じた場合にも記号定数の値だけを変更すればいいので変更が楽になります。111