LotosLabo

プログラミング技術とか気になった情報を載せていきます

C言語について1

C言語とは?


手続き型言語であり、コンパイラ言語として設計された。自由度、実行速度、コンパイル速度などを追求したが、代わりにコンパイル後のコードの安全性を犠牲にもしているので、コンピュータ寄りの言語仕様になっている。

開発環境(IDE)は?

Visual Studioです。ネットに無料版のVisual Studio Expressなどもありますので、そちらをご利用ください。
もちろん、製品版を買ってもいいのですが、無料版でも十分の機能が備わっているので、お金を掛けたくない!という方にはオススメです。
尚、私は製品版の2012を使用しています



書き方・作り方

ファイルタブ → 新規作成 → プロジェクト

Visual C++を選び、 Windows フォームアプリケーションを選択し、名前を入力してOKボタンを押してプロジェクトが作れます。

f:id:lo25131:20140202022136j:plain


どうしてCなのに、C++なの?

と思うかもしれませんが、C++C言語の上位互換版だと思ってください。


次の画面では 次へを選択し、

空のプロジェクトにチェックを入れてください。

f:id:lo25131:20140128140519j:plain


コードの書き方


右にあるソリューションエクスプローラより、
ソースファイルを右クリックします。

追加を選択し、新しい項目

そしてC++ファイルを選んでください。

f:id:lo25131:20140128140918j:plain


f:id:lo25131:20140128140924j:plain


拡張子が.cppとなっていますが、C言語では
.cもしくは.cppが使えます。しかし、C++では
.cが使えないのでご注意を。

追加されたSource.cppを開くと

なんと 空です!

f:id:lo25131:20140128141136j:plain

ここにC言語で必要な項目を追加していきます。

#include  <stdio.h>
int main(void)
{
puts("Hello World");
return 0;
}

#includeというのヘッダーです。
C言語にはこれがないと動きません。

int main(void)
{
}

ここにメインの処理を書いていきます。
同じプロジェクトに二つのmainは置くことは出来ないので気をつける。

puts("文字");

というのは文字を表示するためのものです。

return 0;
最後にこれを書く。

※文の終わりには「;」セミコロンが必要です

デバッグの仕方

コードを書いたら、上のデバッグタブより、デバッグなしで開始を押すとコンソール画面が現れ、文字が表示されます。


f:id:lo25131:20140128141824j:plain



今回はC言語を学習した際に.cではエラーが多く、うまくいかなったので.cppのC++ファイルを使っていきます。


基本プログラム

画面に文字を表示する

表示して改行
puts ("あいうえお");


表示
print("あいうえお");
printf("あいうえお");


データ型


文字型  char
整数型 int
浮動小数点型 double(float)
論理型 _Bool(bool)


改行の仕方


\n  で文章の改行
puts("");


空白の入れ方


\t 文章の空白


エスケープシーケンス


\\ \を表示

\' 'を表示

\" "を表示
\0   終端文字



テンプレートデータ表示

printf("整数の%dです\n",   125);

,   で区切って表示

%c  文字           char          A
%d 10進数       int,bool      123
%f 浮動小数点   double,float    0.34

%6d とすることで桁数を変えれる
また %7.3fで小数点以下も3桁に表示

printf("テンプレート",変数);

変数宣言

int   number;
number =  10;
number =  number +1;

入力した値を表示

キーボードからの入力を可能にし、変数へ読み込むということです。

scanf_s("%d", &data);


演算子


%  余りを求める演算子


代入演算子


x += 2;
初期化されていないと使えない

初期化するにはこうする
int x = 3;



キャスト演算子

型を変換させるものです。


double x = 12.8; doubleの値

int n=(int)x; intに変換

数値型

数値型にはこのようなものがあります。一覧だけ書きますので説明は載せません。


・char
・short
・int
・long
・long long
・unsigned char
・unsigned short
・unsigned
・unsigned long
・unsigned long long
・float
・double
・long double


型や変数のサイズ

unsigned n = sizeof(型)


例:

unsigned   n1, n2, n3;
	double   x=1;
	n1 = sizeof(int);
	n2 = sizeof(double);
	n3 = sizeof(x);



インクリメントとデクリメント


 a++ 前置
 ++a 後置

 n = ++a (++aを実行してからn=aを実行)
 n= a++ (n=aを実行してから++aを実行)


シフト演算子

 <<左シフト

 a>>2 右に2シフトずらす

 >>右シフト

 a<<2 左に2シフトずらす

 例:

b = a<<1;
aの値を1ビット左へずらした値をbへ代入

左シフト 1ビットシフトするたびに2倍になる
右シフト 1ビットシフトするたびに1/2になる



論理演算子


AND  0 & 0 = 0
OR   0 | 0 = 0
XOR  0 ^ 0 = 0
NOT  ~0 = 1


配列


int n = {5,2,3,4};
char ch
= {'A', 'B', 'C'};


for文


int i;
for(i=0; i<回数; i++){
処理



{}のないfor文

int i;
for(i=0; i<回数; i++)
puts("aaa");      これだけ3回繰り返される
puts("bbb");

int i  ← このiを ループカウンタという


まとめたfor文

for(int  i= 0;    i<5;  i++){
}



こう書こうと.Cで実行してみたがエラーに成ってしまった。未だに原因がわからないので調査中。なお、.cppでは使えました。

forの省略形


<反復条件だけ>

int i=0;
for(; 反復 ;){
printf(...);
i++
}


<無限ループ>

for(; ;){
puts("無限ループ");
}
return 0;
}



配列の合計

int  n[]    =  {10, 20, 30,40,50};
	int   total  =  0;
	int  i;
	for(i=0;   i<5;   i++){
	total += n[i];


while文

iの値を増やしていき、5まで増やし続け、あいうえおを5回表示する。

int i = 0;
while(i<5){
puts("あいうえお")
i++;
}


scanf_sとの統合

0が入力されるまでキー入力を続ける

while(scanf_s("%d", &n), n!=0){


※{}のない、While文は一文で書く


マクロの使い方

#define SIZE 5

int mainの上に記載

for(i=0; i<SIZE; i++) 



等価演算子


== 等しい
!= 等しくない


簡易電卓

int n, total=0;
while(scanf_s("%d", &n), n!=0){
total += n;
}
printf("合計=%d\n", total);
return 0;



do-while文


do{
繰り返したい処理
}while (反復条件);



関係式

1 が true
0 が false

int  a=10;
printf("%d\n", a<20);
printf("%d\n", a!=10);

出力結果: 1 と 0



if文


if(条件){
   成立している間処理
}else{
   成立していない処理

elseがない場合は 無視される


条件演算子


n>0 ? 10 : 20
nが正であれば10、それ以外は20

a==b ? 1.5 : 2.2
aとbが同じなら 1.5 それ以外は 2.2


繰り返しを抜け出す

while(){
if(...){
break;
}
}



繰り返しをスキップする

while(){
if(...){
continue;
}
}



else if


if (条件A){
処理1
}else if(条件B){
処理2
}else if(条件C) {
処理3
}else{
処理

{}のないif文は一行に


switch文


switch(式){
case 数1:
処理
break;
case 数2:
処理
break;
default:
処理



乱数の表示

#include  <stdio.h>
#include <stdlib.h>   // rand()を使う
#include <time.h>    //srand()を使う
int   main(void)
{
srand(time(NULL));  //初期化
int r = rand() %6 + 1;
printf("数字%d",r);	
return 0;
}