根据以下公式编程序计算e的近似值精度要求为10E6文档格式.docx
- 文档编号:21391718
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:16
- 大小:19.52KB
根据以下公式编程序计算e的近似值精度要求为10E6文档格式.docx
《根据以下公式编程序计算e的近似值精度要求为10E6文档格式.docx》由会员分享,可在线阅读,更多相关《根据以下公式编程序计算e的近似值精度要求为10E6文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
sum+=pow(x,k);
//注意计算次方的函数
所求结果为:
%f\n"
sum);
}
//2、教授最近正在研究一个项目,其间涉及到十进制与十六进制之间的转换,然而,手工将大量的十进制转换成十六进制是十分困难的。
intdata10,beichushu,yushu,shang;
chardata16[10],p=0;
//数组data16用于存放十六进制各位上的数
do
{
printf("
请输入一个非负十进制数:
scanf("
%d"
data10);
}while(data10<
0);
beichushu=data10;
//将初始值作为被除数
//以下循环用于完成转换
shang=beichushu/16;
//求商
yushu=beichushu%16;
//求余数
if(yushu<
10)//小于10则转换得到对应数字字符
data16[p++]=yushu+'
0'
;
else//大于等于10则转换得到对应字母
data16[p++]=yushu-10+'
A'
beichushu=shang;
//将商作为下次的被除数继续除
}while(shang!
=0);
十进制数%d所对应的十六进制数为:
data10);
for(p--;
p>
=0;
p--)
%c"
data16[p]);
\n"
//3、输入一个字母打印图示图形,该图形中间一行由输入字母组成,其相邻的上下两行由它前面的字母组成,按此规律,直到字母A出现在第一行和最末行为止。
charch,row,col;
请输入中间行所对应的字母(大写):
ch);
}while((ch<
'
)||(ch>
Z'
));
//输出图形的上半部分
for(row=1;
row<
=ch-'
+1;
row++)//控制行数
for(col=1;
col<
-row+1;
col++)//输出相应个数空格以控制位置
printf("
"
=row;
col++)//输出相应个数字母
row+'
-1);
//换行
}
//输出图形的下半部分
ch-row);
//4、试编程从N位数字串中删去M个数使剩下的数字串所表示的数值最小。
#include"
stdio.h"
string.h"
#defineN80
voidmain()
charstr[N+1];
inti,j,n,m,yn;
//yn用于判断数字串有是否有逆序对,1-有,0-无
请输入原始数字串:
%s"
str);
原始数字串为:
%s\n"
n=strlen(str);
请输入要删除的数的位数(0-%d):
n);
m);
}while((m<
0)||(m>
n));
yn=1;
while((m>
0)&
&
(yn))//有逆序对时删除较大者
yn=0;
for(i=0;
(str[i+1]!
='
\0'
)&
(yn==0);
i++)
if(str[i]>
str[i+1])//有逆序对
for(j=i;
str[j+1]!
j++)
str[j]=str[j+1];
str[j]='
m--;
};
if(m>
0)
str[strlen(str)-m]='
//5、孪生数是指两个相差为2的素数,如3和5,5和7,11和13。
//注意:
1既不是素数,也不是合数,2是最小的素数,也是唯一的偶素数
//判断x是否为素数,若是则返回1,否则返回0
intjudge(intx)
inti,yn;
//为1表示是素数
for(i=2;
(i<
x)&
(yn==1);
if(x%i==0)
yn=0;
returnyn;
unsignedi=2,count=1,d1,d2;
while(count<
=15)
d1=i;
d2=d1+2;
i++;
if(judge(d1)&
judge(d2))
No.%2d:
%10d%10d\n"
count++,d1,d2);
//6、编写程序找出文件中最长和最短的正文行并统计文件中的行数(假定最长行不超过80个字符)。
stdlib.h>
string.h>
unsignedcount=1,maxno,minno;
charmax[N+1],min[N+1],cur[N+1],fname[N+1];
FILE*fp;
请输入文件名:
//输入文件名
fname);
fp=fopen(fname,"
r"
if(fp==NULL)
文件无法打开!
else
while(!
feof(fp))//文件没结束时反复读取并判断
{
fgets(cur,N,fp);
//读取一行
if(count==1)//若为第一行则当其为目前的最长及最短行
{
maxno=1;
minno=1;
strcpy(max,cur);
strcpy(min,cur);
}
else//若不是第一行
if(strlen(max)<
strlen(cur))//新的最长行
{
maxno=count;
strcpy(max,cur);
}
if(strlen(min)>
strlen(cur))//新的最短行
minno=count;
strcpy(min,cur);
count++;
//行号增1
};
fclose(fp);
文件共有%d行\n"
count-1);
最长行为第%d行,其容为:
maxno,max);
最短行为第%d行,其容为:
minno,min);
//7、数列总是有一些奇妙的性质。
//此题的关键是如何分解出一个数x所有的质因子
//下面函数用于判断x的质因子是否仅为2、3或5,是则返回1,否则返回0
inti=2,yn;
while((x>
=i)&
(yn))
if(x%i==0)//如果能整除
if(!
((i==2)||(i==3)||(i==5)))//质因子不是2、3或5
yn=0;
while((x%i==0)&
x/=i;
}
intn,i,count=0;
请输入要求的数列元素的个数(>
=1):
n);
}while(n<
1);
count<
n;
if(judge(i))
No.%5d:
%10d\n"
++count,i);
//8、试编写程序实现两个大的整数的乘法运算。
#defineN100
//逆置,因为计算机中数据的高低位跟现实中的习惯刚好相反
voidrevert(chart[])
inti,len;
chartemp;
len=strlen(t);
for(i=1;
i<
=len/2;
temp=t[i-1];
t[i-1]=t[len-i];
t[len-i]=temp;
//以字符串形式输入被乘数和乘数
voidinput(chara[],charb[])
\n请输入要进行乘法运算的两个整数(单个数不要超%d位):
N);
%s%s"
a,b);
}while((strlen(a)>
N)||(strlen(b)>
N));
//对两个数实现乘法运算
char*multiply(chara[],charb[])
char*p;
unsignedinti,j,x,y,r1,r2,r3;
p=(char*)malloc(1+strlen(a)+strlen(b));
//对存放乘积的空间进行初始化
p[strlen(a)+strlen(b)]='
strlen(p);
p[i]='
//进行乘法运算
strlen(b);
y=b[i]-'
for(j=0;
j<
strlen(a);
x=a[j]-'
r1=x*y+(p[j+i]-'
r2=r1%10;
r3=r1/10;
p[j+i]=r2+'
p[j+i+1]=p[j+i+1]-'
+r3+'
//将前导0取消
for(i=strlen(p);
(i>
=0)&
(p[i-1]=='
i--)
p[i-1]='
return(p);
chara[N],b[N],c[2*N];
input(a,b);
//逆置,以方便运算
revert(a);
revert(b);
strcpy(c,multiply(a,b));
//逆置,以便于跟现实中的高低位顺序一致
revert(c);
%s*%s=%s\n"
a,b,c);
system("
pause"
//一种改进算法
//以下程序实现两个比较大的正整数相乘,可以得出准确
//的结果:
#defineWEISHU4//每组包含的位数
#defineMAXLEN10000//单个数字最多位数
voidrevert(char*data)
unsignedshorti,len;
len=strlen(data);
for(i=1;
temp=data[i-1];
data[i-1]=data[len-i];
data[len-i]=temp;
//将字符串形式的数据分组并转换成unsignedshort形式
//的数据,每组长度为weishu,0号元素存放组数(系数个数)
voidstoi(char*str,unsignedshort*data)
unsignedshorts=0,i,j=1,quan=1;
str[i]!
s=s+quan*(str[i]-'
quan*=10;
if((i+1)%WEISHU==0)
data[j++]=s;
s=0;
quan=1;
if(i%WEISHU!
=0)
data[j++]=s;
data[0]=j-1;
//从键盘输入数据并暂存入一个字符数组
voidinput(char*str,unsignedshort*data)
请输入一个正整数:
);
revert(str);
//逆置
stoi(str,data);
//分组并转换
unsignedshort*multiply(unsignedshort*a,unsignedshort*b)
unsignedshort*p,i,j,base=1;
unsignedinttemp;
=WEISHU;
i++)//计算相应的基
base*=10;
//给乘积的存放准备空间
p=(unsignedshort*)malloc((a[0]+b[0]+1)*sizeof(unsignedshort));
if(p==NULL)
returnNULL;
//存分配不成功,无法进行运算
p[0]=a[0]+b[0];
//对存放乘积的空间进行初始化
for(i=1;
=p[0];
p[i]=0;
//进行乘法运算
=b[0];
for(j=1;
=a[0];
temp=b[i]*a[j]+p[j+i-1];
p[j+i-1]=temp%base;
p[j+i]=p[j+i]+temp/base;
returnp;
//输出
voidoutput(unsignedshort*data)
unsignedinti;
for(i=data[0];
data[i]==0;
i--)//找到不为0的首位数
;
data[i]);
//输出最高位,若有前导0则不输出
i--;
//按顺序输出其他各位,有前导0也必须输出
for(;
i>
=1;
%04d"
unsignedshortlen,reallen,*a,*b,*p;
char*str;
do//输入最大位数
请输入单个数的最大位数(1--%d):
MAXLEN);
len);
}while((len<
1)||(len>
MAXLEN));
reallen=(len-1+WEISHU)/WEISHU;
//计算实际组数,下面两行分配所需空间
a=(unsignedshort*)malloc((reallen+1)*sizeof(unsignedshort));
b=(unsignedshort*)malloc((reallen+1)*sizeof(unsignedshort));
str=(char*)malloc((len+1)*sizeof(char));
if((a==NULL)||(b==NULL)||str==NULL)
free(a);
free(b);
free(str);
printf("
存分配不成功,无法继续进行操作!
input(str,a);
input(str,b);
//输入被乘数及乘数
p=multiply(a,b);
output(p);
//计算乘积并输出
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 根据 以下 公式 程序 计算 近似值 精度 要求 10 E6