---
# System prepended metadata

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

---

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

## 問１：for文で繰り返し
n個の科目数とそれぞれのテストの点数を入力すると、平均点(小数点第１位まで)が求まるプログラムを作成せよ。

### 入力例
```
科目数を入力：4
科目0の点数：56
科目1の点数：67
科目2の点数：78
科目3の点数：89
```
### 期待する結果
```
平均72.5点
```
---
### C言語の文法
##### for文の書き方

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

```
```
</details>

##### 値を合計する

<details><summary>表示</summary>
加算代入演算子："+="が使える。

```
```
</details>

##### 小数点の表示

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

```
```
</details>

##### 割り算

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

```
```
</details>

---

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

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

int main(void) {
	整数型 n, score;
	浮動小数点数型 sum;

	"科目数を入力："を出力;
	変数nにキーボードから数字を入力;

	sum に 0;
	for (整数型 i に 1; nはiより大きい; i++){
		"科目 変数i の点数："を出力;
		変数scoreにキーボードから数字を入力;
		sum += score;
	}
        sum/nを出力; // 平均値
	return 0;
}
```
</details>

---

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

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

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

int main(void) {
	int n, score;
	double sum;

	printf("科目数を入力：");
	scanf("%d", &n);

	sum = 0;
	for (int i = 0; i < n; i++){
		printf("科目%dの点数：", i);
		scanf("%d", &score);
		sum += score;
	}
	printf("平均%.1f点\n", sum / n);
	return 0;
}
```
</details>

## 問２：if文で条件分岐
n個の科目数、テストの点数、その科目の単位数をキーボードから入力するとGPA(成績評価点平均)が求まるプログラムを作成せよ。
ただし、GPAは、小数点第３位まで出力する。

GPAの基準：
```
90点以上の場合
	評価点 は 4
80点以上の場合
	評価点 は 3
70点以上の場合
	評価点 は 2
60点以上の場合
	評価点 は 1
その他
	評価点 は 0
```

GPAは、下記の式で求めます。
$$
加重和 = 評価点 \times 単位数\\
GPA = 加重和 / 総単位数
$$

### 期待する結果
```
科目数を入力：2
科目1の点数：67
科目1の単位数：2
科目2の点数：89
科目2の単位数：1
GPA：1.667
```


---

##### if文の書き方

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

##### 値を合計する書き方

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

##### 小数点の表示

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

---

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

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

int main(void) {
	int n, score, gp, cred;
	int credits;
	double wgps;

	printf("科目数を入力：");
	scanf("%d", &n);

	wgps = 0;
	credits = 0;
	for (int i = 0; i < n; i++) {
		printf("科目%dの点数：", i);
		scanf("%d", &score);
		if (score >= 90)
			gp = 4;
		else if (score >= 80)
			gp = 3;
		else if (score >= 70)
			gp = 2;
		else if (score >= 60)
			gp = 1;
		else
			gp = 0;

		printf("科目%dの単位数：", i);
		scanf("%d", &cred);
		credits += cred;
		wgps += gp*cred;
	}
	printf("GPA：%.3f\n", wgps / credits);
	return 0;
}
```
</details>

---

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

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

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

int main(void) {
	int n, score, gp, cred;
	int credits;
	double wgps;

	printf("科目数を入力：");
	scanf("%d", &n);

	wgps = 0;
	credits = 0;
	for (int i = 0; i < n; i++) {
		printf("科目%dの点数：", i);
		scanf("%d", &score);
		if (score >= 90)
			gp = 4;
		else if (score >= 80)
			gp = 3;
		else if (score >= 70)
			gp = 2;
		else if (score >= 60)
			gp = 1;
		else
			gp = 0;

		printf("科目%dの単位数：", i);
		scanf("%d", &cred);
		credits += cred;
		wgps += gp*cred;
	}
	printf("GPA：%.3f\n", wgps / credits);
	return 0;
}
```
</details>