“这一层看到的是数据是结构体的两个成员x和y”这句话是不是应该把两个“是”分开写,这样意思更清晰些!
多写了一个字。谢谢指出!我这几天不方便改,过几天一定改过来。
这一节看了很久也看不太懂。。是不是我太笨了?
没学过高中数学,看起来真郁闷……
这个函数缺少返回表达式。 struct complex_struct make_from_real_img(double x, double y) { struct complex_struct z; z.A = atan2(y, x); z.r = sqrt(x * x + y * y); ++ return z; }
谢谢指出!
这里介绍的是程序设计思想,或者叫数据结构的使用和算法设计,与语法规则本身没有关系,放在这章合适么?
我有说过这一章只介绍语法规则而不讲其它么?
这一节写得太好了,尤其是分层和抽象的思想
atan2是什么?为什么?高中生表示已超出高中数学范畴,最好详细说明。
/* 07.2.1 在本节的基础上实现一个打印复数的函数,打印的格式是x+yi,如果实部或虚部为0则省略,例如:1.0、-2.0i、-1.0+2.0i、1.0-2.0i。最后编写一个main函数测试本节的所有代码。 */ #include <stdio.h> #include <math.h> struct complex_struct { double x ; double y ; } ; double real_part(struct complex_struct z) { return z.x; } double img_part(struct complex_struct z) { return z.y; } double magnitude(struct complex_struct z) { return sqrt(z.x * z.x + z.y * z.y); } double angle(struct complex_struct z) { return atan2(z.y, z.x); } struct complex_struct make_from_real_img(double x, double y) { struct complex_struct z; z.x = x; z.y = y; return z; } struct complex_struct make_from_mag_ang(double r, double A) { struct complex_struct z; z.x = r * cos(A); z.y = r * sin(A); return z; } struct complex_struct add_complex(struct complex_struct z1, struct complex_struct z2) { return make_from_real_img(real_part(z1) + real_part(z2), img_part(z1) + img_part(z2)); } struct complex_struct sub_complex(struct complex_struct z1, struct complex_struct z2) { return make_from_real_img(real_part(z1) - real_part(z2), img_part(z1) - img_part(z2)); } struct complex_struct mul_complex(struct complex_struct z1, struct complex_struct z2) { return make_from_mag_ang(magnitude(z1) * magnitude(z2), angle(z1) + angle(z2)); } struct complex_struct div_complex(struct complex_struct z1, struct complex_struct z2) { return make_from_mag_ang(magnitude(z1) / magnitude(z2), angle(z1) - angle(z2)); } int print_complex(struct complex_struct z) { if(real_part(z) != 0.0 && img_part(z) != 0.0) { if(img_part(z) > 0.0) { printf("%lf+%lfi\n", real_part(z), img_part(z)) ; } else { printf("%lf%lfi\n", real_part(z), img_part(z)) ; } } if(real_part(z) == 0.0) { if(img_part(z) != 0.0) { printf("%lfi\n", img_part(z)) ; } else { printf("0.0\n") ; } } if(img_part(z) == 0.0) { if(real_part(z) != 0.0) { printf("%lf\n", real_part(z)) ; } else { printf("0.0\n") ; } } return 0 ; } int main(void) { struct complex_struct z1 ; struct complex_struct z2 ; z1 = make_from_real_img(1.0, 1.0) ; z2 = make_from_mag_ang(1.0, 1.0) ; printf("real_part=%lf\n", real_part(z2)) ; printf("img_part=%lf\n", img_part(z2)) ; printf("magnitude=%lf\n", magnitude(z1)) ; printf("angle=%lf\n", angle(z1)) ; printf("\n") ; print_complex(add_complex(z1, z2)) ; print_complex(sub_complex(z1, z2)) ; print_complex(mul_complex(z1, z2)) ; print_complex(div_complex(z1, z2)) ; printf("\n") ; struct z3 = make_from_real_img(1.0, 0.0) ; struct z4 = make_from_real_img(0.0, -2.0) ; struct z5 = make_from_real_img(-1.0, 2.0) ; struct z6 = make_from_real_img(1.0, -2.0) ; print_complex(z3) ; print_complex(z4) ; print_complex(z5) ; print_complex(z6) ; printf("\n") ; return 0 ; }
struct complex_struct { double x, y; }; double real_part(struct complex_struct z) { return z.x; } 宋老师,我有个疑问 第一个是类型声明,第二个是函数定义(声明) 为什么函数定义(声明)就不需要用;结尾呢? 记得宋老师7.1节有这样一句话“这点一定要注意,类型定义也是一种声明,声明都要以;结尾”
如果您有建设性意见,哪怕只是纠正一个错别字,也请不吝赐教,您留下的姓名和email将会出现在本书前言的致谢中。再次感谢您的宝贵意见!