第12回の課題(小テスト)の解説

課題 1 (擬似乱数)
課題 2 (関数を用いた総和)
小テスト (10個の入力データから部分和を求める)

課題 1 (擬似乱数)

#include <stdio.h> #include <stdlib.h> int main(); int main() { int i, a[20]; char buf[10]; for (i=0;i<4;++i){ gets(buf); a[i]=atoi(buf); } for(i=4;i<15;++i){a[i]=(a[i-1]+a[i-4])%2;} for(i=0;i<15;++i){printf("%d", a[i]);} printf("\n"); }
for文を使った繰り返しが二回出てくる. 一回目はデータを読み込むためのもの, 二回目は擬似乱数を計算するためのものである.

課題 2 (関数を用いた総和)

#include <stdio.h> #include <stdlib.h> int sum(int a); int main(); int sum(int a) { int i, s=0; for(i=1;i$lt;a+1;++i) {s=s+i;} return (s); } int main(){ int x,y; char buf[10]; gets(buf);x=atoi(buf); gets(buf);y=atoi(buf); printf("%d\n", sum(y)-sum(x-1)); }
関数sumを2回使っているところがポイントです.

小テスト(10個の入力データから部分和を求める)

解答例は下記のとおり.解答例では,calc_psumという関数を使っているが
関数を使わずに解くことも可能である(関数を使わない場合のプログラムはコメントアウト"//”で始まる3行).
#include <stdio.h> #include <stdlib.h> int calc_psum(int x, int y, int z[10]); int main(); int calc_psum(int x, int y, int z[10]) { int w, i; w = 0; for (i = x; i <= y; i++){ w = w + z[i]; } return (w); } int main() { int i; int a[12]; char buf[10]; int sum; sum = 0; for (i = 1; i <= 12; i++){ gets(buf); a[i]=atoi(buf); } // for(i = a[11]; i <= a[12]; i++){ // sum = sum + a[i]; // } sum = calc_psum(a[11], a[12], a); printf("%d\n", sum); }
基本的な問題ですので,しっかりと復習をして身につけておいてください.