为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

妈妈给女儿的信.doc

2017-09-16 4页 doc 15KB 6阅读

用户头像

is_769254

暂无简介

举报
妈妈给女儿的信.doc依据以下公式编法度模范计算e的近似值,精度请求为:10e-6:[指南] 1、请编写程序求解下式的值(n、k的值从键盘转入): 2、张教授最近正在研究一个项目,其间涉及到十进制与十六进制之间的转换,然而,手工将大量的十进制转换成十六进制是十分困难的。请编写程序,将给定的非负十进制数转化成相应的十六进制数并输出(用A、B、C、D、E、F分别表示十六进制的10、11、12、13、14、15)。 3、输入一个字母打印图示图形,该图形中间一行由输入字母组成,其相邻的上下两行由它前面的字母组成,按此规律,直到字母A出现在第一行和最末...
妈妈给女儿的信.doc
依据以下公式编法度模范计算e的近似值,精度请求为:10e-6:[指南] 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 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("所求结果为:%f\n",sum); } //2、张教授最近正在研究一个项目,其间涉及到十进制与十六进制之间的转换,然而,手工将大量的十进制转换成十六进制是十分困难的。请编写程序,将给定的非负十进制数转化成相应的十六进制数并输出(用A、B、C、D、E、F分别表示十六进制的10、11、12、13、14、15)。 #include void main(void) { int data10,beichushu,yushu,shang; char data16[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 void main(void) { char ch,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" #define N 80 void main() { char str[N+1]; int i,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 int judge(int x) { int i,yn; yn=1;//为1表示是素数 for(i=2;(i #include #include #define N 80 void main(void) { unsigned count=1,maxno,minno; char max[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)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 int 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; while((x%i==0)&&(yn)) x/=i; } i++; }; return yn; } void main(void) { int n,i,count=0; do { printf("请输入要求的数列元素的个数(>=1):"); scanf("%d",&n); }while(n<1); for(i=2;count #include #include #define N 100 //逆置,因为计算机中数据的高低位跟现实中的习惯刚好相反 void revert(char t[]) { int i,len; char temp; len=strlen(t); for(i=1;i<=len/2;i++) { temp=t[i-1]; t[i-1]=t[len-i]; t[len-i]=temp; } } //以字符串形式输入被乘数和乘数 void input(char a[],char b[]) { do { printf("\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)); //对存放乘积的空间进行初始化 p[strlen(a)+strlen(b)]='\0'; for(i=0;i=0)&&(p[i-1]=='0');i--) p[i-1]='\0'; return(p); } void main() { char a[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 #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=data[i-1]; data[i-1]=data[len-i]; data[len-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;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; } //从键盘输入数据并暂存入一个字符数组 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++) //计算相应的基 base*=10; //给乘积的存放准备空间 p=(unsigned short *)malloc((a[0]+b[0]+1)*sizeof(unsigned short)); if(p==NULL) return NULL;//内存分配不成功,无法进行运算 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; } } return p; } } //输出 void output (unsigned short *data) { unsigned int i; 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"); } void main() { unsigned short len,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=(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) ;//计算乘积并输出 } }
/
本文档为【妈妈给女儿的信&#46;doc】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索