プログラム設計、私たちの最初の宿題は、4 つの整数値を取り、最も大きい 2 つを足し合わせて、最も小さい 2 つを引き、その結果を 2 乗することでした。最後に、2 つの値を比較して、等しいかどうかを確認します。
たとえば、次のように入力するとします。20 10 60 40
あなたは得るだろう
60 + 40 = 100
と
20 - 10 = 10 --> 10^2 = 100
そう、100 == 100
私は自分のプログラムを書き、さまざまな値をテストして、すべて正しい結果を返しました。私の教授は、私のプログラムは 10 回のテスト入力すべてで失敗したと言い、得た結果を送ってくれました。彼が得た結果は私の結果と同じではなく、何が起こっているのかわかりません。彼にメールしたところ、for ループの 1 つに境界が正しくないと言われました。彼は正しいが、それでも正しい結果が得られるので...?
これがコードです。助けていただければ幸いです。
/*
// Author: Jesse W
// Assignment 1
// Desciption:
// This program inputs four integer numbers a, b, c and d and
// determines if the sum of the two largest numbers is the same
// as the squared difference of the two smallest numbers
*/
#include <stdio.h>
/* Complete the code for this program below */
int main()
{
int a, b, c, d, f, k, swap;
int array_size = 4;
int return_val;
int sum, difference, square;
int small_1, small_2, large_1, large_2;
int array[array_size];
//Gather input
//printf("Enter integer values for a, b, c and d.\n");
return_val = scanf("%d %d %d %d", &a, &b, &c, &d);
//Validate input
if (return_val != 4)
{
printf("INVALID INPUT\n");
}
else
{
//Assign values to array
array[0] = a;
array[1] = b;
array[2] = c;
array[3] = d;
//Sort array
for (k = 0 ; k < ( array_size - 1 ); k++)
{
for (f = 0 ; f < array_size ; f++)
{
if (array[f] > array[f+1]) /* For decreasing order use < */
{
swap = array[f];
array[f] = array[f+1];
array[f+1] = swap;
}
}
}
//Assign sorted values to new variables
small_1 = array[0];
small_2 = array[1];
large_1 = array[2];
large_2 = array[3];
//Compute math
sum = large_1 + large_2;
difference = small_1 - small_2;
square = difference * difference;
//Compute logic
if(sum == square)
{
printf("%d equals %d.\n", sum, square);
}
else
{
printf("%d does not equal %d.\n", sum, square);
}
return 0;
}
}