1、整理根据以下公式编程序计算e的近似值精度要求为10E61、请编写程序求解下式的值(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
2、个数使剩下的数字串所表示的数值最小。 5、孪生数是指两个相差为2的素数,如3和5,5和7,11和13。请编写程序输出15对孪生数。 6、编写程序找出文件中最长和最短的正文行并统计文件中的行数(假定最长行不超过80个字符)。 7、数列总是有一些奇妙的性质。现有一数列A,它是以递增顺序排列的,并且该数列中所有的数的质因子只有可能是2、3和5。请编写程序输出这个数列中的前N个数字。 8、试编写程序实现两个大的整数的乘法运算。 参考答案:/1、请编写程序求解下式的值(n、k的值从键盘转入):#include #include void main(void) int n,k,x; double sum=
3、0; printf(请输入n和k的值:); scanf(%d%d,&n,&k); 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 void main(void) int data10,beichushu,yushu,shang; char
4、 data1610,p=0;/数组data16用于存放十六进制各位上的数 do printf(请输入一个非负十进制数:); scanf(%d,&data10); while(data100); beichushu=data10;/将初始值作为被除数 /以下循环用于完成转换 do shang=beichushu/16;/求商 yushu=beichushu%16;/求余数 if(yushu=0;p-) printf(%c,data16p); printf(n);/3、输入一个字母打印图示图形,该图形中间一行由输入字母组成,其相邻的上下两行由它前面的字母组成,按此规律,直到字母A出现在第一行和最末
5、行为止。如下图:#include void main(void) char ch,row,col; do printf(请输入中间行所对应的字母(大写):); scanf(%c,&ch); while(chZ); /输出图形的上半部分 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
6、-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#define N 80void main() char strN+1; int i,j,n,m,yn;/yn用于判断数字串有是否有逆序对,1有,0无 printf(请输入原始数字串:); sc
7、anf(%s,str); printf(原始数字串为:%sn,str); n=strlen(str); do printf(请输入要删除的数的位数(0-%d):,n); scanf(%d,&m); while(mn); yn=1; while(m0)&(yn)/有逆序对时删除较大者 yn=0; for(i=0;(stri+1!=0)&(yn=0);i+) if(stristri+1)/有逆序对 for(j=i;strj+1!=0;j+) strj=strj+1; strj=0; m-; yn=1; ; if(m0) strstrlen(str)-m=0; printf(%sn,str);/5、
8、孪生数是指两个相差为2的素数,如3和5,5和7,11和13。请编写程序输出15对孪生数。/注意:1既不是素数,也不是合数,2是最小的素数,也是唯一的偶素数#include /判断x是否为素数,若是则返回1,否则返回0int judge(int x) int i,yn; yn=1;/为1表示是素数 for(i=2;(ix)&(yn=1);i+) if(x%i=0) yn=0; return yn;void main(void) unsigned i=2,count=1,d1,d2; while(count=15) d1=i; d2=d1+2; i+; if(judge(d1)&judge(d2)
9、 printf(No.%2d:%10d%10dn,count+,d1,d2); /6、编写程序找出文件中最长和最短的正文行并统计文件中的行数(假定最长行不超过80个字符)。 #include #include #include #define N 80void main(void) unsigned count=1,maxno,minno; char maxN+1,minN+1,curN+1,fnameN+1; FILE *fp; printf(请输入文件名:);/输入文件名 scanf(%s,fname); fp=fopen(fname,r); if(fp=NULL) printf(文件无法
10、打开!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)strlen(cur)/新的最短行 minno=count; strcpy(min,cur); count+;/行号增1 ; fclose(fp); printf(文件共有%d行n,count-1); printf(最长行为第%d行,其内容为:%sn,m
11、axno,max); printf(最短行为第%d行,其内容为:%sn,minno,min); /7、数列总是有一些奇妙的性质。现有一数列A,它是以递增顺序排列的,并且该数列中所有的数的质因子只有可能是2、3和5。请编写程序输出这个数列中的前N个数字。#include /此题的关键是如何分解出一个数x所有的质因子/下面函数用于判断x的质因子是否仅为2、3或5,是则返回1,否则返回0int judge(int x) int i=2,yn; yn=1; while(x=i)&(yn) if(x%i=0)/如果能整除 if(!(i=2)|(i=3)|(i=5)/质因子不是2、3或5 yn=0; wh
12、ile(x%i=0)&(yn) x/=i; i+; ; return yn;void main(void) int n,i,count=0; do printf(请输入要求的数列元素的个数(=1):); scanf(%d,&n); while(n1); for(i=2;countn;i+) if(judge(i) printf(No.%5d: %10dn,+count,i); printf(n);/8、试编写程序实现两个大的整数的乘法运算。#include #include #include #define N 100/逆置,因为计算机中数据的高低位跟现实中的习惯刚好相反void revert
13、(char t) int i,len; char temp; len=strlen(t); for(i=1;iN)|(strlen(b)N);/对两个数实现乘法运算char * multiply(char a,char b) char *p; unsigned int i,j,x,y,r1,r2,r3; p=(char *)malloc(1+strlen(a)+strlen(b); /对存放乘积的空间进行初始化 pstrlen(a)+strlen(b)=0; for(i=0;istrlen(p);i+) pi=0; /进行乘法运算 for(i=0;istrlen(b);i+) y=bi-0;
14、for(j=0;j=0)&(pi-1=0);i-) pi-1=0; return(p);void main() char aN,bN,c2*N; input(a,b); /逆置,以方便运算 revert(a); revert(b); strcpy(c,multiply(a,b); /逆置,以便于跟现实中的高低位顺序一致 revert(a); revert(b); revert(c); printf(%s*%s=%sn,a,b,c); system(pause);/一种改进算法/以下程序实现两个比较大的正整数相乘,可以得出准确/的结果:#include #include #include #de
15、fine WEISHU 4 /每组包含的位数#define MAXLEN 10000 /单个数字最多位数/逆置,因为计算机中数据的高低位跟现实中的习惯刚好相反void revert (char *data) unsigned short i,len; char temp; len=strlen (data) ; for (i=1;i=len/2;i+) temp=datai-1; datai-1=datalen-i; datalen-i=temp; /将字符串形式的数据分组并转换成 unsigned short 形式/的数据,每组长度为 weishu,0 号元素存放组数 (系数个数)void
16、stoi (char *str,unsigned short *data) unsigned short s=0,i,j=1,quan=1; for(i=0;stri!=0;i+) s=s+quan*(stri-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;/从键盘输入数据并暂存入一个字符数组void input (char *str,unsigned short *data) printf(请输入一个正整数:n) ; scanf(%s,str);
17、 revert(str) ;/逆置 stoi(str,data) ;/分组并转换/对两个数实现乘法运算unsigned short * multiply (unsigned short *a,unsigned short *b) unsigned short *p,i,j,base=1; unsigned int temp; for(i=1;i=WEISHU;i+) /计算相应的基 base*=10; /给乘积的存放准备空间 p=(unsigned short *)malloc(a0+b0+1)*sizeof(unsigned short); if(p=NULL) return NULL;/内
18、存分配不成功,无法进行运算 else p0=a0+b0; /对存放乘积的空间进行初始化 for(i=1;i=p0;i+) pi=0; /进行乘法运算 for(i=1;i=b0;i+) for(j=1;j=1;i-) printf(%04d,datai); printf(n);void main() unsigned short len,reallen,*a,*b,*p; char *str; do/输入最大位数 printf(请输入单个数的最大位数 (1-%d): ,MAXLEN); scanf(%d,&len); while(lenMAXLEN); reallen=(len-1+WEISHU
19、)/WEISHU;/计算实际组数,下面两行分配所需空间 a=(unsigned short *)malloc(reallen+1)*sizeof(unsigned short); b=(unsigned short *)malloc(reallen+1)*sizeof(unsigned short); 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-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1