平成30年度 春期7テクノロジ系

基本情報 平成30年度 春期 問7:テクノロジ系に関する問題

プログラムのコーディング規約に規定する事項のうち, 適切かものはどれか。

  • a局所変数は, 用途が異なる場合でもデータ型が同じならば, できるだけ同一の 変数を使うようにする。
  • b処理性能を向上させるために, ループの制御変数には浮動小数点型変数を使用 する。
  • c同様の計算を何度も繰り返すときは, 関数の再帰呼出しを用いる。
  • d領域割付け関数を使用するときは, 割付けができなかったときの処理を記述す る。正答
正答:D領域割付け関数を使用するときは, 割付けができなかったときの処理を記述す る。

AI解説(初心者・標準・上級)

理解度に合わせて3レベルの解説を無料で読めます。

初心者向けまずはここから。やさしく要点を解説

答えは d です。

コーディング規約=「みんなで読みやすく安全に書くためのルール集」

領域割付け関数(malloc/newなど)はメモリが足りないと失敗することがあるので、「失敗したときの処理を必ず書いておく」ことが大事。書いてないと、NULL を触ってクラッシュします。

👉 覚え方:確保失敗の対処はマスト

ほかの選択肢:a 用途違うのに同じ変数を流用=バグの温床/b ループ変数に浮動小数点=誤差で無限ループの危険/c 単純繰り返しに再帰=スタックオーバーフローの危険。

標準試験対策の基準レベル

なぜこれが正解か

正解は d。動的メモリ割付け関数(C の malloc、C++ の new、Java/C#の new 等)は、メモリ不足等で割付けに失敗する可能性がある。失敗時の戻り値(NULL ポインタや例外)に対する適切な処理を必ず記述するのがコーディング規約として正しい。これを怠るとNULL参照によるクラッシュ・未定義動作を招く。

各選択肢の解説

  • a 用途が違うのに同じ変数を流用:変数の使い回し意図が不明瞭になり可読性・保守性が低下。コーディング規約として推奨されない(不適切)。
  • b ループ制御変数に浮動小数点を使用:累積誤差で終了判定不能または反復回数が変わるバグの原因。整数で制御が原則。
  • c 同様計算を関数の再帰呼出しで実現:反復ループで足りる場合、再帰は不要な性能低下とスタック消費を招く。
  • d 領域割付け失敗時の処理を記述 → 正解

覚え方・ひっかけ注意

コーディング規約の基本3原則:(1) 可読性 (2) 保守性 (3) 安全性。本問は安全性カテゴリ。MISRA-CGoogle C++ Style GuidePEP 8(Python)Effective Java 等が代表的規約。静的解析ツール(Coverity、SonarQube、PMD、ESLint)で自動チェックが現代の標準。

上級誤答論破・背景理論まで深掘り

主要なコーディング規約

  • MISRA-C / MISRA-C++:自動車業界。安全性重視(ISO 26262 と連携)。例:goto 禁止、動的メモリ割当禁止(ASIL D)。
  • CERT C / Java / Python Coding Standard:セキュリティ重視。
  • Google Style Guide:C++/Java/Python/Go等の社内標準を公開。
  • PEP 8(Python):Python公式スタイル。
  • Airbnb JavaScript Style Guide:JS分野のデファクト。
  • Effective Java:Joshua Blochの設計指針。

メモリ管理の安全性

本問の論点は防御的プログラミングの典型。

  • C:malloc 戻り値の NULL チェック必須。
  • C++:`new` は標準では std::bad_alloc 例外。`new(std::nothrow)` で NULL 返却。スマートポインタ(unique_ptr、shared_ptr)でメモリ漏れ対策。RAII(Resource Acquisition Is Initialization)が定石。
  • Java/C#:GC管理だが OutOfMemoryError 例外を考慮。
  • Rust:所有権システムでコンパイル時にメモリ安全性を保証、`Result<T, E>` で失敗ハンドリングを型レベル強制。
  • Go:GC管理だが panic / recover 機構あり。

エラー処理パターン

  • 戻り値検査:C系の伝統的方法。
  • 例外:C++/Java/C#/Python。try-catch でハンドリング。
  • Optional / Result 型:Rust、Haskell、Scala、Swift。エラーを型で表現。
  • エラーコード列挙:Go の `error` インタフェース。

ループ変数の数値型

  • 整数型推奨:浮動小数点(float, double)は二進浮動小数点表現の誤差で 0.1×10 ≠ 1.0 のような問題を引き起こす。
  • for (double f=0; f<1; f+=0.1)反復回数が不定になる古典的バグ。
  • 整数倍した値で制御 または `BigDecimal`(Java)等の十進演算ライブラリ使用。

静的解析と継続的品質管理

  • 静的解析ツール:Coverity、SonarQube、PMD、ESLint、Pylint、clippy(Rust)。
  • CI/CD組込み:プルリクエスト時に自動レビュー、品質ゲート。
  • コードカバレッジ:JaCoCo、Istanbul、coverage.py。
  • コードフォーマッタ:Prettier、Black、gofmt、rustfmt。チーム間の体裁統一を自動化。

試験での位置づけ

FE「ソフトウェア開発/品質管理」分野で頻出。応用情報・PM・SAでは品質特性(ISO/IEC 25010)、信頼性向上技法、フォールトトレラント設計まで踏み込む。

選択肢の発展補足

aの変数使い回しは古典的にはレジスタ節約のため許容されたが、現代のコンパイラ最適化では無意味で、可読性低下のみが残る。dのメモリ確保失敗は組込み・サーバ系で特に重要。OOM Killer(Linux)はメモリ枯渇時にプロセスを強制終了する仕組みで、想定外の挙動の原因になる。メモリプール事前確保で実行時失敗を回避する手法も組込み系で常套。

出典・引用について

出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成30年度 春期7/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。

テクノロジ系の他の過去問

1
テクノロジ系
2
テクノロジ系
3
テクノロジ系
4
テクノロジ系
5
テクノロジ系

あなたの弱点を診断して、合格までの最短ルートを

この分野を連続演習し、AIがあなたの弱点を分析。合格ナビなら基本情報の過去問を解きながら学べます。