根据以下公式编程序计算e的近似值精要求为E_第1页
根据以下公式编程序计算e的近似值精要求为E_第2页
根据以下公式编程序计算e的近似值精要求为E_第3页
根据以下公式编程序计算e的近似值精要求为E_第4页
根据以下公式编程序计算e的近似值精要求为E_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、请编写程序求解下式的值(n、k的值从键盘转入):2、张教授最近正在研究一个项目,其间涉及到十进制与十六进制之间的转换,然而,手工将大量的十进制转换成十六进制是十分困难的。请编写程序,将给定的非负十进制数转化成相应的十六进制数并输出(用A、B、C、D、E、F分别表示十六进制的10、11、12、13、14、15)。 3、输入一个字母打印图示图形,该图形中间一行由输入字母组成,其相邻的上下两行由它前面的字母组成,按此规律,直到字母A出现在第一行和最末行为止。如下图:       A     BB   CCC

2、 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、试编写程序实现两个大的整数的乘法运算。 &

3、#160;参考答案:/1、请编写程序求解下式的值(n、k的值从键盘转入):#include <stdio.h>#include <math.h> void main(void)int n,k,x;double sum=0;printf("请输入n和k的值:");scanf("%d%d",&n,&k);for(x=1;x<=n;x+)sum+=pow(x,k);/注意计算次方的函数printf("所求结果为:%fn",sum); /2、张教授最近正在研究一个项目,其间涉及

4、到十进制与十六进制之间的转换,然而,手工将大量的十进制转换成十六进制是十分困难的。请编写程序,将给定的非负十进制数转化成相应的十六进制数并输出(用A、B、C、D、E、F分别表示十六进制的10、11、12、13、14、15)。#include <stdio.h> void main(void)int data10,beichushu,yushu,shang;char data1610,p=0;/数组data16用于存放十六进制各位上的数doprintf("请输入一个非负十进制数:");scanf("%d",&data10);w

5、hile(data10<0);beichushu=data10;/将初始值作为被除数/以下循环用于完成转换doshang=beichushu/16;/求商yushu=beichushu%16;/求余数if(yushu<10)/小于10则转换得到对应数字字符data16p+=yushu+'0'else/大于等于10则转换得到对应字母data16p+=yushu-10+'A'beichushu=shang;/将商作为下次的被除数继续除while(shang!=0);printf("十进制数%d所对应的十六进制数为:",data10);

6、for(p-;p>=0;p-)printf("%c",data16p);printf("n"); /3、输入一个字母打印图示图形,该图形中间一行由输入字母组成,其相邻的上下两行由它前面的字母组成,按此规律,直到字母A出现在第一行和最末行为止。如下图:#include <stdio.h> void main(void)char ch,row,col;doprintf("请输入中间行所对应的字母(大写):");scanf("%c",&ch);while(ch<'

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

8、9;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 mai

9、n()         char strN+1;         int i,j,n,m,yn;/yn用于判断数字串有是否有逆序对,1有,0无         printf("请输入原始数字串:");         scanf("%s",

10、str);         printf("原始数字串为:%sn",str);         n=strlen(str);         do                 

11、           printf("请输入要删除的数的位数(0-%d):",n);                   scanf("%d",&m);         while(m<

12、0)|(m>n);         yn=1;         while(m>0)&&(yn)/有逆序对时删除较大者                         &#

13、160;  yn=0;                   for(i=0;(stri+1!='0')&&(yn=0);i+)                     

14、       if(stri>stri+1)/有逆序对                                         

15、;                        for(j=i;strj+1!='0'j+)                     

16、0;                         strj=strj+1;                        &#

17、160;             strj='0'                                  

18、60;  m-;                                     yn=1;           

19、;                          ;         if(m>0)               

