---
# System prepended metadata

title: 実践問題 解答解説

---

# 実践問題 解答解説
## 多重ループの解答解説
### 全体の流れ
![](https://i.imgur.com/8ohUSwf.png)

### 手順
- 最初にキーボードから正の整数値を読み込む。これをa, bとする。
    - 正の整数型で宣言するので、データ型はint型を持ち理宇
- 数列を出力する
    - 1からaまでの数列を出力する
    - 2.1をb回繰り返す
    - 繰り返しの際に2.1の数列をそれぞれ、繰り返しの回数分べき乗する。

## 解答例（多重ループ）
```
#include <stdio.h>
#include <math.h>

int main(void) {
    int a, b; // 入力された値を読み込みための領域確保
    scanf("%d %d", &a, &b); // 入力された値を読み込む
    
    for (int i = 1; i < b+1; i++) {
        for (int j = 1; j < a+1; j++) {
            printf("%.f", pow(j, i));
        }
        printf("\n");
    }
    return 0;
}
```

## ポインタの解答解説
### 全体の流れ
![](https://i.imgur.com/MWVISnh.png)

### 手順
- 最初にキーボードから正の整数値を読み込む。これをNとする。
    -   正の整数で宣言するので、データ型はint型を用いる。
-  キーボードからn文字の文字列を読み込む。
    -  文字列なのでchar型の配列を宣言する
    -   制約よりNの最大値が10だから、配列の大きさは10で十分である。
- 読み込んだ文字列のなかで"c"の文字を探す
    - まず、文字列の先頭ポインタを参照する。
    -  ループを使って配列の先頭から順番に値を参照する。
    -  参照した文字が"c"かどうかを判定
        -  "c"だった場合は、"c"の次の文字を出力する。


## 解答例（ポインタ）
```
#include <stdio.h>
#include <string.h>

int main(void) {
    int n;
    scanf("%d", &n);

    char s[n];
    char *p;
    scanf("%s", s);

    p = s;

    for (int i = 0; i < n; i++) {
        if (*(p+i) == 'c') {
          printf("%c\n", *(p+i+1));
        }
    }
    return 0;
}
```
