c语言编程作业_第1页
c语言编程作业_第2页
c语言编程作业_第3页
c语言编程作业_第4页
c语言编程作业_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、571255An1006216251200922226An5238571252226200915-3读取文件内容#include"stdio.h"main() FILE *fp; int m,n,i=0; char file20,ch20,c; scanf("%s%d",file,&n); if( ( fp=fopen(file,"r") )=NULL) printf("File Name Error.n"); exit(0); if(n>5) printf("Line No Error.n

2、"); if(n=1) printf("T"); for(i=1;(c=fgetc(fp)!=EOF;) if(c='n') i+; for(;i=n;) c=fgetc(fp); putchar(c); if(c='n') i+; break; fclose(fp);15-2数据编号void sort ( struct data *pa , int n ) int i,j,k=0; for(i=0;i<n;i+,k=0) while(pak.no!=0) k+;for(j=0;j<n;j+) if(paj.no=0&a

3、mp;&*paj.p<*pak.p) k=j;pak.no=i+1; 15-1输出字母正方形#include"stdio.h"main() int i,n,j,k,m,l; char a,min(); scanf("%c %d",&a,&n); if(96<a&&a<123)a=a-32; k=a; m=(n+1)/2; for(i=0;i<n;i+) for(j=0;j<n;j+) if(j<m&&i<m) printf("%c",mi