20、60;   strstrlen(str)-m='0'         printf("%sn",str);/5、孪生数是指两个相差为2的素数,如3和5,5和7,11和13。请编写程序输出15对孪生数。/注意:1既不是素数,也不是合数,2是最小的素数,也是唯一的偶素数#include <stdio.h> /判断x是否为素数,若是则返回1,否则返回0int judge(int x)int i,yn;yn=1;/为1表示是素数for(i=2;(

21、i<x)&&(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)printf("No.%2d:%10d%10dn",count+,d1,d2); /6、编写程序找出文件中最长和最短的正文行并统计文件中的行数(假定最长行不超过80个字符)。  #include <stdio.h>#include

22、 <stdlib.h>#include <string.h>#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("文件无法打开!n");elsewhile(!feof(fp)/文件没结束时

23、反复读取并判断fgets(cur,N,fp);/读取一行if(count=1)/若为第一行则当其为目前的最长及最短行maxno=1;minno=1;strcpy(max,cur);strcpy(min,cur);else/若不是第一行if(strlen(max)<strlen(cur)/新的最长行maxno=count;strcpy(max,cur);if(strlen(min)>strlen(cur)/新的最短行minno=count;strcpy(min,cur);count+;/行号增1;fclose(fp);printf("文件共有%d行n",count

24、-1);printf("最长行为第%d行,其内容为:%sn",maxno,max);printf("最短行为第%d行,其内容为:%sn",minno,min); /7、数列总是有一些奇妙的性质。现有一数列A,它是以递增顺序排列的,并且该数列中所有的数的质因子只有可能是2、3和5。请编写程序输出这个数列中的前N个数字。#include <stdio.h> /此题的关键是如何分解出一个数x所有的质因子/下面函数用于判断x的质因子是否仅为2、3或5,是则返回1,否则返回0int judge(int x)int i=2,yn;yn

25、=1;while(x>=i)&&(yn)if(x%i=0)/如果能整除if(!(i=2)|(i=3)|(i=5)/质因子不是2、3或5yn=0;while(x%i=0)&&(yn)x/=i;i+;return yn;void main(void)int n,i,count=0;doprintf("请输入要求的数列元素的个数(>=1):");scanf("%d",&n);while(n<1);for(i=2;count<n;i+)if(judge(i)printf("No.%5d:

26、%10dn",+count,i);printf("n");/8、试编写程序实现两个大的整数的乘法运算。#include <stdio.h>#include <stdlib.h>#include <string.h> #define N 100 /逆置,因为计算机中数据的高低位跟现实中的习惯刚好相反void revert(char t)int i,len;char temp;len=strlen(t);for(i=1;i<=len/2;i+)temp=ti-1;ti-1=tlen-i;tlen-i=tem

27、p; /以字符串形式输入被乘数和乘数void input(char a,char b)doprintf("n请输入要进行乘法运算的两个整数(单个数不要超%d位):n",N);scanf("%s%s",a,b);while(strlen(a)>N)|(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);/对存放乘积的

28、空间进行初始化pstrlen(a)+strlen(b)='0'for(i=0;i<strlen(p);i+)pi='0'/进行乘法运算for(i=0;i<strlen(b);i+)y=bi-'0'for(j=0;j<strlen(a);j+)x=aj-'0'r1=x*y+(pj+i-'0');r2=r1%10;r3=r1/10;pj+i=r2+'0'pj+i+1=pj+i+1-'0'+r3+'0'/将前导0取消for(i=strlen(p);(i&g

29、t;=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");/一种改进算法/以下程序实现两个比较

30、大的正整数相乘,可以得出准确/的结果:#include <stdio.h>#include <stdlib.h>#include <string.h>#define 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=datale

31、n-i;datalen-i=temp;/将字符串形式的数据分组并转换成 unsigned short 形式/的数据,每组长度为 weishu,0 号元素存放组数 (系数个数)void 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

32、=j-1;/从键盘输入数据并暂存入一个字符数组void input (char *str,unsigned short *data)printf("请输入一个正整数:n") ;scanf("%s",str);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+) /计算相

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论