博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《C语言及程序设计》实践项目——发现Bug
阅读量:6608 次
发布时间:2019-06-24

本文共 1431 字,大约阅读时间需要 4 分钟。

返回:

【项目1-sin泰勒展式中的错误】

下面是sin函数的泰勒展式:

(注:x取弧度值,而非角度值)
编写了double mysin(double x)用于求sin值,却“死”在了123°上。剧透一下,循环没有问题(当然问题会表现在循环中)。试着用调试工具找出问题出现在哪里,然后给出解决问题的方案。

#include
#define pi 3.1415926double mysin(double x);double myabs(double x);int main( ){ double angle; for(angle=0; angle<=180; angle++) printf("sin(%.0f°) = %.3f\n", angle, mysin((angle/180)*pi)); return 0;}//下面定义mysin函数,求sin值double mysin(double x){ double sum=x,x_pow=x,item; int n=1,fact=1, sign=1; //定义变量时赋初值,已经将第一项考虑到累加和sum中 do { fact=fact*(n+1)*(n+2); //fact用于表示阶乘,在公式中作分母 x_pow*=x*x; //x_pow是分子中用于表示阶乘,在公式中作分母 sign=-sign; //确定即将要累加的这一项的符号 item =x_pow/fact*sign; //计算出要累加的项 sum+=item; //将该项累加上去 n+=2; }while(myabs(item)>1e-5); return sum;}//下面定义myabs函数double myabs(double x){ return ((x>=0)?x:-x);}
提示:请进入到mysin中后,注意各变量的变化,看通项是否会收敛,从而使循环能够结束。
[ ]
【项目2-总是多一次?】
先阅读下面的程序。这样的结构,经常用于重复性工作。执行一次程序要完成的工作后,由操作人员选择,决定是否还来一遍。
#include
void dosomething(int *p);int main( ){ char choice='y'; int n=0; while(choice!='N' && choice!='n') { dosomething(&n); printf("按 N 退出,其他键继续...."); scanf("%c", &choice); //用choice=getchar();也一样 } return 0;}void dosomething(int *p) //完成特定的业务{ *p+=1; //本例中传地址, *p即n printf("第%d次完成业务!\n", *p);}
阅读程序,发现在不退出时,想继续一次业务,却……,如图:
通过单步的方式,找出问题的原因,并自行查找资料,找出解决的办法。
[ ]

你可能感兴趣的文章
ansible模块批量管理
查看>>
redis命令 - GET
查看>>
httpd.conf的基本设置
查看>>
RHEL/Centos7新功能
查看>>
第一部分 思科九年 一(1)
查看>>
DBA日常工作职责
查看>>
Redis的持久化
查看>>
linux安装NFS服务器学习
查看>>
Planner .NET日历日程控件能给你的应用程序提供多种日历日程功能
查看>>
我的友情链接
查看>>
Linux压力测试
查看>>
JAVA中的线程机制(二)
查看>>
nginx安装与配置2(转载)
查看>>
Linux下Mongodb安装和启动配置
查看>>
2015 成长计划
查看>>
沈阳一饭店凌晨爆燃,燃气报警器时刻预防
查看>>
Redis 与 数据库处理数据的两种模式
查看>>
VUE2中axios的使用方法
查看>>
CS 229 notes Supervised Learning
查看>>
2018.10.27-dtoj-3996-Lesson5!(johnny)
查看>>