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

課題 1 (擬似乱数)
課題 2 (関数を用いた総和)
小テスト (配列のインデックスを指定して入力値の絶対値を格納する)

課題 1 (擬似乱数)

#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文を使った繰り返しが二回出てくる. 一回目はデータを読み込むためのもの, 二回目は擬似乱数を計算するためのものである.

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

#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); }
基本的な問題ですので,しっかりと復習をして身につけておいてください.