演習の課題(7月19日) • 11問の内、5問を選択して提出する こと。 • 全ての課題をやる必要はないが、試験 に出すかもしれません。 • 提出は http://griffin.cc.nara-wu.ac.jp/ にアクセスして、センターのアカウント でログインして、レポートを提出して ください。 1 問題 1 シーザー暗号は文字を3文字ずらすことによって暗号文を作る。 つまり、a をd、bをe、… zをcに変換する。入力した文字列を シーザ暗号文に変換するプログラムを作成せよ。 % ./a.out 文章を入力:konnnichiwa 暗号文は nrqqqlfklzd % この色はプログラムによる出力 2 問題 2 正の整数nに対して、nの約数の和(1を含みnを含まない 約数の和)を返す関数を作れ。これをもとに、1以上 10000以下の友愛数を求めるプログラムを作成せよ。 二つの数nとmについて、nの約数の和がmに等しく、また mの約数の和がnに等しいとき、nとmを友愛数という。 #include <stdio.h> int yakusu(int); main() { int i,m,n; for(i = 1; i < 10000; i++){ m = yakusu(i); n = yakusu(m); if(n == i) printf(“%d and %d は友愛数¥n”, i, m); } } 3 問題 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%として、電力量を入力して、電 気料金を計算するプログラムを作成せよ。 4 問題 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); 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 問題 10 多項式を配列を使って表すことを考える。 例えば、 の場合、大きさ6の配列で double f[6] = {-3,1,3,0,0,1}; でf(x)を表すことにする。f[0]は0次の係数、f[1]は1次の係数,…。 配列とそのサイズ(多項式の次数+1)と、値a に対して を計算する関数のプログラムを作成せよ。 関数名はfuncで、プロトタイプは double func(double a, double f[], int n); とする。 11 問題 11 3次元での座標ベクトル(x、y、z)を構造体として定義し、 2点間の距離を求める関数をプログラムせよ。 また、この関数を用いて与えられた3点を頂点とする 三角形の面積を求めるプログラムを作成せよ。 ヘロンの公式 12
© Copyright 2024 ExpyDoc