カテゴリー
C言語

ユーザーに文字列を入力させる方法

この章ではユーザーにキーボードから入力させる2つの方法について説明します。
ユーザーに文字列を入力してもらう方法は2つあります。
初めにgetsを使った方法について説明します。
では例をみてみましょう。1 初めに入力値を入れる配列をchar型の配列で作成します。
それが以下の箇所です。
char x[100];

次にgetsの引数に先ほど作成した配列を入れます。
それが以下の箇所です。1 この構文でユーザーからの入力を配列で受け取ります
エンターキーを押すまで入力することが可能になります。
gets(配列名);は入力時に文字列と文字列の間に空白を入れることができます。
例えば,「dog cats」のようにdog とcatsの間に空白を入れて複数入力することが出来ます。
結果は以下のように出力されます。1
次はscanfを使った文字入力方法について説明します。1 結果は以下の通りです。1111

カテゴリー
C言語

配列について知ろう

この章では配列について説明します。
普通の変数は1つしかデータを入れることができません。
他のデータを入れようとするとデータが上書きされてしまいます。
それに対して、配列は複数のデータをまとめて入れることができます
複数のデータをまとめて扱う場合、普通の変数では以下のように別々の変数名でそれぞれのデータを入れなければいけません。1 それに対して配列を使うと次のように1つの変数名で同じ型のデータを複数入れることができるのです。
同じ目的で使用する変数は1つにまとめてしまい、1つの変数で複数の要素を管理できると便利です
このような時に配列を使用します。
では例をみてみましょう。
11 変数と同じように配列も以下のように宣言をしなくてはいけません。
つまり、「どの型名でいくつのデータ」を扱う配列を作成するのかを宣言します。1 要素数とは配列に入れるデータの数です。
この例では以下のように宣言しています。
int person[4];
これはint型の要素が入る箱を4つ用意することを意味します。
宣言をした後にはデータを入れるのですが、それが次の箇所です。
箱を4つ用意したので入れるデータも4つです。1 配列にデータを入れる基本構文は以下の通りです。1 構文の[ ]の中に入っている数値を添え字またはインデックスと言います。
添え字とはデータが入っている場所を意味します。
例えば、コインロッカーには番号が振ってありますが、この番号があるからこそ、どこに自分の荷物があるのかが分かるわけです。
添え字の考え方も同じで、0から始まっている番号で配列のデータを管理します。1 添え字は0から順番に番号が付けられていきます
1から始まるわけではないので注意してください。
配列の書き方はこの他にもあります。
それは配列の宣言と初期化を一緒に行う方法です。1 右辺はデータをカンマで区切ります。
上の構文で、最初の例で作成した配列を書き換えると以下のようになります。1 配列に関する注意点が2つあります。
1つ目は以下の例のように要素数が5つであるにも関わらず、6個のデータを入れようとするとエラーになります。1 2つ目は配列の2つ目の書き方を紹介しましたが、以下のように要素数を省略できます。1 1この場合は代入するデータの数が配列の要素数になります。
上の例の場合は要素数は6つなので、自動的に6を指定したことと同じ意味になります。1
次は配列の要素を出力する方法について説明します。
以下が配列の要素を出力している箇所です(紙面の都合で2行で書いていますが、1行で書いてもいいです)。11
次は文字列を配列で扱う方法について説明します。1 文字列とは複数の「文字」を並べたものです。
char型の文字を複数並べることで文字列を作ることが出来ます。
char型の文字を複数並べるにはchar型の配列を使います。
char型の配列の作成手順は以下の通りです。
最初にchar型の配列を宣言してください。1 次に配列の要素に1文字ずつ入れていきます。1 実は文字列(この例ではdog)には文字列の最後に1(ヌル文字と言います)と言う文字が隠れていまして、意味は1を意味します。
ですので、配列の最後の要素に1を付け加えてください。
その分、配列の要素数も1つ増えるので、配列の要素数も1ではなくて1になります。
配列を出力している箇所は以下の箇所です。1 結果は「dog」 を出力します。
char型の配列文字を出力する時の変換指定文字は1になります。1111

カテゴリー
C言語

puts関数をもっと知ろう

この章ではputs関数について説明します。
puts関数は文字列を出力する関数ですが、printf関数とは少し機能が違います。
printf関数との違いはputs関数は%d などの変換指定子を使用することができないことです。
もう一つの違いはputs関数は文字列の末尾に改行文字が自動的に付けられます。
逆に言いますとprintf関数は改行をしないで出力されます。
では例をみてみましょう。11 次の例をみてみましょう。11 これがputs関数とprintf関数の違いです。

カテゴリー
C言語

scanf関数について知ろう

