---
# System prepended metadata

title: C言語復習勉強会：初級編

---

# C言語復習勉強会：初級編

## 問１：お酒は二十歳になってから

P学科の全学年で飲み会が開催されることになりました。

しかし、お酒は20歳以上でないと飲めないため、
お酒が飲める人と飲めない人を下記のように分類してください。

Aテーブルは、**20歳以上**で**お酒を飲む**人。
Bテーブルは、**20歳未満**、または**お酒を飲まない**人。

### 入力例：１
```
年齢：21
飲まない=0、飲む=1
お酒を飲みますか？：1
```
### 出力：１
```
20歳以上でお酒を飲むため、A
```

### 入力例：２
```
年齢：19
飲まない=0、飲む=1
お酒を飲みますか？：1
```
### 出力：２
```
20歳未満、またはお酒を飲まないため、B
```

---
### C言語の文法(ヒント)

#### scanf()

<details><summary>表示</summary>

scanf()を使うことで、数値として変数に格納することができます。
数値として変数に格納されるため、算術演算子を使って計算をすることも可能です。

```cpp=
#include <stdio.h>
 
int main(void) {
    double d;
    
    printf("数値を入力\n");
    scanf("%lf", &d);
 
    printf("計算結果は：%lf\n", d + 1.0);
 
    return 0;
}
```

```
数値を入力
0.5
計算結果は：1.500000
```

</details>

#### if文の書き方
<details><summary>表示</summary>

##### if文の書き方
「if文」は、条件分岐、つまり、この条件の時にこの処理を行うといった命令を書くための文です。


```
if (条件式、x > yなど)
	printf("処理１");
```

複数の処理を書くためには、`{}`でくくります。

```
if (条件式、x > yなど) {
	printf("処理１");
	printf("処理２");
}
```

下記のコードを試してみましょう。
```cpp=
#include<stdio.h>

int main(void) {
	int x;
	int y;

	scanf("%d", &x);
	scanf("%d", &y);

	if (x > y) // ここを >= に変えて違いを見てみましょう。xはy以上となります。
		printf("xはyより大きい");
}
```

##### 条件式とif else

| 演算子 | 使い方 | 意味 |
| -------- | -------- | -------- |
|==|a == b|aとbの値が等しい
|!=|a != b|aとbの値が等しくない
|< | a < b|aはb未満
|> | a > b|bはa未満
|<=|a <= b|aはb以上
|>=|a >= b|aはb以下

下記のコードを試してみましょう。

```
`score`が
80点以上なら、優
70点以上なら、良
60点以上なら、可
それ以外、不可
```

```cpp=
#include <stdio.h>

int main(void)
{
    int score;

    scanf("%d", &score);

    if (score >= 80)
    {
        printf("優");
    }
    else if (score >= 70)
    {
        printf("良");
    }
    else if (score >= 60)
    {
        printf("可");
    }
    else
    {
        printf("不可");
    }
}
```

これらの知識をもとに問題を解いてみましょう。

</details>

##### 論理演算子
<details><summary>表示</summary>

論理演算子を使うことで「a と bが等しい」かつ「c は dよりも大きい」
といった条件式を組み合わせた複雑な条件式を作れます。

```cpp=
#include <stdio.h>
 
int main(void) {
    int x = 10;
    
    if (x > 3 && x < 20) {
    printf("x は3より大きく20未満\n");
    }
 
    return 0;
}

```

| 演算子 | 名前 | 記述例 |意味|
| -------- | -------- | -------- | -------- |
|`&&`|AND	| `a && b`|aかつb
| `||` | OR | `a || b` | aまたはb
|`!=`| NOT|`a != b`|aとbは異なる

</details>


:::info
変数宣言、エスケープシーケンス、if文、scanf()、論理演算子を扱う問題。
:::

---

### ロジック(わからない場合)
<details><summary>表示</summary>

```cpp=
#include<stdio.h>

int main(void) {
    整数型 age alcohol;

    "年齢："を表示
    ageをscanf
    "飲まない=0、飲む=1\nお酒を飲みますか？："を表示
    alcoholをscanf
    
    もしageが20以上かつalcoholが1
        "20歳以上でお酒を飲むため、A\n"を表示
    それ以外もしageが20未満またはalcoholが0
        "20歳未満、またはお酒が飲まないため、B\n"を表示
    
    終了
}
```
</details>

