第3回 プログラミング入門 演習
【演習の注意事項】を良く読んで解答してください
【演習室1〜6以外で課題を解く場合の注意】も参考にしてください
Cプログラミングの初歩
--( はじめてのCプログラミング)---
(その2)
【主な内容】
- 入力文
- 浮動小数点型の変数と演算
- キャスト(型変換)
前回の第2回目の演習では、出力文(printf)を用いたプログラムの作成や 整数型の変数を用いた四則演算のプログラムを作成しました。
今日の演習では、入力文(scanf)を用いたプログラムの作成や 浮動小数点型 の変数を用いたプログラムを作ってみましょう。
プログラムを作成する上で キーボードなどの入力装置からデータを 入力させることや数値として実数を用いることにより、
今までより柔軟なプログラミングが可能となります。
演習課題
以下の例題と、3つのレベル (初級レベル、中級レベル、上級レベル) の全ての課題 に解答しなさい。各々の課題毎にファイルを作成しなさい。
今回の課題にはテキスト(文書)ファイルで回答を提出するものがあります。ファイル名は各課題で指定してあるので、厳密にその指示に従って下さい。また、ファイル名に".txt"という拡張子をつけて下さい。
なお、文中の実行例やコマンドなどの赤色の字はキーボードから入力したもの、深緑の字
はコンピュータからの表示を示しています。また、%
はプロンプト(皆さんの環境ではstd1dc1{s1160000}1:等に相当する)を示しており、皆さんが入力するのはその次の文字からになります。
例題
講義資料(ハンドアウト)の例題
lec03-1a.c,
lec03-1b.c,
lec03-2.c,
lec03-3.c
のソースプログラムをコピーし、そのプログラムの動作を予測した上で、コンパイル・実行を試してみなさい。
コピーの方法:
% cd ~/Prog0/Ex03
% cp /home/course/prog0/public_html/2008/lec/source/lec03-1a.c .
% cp /home/course/prog0/public_html/2008/lec/source/lec03-1b.c .
% cp /home/course/prog0/public_html/2008/lec/source/lec03-2.c .
% cp /home/course/prog0/public_html/2008/lec/source/lec03-3.c .
初級レベル
(A-1)
以下はプログラムの一部を抜きだしたものである。変数 a の最終的な値は
何になるか考えて、予想した結果を ex03a1.txt に記入しなさい。
また、#include, printf 等必要な命令を補って完全なプログラム ex03a1.c を作成して確認しなさい。
但し、このプログラムファイルは提出コマンドで提出されません。
ファイル名:ex03a1.txt、ex03a1.c
(A-2)
以下はプログラムの一部を抜きだしたものである。変数c1とc2の値はそれぞれ何になるか予想した
結果と、c1 と c2 とに違いが生じる場合はその理由を、ex03a2.txt に記入しなさい。
また、#include, printf 等必要な命令を補って完全なプログラム ex03a2.c を作成して確認しなさい。
但し、このプログラムファイルは提出コマンドで提出されません。
ファイル名: ex03a2.txt、ex03a2.c
(A-3)
以下はプログラムの一部を抜きだしたものである。
変数 c1、c2、c3 の値は何になるか予想した結果と c1 と c2 と c3 とに違いが生じる場合はその理由を、ex03a3.txt に記入しなさい。
また、#include, printf 等必要な命令を補って完全なプログラム ex03a3.c を作成して確認しなさい。
但し、このプログラムファイルは提出コマンドで提出されません。
ファイル名: ex03a3.txt、ex03a3.c
(A-4)
以下のプログラムはコンパイルは正常に行なわれますが、入力したものとは全くちがう数値が
表示されます(実行時エラーが発生することもあります)。
このプログラムのファイル名を ex03a4.c として作成し、コンパイル・実行しなさい。
そして、実行結果と異常動作(もしくはエラー)の原因がどの命令のどこにあったかを ex03a4.txt に
記述すると共に ex03a4.c を正常動作するように修正しなさい。
なお、提出ファイルは ex03a4.txt と修正後の ex03a4.c の2つになります。
ファイル名: ex03a4.c、ex03a4.txt
(A-5)
以下は一辺の長さを整数で入力し、正方形の面積を求めるプログラムですが、
正常に動作しません。 正しく動作するように修正して提出しなさい。
ファイル名: ex03a5.c
中級レベル
(B-1)
scanf()関数で2つの実数をキーボードから読み込み、四則演算を行うプログラムを作りなさい。
なお、変数はすべて浮動小数点型とする。
ファイル名: ex03b1.c
ヒント
(ここをクリック)まずは見ないで考えなさい。
[実行例] (浮動小数点演算では、丸め誤差の分だけ実行例と
一致しない場合もあります。)
% ./a.out
2つの実数を入力してください : 55.5 5.0
和 = 60.500000 差 = 50.500000
積 = 277.500000 商 = 11.100000
%
(注)scanfで複数の値を読み込ませる場合は、空白で区切るのが一般的
(B-2)
円の面積と円周の長さを求める問題である。
円の半径rをキーボードから読み込み、面積と円周の長さを求めるプログラムを作りなさい。
なお、円周率は3.14159、半径は実数、単位はcmとし小数点以下も省かずに出力しなさい。
ファイル名:ex03b2.c
[実行例] (浮動小数点演算では、丸め誤差の分だけ実行例と一致しない場合もあります。)
% ./a.out
円の半径をcmで入力してください : 7.5
円の面積は 176.714447 平方cmです
円周の長さは 47.123852 cmです
%
(B-3)
商品の本体価格(整数:円)と消費税率(整数:%)を入力すると、税込みの価格が出力されるプログラムを書きなさい。
ただし、本体価格と消費税率を入れるための変数は整数(int)型とする。また、税込み価格は小数点以下も省かずに出力すること。
(例えば、10円で税5%だと10.5円)
ファイル名: ex03b3.c
[実行例]
% ./a.out
本体価格, 消費税率を入れてください
1990 5
税込みの価格: 2089.500000 円
%
上級レベル
(C-1)
重み付き合計と平均(加重平均)
国語、数学、英語、理科、社会の点数と
それに対する重みを入力すると5教科の
重み付き合計点と重み付き平均点を出力する
プログラムを作りなさい。
なお、5教科の点数と重みは整数、重み付き
平均点は実数とし、重み付き平均点を求める
ときにキャストを用いなさい。また、実験的に
キャストをはずしたときにどのような結果に
なるかも試し、その結果をプログラムにコメント
として書きなさい。最終的な提出ファイルは
キャスト付きのものとします。
ファイル名: ex03c1.c
【重み付き合計と平均について】
総合成績として、例えば国語と数学のうち、
どちらかの点数について重点をおきたい場合、
それぞれの科目に対して重みというパラメータを
導入して加重平均を算出する。重み付き合計と
重み付き平均(加重平均)は以下のように求められる。
・重み付き合計点 = 国語の点数 * 国語の重み + 数学の点数 * 数学の重み
・加重平均 = 重み付き合計点 / ( 国語の重み + 数学の重み )
[実行例] (浮動小数点演算では、丸め誤差の分だけ実行例と一致しない場合もあります。)
% ./a.out
国語の点数と重みを入力してください : 74 1
数学の点数と重みを入力してください : 83 2
英語の点数と重みを入力してください : 77 2
理科の点数と重みを入力してください : 63 2
社会の点数と重みを入力してください : 50 1
5教科の重み付き合計点は 570 点で、重み付き平均点は 71.250000 点です。
%
(C-2)
三角形の3辺の長さを入力し、三角形の面積を求める
プログラムを作りなさい。ただし、変数の型は全て
浮動小数点型を使用しなさい。
ファイル名: ex03c2.c
【ヘロンの公式】
三角形の3辺の長さa, b, cが与えられたとき、
その面積areaは次のヘロンの公式を用いて求めることができる。
実行例:
% ./a.out
三角形の3辺を入力して下さい -> 3.0 4.0 5.0
3辺の長さ : 3.000000,4.000000,5.000000 面積 : 6.000000
% ./a.out
三角形の3辺を入力して下さい -> 5.0 6.0 7.0
3辺の長さ : 5.000000,6.000000,7.000000 面積 : 14.696939
%
補足: 平方根を計算するプログラムの書き方
平方根の計算をプログラムで行うには、プログラムの2行目(#include <stdio.h>の次の行)に
#include <math.h>
という文(数学関数を使うことの宣言)を記述します。
さらに プログラムの中で
area = sqrt(s*(s-a)*(s-b)*(s-c));
という文を記述する。sqrtは平方根の計算を行う関数である。
コンパイルは以下のように -lm (lはLの小文字)を付ける必要があります。
% gcc ex03c2.c -lm
(-lmは数学関数を使用する場合に指定します。 今のところはおまじないと思ってください)
(C-3)
整数nをキー入力し、1+2+3+・・・・+n の和vを計算するプログラムを作りなさい。変数は全てint型を使用しなさい。
また、下記実行例2を踏まえてのコメントも記述すること。
ファイル名:ex03c3.c
利用する公式:

[実行例1]
% ./a.out
nを入力してください 4
v=10
ちなみに、以下のように大きなnを入力すると計算結果がおかしくなる。
[実行例2]
% ./a.out
nを入力してください 65535
v=-32768
上記結果の理由を,プログラムファイルの中に,コメントとして追加してください。
(注)ソースプログラム中で /* と */に囲まれた部分が コメントになります。
何か疑問や間違いがあれば以下に連絡して下さい。
プログラミング入門演習問題担当(prog0)