この章ではscanf関数について説明します。
scanf関数はユーザーがキーボードから入力したデータを取得するための関数です。
例えば「あなたの年齢は?」と質問するとプログラムはユーザーが年齢を入力するまで待ちます。
そして、この入力された年齢をプログラムに取り込むことが出来ます。
では例をみてみましょう。1 では説明を始めます。1 =>ユーザーが入力したデータを入れるための変数の宣言をします。
年齢を入力するので、型はintにします。1 =>「年齢は?」を出力します。1 =>scanf 関数はユーザーが年齢を入力してくれるのを待ちますので、一回プログラムが止まります。
そして、例えばユーザーが23と入力したのならば、その23がaに入ります。
scanfもprintfと同じように変換指定子を指定しますが、例の場合は整数を入力するので1を指定しています。
注意してほしいことはscanfの中の変数の前に&を付けることを忘れないでください。
最後に以下の箇所で出力します。11 では例をみてみましょう。1 結果は以下の通りです。1

カテゴリー
C言語

複合演算子を知ろう

この章では複合演算子について説明します。
算術演算子と代入演算子を複合して使用しているので、複合演算子と呼ばれています。
例えば「a += b」は「a=a+b;」と同じなので、a と b を足したものを a へ代入しています。11 では例をみてみましょう。11111111

カテゴリー
C言語

加算子,減算子について知ろう

この章では加算子,減算子について説明します。
加算子は数値を1つ増やし、減算子は数値を1つ減らす演算子です。
加算子は1減算子は1で表示します。
まだ説明していませんが、for文などの繰り返し構文等に主に使われます。1 では例をみてみましょう。1 a1++;も++a2;も変数の値である2に1を足しているので、結果は同じ3になります。
つまり、単独で1を使用する場合には結果は同じになります(++が前にあっても、後ろにあっても結果は同じです)。

次は前置加算子について詳しく説明します。11 「++a」は「a=a+1」と同じです。
つまり「a+1」を計算してから、左辺のaに結果を代入して、printfで出力していますので、11は4になります。
aはこの時点で4に変化しているので1のaも4になります。
前置加算子の例は特に変わったところが無いので解りやすいですが、次の後置加算子の例は少し複雑になります。

後置加算子の例をみてみましょう。11 後置加算子では初めに1を無視した状態で出力し、それからaに1を加算します。1 つまり、この例ではaの値である3を出力してから、aに1を足しています。

カテゴリー
C言語

キャスト演算子について知ろう

この章ではキャスト演算子について説明します。
型が違う変数同士の計算の場合にはサイズが大きい型に自動的に型変換されていましたが、自身で型変換をする方法もあります。
それはキャスト演算子を使う方法です。
では初めにキャスト演算子を使わない例をみてみましょう。1 結果は「3.000000」になります。
算数の計算では答えは3.25になりますが、int同士の計算なので、小数点以下が削除されてから、double型の変数eに代入されます。
これでは正確な計算は出来ませんね。
そこで変数の前に1を付けることで、その指定した型に換えることが出来ます。1 結果は「3.250000」となり、正確に計算できます。
この例の場合は以下のように両方ともキャストしていますが実は両方ともキャストする必要はありません。1 doubleのほうがintより大きい型なのでfとvの片方だけdoubleにキャストすることで、もう片方の変数もdoubleに変換されます。
つまり1のように片方でも同じ結果になります。

カテゴリー
C言語

C言語で計算をしよう

この章では算術演算子について説明します。
11 算術演算子とは計算するための記号です。1 number1+number2は加算を行っているのですが、number1には5、number2には3が入っているので、この変数の値同士を足しています。
特に数値を変数に入れる必要性がないのであれば1と計算していただいても結構です。

number1-number2は減算を行っているのですが、number1には5、number2には3が入っているので、この変数の値同士を引いています。
特に数値を変数に入れる必要性がないのであれば1と計算していただいても結構です。

1は乗算を行っているのですが、number1には5、number2には3が入っているので、この変数の値同士を掛けています。
特に数値を変数に入れる必要性がないのであれば1と計算していただいても結構です。

number1/number2は除算を行っているのですが、number1には5、number2には3が入っているので、この変数の値同士を割っています。
特に数値を変数に入れる必要性がないのであれば1と計算していただいても結構です。

number1%number2は剰余を行っているのですが、number1には5、number2には3が入っているので、この変数の値同士の割り算の余りを算出します。
特に数値を変数に入れる必要性がないのであれば1と計算していただいても結構です。

