プログラミング実習II 期末試験・想定問題 [S1] 変数と式
プログラミング実習II 期末試験・想定問題 [S1] 変数と式
(S1_1) 下記のプログラムは,1 + 1/2 + 1/3 + … + 1/nを求めるために実装したものである. しかしながら,2点バグが潜んでおり結果が正しく出力されない.
#include <stdio.h> int main(void) { int i,n; double result=0; //ここから printf("Input n>>"); scanf("%lf",&n); for( i = 1; i <= n; i++ ){ result = result + ( 1 / i ); // (**) } //ここまで printf("result=%f\n",result); return 0; } |
(S1_2) 下記のプログラムを実行したところ出力結果が以下のようになった.
i=1 → sum=2 i=2 → sum=4 i=3 → sum=8 : : i=30 → sum=1073741824 i=31 → sum=-2147483648
#include <stdio.h> int main(void) { int i; int sum=1; for(i=1;i<=31;i++){ sum=2*sum; // printf("i=%d → sum=%d\n",i,sum); } } |
(S1_3) 以下を満たすようにプログラムを書き換えよ。
1ヶ月の給料を入力する(150000円以上の10の倍数と仮定してよい)。 外食した回数を入力する。 税金等であらかじめ給料から10%引かれるとする。 光熱費等・ローン・外食以外の食費等で80000円引かれるとする。 外食は1回5000円として計算する(6回以下が入力されると仮定してよい)。 自由に使えるお金はいくら残るか。
#include <stdio.h> int main(void) { int pay, eatout, rest; printf("1ヶ月の給料を入力してください>>>"); scanf("%d", &pay); printf("外食した回数を入力してください>>>"); scanf("%d", &eatout); printf("自由に使えるお金は%d円です。\n", rest); return 0; } |
(S1_4)★ インクリメント演算子は, 前置演算子として使うか後置演算子として使うかによって挙動が変化する. 下記のプログラムを実行した場合の出力結果はどのようになるだろうか?
line1-> ... line2-> ... : line4-> ...
#include <stdio.h> int main(void) { int result; int x1, x2, y1, y2; result = 10; x1 = result++; printf("line1-> x1=%d result=%d\n",x1,result); result = 10; x2 = ++result; printf("line2-> x2=%d result=%d\n\n",x2,result); result = 10; y1 = --result; printf("line3-> y1=%d result=%d\n",y1,result); result = 10; y2 = result--; printf("line4-> y2=%d result=%d\n",y2,result); } |
(S1_5)★★ 任意の入力された2進数を10進数に変換するプログラムを作成しなさい.
(S1_6)★★ 任意の10進数を2進数に変換するプログラムを作成しなさい.
(S1_7)★★
ヒント:多倍長演算 例えばA1+A2を計算したいとして, A1の入力が456のとき A1[0]=6,A1[1]=5,A1[2]=4 のように配列を用いて各桁の値を保存すれば(A2の入力も同様に処理する),
筆算を用いてA1+A2を計算可能.