好吧,非常非常非常新手在这里编程,我在C编程课的最后两周工作,这是一个艰难的过程。到目前为止,我已经设法刮掉了。我正在使用C Primer Plus书的第9章,本周我遇到了这个问题。
"编写并测试一个函数,该函数将三个双变量的地址作为参数,并将最小变量的值作为第一个变量,将中间值作为第二个变量,将最大值作为第三个变量。 。可变"
任何人都能解释这对我的要求是什么吗?我已经多次阅读过这一章,我只是没有得到它。我最终得到的只是纯粹的困惑。
感谢您的帮助。
答案 0 :(得分:2)
任何人都能解释这对我的要求是什么吗?
这是对问题的重述:
给出三个double
变量,其值为
a = 10.0;
b = 15.0;
c = 8.0;
编写一个函数func
,它接受指向这些变量的指针
func( &a, &b, &c );
这样,在函数返回后,a
,b
和c
中的值为
a == 8.0;
b == 10.0;
c == 15.0;
答案 1 :(得分:0)
编写并测试一个函数,该函数将三个双变量的地址作为参数,并将最小变量的值作为第一个变量,将中间值作为第二个变量,将最大值作为第三个变量。
重写家庭作业最有用的方法是编写一个测试工具,它会记录您编写的功能并验证其是否正常工作。
此测试工具是一个空白的平板,您需要添加功能的实现。只要您的函数执行不正确,断言就会触发。 assert
语句的含义是:我们断言作为参数给出的内容是真的,否则它是失败的,程序应该终止。
#include <assert.h>
#include <stdio.h>
// The defintion of the function that takes there addresses of doubles.
// You need to implement it - so far it does nothing and leaves the numbers
// as they were.
void fun(double * a, double * b, double * c)
{
// TODO
}
// The test helper. Returns true (1) on when fun acted correctly on the
// given parameters, false (0) on failure (otherwise).
int test(double a, double b, double c) {
double a0 = a, b0 = b, c0 = c; // original values
assert(a==a0 && b==b0 && c==c0); // make sure that comparisons work as we expect
fun(&a, &b, &c);
return
// postcondition from the homework: first variable must be now smallest,
// second variable must be middle, third variable must be largest
a <= b && b <= c
// additionally, the output must be a permutation of the inputs -
// otherwise a fun body of { *a=0; *b=0; *c=0; } would "pass"
&& (
(a==a0 && b==b0 && c==c0)
|| (a==a0 && b==c0 && c==b0)
|| (a==b0 && b==a0 && c==c0)
|| (a==b0 && b==c0 && c==a0)
|| (a==c0 && b==a0 && c==b0)
|| (a==c0 && b==b0 && c==a0)
);
}
int main()
{
// test on positive numbers
assert(test(0.0, 1.0, 2.0));
assert(test(0.0, 2.0, 1.0));
assert(test(1.0, 0.0, 2.0));
assert(test(1.0, 2.0, 0.0));
assert(test(2.0, 0.0, 1.0));
assert(test(2.0, 1.0, 0.0));
// test on mixed positive/negative
assert(test(-1.0, 0.0, 1.0));
assert(test(-1.0, 1.0, 0.0));
assert(test( 1.0, 0.0, -1.0));
assert(test( 1.0, -1.0, 0.0));
assert(test( 0.0, 1.0, -1.0));
assert(test( 0.0, -1.0, 1.0));
// test on negative numbers
assert(test(-2.0, -1.0, 0.0));
assert(test(-2.0, 0.0, -1.0));
assert(test(-1.0, -2.0, 0.0));
assert(test(-1.0, 0.0, -2.0));
assert(test( 0.0, -1.0, -2.0));
assert(test( 0.0, -2.0, -1.0));
// test with repeated numbers
assert(test(1.0, 1.0, 2.0));
assert(test(1.0, 2.0, 1.0));
assert(test(2.0, 1.0, 1.0));
assert(test(1.0, 1.0, 1.0));
// If we've ran up to here, the implementation of fun is likely
// to work correctly.
printf("Hurray! fun is likely to be correct.\n");
}