第12回の課題(小テスト)の解説
課題 1 (擬似乱数)
課題 2 (関数を用いた総和)
小テスト (10個の入力データから部分和を求める)
#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文を使った繰り返しが二回出てくる.
一回目はデータを読み込むためのもの, 二回目は擬似乱数を計算するためのものである.
#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回使っているところがポイントです.
解答例は下記のとおり.解答例では,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);
}
基本的な問題ですので,しっかりと復習をして身につけておいてください.