私の英語をご容赦ください。
Cの入門コースを受講していますが、プログラムのロジックに問題があります。必要な出力が生成される場合があります。
タスクは、配列の要素を受け取り、要素内の最大の偶数桁を返す関数を作成することです。
int ary1[] = {123, 456, -7890, 12};
最大の偶数桁とその出現として-7890
最大値として返され8
ます。最大の偶数桁とその出現として最大値として
int ary2[5] = {-123, 654, 78, 15, 189};
返さ189
れ8
ます。
int ary3[2] = {9, 9};
何も返しません。最大の偶数桁とその出現として最大値として
int ary4[] = {123, 123, 0, 12};
返さ123
れ2
ます。最大の偶数桁とその出現として最大値として
int ary5[] = {24, 45, -789, 24, 1};
返さ-789
れ8
ます。最大の偶数桁とその出現として最大値として
int ary6[] = {-749, -241, 1, 45};
返さ45
れ4
ます。
これが私のコードです:
#include <stdio.h>
void digitExtract(int[], int);
int main() {
int ary1[] = { 123, 456, -7890, 12 };
int ary2[5] = { -123, 654, 78, 15, 189 };
int ary3[2] = { 9, 9 };
int ary4[] = { 123, 123, 0, 12 };
int ary5[] = { 24, 45, -789, 24, 1 };
int ary6[] = { -749, -241, 1, 45 };
int ary7[] = { 1, 3, 5 };
printf("\nCalling function in ary1[]:\n");
digitExtract(ary1, 4);
printf("\nCalling function in ary2[]:\n");
digitExtract(ary2, 5);
printf("\nCalling function in ary3[]:\n");
digitExtract(ary3, 2);
printf("\nCalling function in ary4[]:\n");
digitExtract(ary4, 4);
printf("\nCalling function in ary5[]:\n");
digitExtract(ary5, 5);
printf("\nCalling function in ary6[]:\n");
digitExtract(ary6, 4);
printf("\nCalling function in ary7[]:\n");
digitExtract(ary7, 3);
}
void digitExtract(int Array[], int array_size) {
int tempValue;
int x;
int myArr[10] = { 0 };
int evenCount = 0;
int max = Array[0];
for (int i = 1; i < array_size; i++)
{
if (Array[i] < 0) {
Array[i] = -Array[i];
if (Array[i] > max) {
max = Array[i];
}
}
}
tempValue = (max < 0) ? -max : max;
do {
myArr[tempValue % 10]++;
tempValue /= 10;
} while (tempValue != 0);
for (x = 8; x > 0; x -= 2) {
if (myArr[x]>0) {
printf("Displaying from inside of function():\n");
printf("\nThe largest even digit: %d\n", x );
printf("\nThe digit %d occurs %d times.\n", x, myArr[x]);
evenCount++;
break;
}
} if (evenCount == 0)
printf("\nNo even digits found!\n\n");
}
ロジックにエラーがありary2[]
、の偶数桁が生成され、6
必要なときに発生することは8
わかっていますが、どこにあるのかわかりません。
この関数は、要素として奇数の値を持つ配列に対して機能します。
どこで、または何が間違っているのですか?
ありがとうございました。
あなたの仕事は...そして、その数字を持っている最大値を見つけ、最大でも数字を見つけることですではない、その後、最大値を見つけ、その中で最大でも数字を見つけます。
まずmax_even_digit
、単一の関数を操作するように名前を付けた関数を記述しint
、それを検証してそこから作業します。
int max_even_digit(int x) {
int max = 0;
while (x) {
int digit = x % 10;
digit = digit < 0 ? -digit : digit;
if (x % 2 == 0 && digit > max) {
max = digit;
}
x /= 10;
}
return max;
}
これを行ったら、最大値を見つけるかのように配列をループしますが、の戻り値がmax_even_digit
実際の値よりも優先されるようにします。
int max_even_digit_value(int *array, size_t size) {
if (size == 0) {
return 0;
}
int max_value = array[0],
max_digit = max_even_digit(max_value);
while (--size) {
int value = array[size],
digit = max_even_digit(value);
if (digit > max_digit || (digit == max_digit && value > max_value)) {
max_value = value;
max_digit = digit;
}
}
return max_value;
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加