根据以下公式编程序计算e的近似值精度要求为10E6.docx

上传人:b****1 文档编号:13851208 上传时间:2023-06-18 格式:DOCX 页数:18 大小:22.79KB
下载 相关 举报
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第1页
第1页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第2页
第2页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第3页
第3页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第4页
第4页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第5页
第5页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第6页
第6页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第7页
第7页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第8页
第8页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第9页
第9页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第10页
第10页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第11页
第11页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第12页
第12页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第13页
第13页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第14页
第14页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第15页
第15页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第16页
第16页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第17页
第17页 / 共18页
根据以下公式编程序计算e的近似值精度要求为10E6.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

根据以下公式编程序计算e的近似值精度要求为10E6.docx

《根据以下公式编程序计算e的近似值精度要求为10E6.docx》由会员分享,可在线阅读,更多相关《根据以下公式编程序计算e的近似值精度要求为10E6.docx(18页珍藏版)》请在冰点文库上搜索。

根据以下公式编程序计算e的近似值精度要求为10E6.docx

根据以下公式编程序计算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);//计算乘积并输出

}

}

如有侵权请联系告知删除,感谢你们的配合!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2