C言語ブログミング超入門1
2016.10.19更新
コンピュータープログラミング言語のひとつであるC言語のブログラムの書き方の超入門です。
ここでは基本の基本に少し触れるだけです。
まず基本知識
半角の円マークと半角のバックスラッシュ(/の左右逆の文字)は同じです。
どちらで表示されるかはフォントによって変わります。
どちらで表示されても同じだと思ってください。
文字列はダブルコーテーション(ダブルクォート) " で囲みます。
関数というものがある。
関数はプログラムの部分で その関数の名前で呼び出すと、その関数の機能を実行することができる。
最初から用意された関数もあるし、自分で作ることもできる。
mainという名前の関数を最初に実行します。
マイクロソフトのVisual C/C++は、_tmainだったりWinMainだったりする方言がありますが、C/C++は、mainから始まる規則です。
関数は、関数名の次に()があって、その次に{ と }で囲った部分にプログラムを書く。
関数の前や()の中になんか書く場合もあるが今は説明しない。
文の最後にはセミコロン(;)を書く。
ただし関数の最後の } の後や、その他 範囲指定の}後にはセミコロンは書かない。
(構造体とかの宣言は}の後でも;を書く。構造体の説明は今はしない)
全角文字を文字列以外の場所(" "で囲ってない場所)に書くとエラーが出る。
全角スペースを文字列以外の場所(" "で囲ってない場所)に書くとエラーが出るが見ても分からないから絶対悩む時が来る。
putsで文字列を表示してみよう
putsは、文字列を表示した後に改行する関数です。
以下のプログラムは、abcdefg を表示して改行(Enter)するプログラムです。
#include <stdio.h>は、stdio.hというヘッダファイルを読み込んで挿入するという意味ですが、必ず付ける物と思って今は深く考えなくていいです。
#include <stdio.h>
main()
{
puts("abcdefg");
}
で、動かなかったら、次のように書く。return 0;は、関数の最後に書く。
最初から次のように書いてもいい。
#include <stdio.h>
int main(void)
{
puts("abcdefg");
return 0;
}
\nを書くと改行(Enter)します。
以下は、abc を表示して次の行にdefgを表示して改行します。
つまり、
abc
defg
と表示するプログラムです。
#include <stdio.h>
int main(void)
{
puts("abc\ndefg");
return 0;
}
次のように書いても同じ動作をします。
#include <stdio.h>
int main(void)
{
puts("abc");
puts("defg");
return 0;
}
もし円マークもしくはバックスラッシュを表示したいなら、\\と二回書けば一個表示します。
円マークなのかバックスラッシュなのかはフォントによって変わります。
printfで文字列を表示してみよう
printfは、putsと違って最後に改行を自動的にしません。
改行させるには\nを付ける必要があります。
以下のプログラムは、abcdefg を表示して改行(Enter)するプログラムです。
C言語の文字列の中の\(円マークまたはバックスラッシュ)は特別な意味があり、本物の\を表したい場合は、\\と二回連続で書きます。
%も特別な意味があるので%を表示させたい場合は、%%と、二回連続で書きます。
基本中の基本ですけど、意外に \% とか書こうとして動かないとか言う人多いです。
#include <stdio.h>
int main(void)
{
printf("abcdefg\n");
return 0;
}
もし円マークもしくはバックスラッシュを表示したいなら、putsと同じように\\と二回書けば一個表示します。
計算をする
足し算は+、引き算は-、掛け算は*、割り算は/を使います。
では計算するプログラムを作ってみましょう。
以下のプログラムは実行時に計算するのではなくてコンパイル時のプリプロセス処理で計算されます。
コンパイルの前段階でプリプロサッサ(UNIX Cではcpp)が、例えば10+35という文字列を45という文字列に変換します。
計算時間は実行時にはかかりません。
文字列中に書かれた%dは変数の値をint型の数値として表示をします。
int型についてはこの次に課題に書いてあります。
printfは、%dなどを文字列中に混ぜて書いて、変数の値を表示することができます。
putsでは、%dは使えません。
int main(void)
{
printf("10+35=%d\n",10+35);
printf("10x2-3=%d\n",10 * 2 - 3);
printf("12/3=%d\n",12/3);
return 0;
}
実行結果
10+35=45
10x2-3=17
12/3=4
int型変数を使う
int型変数は最低16ビットのマイナスとプラスの両方を表すことができる整数です。
16ビットの場合は、-32768~32767の数を表すことができます。
32ビットの場合は、-2,147,483,648 ~ 2,147,483,647(約-21億~約21億。約-2ギガ~2ギガ)です。
最近のコンパイラでは32ビットであることが多いです。
CPUが32ビットで32ビットのOSのコンピューターの場合、通常はC言語コンパイラのint型も32ビットになります。
64ビットCPUで64ビットOSの場合、int型は64ビットになってもよさそうな気もしますが、32ビットのコンパイラが多いです。
IntelのCore i7やARMv8などのCPUは64ビットですが、32ビット兼64ビットのCPUです。
16ビットCPUの時代のC言語には、32767の壁が存在しました。
(現在でも16ビットCPUや8ビットCPUの開発をすればその32767の壁があります。)
それを超える32768とか四万とか五万とかの数値をint型で扱おうとするとプログラムが正常に動かなくなってしまう問題がありました。
32ビット以上が主流の現在のC言語では2,147,483,647(約21億、約2ギガ)の壁があります。
そのため多くのプログラムは2GBを超えるファイルを扱えません。
int型は最低16ビットですが、その上にlong型があり最低32ビットです。
現在ではintとlongのどちらも32ビットのコンパイラが多いです。
longの上のlong long型が使えるコンパイラもあります。
long longは2011年のC++の規格のC++11で規格化されました。
int a; は、aという名前のint型変数を定義するという意味です。
int a,b,c; は、aとbとcという名前のint型変数をまとめて定義するという意味です。
C言語では変数は定義しないと使えません。
定義していないものを使うと、そんなものは無いとエラーが出てコンパイルできません。
変数を定義することは「(変数を)宣言する」という言い方がよくされます。
この変数を使いますよと宣言するという意味だと思います。
宣言した変数を使わなくてもエラーにはなりません。
ただし多くのコンパイラではコンパイル時に警告(ワーニング)のメッセージが出ます。
動作には特に影響ないので無視しても構わないとは思います。
C言語では{ }で囲った部分(ブロック)の先頭部分で宣言します。
先頭部分で宣言しなかった場合はエラーになります。
ただし、C++では変数を使う前ならブロック内のどこで宣言してもいいです。
変数名で使える文字は限られています。
変数名は半角で全角は使えません。
変数名の先頭に数字は使えません。
アンダーバー(_)と英文字(A~Z、a~z)と、先頭以外に数字(0~9)が使えます。
大文字と小文字は区別し、Abcと、abcは違う変数になります。
変数の文字数は区別できるものはANSI Cの規格では31文字まで。(K&Rという古いC言語では8文字まで。)
あまり長すぎると違う文字列でも同じ文字列と判断されるかエラーになる場合があります。
a = 10;は、変数aに、10という数値を代入(セット)するという意味です。
a=10;と書いてもいいです。(スペース入れたほうが読みやすいという意見が一般的かな?)
以下のプログラムは、35+21を計算して表示するプログラムです。
整数なので小数点は出ません。
実行時に計算します。
(最適化が効くすごいコンパイラがあればコンパイル時に計算するかも知れません。)
#include <stdio.h>
int main(void)
{
int a,b,c;
a = 35;
b = 21;
c = a + b;
printf("c = %d\n",c);
printf("a - b = %d\n",a - b);
printf("a / b = %d\n",a / b);
printf("a * b = %d\n",a * b);
return 0;
}
実行結果
c = 56
a - b = 14
a / b = 1
a * b = 735
C言語の初めに
C言語ブログミング超入門2
C言語の話
あーすブラウザ
オンライン鍋田辞書
鍋田辞書トップ