第12回の課題(小テスト)の解説
課題 1 (擬似乱数)
課題 2 (関数を用いた総和)
小テスト (配列のインデックスを指定して入力値の絶対値を格納する)
#include<stdio.h>
int main(void);
int main(void){
int i;
int a[15]; // サイズが 15 の配列
char buffer[256];
// 今回は配列 a[i] の初期化は不要
// a[0], a[1], a[2], a[3] に入力データを格納
for (i=0;i<=3;i++){
gets(buffer);
a[i] = atoi(buffer);
printf("%d\n", a[i]);
}
// a[i] に (a[i-1] + a[i-4]) を 2 で割った余りを格納
for (i=4;i<=14;i++){ // i は 4 以上 14 以下の範囲
a[i] = (a[i-1] + a[i-4]) % 2;
}
// 擬似乱数を出力
for (i=0;i<15;i++){
printf("%d", a[i]); // ここで改行はしない
}
printf("\n"); // 最後に改行する
return(0);
}
for文を使った繰り返しが二回出てくる.
一回目はデータを読み込むためのもの, 二回目は擬似乱数を計算するためのものである.
#include <stdio.h>
int sum(int x); // 1 から x までの和を計算する関数
int main(void);
int sum(int x){
int ans; // 答え格納用の変数
int i; // for 文で用いる変数
// ans の初期化
ans = 0;
// 1 から x までの和を計算
for (i=1;i<=x;i++){
ans = ans + i;
}
return(ans);
}
int main(void){
int i; // for 文で用いる変数
int a, b; // 自然数 a, b を格納する変数
int answer; // 答えを格納する変数
char buffer[256];
// a の入力
gets(buffer);
a = atoi(buffer);
printf("%d\n", a);
// b の入力
gets(buffer);
b = atoi(buffer);
printf("%d\n", b);
// a から b までの和を計算し,出力する
answer = sum(b)-sum(a-1); // a から b までの和なので sum(a) ではなく sum(a-1) となることに注意
printf("%d\n", answer);
return(0);
}
関数sumを2回使っているところがポイントです.
#include <stdio.h>
int abs(int a); // 絶対値を返す関数
int main(void);
int abs(int a){
int ans;
if (a < 0){ // 負の時は -1 を掛ける
ans = (-1)*a;
}
else ans = a;
return(ans);
}
int main(void){
int i; // for 文用変数
int index; // 配列のインデックス用変数
int tmp; // 外部からの入力数値データを一時的に格納するための変数
int data[5]; // 絶対値の格納に用いる配列
char buffer[256]; // 外部からの入力文字列を格納するための配列
// 今回は配列 data の初期化は不要
for (i=0;i<5;i++){
// 配列のインデックスの読み込み
gets(buffer);
index = atoi(buffer);
printf("%d\n", index); // 配列のインデックスを表示
// 配列に格納するデータの読み込み
gets(buffer);
tmp = atoi(buffer); // 読み込んだデータを一時的に格納
printf("%d\n", tmp); // 読み込んだデータを表示
data[index] = abs(tmp); // tmp の絶対値を求めて配列に格納
}
// 配列 data を先頭から順番に出力
for (i=0;i<5;i++){
printf("%d\n", data[i]);
}
return(0);
}
基本的な問題ですので,しっかりと復習をして身につけておいてください.