1は掛け算と足し算を行っているのですが、計算の優先順位は掛け算が先です。
掛け算を行ってから足し算を行います。
これは算数の計算順序と同じです。
足し算から計算したい場合は1と、カッコを足し算に付け加えてください。
カッコを付けることで優先順位が掛け算より高くなります。1
以下の例は先ほどの例を書き換えた例です。
一度計算結果を変数に入れてから、printfで出力しています。
111
次の例は型が違うデータ同士の計算の例です。1 結果は以下の通りです。 
「結果は5.400000です」
「a+r」の部分でint型の変数とdouble型の変数を足しています。
このようにサイズの小さい型とサイズの大きい型を足すとサイズが大きい型に統一されてから計算されます。
サイズの大小は以下のようになります。1 ですので、「a+r」はaの値が2.0に変換されるので1となります。
つまり、int型がdouble型に変換されてから足されます。

では次の例をみてみましょう。1 「a*g」は掛け算ですので、足し算より優先的に計算されます。
そしてaがint型、gがlong型なので、精度の高いlong型に統一されます(つまり、計算する前からaはlong型に統一されます)。
そして、その結果をdouble型のrと足します。
long型とdouble型はどちらが精度が高いでしょうか?下を見ていただければわかりますが、double型のほうが高いですので「a*g」の結果である12はdouble型に変換されてから、3.567を足します。
つまり、式の中で変数の型が異なる時、一番大きい型(精度の高い型)に統一されます。11

カテゴリー
C言語

printfについてもっと知ろう

この章では変換指定文字について説明します。
以下がprintfの変換指定文字です。11 次の例では出力される値の表示幅を指定する方法について説明します。1 結果は以下のように出力されます。1 「%」と「d」の間に数値を入れると、その数値は表示幅を意味します。
この例では5を入力しているので567を1で表示しますが、先頭の2文字分が開いてしまうので、そこにはスペースが入れられます。
出力結果を見ていただくと2文字分のスペースが開いているのが分かります。
1のようにデータの桁数と同じか、もしくは小さい場合には何も指定していないのと同じになります。
「%」と「d」の間に先頭の0を含めた数字を入れると表示幅を意味するのは上の例と同じです。
上の例と違うのは数値を右詰めで表示したときの余ったスペースは0で埋められることです。
この例は05を入力しているので567を右詰めで5桁で表示しますが、先頭の2文字分が開いてしまうので、その場合には0が入れられます。

では次の例をみてみましょう。1 結果は以下の通りです。1 では説明をしていきます。1 =>「%」と「f」の間に数字を入れると、それは表示幅を意味します。
浮動小数点数の場合には小数点も入れた表示幅になりますので、この例では先頭の1文字分が開いてしまいます。
その場合にはスペースが入れられます。
出力結果の上から2つ目を見ていただくと1文字分のスペースが開いているのが分かります。

1 =>「%」と「f」の間に先頭の0を含めたの数字を入れると表示幅を意味するのは上の例と同じです。
先ほどの例と違うのは数値を右詰めで表示したときの余ったスペースは0で埋められることです。
浮動小数点数の場合には小数点も入れた表示幅になりますので、この例では先頭の1文字分が開いてしまいます。
その場合には0が入れられます。出力結果の上から3つ目を見ていただくと1文字分のスペースが0で埋められているのが分かります。

1 =>「%」と「f」の間に小数点を含めた数字を入れると点の左側の数値が表示幅を示し、点の右側の数値が小数点以下の桁数を示します。
例では9桁の表示幅で小数点以下は2桁で設定していますが、余りはスペースで埋められます。
以下の例で10進数である100を8進数と16進数に変えています。1 int型の整数を8進数に変えるには1を使います。
int型の整数を16進数に変えるには1を使います。1 =>100を8進数で表すと0144ですので、出力結果は1になります。
144の前の0が省略された形で出力されます。

1 =>100を16進数で表すと0x64ですので、出力結果は1になります。
64の前の0xが省略された形で出力されます。

次の例は0や0xを省略しないで表示させる例です。1 8進数で0を省略しないで表示するには%とoの間に#を付けます。
16進数で0xを省略しないで表示するには%とxの間に#を付けます。
結果は以下の通りです。1 次の例はテンプレートの中で%を文字として(パーセントとして)出力する場合の例です。1 テンプレートの中で%を文字として(パーセントとして)出力したい場合は1と指定することで%を出力することができます。
結果は1です。

カテゴリー
C言語

データ型についてもっと知ろう

この章ではデータ型についてさらに詳しく説明します。
以下の例ではデータ型の自動変換について説明します。1 変数をintで宣言しているにもかかわらず、1という浮動小数点数を代入していますが、この場合は小数点以下が切り捨てられて、3 になってしまいます。
理由はintは整数を格納する型なので、小数点以下が格納できないためです。
このため、小数点数はintに自動的に変換されます。
バイト数の大きい型から小さい型へ代入する場合、値の一部が失われますので注意してください。
下を見ていただくと解りますが、doubleが一番バイト数の大きい型になります。1