4、n(a,i,j); else if(j>=m&&i<m) printf("%c",min(a,i,n-j-1); else if(j<m&&i>=m) printf("%c",min(a,n-i-1,j); else printf("%c",min(a,n-i-1,n-1-j); printf("n"); char min( char a,int i,int j ) char k; if(i<=j) k=i+a; else k=j+a; if(k>

5、90) k=k-26; return(k);14-3数制转换#include"stdio.h"#include"string.h"main() int m,n,i,j,k; char a1010='0' scanf("%d%d",&n,&m); for(k=0;k+) scanf("%s",&ak);if(strcmp(ak,"0")=0) break; for(i=0;i<k;i+) daoshu ( ai );j=shi( ai , n ); z

6、huanm(j,m);if(i<k-1)printf(" "); printf("n");shi( char *p ,int n ) int j; if(*(p+1)='0') j=(*p-48); else j=(*p-48)+n*shi( p+1,n ); return(j);zhuanm(int j,int m) if(j<m) printf("%d",j); else zhuanm( j/m,m ); printf("%d",j%m); daoshu( char *a ) cha

7、r *p=a,temp; while( *p!='0') p+; p-; while(a<p) temp=*a;*a=*p;*p=temp;a+;p-; return;14-2求反叙述#include"stdio.h"#include"math.h"main() int i,j,k=0,n,m,a10=0,b10=0,l=0; long int s=1,p,q,r,t; scanf("%d %d",&n,&m); for(i=0;i<n;i+) s=s*10; q=p=s/10; for(;

8、q<s;q+) r=q*m; if(r>=s) break; p=q; for(i=0;i<n;i+) ai=p%10; p=p/10; for(j=n-1;j>=0;j-) bj=r%10; r=r/10; for(i=0,k=0;i<n;i+) k=k+fabs(ai-bi); if(k=0) printf("%ldn",q); l=-1; if(l=0) printf("No output!n");14-1输出数字三角形#include"stdio.h"main() int n,m,i,j,k,l;

9、 scanf("%d %d",&m,&n); for(i=0;i<m;i+) for(j=i+1;j<m;j+) printf(" "); for(k=0;k<=i;k+,n+) printf("%3d",n); for(n=n-2;k<2*i+1;k+,n-) printf("%3d",n); n=n+2; printf("n"); 2-3求正弦函数的值main() float n,k,a,b,x,s; scanf("%f",&

10、;x); k=1.0;s=0.0;a=1.0;n=1.0;b=x; while(fabs(k*b/a)>=1.e-10) s+=k*b/a;k=-k;n+=2.0;a*=n*(n-1.0);b*=x*x; printf("%fn",s); 13-3. 求n阶勒让德多项式值#include"stdio.h" main() double x,p,ppp(); int n; scanf("%d %lf",&n,&x); p=ppp(n,x); printf("%.2lfn",p); double p

11、pp( int n , double x ) double p; if(n=0) p=1.0; if(n=1) p=x; if(n>1) p=(2*n-1)*x*ppp(n-1,x)-(n-1)*ppp(n-2,x)/n; return(p); 13-2. 整钱换零钱main() int n,m,i,j,k,a=0,b,c; scanf("%d",&n); for(i=0;i<=10*n;i+) for(j=0;j<=5*n;j+) for(k=0;k<=2*n;k+) if(10*n=i+2*j+5*k) a+; printf("

12、%dn",a); 12-3. 超长整数的运算成绩: 10 / 折扣: 0.8使用数组完成两个超长(长度小于)正整数的加法。 为了实现高精度的加法,可将正整数存放在有()个元素的一维数组中,数组的每个元素存放一位十进制数,即个位存放在第一个元素中,十位存放在第二个元素中,依次类推。这样通过对数组中每个元素的按位加法就可实现对超长正整数的加法。友情提示:两个正整数保存在数组中时,将个位保存为第一个元素,十位保存在第二个元素,.,这样做加法时两个数组相应下标的数相加比较方便。二要考虑进位问题;三要考虑输出时要按正常顺序高位在左低位在右。#include"stdio.h"

13、main() int c101,i,j,k,m,l=0; char a101,b101; gets(a); gets(b); for(i=0;ai!='0'i+); for(j=0;bj!='0'j+); i-; j-; for(k=0,m=0;i>=0&&j>=0;i-,j-,k+) ck=(ai+bj-96)+m)%10; m=(ai+bj+m-96)/10; for(;j>=0&&i=-1;j-,k+) ck=(m+bj-48)%10;m=(bj+m-48)/10; for(;j=-1&&i

14、>=0;k+,i-) ck=(m+ai-48)%10 ; m=(ai+m-48)/10; if(m!=0) ck=m; k+; if(c0=0) l=1; for(j=k-1;cj=0&&l=0;j-); for(;j>=0;j-)printf("%d",cj); printf("n");12-1. 施工工期成绩: 10 / 折扣: 0.8有一个工程,分为 A 、 B 、 C 三个阶段,工程必须按 A 、 B 、 C 的顺序进行,既 A 阶段完成后才能进行 B 阶段, B 阶段完成后才能进行 C 阶段。某工程公司有四个施工队,

15、因为设备、技术水平等因素,四个工程队完成前述工程段所需时间不同。现在公司在组织施工时,安排一个施工队承担一段工程,请编写程序得到一个工程承担方案,使得工期最短。 例如四个队完成各段工程所需时间如下表: A 段 B 段 C 段 1 队 5 天 8 天 3 天 2 队 4 天 9 天 6 天 3 队 7 天 5 天 11 天 4 队 6 天 7 天 8 天 输入: 5 8 3 4 9 6 7 5 11 6 7 8 main() int a43,d,e,f,c3,k,j,i,sum,temp; for(i=0;i<4;i+) for(j=0;j<3;j+) scanf("%d&

16、quot;,&aij); d=a00; e=a11; f=a22; temp=sum=d+e+f; for(i=0;i<4;i+) d=ai0; for(j=0;j<4;j+) e=aj1; for(k=0;k<4;k+) f=ak2; if(k!=i&&k!=j&&j!=i) sum=d+e+f; if(sum<temp) temp=sum; c0=i+1; c1=j+1; c2=k+1; printf("%d:%d,%d,%dn",temp,c0,c1,c2); 11-3. 折半插入排序(选做)成绩: 10

17、 / 折扣: 0.8排序是程序设计中的重要内容之一,据不完全统计,在一般的数据处理程序中,排序占去了处理机时间的四分之一,而在典型的安装程序中,一半以上的时间用在对表的排序上。折半查找法的思路: 先取有序数组的中间元素与查找值相比较。 如果相等则查找成功: 如果查找值大于中间元素, 则再取高半部的中间元素与查找值相比较。 如查找值小于中间元素, 则再取低半部的中间元素与查找值相比较。 如果如查找值等于中间元素,则因为相同数值仅保存一次,故不再插入。 如此重复直到查找成功或最终未找到该数为止。在折半插入排序算法中,由于进行关键字比较的次数比较少,所以算法的效率就比较高。例如:有序列10,90,8

18、0,30,20,15。我们进行折半插入排序的过程如下:初始(第1趟):有序子序列为空。待排序数据为10,则不需要进行关键字比较,直接插入。 第2趟:有序子序列为“10”,待排序数据为90,进行1次比较就可以确定插入位置,得到长度+1的有序子序列“10,90”。此时比较次数为 1 。 第3趟:有序子序列为“10,90”。待排序数据为80,取有序序列中间(取整)的元素10进行第 1 次比较,80大;则应该从“90”这个子序列中进行折半插入80,进行第 2 次比较,定位应该的插入位置,得到有序序列“10,80,90”。此趟比较次数为 2。 第4趟:有序子序列为“10,80,90”。待排序数据为30,

19、取有序序列中间的元素80进行第 1 次比较,30小;则应该从“10”这个子序列中进行折半插入30,进行第 2 次比较,可以定位应该插入的位置,得到新的长度+1的有序子序列。此趟比较次数为 2。 第5趟:有序子序列为“10,30,80,90”。待排序数据为20,取有序序列中间的元素30进行第 1 次比较,20小;则应该从“10”这个子序列中进行折半插入20,进行第 2 次比较,可以确定应该插入的位置。此趟比较次数为 2。 第6趟:有序子序列为“10,20,30,80,90”。待排序数据为15,取有序序列中间的元素30进行第 1 次比较,15小;则应该从“10,20”这个子序列中进行折半插入15,

20、取子序列中间的元素10,进行第 2 次比较,15大,则应该从“20”这个子序列中进行折半插入排序,再进行 1 次比较就可以确定应该插入的位置。此趟比较次数为 3。 此时,完成排序,得到升序序列“10,15,20,30,80,90”。在整个排序过程中进行关键字比较的总次数 = 0+1+2+2+2+3 = 10。输入:数列中元素个数(元素数量<=100) 数列输出:使用折半插入排序后的有序升序数列说明:输出数列之间用空格分隔。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例 1 以文本方式显示 6?10 90 80 30 20 15? 以文本方式显示 10 15 20 30 8

21、0 90? 无限制 64M 0 测试用例 2 以文本方式显示 5?10 10 10 10 10? 以文本方式显示 10? 无限制 64M 0 开启时间 2010年05月7日 星期五 10:40 折扣时间 2010年06月7日 星期一 10:40 关闭时间 2010年07月 14日 星期三 10:40 #include"stdio.h"main() int a100,i,j,b,c,d=100,n,m; scanf("%d",&n); scanf("%d",&a0); for(i=1;i<n;i+) scanf(&

22、quot;%d",&m); b=i/2; c=(i+1)/2; do if(ab=m|a0=m|ai-1=m) d=100; n-; i-; break; if(ab>m) b=b-c/2; d=0; if(a0>m&&c/2=0) b=0; if(ab<m) b=b+c/2; d=1; if(b=i-2&&ai-1<m&&c/2=0) b=i-1; c=c/2; while(c!=0); if(d!=100) for(j=i;j>b+d&&d!=100;j-) aj=aj-1; a

23、j=m; for(i=0;i<n;i+) if(i=n-1) printf("%d",ai); else printf("%d ",ai); printf("n");11-2. 字符串的减法成绩: 10 / 折扣: 0.8输入字符串s和t(串长不超过80个字符),将在字符串s中出现,但未在字符串t中出现的字符组成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符,输出u。 例如:当s="12345678",t="2468"时,u="1357"。输入

24、:第一行为串s 第二行为串t输出:串u#include"stdio.h"main() char a80,b80,u80; gets(a); gets(b); strc(a,b,u); puts(u);strc(char *a ,char *b,char *u) char *o,*q; o=a;q=u; for(;*o!='0'o+) if(qwer(*o,b) *q=*o; q+; *q='0'qwer(char o,char *b) char *p=b; int i=1; for(;*p!='0'p+) if(o=*p) i

25、=0; return(i);8-3. 科学记数法成绩: 10 / 折扣: 0.8对于非常大或者非常小的数据,我们通常用科学记数法来表示。例如在科技文献和电脑中经常遇到的 2.3×106 (计算机中的科学记数法表示为:2.3E6),或者 9.18×10-5 (科学记树法表示:9.18E-5)这种类型的数据。 输入:用科学记数法表示的数据。即为符合C语言表示的科学记数法表示。输出:该数据的双精度表示说明: 1.输入数据的精度不高于小数点后50位。 2.输入数据时,在实数和幂之间有空格进行分隔,空格个数不定。 3.结果保留到小数点后8位,如不足8位用0补足,超过8位则截断,不进行

26、四舍五入的处理。友情提示:此题有点难啊!建议大家对问题要进行分析,分解为若干个小步骤,然后各个击破之。现在不要急于完成此题,待积累一定编程经验后再做。编程思路:1.以字符方式一个一个读取输入数据,将尾数部分存入一个字符串,将指数部分转换为整数保存。尾数部分不要保存为实型数,因为尾数的小数部分可能很大,用实型数保存精度不够。 2.检查尾数字符串中是否有小数点,如果输入的尾数没有小数点,则在字符串中插入小数点。 3.根据给定的指数值移动小数点,可能有以下情况: (1)指数为正,右移小数点;在移动过程中已到字符串尾,则需要补0。 (2)指数为负,左移小数点;在移动过程中已到字符串首,则要将字符串整体

27、右移一位,在字符串首补0。 4.找到现在小数点的位置,再向后数8个字符,如果后面数字字符的个数不够8个则补0,小数点后8个数字字符的后面是字符串结束标志。 5.输出字符串。 建议采取渐增式的开发方法,编程过程中,完成以上一步后进行调试,正确后再编下一步的程序。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例 1 以文本方式显示 1.2345 E 3? 以文本方式显示 1234.50000000? 无限制 64M 0 测试用例 2 以文本方式显示 1.2345 E-3? 以文本方式显示 0.00123450? 无限制 64M 0 #include"stdio.h"

28、;main() int i,k,j,t,m=0,c=1,l=1; char a60,b100; gets(a); for(i=0;i<98;i+) bi='0' b99='n' for(i=0,j=50;ai!=' 'i+) bj=ai;j+; for(k=50;k<j;) if(bk='.') l=0; k+; if(l=1) bj='.' for(i=i;ai!='0'i+) if(ai=45) c=-1; if(47<ai&&ai<58) m=10*m+

29、ai-48; m=c*m; if(m>=0) for(j=50;j<99;j+) if(bj='.') for(k=0;k<m;k+) bj=bj+1; j+; bj='.'t=j;break; for(k=50;k<9+t;k+) printf("%c",bk); if(m<0) m=-m; for(j=99;j>1;j-) if(bj='.') c=j; for(k=0;k<m;k+) bj=bj-1; j-; bj='.' t=j; break; i=c-m-1;

30、 for(k=i>50 ? 50 : i ;k<t+9;k+) printf("%c",bk); printf("n");10-3. 求最大公约数(递归)成绩: 10 / 折扣: 0.8请使用递归算法计算正整数n和m的最大公约数GCD(n,m)。 = m 当 m<=n 且 n mod m =0(mod 表示求余)GCD(N,M) = GCD(m,n) 当n<m时 =GCD(m, n mod m) 其他输入: n和m输出: n和m的最大公约数#include"stdio.h"main() int s,m,n; s

31、canf("%d %d",&m,&n); s=GCD(m,n); printf("%dn",s);GCD(int m ,int n) int k; if(n%m=0|m=1) return(m); else return( GCD(n%m,m) );10-2 求数列的第N项(递归)成绩: 10 / 折扣: 0.8已知整数数列第一项和第二项是1,该数列从第三项开始,如果该项是奇数项,则它是前两项之和,如果该项是偶数项,则它是前两项之差,即:f( n ) = 1 当 n = 1 或 2 时, f( n ) = f( n-1 ) - f( n-

32、2 ) 当n是偶数时, f( n ) = f( n-1 ) + f( n-2 ) 当n是奇数时, 编写一个递归函数,求数列的第N项。 测试输入 期待的输出 时间限制 内存限制 额外进程 测试用例 1 以文本方式显示 1? 以文本方式显示 1? 无限制 64M 0 测试用例 2 以文本方式显示 5? 以文本方式显示 3? 无限制 64M 0 测试用例 3 以文本方式显示 6? 以文本方式显示 2? 无限制 64M 0 main() int n,s; scanf("%d",&n); s=funto(n); printf("%dn",s); int f

33、unto(int n) int k; if(n=1|n=2) return(k=1); else if(n%2=0) return( k=funto(n-1)-funto(n-2) ); else return( k=funto(n-1)+funto(n-2) ); 10-1. 偶数分解成绩: 10 / 折扣: 0.8编写程序,输入若干个大于2的正整数,如果是偶数,则将其分解为两个素数并输出;如果输入的奇数,则输出“××× is odd number!” ;输入为0时程序结束。只有1和它本身这两个因数的自然数叫做素数,0和1既不是素数也不是和数。输入:整数序列,0

34、输出:偶数1 = 素数A + 素数B (当输入是偶数时) 奇数1 is odd number! (当输入是奇数时)#include"stdio.h"main() int a10,i,j,k,t,b100,l=0; scanf("%d",&a0); t=a0; for(i=1;i+) scanf("%d",&ai); if(ai=0) break; if(ai>t) t=ai; for(i=2,k=0;i<=t;i+) for(l=0,j=2;j<=i-1;j+) if(i%j=0) l=1;if(l=

35、0) bk=i;k+; for(t=0,l=0;t+) if(at=0) break; if(at%2=1) printf("%d is odd number!n",at); if(at%2=0) for(j=0,l=0;j<=k/2;j+) for(i=j;i<k;i+) if(at=bj+bi) printf("%d=%d+%dn",at,bj,bi); l+; if(l=1) break; 9-3. 输出杨辉三角形(递归)成绩: 10 / 折扣: 0.8在7-1题,我们输出的数字三角形,叫做杨辉三角形,是二项式的系数,当时使用数组来保存

36、各个系数,现在编写函数,不使用数组保存,而采用递归方法在屏幕上显示如下杨辉三角形(n=6时): 1 1 1 1 2 1 1 3 3 1 1 4 6 4 11 5 10 10 5 1main() int n,i,j,k; scanf("%d",&n); for(i=1;i<=n;i+) for(k=1;k<=n-i;k+) printf(" "); for(j=1;j<=i;j+) if(j=1) printf("%d",fun(i,j); else printf("%4d",fun(i,j

37、); printf("n"); fun( int i , int j ) if(j=1|i=j) return(1); else return( fun(i-1,j-1) + fun(i-1,j) ); 9-1. 删除字符串中指定字符成绩: 10 / 折扣: 0.8输入两个字符串 s1 和 s2 ,在 s1 中删除任何 s2 中有的字符。例如, s1 :“ abc123ad ”, s2 :“ a1 ” ,则输出“bc23d ”。输入: 两个字符串 s1 和 s2 输出: 删除后的字符串 s1 main() int i,j,k; char a40,b10; gets(a); gets(b); for(i=0;bi!='0'i+) for(j=0;aj!='0'j+) if(aj=bi) for(k=j;ak!='0'k+) ak=ak+1; if(aj=aj+1) j-; printf("%sn",a); 8-2. 展开缩写字符串成绩: 10 / 折扣: 0.8输入两个字符串 s1 和 s2,将 s1 复制到 s2 并输出s2。复制时,若字符串 s1 中存在缩写形式(如:az)应转换为字符串 s2 中的完整形式(abcd xyz )。“-”号之前的字符必须小于“-”号之后的字符才是

温馨提示

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

评论

0/150

提交评论