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