Final answer:
The valid statement for the function prototype 'int test (float, char);' is 'int u = test(5.0, '*');'. This is because it correctly provides a float and a char, consistent with the function's expected input types.
Step-by-step explanation:
The function prototype int test (float, char); indicates that the function named test takes a float and a char as its parameters and returns an int. Given the prototype, let's examine the validity of each statement:
a. cout << test(12, '&'); - This call is invalid because the first argument is an int, not a float. An int can be implicitly converted to a float, but it's important to note the subtle difference.
b. cout << test("12.0", '&'); - This call is invalid because the first argument is a string literal, whereas the function expects a float.
c. int u = test(5.0, '*'); - This statement is valid. It correctly supplies a float and a char to the function, which matches the function's expected parameters.
a. cout << test('12', '&'); - This statement is invalid because '12' is a multi-character constant and not a single char.