標準入出力とは?プログラミングテストの過去問で解説

 2020.09.09  株式会社システムインテグレータ

標準入出力とは何でしょうか?標準入出力とは何かをググってみると、多くのサイトでは、標準入力=キーボード入力、標準出力=画面出力と説明しています。説明自体は問題ありませんが、もう少し深掘りしませんか?

本記事では、標準入出力とは何かについて説明するとともに、プログラミングテストの問題を例にあげて標準入出力について解説します。

標準入出力とは何か?

標準入出力とは

プログラムとは「何らかの入力があって、入力されたものを演算や編集して、結果を出力するもの」です。はじめは、キーボードで何かの入力をして結果が画面に表示される、以下のようなプログラムをイメージしてみてください。

図1

コンピュータに情報を入力するのに何を使いますか?キーボードですよね?キーボードによる入力、実はこれが「標準入力」と呼ばれているものです。

正確にいうと、もう少し説明が必要になります。

プログラムが実行されるとき、必要な情報が流れ込む口があると思ってください。この口を
標準入力といいます。特に何もしなければ、その口にはキーボードからの入力が接続されています。よって、一般的な標準入力=キーボード入力と考えても問題ありません。

標準入力はキーボードだけじゃない

標準入力は必ずしもキーボードとは限りません。

標準入力という口にキーボードが指定されているだけなので、ファイルを標準入力に接続することも可能です。標準入力にファイルを「流し込む」といった方がイメージしやすいでしょうか。
キーで入力する内容をファイルに保存しておき、それをプログラムの入力とすることができます。大量の入力があるときは、ファイルに書いておき、それを標準入力とすると、入力する手間がなく、間違いもないのでいいですね。

図2

標準出力とは何か

何かを入力して、結果が表示されるプログラムの例に戻りましょう。
標準入力と同じように、標準出力というものがあります。プログラムの出力結果が流れていく出口と考えてください。これが標準出力です。
標準出力は、何もしなければ画面出力が指定されています。よって、よく分からなければ標準出力=画面表示、と考えてもとりあえずは問題ありません。

図3

標準出力は画面だけじゃない

実は、標準出力は画面だけとは限りません。
実行結果を、直接ファイルに書き出すことができるのです。つまり標準出力を画面ではなくファイルを指定することが可能です。
標準出力をファイルにした場合、プログラムを実行しても画面には何も表示されません。その代わりに指定したファイル名で結果がファイル出力されます。
(このように、出力先を振り替えることをリダイレクトと呼びます。)

図4

プログラミングテストの例題にチャレンジ!

標準入出力が何なのか分かったところで、標準入出力に関する問題を解いてみましょう!
プログラミングスキル判定サービスTOPSICの例題です。

例題

高橋君はデータの加工が行いたいです。

整数 a,b,cと、文字列 s が与えられます。
整数a+b+c の計算結果と、文字列 s を並べて表示しなさい。

制約:
 ・1 ≤ a, b, c ≤ 1,000
 ・1 ≤ |s| ≤1000


入力は以下の形式で与えられる。
a
b c
s

出力はa+b+c  s を空白区切りで 1 行に出力せよ。

以下のように入力したときに、
1
2 3
test

次のような結果を出力しなさい、ということです。
6 test

例題を解くためのチェックポイント

考え方のチェックポイントです。
 ・キーボード入力された値を取得する方法は?
 ・複数行に分けられた数値を取得する方法は?
 ・スペース(空白)で区切られた数値を取得する方法は?
 ・入力した値を数値や文字列として認識するには?
 ・結果を1行で表示するには?

上記は言語によらない共通したポイントです。対応方法は言語によって異なります。

C言語での解答例(標準入出力)

まずはC言語で解いてみましょう。

#include<stdio.h>
int main()
{
    int a,b,c;
    char s[101];
    // 整数の入力
    scanf("%d", &a);
    // スペース区切りの整数の入力
    scanf("%d %d",&b,&c);
    // 文字列の入力
    scanf("%s",s);
    // 出力
    printf("%d %s\n",a+b+c,s);
    return 0;
}

C言語では、標準入力の内容を受け取るのは"scanf"を使います。受け取るときに書式を指定することにより、数値で受け取ることができます。
複数行の対応は、単純に2行に分けて取得すればいいだけですね。以下の箇所です。コメントは省きます。

scanf("%d", &a);
scanf("%d %d",&b,&c);

aを数値、bcも数値として受け取っています。2行目の空白区切りの数値は、”%d %d”と書式を指定するだけで対応できました。文字列の取得も同様に対応できます。
そして次は結果の出力です。printfを使います。a+b+cを数値として、sを文字列として出力しています。

printf("%d %s\n",a+b+c,s);

Javaでの解答例(標準入出力)

次はJavaで解いてみましょう。

import java.util.*;
public class Main {
 public static void main(String[] args){
  Scanner sc = new Scanner(System.in);
  // 整数の入力
  int a = sc.nextInt();
  // 空白区切りの整数の入力
  int b = sc.nextInt();
  int c = sc.nextInt();
  // 文字列の入力
  String s = sc.next();
  // 出力
  System.out.println((a+b+c) + " " + s);
 }
}

先ほどのC言語と異なり、Javaはオブジェクト指向言語です。クラスとオブジェクトが出てきています。

標準入力を受け取るには、Scannerクラスを使います。
クラスからnew演算子でscオブジェクトを作り、nextIntメソッドを使って入力値を取得します。nextIntメソッドは、空白や改行を入力値の区切りとして認識します。よって、単純にnextInt3回実行すれば、問題に指示された3つの値を取得できます。改行か空白かは関係ありません。具体的には以下の部分です。

int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();

では数値ではなく文字列を受け取るには、どうすればよいでしょうか?文字列を受け取るためのnextというメソッドがありますので、それを使います。

String s = sc.next();

最後に数値を加算したものと、入力した文字列を1行で表示させればプログラムの完成です。

System.out.println((a+b+c) + " " + s);

まとめ

本記事では、標準入出力とは何かを解説し、その後に標準入出力に関する問題にチャレンジしました。問題を見てみると、根本的な考え方は同じですが、言語ごとの違いが見られて面白いですね。

興味のある方は、ぜひ標準入出力を使った他の問題にもチャレンジしてみてください。

新規CTA

新規CTA
新規CTA

RELATED POST関連記事


RECENT POST「プログラミング」の最新記事


この記事が気に入ったらいいねしよう!