




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、根据以下公式编程序计 算 e 的 近 似 值 , 精度 要 求 为 : 1 0 E- 6 :精品资料1、请编写程序求解下式的值(n、k的值从键盘转入)2、张教授最近正在研究一个项目,其间涉及到十进制与十六进制之间的转换,然而,手 工将大量的十进制转换成十六进制是十分困难的。请编写程序,将给定的非负十进制数转化成相应的十六进制数并输出(用A、B、C、D、E、F分别表示十六进制的 10、11、12、 13、 14、 15)。3、输入一个字母打印图示图形,该图形中间一行由输入字母组成,其相邻的上下两行由 它前面的字母组成,按此规律,直到字母 A出现在第一行和最末行为止。如下图:ABBCCCDDDDC
2、CCBBA4、试编程从N位数字串中删去 M个数使剩下的数字串所表示的数值最小。5、孪生数是指两个相差为 2的素数,如3和5,5和7,11和13。请编写程序输出 15对 孪生数。6、 编写程序找出文件中最长和最短的正文行并统计文件中的行数(假定最长行不超过80 个字符)。7、 数列总是有一些奇妙的性质。现有一数列 A,它是以递增顺序排列的,并且该数列中 所有的数的质因子只有可能是 2、3和5。请编写程序输出这个数列中的前 N个数字。&试编写程序实现两个大的整数的乘法运算。参考答案:1、请编写程序求解下式的值(n、k的值从键盘转入)#i nclude <stdio.h>#in
3、clude <math.h>void mai n(void)int n,k, x;double sum=0;printf(”请输入n和k的值:”);scan f("%d%d",&n,&k);for(x=1;x<=n; x+)sum+=pow(x,k);注意计算次方的函数printf("所求结果为:%fn”,sum);2、张教授最近正在研究一个项目,其间涉及到十进制与十六进制之间的转换,然而,手 工将大量的十进制转换成十六进制是十分困难的。请编写程序,将给定的非负十进制数转化成相应的十六进制数并输出(用A、B、C D、E、F分别表示
4、十六进制的10、11、12、13、 14、 15)。#in clude <stdio.h> void mai n(void)int data10,beichushu,yushu,sha ng;char data1610,p=0; 数组data16用于存放十六进制各位上的数 doprintf("请输入一个非负十进制数:”);scan f("%d", &data10);while(data10<0);beichushu=data10;将初始值作为被除数/以下循环用于完成转换doshang=beichushu/16; 求商 yushu=beic
5、hushu%16; 求余数 if(yushu<10)/小于10则转换得到对应数字字符 data16p+=yushu+'0'else/大于等于10则转换得到对应字母data16p+=yushu-10+'A'beichushu=shang;将商作为下次的被除数继续除while(sha ng!=0);printf("十进制数%d所对应的十六进制数为:",data10);for(p-;p>=0;p-)prin tf("%c",data16p);prin tf("n");/3、输入一个字母打印图示图形
6、,该图形中间一行由输入字母组成,其相邻的上下两行由 它前面的字母组成,按此规律,直到字母A出现在第一行和最末行为止。如下图:#in clude <stdio.h>void mai n(void)char ch,row,col;doprintf("请输入中间行所对应的字母(大写):”);scan f("%c",&ch);while(ch<'A')|(ch>'Z');/输出图形的上半部分for(row=1;row<=ch-'A'+1;row+)控制行数for(col=1;col<
7、;=ch-'A'-row+1;col+) 输出相应个数空格以控制位置 printf(” ");for(col=1;col<=row;col+) 输出相应个数字母prin tf("%c",row+'A'-1);prin tf("n");/换行/输出图形的下半部分for(row=1;row<=ch-'A'row+)/控制行数for(col=1;col<=row;col+)/输出相应个数空格以控制位置 printf(” ");for(col=1;col<=ch-'
8、;A'-row+1;col+)/ 输出相应个数字母prin tf("%c",ch-row);prin tf("n"); 换行/4、试编程从N位数字串中删去 M个数使剩下的数字串所表示的数值最小。#in clude "stdio.h" #include "string.h"#defi ne N 80void mai n()char strN+1;int i,j, n, m,y n;/y n用于判断数字串有是否有逆序对,1 有,0 无prin tf(" 请输入原始数字串:");scan f(
9、"%s",str);prin tf(” 原始数字串为:sn ”,str);n=strle n( str);doprintf("请输入要删除的数的位数(0-%d ) : ",n);sca nf("%d",&m);while(m<0 )| (m> n);yn=1;while(m>0)&&(y n)有逆序对时删除较大者yn=0;for(i=0;(stri+1!='0')&&(y n=0);i+) if(stri>stri+1)有逆序对for(j=i;strj+1
10、!='0'j+) strj=strj+1; strj='0'm-;yn=1;if(m>0)strstrle n(str)-m='0'prin tf("%sn",str);15/5、孪生数是指两个相差为2的素数,如3和5,5和7, 11和13。请编写程序输出对孪生数。/注意:1既不是素数,也不是合数,2是最小的素数,也是唯一的偶素数#in clude <stdio.h>/判断x是否为素数,若是则返回 1,否则返回0 int judge(i nt x)int i,yn;yn=1;/为1表示是素数 for(i=2;
11、(i<x )&&(y n=1);i+) if(x%i=0)yn=0;return yn;void mai n(void)un sig ned i=2,co un t=1,d1,d2;while(co un t<=15)d1=i;d2=d1+2;i+;if(judge(d1)&&judge(d2)prin tf("No.%2d:%10d%10dn",cou nt+,d1,d2);6、编写程序找出文件中最长和最短的正文行并统计文件中的行数(假定最长行不超过80个字符)。#i nclude <stdio.h>#in clud
12、e <stdlib.h> #in clude <stri ng.h>#defi ne N 80 void mai n(void)un sig ned coun t=1,max no,minno;char maxN+1,mi nN+1,curN+1,fnameN+1;FILE *fp;printf("请输入文件名:");/输入文件名sca nf("%s",fname);fp=fope n(fname,"r");if(fp=NULL)printf("文件无法打开!n");elsewhile(!f
13、eof(fp)文件没结束时反复读取并判断fgets(cur,N,fp); 读取一行if(count=1)若为第一行则当其为目前的最长及最短行maxno=1;minno=1;strcpy(max,cur);strcpy(mi n,cur);仅供学习与交流,如有侵权请联系网站删除 谢谢5精品资料else/若不是第一行if(strle n(max)<strle n( cur)/新的最长行maxno=co unt;strcpy(max,cur);if(strle n(mi n)>strle n(cur)/新的最短行minno=co unt; strcpy(mi n,cur);cou nt+
14、; 行号增 1;fclose(fp);printf("文件共有 %d 行n",count-1);printf("最长行为第 %d行,其内容为: %sn",maxno,max); printf("最短行为第 %d行,其内容为: %sn",minno,min);7、数列总是有一些奇妙的性质。现有一数列A,它是以递增顺序排列的,并且该数列中所有的数的质因子只有可能是2、3和5。请编写程序输出这个数列中的前N个数字。#in clude <stdio.h>/此题的关键是如何分解出一个数x所有的质因子/下面函数用于判断 x的质因子是否
15、仅为2、3或5,是则返回1,否则返回0int judge(i nt x)int i=2, yn;yn=1;while(x>=i) &&(yn)if(x%i=0)如果能整除if(!(i=2)|(i=3)|(i=5)质因子不是 2、3 或 5yn=0;while(x%i=0)&&(y n)x/=i;i+;return yn;void mai n(void)int n ,i,co un t=0;doprintf("请输入要求的数列元素的个数(>=1):");scan f("%d", &n);while( n&
16、lt;1);for(i=2;co unt<n ;i+)if(judge(i)printf("No.%5d: %10dn",+count,i);prin tf("n");8、试编写程序实现两个大的整数的乘法运算。#i nclude <stdio.h>#i nclude <stdlib.h>#in clude <stri ng.h>#defi ne N 100/逆置,因为计算机中数据的高低位跟现实中的习惯刚好相反void revert(char t)int i,le n;char temp;len=strle n(t
17、);for(i=1;i<=le n/2;i+)temp=ti-1;ti-1=tle n-i;tle n-i=temp;/以字符串形式输入被乘数和乘数void in put(char a,char b)do%d位)prin tf("n请输入要进行乘法运算的两个整数(单个数不要超n",N);scan f("%s%s",a,b);while(strle n(a)>N)|(strle n(b)>N);/对两个数实现乘法运算char * multiply(char a,char b)char *p;un sig ned int i,j,x,y,r
18、1,r2,r3;p=(char *)malloc(1+strle n( a)+strle n( b);/对存放乘积的空间进行初始化pstrle n(a)+strle n(b)='O: for(i=0;i<strle n( p);i+)pi='O:/进行乘法运算for(i=0;i<strle n( b);i+)y=bi-'O:for(j=0;j<strle n( a);j+)x=aj-'0'r仁 x*y+(pj+i-'0'); r2=r1%10;r3=r1/10; pj+i=r2+'0' pj+i+1=pj
19、+i+1-'0'+r3+'0'/将前导0取消for(i=strle n(p);(i>=0) &&(pi-1='0');i-) pi-1='0'return(p);void mai n()char aN,bN,c2*N;in put(a,b);/逆置,以方便运算revert(a);revert(b);strcpy(c,multiply(a,b);/逆置,以便于跟现实中的高低位顺序一致 revert(a);revert(b);revert(c);prin tf("%s*%s=%sn",a,b,
20、c); system("pause");一种改进算法/以下程序实现两个比较大的正整数相乘,可以得出准确/的结果:#i nclude <stdio.h>#i nclude <stdlib.h>#in clude <stri ng.h>#define WEISHU 4 /每组包含的位数#define MAXLEN 10000 /单个数字最多位数/逆置,因为计算机中数据的高低位跟现实中的习惯刚好相反void revert (char *data)un sig ned short i,le n;char temp;len=strle n (dat
21、a);for (i=1;i<=le n/2;i+)temp=datai-1;datai-1=datale n-i;datale n-i=temp;/将字符串形式的数据分组并转换成unsigned short形式/的数据,每组长度为weishu,0号元素存放组数(系数个数)void stoi (char *str,u nsig ned short *data)un sig ned short s=0,i,j=1,qua n=1;for(i=0;stri!='0'i+)s=s+qua n*(stri-'0');qua n*=10;if(i+1)%WEISHU=
22、0)data j+ =s; s=0; qua n=1;if(i%WEISHU!=0)仅供学习与交流,如有侵权请联系网站删除 谢谢11精品资料data j+ =s;data 0 =j-1;/从键盘输入数据并暂存入一个字符数组void in put (char *str,u nsig ned short *data)printf("请输入一个正整数:n");scan f("%s",str);revert(str) ;/ 逆置 stoi(str,data) ;/ 分组并转换/对两个数实现乘法运算un sig ned short * multiply (un s
23、ig ned short *a, un sig ned short *b)un sig ned short *p,i,j,base=1;un sig ned int temp;for(i=1;i<=WEISHU;i+)/ 计算相应的基base*=10;/给乘积的存放准备空间p=(un sig ned short *)malloc(a0+b0+1)*sizeof( un sig ned short); if(p=NULL)return NULL;/内存分配不成功,无法进行运算elsep0=a0+b0;/对存放乘积的空间进行初始化for(i=1;i<=p0;i+)pi=0;/进行乘法运算for(i=1;i<=b0;i+)for(j=1;j<=a0;j+) temp=bi*aj+pj+i-1; pj+i-1=temp%base; pj+i=pj+i+temp/base;return p;/输出void output (un sig ned short *data)un sig ned int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论