PowerPoint プレゼンテーション

問題 1
シーザー暗号は文字を3文字ずらすことによって暗号文を作る。
つまり、a をd、bをe、… zをcに変換する。入力した文字列を
シーザ暗号文に変換するプログラムを作成せよ。
% ./a.out
文章を入力:konnnichiwa
暗号文は nrqqqlfklzd
%
この色はプログラムによる出力
1
問題 2
フィボナッチ数列 xn は次で定義される。
1000 以下のフィボナッチ数を全て表示するプログラムを作れ。n 番目のフィボ
ナッチ数を返す関数 int fibonacci(int n) を定義して用いよ。
int fibonacci(int);
main()
{
int i=1, f;
while( (f=fibonacci(i)) < 1000 ){
printf("%d\n", f);
i++;
}
}
2
問題 3
電気料金が
基本料 320.25円
19.05 円/kWh
15kWhまで
15kWhから120kWh まで
24.21 円/kWh
120kWh から300kWh まで
25.55 円/kWh
300kWh 以上
のように決められているとする。15kWhまでの使用量については、
基本料金のみの一定料金となる。例えば、一ヶ月に400kWh の電力量
を使用した場合の料金は、
19.05 × (120-15) + 24.21 × (300 − 120) + 25.55 × (400 − 300)
となる。(実際には、これに基本料と消費税が加わる。)
基本料金を320.25円、消費税が5%として、電力量を入力して、電
気料金を計算するプログラムを作成せよ。
3
問題 4
定積分によって面積を計算する。y=f(x)と、x=0,x=1,y=0で囲まれた面積は、
f(x)をx=0から1まで定積分することで求められる。これは、積分区間 [0, 1] を
細かく区切り、短冊の面積を合計することで積分を近似して求める事が出来る。
f(x)=√(1-x2) について、面積を求めるプログラムを作成せよ。
int i;
double dx = 0.01, sum = 0;
for(i=0; i<100; i++)
sum += f(i*dx)*dx;
区間幅を dx とする
積分は足し算にほか
ならない
printf(“%f\n”, sum);
4
問題 2
学生のデータを扱う為の構造体を定義せよ。この構造体の値を設定する
ための入力関数read_dataと出力する関数write_dataを作れ。
データは各自適当に決めてよい。名前は、文字型の配列とし、サイズは20文字
にする。
./a.out
名前は: kako fujio
学籍番号は: 999999
年齢:20
#include <stdio.h>
身長:163.4
struct student {
体重:72.5
必要な変数を定義;
登録データ
};
kako fujio
999999
main()
20歳
{
163.4 cm
struct student s;
72.5kg
read_data(&s);
printf(“登録データ\n”);
write_data(s);
}
5
問題 5
正の実数を入力し平方根を計算するプログラム。ただし、負の実数を
入力した場合は、その旨表示するよう気配りすること。
% ./a.out
% 正の実数を入力せよ: 16
16 の平方根は 4.000 です。
%
%./a.out
% 正の実数を入力せよ: -9
正の実数じゃないとだめ!
%
考え方:
1)変数の入力
2)入力した値の正負の判定:
もし正なら、平方根を計算して表示
そうでなければ、入力エラー表示
if (正)
平方根の計算と表示
else
"正の実数じゃないとだめ"の表示
6
問題 6
キーボードから 10 人の成績(100 点満点の整数値)を配列に読み込み、最高
点、最低点及び 平均点を表示するプログラム
% ./a.out
学籍 No. 0 の成績:80
学籍 No. 1 の成績:70
学籍 No. 2 の成績:95
...
学籍 No. 9 の成績:40
最高点は 100 点です。
最低点は 10 点です。
平均点は 55.3 点です。
%
考え方:
1) 10 人の成績を配列に読み込む。
2) その中で最高点を探し出して表示。
3) 最低点を探し出して表示。
最高点の検索方法
i = 0 として score[i] を仮の最高点 max とする。
i++ として、score[i] と max の大小を比較。
以上を繰り返す。
7
問題 7
下のような模様を出力するプログラムをつくれ。
%./a.out
文字は何にする?#
最大の個数は?5
#####
####
###
##
#
%
空白は5個、# が 5個 + 改行
空白が4個、# が 4 個 + 改行
空白が3個、# が 3 個 + 改行
1)出力する文字を入力
2)繰り返し処理(横方向と縦方向の反復)
一度に 2 重ループを処理しようとしないで、まず最初に横方
向の繰り返し処理を考える。この部分を縦方向の繰り返し処
理で包んでやる。
この色はプログラムによる出力
8
問題 8
ユークリッドの互除法を用いて、入力した 2 つの自然数の最大公約数を求めるプロ
グラムを作れ。
% ./a.out
自然数を2つ入力:54 144
144 と 54 の最大公約数は 18 です。
%
この色はプログラムによる出力
9
問題 9
適当な初期値
の解を求める方法にニュートン法がある。
から始めて、
を順に求めていくと、
は解に近づいていく。
#include <stdio.h>
#include <math.h>
main()
{
double x,y,c;
c = 2.0;
y=1.0;
do {
x = y;
y = (x+c/x)/2.0;
} while(fabs(x-y) > 0.0001);
printf(“sqrt(%lf) = %lf¥n”, c, y);
}
を元にして
プログラムすると、平方根を求める
プログラムが出来る。
同じようにして、与えられた数
の3乗根を求めるプログラムを
作れ。
fabs()はdoubleの絶対値を
求める関数。abs()は整数
の絶対値
10