1. プログラム補完問題
以下のコードでは、関数matrixFillerがN×Nの行列を構築する機能を持っています。行列要素の配置ルールは次の通りです:最も外側の要素はすべて値1を持つ、内側に進むにつれて第2層は値2、第3層は値3、以下同様に増加します。例えば、N=5の場合、生成される行列は:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
1 2 2 2 1
1 1 1 1 1
プログラム内のアンダーライン部分を適切な内容で埋め、アンダーラインを削除してください。行の追加や削除、構造の変更は禁止されています。
#include <stdio.h>
#define MATRIX_SIZE 7
void matrixFiller(int target[][MATRIX_SIZE])
{
int row, col, inner, layers;
if(MATRIX_SIZE % 2 == 0)
layers = MATRIX_SIZE / 2;
else
layers = MATRIX_SIZE / 2 + 1;
for(row = 0; row < layers; row++) {
for(col = row; col < MATRIX_SIZE - row; col++)
target[row][col] = target[MATRIX_SIZE - row - 1][col] = row + 1;
for(inner = row + 1; inner < MATRIX_SIZE - row; inner++)
target[inner][row] = target[inner][MATRIX_SIZE - row - 1] = row + 1;
}
}
int main()
{
int matrix[MATRIX_SIZE][MATRIX_SIZE] = {0};
int i, j;
matrixFiller(matrix);
printf("\nResult:\n");
for(i = 0; i < MATRIX_SIZE; i++)
{
for(j = 0; j < MATRIX_SIZE; j++)
printf("%3d", matrix[i][j]);
printf("\n");
}
return 0;
}
2. プログラム修正問題
以下のコードでは、関数convertToBaseが10進数の正整数inputをk進数(2≦k≦9)に変換し、各桁を出力する機能を持っています。例えば、8と2を入力した場合、1000(10進数8を2進数で表した結果)を出力すべきです。
#include <stdio.h>
void convertToBase(int input, int base)
{
int digits[20], index;
for(index = 0; input != 0; index++)
{
digits[index] = input % base;
input /= base;
}
for(; index > 0; index--)
printf("%d", digits[index - 1]);
}
int main()
{
int number, baseValue;
printf("\nEnter a number and base:\n");
scanf("%d%d", &number, &baseValue);
convertToBase(number, baseValue);
printf("\n ");
return 0;
}
3. プログラム設計問題
指定されたnum個の文字列から最も長い文字列を検索し、そのアドレスをポインタmaxを通じて返す関数を作成してください(「****」を入力終了の識別子として使用)
#include <stdio.h>
#include <string.h>
char *findLongestString(char (*strArray)[81], int count, char *maxLengthStr)
{
int idx;
maxLengthStr = strArray[0];
for(idx = 1; idx < count; idx++)
{
if(strlen(maxLengthStr) < strlen(strArray[idx]))
{
maxLengthStr = strArray[idx];
}
}
return maxLengthStr;
}
int main()
{
char inputStrings[10][81];
char *resultPtr = NULL;
char testStrings[3][81] = {"hello", "worldwide", "programming"};
char *testResult = NULL;
int counter = 0, total;
printf("Enter multiple strings: ");
gets(inputStrings[counter]);
puts(inputStrings[counter]);
while(strcmp(inputStrings[counter], "****") != 0)
{
counter++;
gets(inputStrings[counter]);
puts(inputStrings[counter]);
}
total = counter;
resultPtr = findLongestString(inputStrings, total, resultPtr);
printf("\nlongest=%s\n", resultPtr);
testResult = findLongestString(testStrings, 3, testResult);
printf("Test result: %s\n", testResult);
return 0;
}