二级c语言程序设计bug,《C语言及程序设计》实践项目——发现Bug

返回:贺老师课程教学链接

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

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

0024f285cf29ff111d60645dd22b8201.png(注:x取弧度值,而非角度值)

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

#include#define pi 3.1415926

double 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-总是多一次?】

先阅读下面的程序。这样的结构,经常用于重复性工作。执行一次程序要完成的工作后,由操作人员选择,决定是否还来一遍。

#includevoid 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);

}阅读程序,发现在不退出时,想继续一次业务,却……,如图:

通过单步的方式,找出问题的原因,并自行查找资料,找出解决的办法。

[ 参考解答]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值