実力チェック問題

問題1(printf、変数、文字変数、配列、文字配列、繰り返し文)

設問1

(A)〜(C)の表示を行うプログラムを作成せよ。
(printf文のみを使用)

(A)*印の三角形パターン
*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
(B)文字列の巡回パターン
The C Language*
*The C Language
e*The C Languag
ge*The C Langua
age*The C Langu
uage*The C Lang
guage*The C Lan
nguage*The C La
anguage*The C L
Language*The C 
(C)市松模様
*****     *****     *****
*****     *****     *****
*****     *****     *****
     *****     *****     
     *****     *****     
     *****     *****     
*****     *****     *****
*****     *****     *****
*****     *****     *****
     *****     *****     
     *****     *****     
     *****     *****     

設問2

前問のパターンはそれぞれ規則性がある。これに着目してプログラムを作成せよ。

設問3

char型の変数 anny, bany, chery, domy を宣言し、それぞれに初期値として 'A', 'B', 'C', 'D' を持たせる。次のプログラムを作成せよ。

(A)4つの変数の内容を次のように巡回置換して出力する。
 anny  bany  chery domy
------------------------
 A     B     C     D
 D     A     B     C
 C     D     A     B
 B     C     D     A
 A     B     C     D
(B)4つの変数の内容を次のように逆順に並べ替えて出力する。
 anny  bany  chery domy
------------------------
 A     B     C     D
 D     C     B     A

問題2(演算、if文、関数、標準ライブラリ関数)

設問1

2つの正の整数値を入力し、両者の合計に対する各々のパーセンテージを求めよ。パーセンテージは小数部2桁まで表示するものとする。

設問2

時、分、秒で表わされた時間を入力し、秒単位の時間に換算して表示するプログラムを作成せよ。

[計算例] 5時間42分08秒 = 20528秒

設問3

秒単位の時間を入力し、時、分、秒で表わされた時間に換算して表示するプログラムを作成せよ。

[計算例] 32767秒 = 9時間6分7秒

設問4

半径rを入力し、球の表面積sを求めて表示するプログラムを作成せよ。また、このプログラムに次のデータを入力し、それぞれの計算値を確認せよ。
ただし、円周率は 3.14159265358979 とし、数値の範囲に幅があるのでe変換使用を使う。

[球の表面積を求める公式]
 4π r^2

[入力データ例]
地球の半径 = 6,289,000m
卵黄の半径 = 0.01m
細胞の半径 = 10の-5乗m

設問5

車のホイールベース(前後輪の車軸の間隔)と回転半径から、内輪差(前後輪の回転半径の違い)を計算して表示するプログラムを作成せよ。
ホイールベースの長さをb、回転半径をrとすると、内輪差dは次式で計算できる。

d = r - sqrt(r * r - b * b)

設問6

2つの数値のうち、大きいほうの値を求めて表示するプログラムを作成せよ。

設問7

2つのデータを整列させてa1≦a2となるようにするプログラムを作成せよ。

もし a1 > a2 ならば、a1 の内容と b1 の内容を交換(swap)する

設問8

三角形の面積を求めて表示するプログラムを作成せよ。

計算にはヘロンの公式を使う。
三角形の3辺の長さが a, b, c のとき
| a - b | < c < a + b
ならば
 p = (a + b + c) / 2
 s = sqrt(p(p - a)(p - b)(p - c))  面積sの値を表示する。
そうでなければ
 三角形ができないことを知らせるメッセージを表示する。

問題3(if文、繰り返し文、関数)

設問1

西暦y年がうるう年か平年かを判定するプログラムを作成しなさい。
うるう年の規則は次のとおり

  1. 4の倍数の年(4年毎)をうるう年とする
  2. ただし100の倍数の年は平年である
  3. しかし400の倍数の年はうるう年である

設問2

次のプログラムを作成せよ。

  1. 身長(cm)と体重(kg)を入力する
  2. 体重をW、身長をLとして、次式によりカウブ指数kを求める
    k = (W / L * L) * 10000
  3. カウブ指数の値に応じて診断メッセージを表示する
    [表示形式] W = nn.n kg L = mm.m cm K = ee.e ( 0 )

    ( )の箇所には次の診断コードを表示する
    kの範囲診断コード意味
    16.0未満'-'痩せ型
    16.0〜26.0'0'普通
    26.0超'+'肥満型

設問3

20から90までの整数の和を求めて表示するプログラムを作成せよ。

設問4

ループによって掛け算を行うプログラムを作成せよ。
掛け算は足し算の繰り返しで実現できる。a*bはaをb回足すことで計算できる。a、bの値は入力するものとする。

