关于函数和地址的C编程练习

时间:2015-11-09 15:29:05

标签: c

好吧,非常非常非常新手在这里编程,我在C编程课的最后两周工作,这是一个艰难的过程。到目前为止,我已经设法刮掉了。我正在使用C Primer Plus书的第9章,本周我遇到了这个问题。

"编写并测试一个函数,该函数将三个双变量的地址作为参数,并将最小变量的值作为第一个变量,将中间值作为第二个变量,将最大值作为第三个变量。 。可变"

任何人都能解释这对我的要求是什么吗?我已经多次阅读过这一章,我只是没有得到它。我最终得到的只是纯粹的困惑。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

  

任何人都能解释这对我的要求是什么吗?

这是对问题的重述:

给出三个double变量,其值为

a = 10.0;
b = 15.0;
c = 8.0;

编写一个函数func,它接受​​指向这些变量的指针

func( &a, &b, &c );

这样,在函数返回后,abc中的值为

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");
}