C++小程序,求教了!

C++小程序,求教了!,第1张

首先,不要用void main()c++里面默认的主函数应该是int main()

第一题,个人认为改了void main()没有错误了

第二题,可基腊激能你写错了,这是我的源码,调试之后是没有问题的#include<iostream>

#include<cmath>

using namespace std

int prime(int x)

{

int i

int flag=1

for(i=2i<=sqrt(x)&&flag==1i++) if(x%i==0) return 0

return 1

}

int main()

{

int i

for(i=2i<101i++) if(prime(i)) cout<<"zhishu:"<<i<<endl

system("pause")

}

第三题:要应用随机数进行计算

我的程序为

#include<iostream>

using namespace std

int main()

{

int i=rand()%100+1

int input

int flag=0

cout<<"请输入您的数局晌字:"<<endl

cin>>input

do{

if(input>i) {cout<<"您的搏袜数大于我们的数,请继续猜"<<endlcout<<"请继续输入"<<endlcin>>input}

if(input<i) {cout<<"您的数小于我们的数,请继续猜"<<endlcout<<"请继续输入"<<endlcin>>input}

else {

cout<<"恭喜你答对了"<<endl

flag=1

}

}

while(!(flag))

system("pause")

}

第四题:题目描述的不够确切,所以没有办法下手,比如说小球有没有个数限制啊?取几回啊?等等

第五题:

#include<iostream>

using namespace std

int main()

{

int i

int j

for(i=1i<10i++)

{

for(j=1j<=ij++)

{

cout<<i<<"*"<<j<<"="<<i*j

cout<<"\t"

}

cout<<endl

}

system("pause")

}

#include<stdio.h>

void main()

{

int x

int n

int result

int i

while(1) //这是个死循环,每次执行完再重新开始

{

printf("请输入x和n\n")

scanf("%d %d",&x,&n)

result =x

for(i=1i<ni++)//x的n次巧尘帆方就是有n个x相兄指乘

result *=x

printf("%d\n"孝雹,result)//输出结果

}

}

两个错误。

1、你把精确度设为1e-6。注意,float的有效数字只有6位,所以算到小数点后6位时,x1,x2,x的值很有可能就一样了,那么x,x1,x2的值将不将变掘弊化,而且肯定会大于1e-6,导致死循环。

解决方法是把所有判派族数据改成double型。

2、仔细分析一下你的find函数吧,它求得的最后一个根区间有很大可能并不包含一个有效根。

比如我输入-10 10,那么,第一个根区间会是-10,-2,那么第2个区间就成了-2,11,第2个区间并不包含根。

解决方法是在调用bin_root前,判断一下polynomial(bot[i])*polynomial(top[i])<0

另外,你的find函数在生成最后一个根区间时,会出现x2比top1大1的情况。你自己改改吧。

我的羡码代码如下:

#include "math.h"

#include "stdio.h"

double polynomial(double x)

{//多项式函数,用于给定多项式形式

double y

y=((3*x+6)*x-1)*x+2

return y

}//polynomial函数

int find(int *bot,int *top,int bot1,int top1)

{//根据多项式函数fun自动搜索求根区间,并把各个区间的上限和下限分别保存到top[]和bot[]数组中,返回包含根的区间个数

double y1,y2

int x1,x2

int count=0

x1=bot1

x2=bot1+1

while(x2<=top1)

{

y1=polynomial((double)x1)

y2=polynomial((double)x2)

while(y1*y2>0&&x2<=top1)

{

x2++

y2=polynomial((double)x2)

}

bot[count]=x1

top[count]=x2

count++

x1=x2

x2=x1+1

}

return count

}//find函数

double bin_root(int bot,int top)

{//函数功能,二分法求根

double y,y1,y2

double x1=bot,x2=top,x

x=(x1+x2)/2

y=polynomial(x)

y1=polynomial(x1)

y2=polynomial(x2)

while(fabs(y)>=1e-6)

{

if(y*y1<0)

{

x2=x

}

else

{

x1=x

}

x=(x1+x2)/2

y=polynomial(x)

y1=polynomial(x1)

y2=polynomial(x2)

}

return x

}//二分法求根bin_root函数

void main()

{

int count,bot[10],top[10]

int bot1,top1//由用户输入求根区间,程序自动找到该区间中存在的根的个数

int i

double root

printf("请输入求根区间:\n")

scanf("%d%d",&bot1,&top1)

count=find(bot,top,bot1,top1)

if(count==0)printf("函数在您输入的区间内无根:\n")

for(i=0i<counti++)

{

if(polynomial(bot[i])*polynomial(top[i])<0)

{

root=bin_root(bot[i],top[i])

printf("函数在子区间[%d,%d]内的根为:%.4f\n",bot[i],top[i],root)

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8241736.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存