設問5

九九の表を表示するプログラムを作成せよ。表には適当な見出しをつける。

問題4(配列、文字配列、標準ライブラリ関数)

設問1

m月d日が1月1日から数えて何日目かを表示するプログラムを作成せよ。
1月から12月までの各月の日数を図のように配列に初期設定して使用する。配列の内容は初期設定以降は変更しない。1月1日は1日目とする。

days[0]days[1]days[2]・・・・・days[12]
03128・・・・・31

設問2

配列arrが次のように宣言され、各要素には適当な値が格納されているものとする。このとき、arrに関して次のようなプログラムを作成せよ。

#define NMAX 100 /* 格納データ数 */
int arr[NMAX];
  1. 配列arrに格納された値の総和を表示する。
  2. 配列arrに格納された値のうち、最大値を表示する。
  3. 配列arrに格納された値のうち、最大値が格納された要素番号を表示する。
  4. 配列arrに格納された値を逆順に入れ替える。

設問3

文字列を配列に入力する。文字列のうち、英小文字は大文字に、数字は全て'#'に変換して表示する。最大入力文字数は225文字まで。225文字を超えた場合の処理は考えなくてもよい。

問題5(複雑なプログラムの練習)

設問1

文字列を入力し、各文字を2桁の16進数で表示するプログラムを作成しなさい。文字列が"ABCDEFG 1234567890 HIJKLMN"であったなら、次のように表示する。

POSITI                                                   - - - - - - - -
000000 41 42 43 44 45 46 47 20-31 32 33 34 35 36 37 38 |ABCDEFG 12345678|
000010 39 30 20 48 49 4A 4B 4C-4D 4E 00                |90 HIJKLMN.     |
 位置     16進数表示                                     文字のまま表示

設問2

文字列を入力し、次の値を表示するプログラムを作成せよ。

  1. 空白の数
  2. タブと改行の合計数
  3. 英字の数
  4. 数字の数
  5. その他の文字の数
  6. 入力文字総数

設問3

文字列を入力し、'{'と'}'が正しく対になっているかを検査するプログラムを作成せよ。

設問4

文字列をgetsで入力し、文字列に含まれる単語を表示するプログラムを作成しなさい。ただし、ここでいう単語とは空白で区切られたひとつながりの文字列を言う。

設問5

文字列をgetsで入力し、1行の中央に表示するプログラムを作成せよ。ただし、1行は80桁とし、文字入力は80字以内とする。また、入力文字列の前後には空白文字はないものとする。

入力:centering program
出力:
centering program

設問6

年賀状のくじ番号を入力し、当たりくじかどうかを判定するプログラムを作成する。

[プログラム概要]

  1. 文字配列に当たり番号を用意しておく。また、当たり番号の個数を変数に格納する。
    char *atari[] = {"T30416",
                     "S50303",
                     "00929",
                     "20103",
                     "71025",
                     "2605",
                     "3527",
                     "5243",
                     "315",
                     "047",
                     "146",
                     "15",
                     "48",
                     "3"
    };
    int  tousen_suu = 14;
  2. くじ番号は先頭1桁が英字、残りの5桁が数値である。当たり番号は6桁以下のX桁であり、くじ番号の下X桁が一致した場合に「当たり」と判定する。当選番号が6桁の場合は1等、5桁の場合は2等というように、全部で6等ある。重複して当たった(例えば下2桁が「15」の5等と下3桁が「315」の4等が当たった)場合は、桁数の多いほう(この場合は4等)を当たりとする。
  3. くじの番号を入力(gets(〜))し、当たりかどうかを判定し、出力する。EOF(Ctrl + Z)が入力されるまで処理を繰り返す。最後に入力件数と各賞の当たりが何件であったかを出力してプログラムを終了する。

[入力データ(例)]

D34712 W49229 R11058 A72848 K27958
E86700 P39267 T17315 C11727 S36115
T05045 N72160 M72564 N70160 E62440
F67543 I47613 U57570 B25505 Z68715

[実行結果(例)]

>D34712
「D34712」は、はずれ
>W49229
「W49229」は、はずれ
>R11058
「R11058」は、はずれ
>A72848
「A72848」は「48」と合致して 5 等
>
・
・
・
>~Z
入力枚数 : 20 枚
1等 : 0 枚
2等 : 0 枚
3等 : 0 枚
4等 : 1 枚
5等 : 3 枚
6等 : 2 枚
はずれ : 14 枚

[ TOP ]