# **解説**
## program0
### #include<stdio.h> int main(void){return 0;}
C言語で最初に書かれている文ですが、今はおまじないだと思っておいてください,この中にコードを書いていきます
```c
#include<stdio.h> int main(void){
//ここにコードを書いていく
return 0;
}
```
### printfとscanfの違いを理解しておきましょう
### printf
printfは文字や数字を表示させることができます
```c
printf("Hello World"); //これでHello Worldを表示させることができる
```
### scanf
scanfはキーボードで文字や数字を入力出来るようにすることができる
```c
int a;
scanf("%d",a); //これでキーボードから値を入力できるようになる
```
## program2
### if
ここでは「**if文**」(「条件分岐の構文」)というものを扱います。これで条件に応じた処理をさせることができます。
例えば、もし、入力された数字が5以下であれば、ターミナルに「5以下」と表示し、その他(5より大きい値)であれば、「5より大きい」と表示するといった具合です。
このようにコードを書きます
<img height=187 width=592 src="https://raw.githubusercontent.com/ryoto1038/c_flowchart/master/ifelse.png" alt="C言語" title="C言語">
#### program2のフローチャート(説明図)
[ここ](https://github.com/ryoto1038/c_flowchart/blob/master/program2.png)にあります。
## program3
### while
ここでは「**while文**」(「繰り返し処理」)というものを扱います。
これは同じ処理を真である限り続けるというものです。
このように書きます。
<img height=167 width=462 src="https://raw.githubusercontent.com/ryoto1038/c_flowchart/master/for_while.png" alt="Python" title="Python">
ここで注意していただきたいのですが、for文では、その回数分ループ変数に数値が代入されていきます。
ループ変数に代入される数値は、<b>0,1,2,3,4, ...という様に`0`から始まります。</b>
<u>よって回数をnとすると、ループ変数に代入される値は、0~n-1となります。</u>
#### program3のフローチャート
[ここ](https://github.com/ryoto1038/c_flowchart/blob/master/program3.png)にあります。
## program4_1
### 無限ループ
おそらくこれはゲームやスマホのバグで聞いたことがある言葉だと思いますが、意図的、あるいは偶発的によりプログラムが永遠に続くことを指します。
無限ループが発生するプログラムをprogram4_1.pyで扱っているので、プログラム下に書いてある説明書きをよく読んで、プログラムを実行してください。
#### program4_1のフローチャート
[ここ](https://github.com/ryoto1038/c_flowchart/blob/master/program4_1.png)にあります。
## program4_2
無限ループで使用できるものを紹介します。
### while (常に真の時)
これは条件を常に真の状態にさせて、**永遠にループ**を続けたい場合に使用します。
稼働し続ける必要のあるシステムなどで使用します。
### if break
ループ処理中にある条件に達した時に、そのループから**脱出**するものです。
```c
if
break;
```
### if continue
ループ処理中にある条件に達した時に、条件分岐(そのループの最初)のところに戻ります。
```c
if
continue;
```
#### スペース4つ問題
`if`と書いた後に`break`や`continue`を書く場合は、
改行 → Tabキー → (`break` or `continue`)
6
#### program4_2のフローチャート
[ここ](https://github.com/ryoto1038/c_flowchart/blob/master/program4_2.png)にあります。
## program5
#### program5のフローチャート
[ここ](https://github.com/ryoto1038/c_flowchart/blob/master/program5.png)にあります。
## program6
### 配列
プログラミングをするにつれて、データ(数値、文字列)が多くなっていきます。
その都度変数を作って、値を格納していくのは大変効率が悪いです。
そこで役立つ**配列**という1つの変数にたくさんのデータ(値)をまとめられる機能を紹介します。
配列に代入された数値を**要素**といい、順番は0番目から順に始まっていきます。
例)a[3]という配列に順に1, `2`, `3`と代入していくと配列の0番目に1が、1番目に2が、2番目が3という様になります。
| a[0] | a[1] | a[2] |
| -------- | -------- | -------- |
| 1 | 2 | 3 |
## program7
### 2次元の配列
ここでは配列の中に配列が入っている、2次元の配列というものを紹介します。
例)b[3][3]の配列を考えてみる。3行3列の配列で1行目1列はb[0][0]で以下のようになる。
| b[0][0] | b[0][1] | b[0][2] |
| ----------- | ------- | ------- |
| **b[1][0]** | **b[1][1]** | **b[1][2]** |
| **b[2][0]** | **b[2][1]** | **b[2][2]** |
二重のfor文と組み合わせて表のように出力してみよう。
また、3次元以上の配列の作成も可能です。
## program8
ここでは同じ処理を何回もさせたい場合に使える関数というものを紹介します。
### 関数
値を渡されると、何かしらの計算をして、その値を返すもののことを関数といいます。
関数は以下のように書きます。
```c
void 関数名(仮変数1, 仮変数2, ....){
処理
}
int main (void){
関数名(変数1,変数2,.....)
}
```
これを見ただけだと理解し難いと思うので、まずはコードを書いてみて下さい。
```c
#include <stdio.h>
void sum(int a,int b){ //足し算をして表示する関数
int c=0;
c=a+b;
printf("%d\n",c); //結果の表示
}
int main(void){
int x=4,y=2;
sum(x,y);
return 0;
}
```
実行すると答えの6が出てくるはずです。
下から2行目を見てください。`sum(x,y)`というものがありますよね。
これが「**関数の呼び出し**」と呼ばれるもので、ここで関数の処理をさせています。()のなかに(計算させたい)引数を入れることで引数を使った計算をさせることができ、あらかじめ宣言した変数であれば、どのような変数でも関数の中に入れることができます。
上のプログラムでは`void sum(int a,int b)`の`int a`と`int b`はそれぞれ`a`と`x`, `b`と`y`が対応しており、上のように変数値に代入されている値が代入されます。
値が代入された後は関数の中に書かれて処理が行われます。
## program9
### 返り値
上では関数内の計算などの処理は関数内だけで完結しますが、今回扱う関数は計算結果、それに類する処理の結果を「**返り値**」として返してくれます。
返り値を用いたいときは次のように入力してください
```return 返り値;```
先ほどと同じようにコードを書いてみましょう。(内容は同じもの)
```c
#include <stdio.h>
int sum(int a,int b){ //足し算の結果を返す関数
return a+b;
}
int main(void){
int x=4,y=2,c;
c=sum(x,y); //関数の呼び出し
printf("%d\n",c);
return 0;
}
```
先ほどと同じように6が結果として出ます。
上の関数内の最後に`return`が書いてありますよね。このように関数の最後に`return`を書くことで、処理結果を返すことができます。その処理結果は上のように変数に代入することなどにより、使用することができます。
# program 10
### 構造体
いくつかの変数をまとめて新しい変数を作る。
```c
struct date{ //date型の新しい変数を作る
int id;
char name[10];
}
int main(void){
date a={19,Horiutchi} //date型のaという変数,定義と同時に初期化
}
```
-----
みなさんいかがでしたか?
以上がc言語の基本的な文法となっています。
c言語は一回生の秋学期で習います。実際の授業では同じ内容も扱いますがこれよりも少し難しことも範囲となります。ですが、基礎がしっかりとしていれば少しの応用が来ても何の問題もありません。しっかりと学習して秋学期の授業に臨みましょう。
何か質問があれば、slackやDMなど、どんな手段でもよいので質問してくださいね。
-----
編集: Horiuchi,Mikawa,Inaba
-----
参照:
新・明解C言語 入門編