
第一题,个人认为改了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)
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)