---

### 答え(最後に見る)

<details><summary>表示</summary>

```cpp=
#include <stdio.h>

int main(void)
{
    int age, alcohol;

    printf("年齢：");
    scanf("%d", &age);
    printf("飲まない=0、飲む=1\nお酒を飲みますか？：");
    scanf("%d", &alcohol);

    if (age >= 20 && alcohol == 1)
    {
        printf("20歳以上でお酒を飲むため、A\n");
    }
    else if (age < 20 || alcohol == 0)
    {
        printf("20歳未満、またはお酒が飲まないため、B\n");
    }

    return 0;
}
```
</details>

---

## 問２：会費の徴収(for文)

飲み会の開始前に会費を徴収することになりました。

合計人数、各個人の年齢、お酒を飲むか？を入力し、一人ずつの会費を求めて下さい。

ただし、
お酒を**飲む**Aテーブルは、**3000**円。
お酒を**飲まない**Bテーブルは、**2000**円
とします。

### 入出力例
```
人数を入力：3
1人目の年齢：20
飲まない=0、飲む=1
お酒を飲みますか？：1
1人目の会費：3000
2人目の年齢：18
飲まない=0、飲む=1
お酒を飲みますか？：1
2人目の会費：2000
3人目の年齢：23
飲まない=0、飲む=1
お酒を飲みますか？：0
3人目の会費：2000
```

---

### C言語の文法(ヒント)
##### for文の書き方

<details><summary>表示</summary>

「for」文は、同じ処理を繰り返して行ったり、変数の値を変えながら同じ処理を行うための命令文です。

```
for (初期化;条件式;変化式){
  処理１;
  処理２;
}
```

1から始まり、3まで処理を繰り返す場合、

初期化：`i`は1から
条件式：`i`は3以上
変化式：`i`に1を足し算(インクリメント)

```cpp=
#include <stdio.h>

int main(void){
  int i;

  for (i = 1; i <= 3; i++){
    printf("こんにちは\n");
    printf("%d回目の繰り返しです\n", i);
  }

  return 0;
}
```

</details>


---
### ロジック(わからない場合)
<details><summary>表示</summary>

```cpp=
整数型 age alcohol, num, i;

printf("人数を入力：");
numをscanf
    
forで1~numまで繰り返す
    printf("%d人目の年齢：", i);
    printf("飲まない=0、飲む=1\nお酒を飲みますか？：");
    alcoholをscanf
    
    printf("%d人目の会費：", i);
    
    もしageが20以上かつalcoholが1
        "3000\n"を表示
    それいがいの場合、ageが20未満またはalcoholが0
        "2000\n"を表示
    
    終了
```
</details>

---

### 答え(最後に見る)
<details><summary>表示</summary>

```cpp=
#include <stdio.h>

int main(void)
{
    int age, alcohol;
    int num, i, sum;

    printf("人数を入力：");
    scanf("%d", &num);

    for (i = 1; i <= num; i++)
    {
        printf("%d人目の年齢：", i);
        scanf("%d", &age);
        printf("飲まない=0、飲む=1\nお酒を飲みますか？：");
        scanf("%d", &alcohol);

        printf("%d人目の会費：", i);

        if (age >= 20 && alcohol == 1)
        {
            printf("3000\n");
        }
        else if (age < 20 || alcohol == 0)
        {
            printf("2000\n");
        }
    }

    return 0;
}
```
</details>

---

## 中・上級編
中・上級編は、必ずしも解ける必要はありませんが、解きたい人は是非解いてくださいね。
解説もあります。

![](https://i.imgur.com/wkJhWVJ.png)
http://witheart.html.xdomain.jp/stanhard.html

## アンケート
<iframe src="https://docs.google.com/forms/d/e/1FAIpQLSf4cKuLE7gzO2Uay7dYx_ewYDU4N1S9Ht8hVxGf-650ixWD4w/viewform?embedded=true" width="640" height="895" frameborder="0" marginheight="0" marginwidth="0">読み込んでいます…</iframe>
