戴吾蛟-测绘程序设计基础(VC++net)第三章 C++控制语句.pptVIP

戴吾蛟-测绘程序设计基础(VC++net)第三章 C++控制语句.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.4.3判断平面上两线段是否相交 对于向量(x1,y1)-(x2,y2),判断点(x3,y3)在向量的左边、右边、还是线上。计算 (x2,y2)-(x3,y3)与(x1,y1)-(x3,y3)的叉积,即: d=x1(y3-y2)+x2(y1-y3)+x3(y2-y1) 则:d0 左侧、d=0 线上、 d0 右侧 (x1,y1) (x2,y2) (x3,y3) 若 P × Q 0 , 则P在Q的顺时针方向。 若 P × Q 0 , 则P在Q的逆时针方向。 若 P × Q = 0 , 则P与Q共线,但可能同向也可能反向。 判断两线段是否相交经典方法:跨立试验法,即如果一条线段跨过另一条线段,则线段的两个端点分别在另一条线段的两侧。但是,还需要检测边界情况,即两条线段中可能某条线段的某个端点正好落在另一条线段上。 计算一线段的两个端点在另一线段的方向d1,d2,d3,d4 相交 d1*d20且 d3*d40 检测端点是否在线段上 * * 该例实际用IF语句更简洁明了 * * * * * * * * * 为了程序简洁,角度换算应用写成函数形式。带函数这一章讲完后,应该重写这些代码 * * * * * * * * 源程序如下: { int i=1,sum=0;//循环初始条件 while(i=4) { sum+=i; i++; //修改循环条件 } ok while 语句 注意: 在有循环语句的程序中,通常循环开始前对循环条件进行初始化;而在循环体语句中要包含修改循环条件的语句,否则循环将不能终止而陷入死循环。 C++表达方式灵活,上例中的循环语句还可以写成: while (i=n) sum+=i++; 或者 while (sum+=i++, i=n) ;//循环体为空语句 修改程序后在VC++平台上运行,看是否正确 为了程序的可读性,一般不提倡这种过于灵活的方式 3.2.2 do-while 语句 do-while语句称为直到循环, 格式为: do 循环体语句 while( 表达式 ) 否 是 表达式的 值为真? 执行循环体语句 求表达式的值 图3.2 do-while语句的执行流程图 do-while 语句 do/while语句和while语句的区别: 多数情况下可以互相替代。 区别是do/while语句至少执行一次循环体后再判断循环条件是否满足; while语句先判断条件是否满足,然后才执行循环体。 【例3.3】 用迭代法求a的平方根近似值。求平方根的迭代公式为: 要求前后两个迭代根之差小于10- 5。 do-while 语句 迭代法求解:a是已知正数,x 0是迭代初值,给x 0一个值,假定 x 0 = a/2;则用迭代公式依次计算: x1=(x0+a/x0)/2;x2=(x1+a/x1)/2;…… xk+1=(xk+a/xk)/2; 当|xk+1 –xk|ε(ε是一个较小的正数)时,迭代终止,取xk+1的值为a的平方根近似值。 1、输入a(a0)及较小正数delta(也可用常变量); 2、x 0 = a/2; 用迭代公式算 x1=(x0+a/x0)/2; 3、while(|x1 –x0|=delta) { x 0 = x 1 ;//把最近的值给x 0 ; x1=(x0+a/x0)/2; } //求xk+1时只需要知道xk的值,所以只需2个变量; 4、取x1的值为a的平方根近似值,输出。 2、3步骤很适合用do/while语句实现: x 1 = a/2; do{ x0=x1; x1=(x0+a/x0)/2; } while(|x1 –x0|=delta); 和迭代法对应的程序算法是 递推算法: #includemath.h { float x0,x1,a; if(a0) MessageBox(_T(“不能开平方!”)); else { //有实数解的情况 x1=a/2; //x1用于保存结果 do{ x0=x1; x1=(x0+a/x0)/2; } while (fabs(x1-x0)=1e-5); } } 在VC++平台上运行,输入2,3,4,5试一试是否正确 3.2.3 for语句 for循环语句的格式为: for ( 表达式1; 表达式2; 表达式3 ) 循环体语句 图3.3 for语句的执行流程图 否 是 求表达式1的值 求表达式2的值 表达式2值为真? 执行循

您可能关注的文档

文档评论(0)

***** + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8135026137000003

1亿VIP精品文档

相关文档