C语言程序设计(199-3)

来源:百度知道 编辑:UC知道 时间:2024/05/05 01:34:28
以下程序的功能是计算并打印复数的差。请在空白处填入正确内容。
struct comp
{float re;
float im;
};
struct comp *m(x,y)
struct comp *x,*y;
{__________;
z=(struct comp *)malloc(sizeof(struct comp));
z->re=x->re-y->re;
z->im=x->im-y->im;
return(__________);
}
void main()
{struct comp *t;
struct comp a,b;
a.re=6;a.im=3;
b.re=4;b.im=5;
t=__________;
printf("z.re=%f,z.im=%f\n",t->re,t->im);
}

1.struct comp *z
从下面的z=(struct comp *)malloc(sizeof(struct comp));可以看出,z是个指针变量,故应该如此声明:struct comp *z;

2.z
从函数声明struct comp *m(x,y) 可以看出,该函数返回值应该是struct comp *类型,而z的类型正是struct comp *,故返回z即可。

3.m(&a, &b)
从函数声明struct comp *m(x,y) ,以及下面的struct comp *x,*y;可知,该函数的行参是指针类型,其实这个函数的声明:
struct comp *m(x,y)
struct comp *x,*y;
确切的说应该是属于老式声明,现在多已不用这种声明。
一般的教科书上会这么给出这个声明:
struct comp *m(struct comp *x, struct comp *y);
对照这个声明,可以明确知道传递给函数m的行参应该是struct comp *类型,而变量a和b都是struct comp类型,故需要对其取地址。所以第三个空格应该填
m(&a, &b)

1 . struct comp *z
2 . z
3 . m(a,b)

struct comp *z;
z
comp(&a,&b);