首页 > 试题

e为多少

更新时间:2022-11-28 03:56:03 阅读: 评论:0

2020金考卷答案网-乙烯与水


2022年11月28日发(作者:建党100周年纪念大会)

word

1/11

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);

word

2/11

for(x=1;x<=n;x++)

sum+=pow(x,k);//注意计算次方的函数

printf("所求结果为:%fn",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';

el//大于等于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)

{

word

3/11

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("原始数字串为:%sn",str);

n=strlen(str);

word

4/11

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("%sn",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)

word

5/11

{

unsignedi=2,count=1,d1,d2;

while(count<=15)

{

d1=i;

d2=d1+2;

i++;

if(judge(d1)&&judge(d2))

printf("No.%2d:%10d%10dn",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");

el

{

while(!feof(fp))//文件没完毕时反复读取并判断

{

fgets(cur,N,fp);//读取一行

if(count==1)//假设为第一行如此当其为目前的最长与最短行

{

maxno=1;

minno=1;

strcpy(max,cur);

strcpy(min,cur);

}

el//假设不是第一行

{

word

6/11

if(strlen(max)

{

maxno=count;

strcpy(max,cur);

}

if(strlen(min)>strlen(cur))//新的最短行

{

minno=count;

strcpy(min,cur);

}

}

count++;//行号增1

};

fclo(fp);

printf("文件共有%d行n",count-1);

printf("最长行为第%d行,其容为:%sn",maxno,max);

printf("最短行为第%d行,其容为:%sn",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)

word

7/11

{

intn,i,count=0;

do

{

printf("请输入要求的数列元素的个数〔>=1〕:");

scanf("%d",&n);

}while(n<1);

for(i=2;count

if(judge(i))

printf("No.%5d:%10dn",++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));

}

//对两个数实现乘法运算

word

8/11

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);

word

9/11

printf("%s*%s=%sn",a,b,c);

system("pau");

}

//一种改良算法

//以下程序实现两个比拟大的正整数相乘,可以得出准确

//的结果:

#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;

}

//从键盘输入数据并暂存入一个字符数组

word

10/11

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,ba=1;

unsignedinttemp;

for(i=1;i<=WEISHU;i++)//计算相应的基

ba*=10;

//给乘积的存放准备空间

p=(unsignedshort*)malloc((a[0]+b[0]+1)*sizeof(unsignedshort));

if(p==NULL)

returnNULL;//存分配不成功,无法进展运算

el

{

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%ba;

p[j+i]=p[j+i]+temp/ba;

}

}

returnp;

}

}

//输出

voidoutput(unsignedshort*data)

{

unsignedinti;

for(i=data[0];data[i]==0;i--)//找到不为0的首位数

;

printf("%d",data[i]);

word

11/11

//输出最高位,假设有前导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");

}

el

{

input(str,a);

input(str,b);//输入被乘数与乘数

p=multiply(a,b);

output(p);//计算乘积并输出

}

}

本文发布于:2022-11-28 03:56:03,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/88/36776.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:造父学御
下一篇:攒读音
标签:e为多少
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图