C语言程序设计函数练习题及参考答案.docx
C语言程序设计练习题及参考答案1、定义一个函数intfun(inta,intb,intc),它的功能是:若a,b,c能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。#inc1ude<stdio.h>intfun(inta,intb,intc)if(a+b>c&&b+c>a&&a+c>b)if(a=b&&b=c)return3;e1seif(a=bb=ca=c)return2;e1sereturn1;)e1sereturn0;)voidmain()(inta,b,c,shape;printf(z,n1puta,b,c:);scanf("%d%d%c,&a,&b,&c);printf(zzna=%d,b=%d,c=%dn”,a,b,c);shape=fun(a,b,c);printf(z,Theshape:%dnz,shape);2、编写一个程序,将两个变量的值交换,例如变量a中的值原为3,b中的值原为8,程序运行后a中的值为8,b中的值为3。inc1ude<stdio.h>voidfun(int*x,int*y)intt;t=*x;*x=*y;*y=t)voidmain()(inta=3,b=8;printf(z,%d%dn”,a,b);fun(&a,b);printf(,z%d%dn,a,b);3、从键盘输入3个数,将最大值放在变量a中,最小值放在变量C中。例如,输入的数为:551234,输出结果应当是:a=55.O,b=34.0,c=12.Ooftinc1ude<stdio.h>voidfun(f1oat*p,f1oat*q,f1oat*s)(f1oatk;if(*p<*q)k=*p;*p=*q;*q=k;if(*q<*s)k=*s;*s=*p;*p=k;if(*p<*q)k=*p;*p=*q;*q=k;voidmain()f1oata,b,c;printf(zzInputabc:);SCanf("%f%f%f”,&a,&b,&c);printfC,a=%4.If,b=%4.If,c=%4.1fnnz,a,b,c);fun(&a,&b,&c);printf(z,a=%4.If,b=%4.If,c=%4.1fnn”,a,b,c);4、编写函数fun(intn),它的功能是:计算正整数n的所有因子(1和n除外)之和作为函数值返回。例如:n=120时,函数值为239。inc1ude<stdio.h>#inc1ude<std1ib.h>intfun(intn)(inti,s=0;for(i=2;i<n;i+)if(n%i=0)s=s+i;returns;voidmain()*主函数*/(voidNONO();printf(z,%dzz,fun(120);NONO();voidNONO()*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FI1E*wf;wf二fopen(,a30.outzz,w);fprintf(wf,zr%d,>fun(120);fc1ose(wf);5、计算s,并输出1S=I+1+21+2+31+2+3+n1.833333n通过键盘输入,例如:若n的值为11时,则函数值为:#inc1ude<stdio.h>#inc1ude<std1ib.h>f1oatfun(intn)(inti;f1oats=1.0,h=1;for(i=2;i<=n;i+)h=h+i;s=s+1.0/h;)returns;voidmainO(intn;f1oats;printf(z,P1aseenterN:);SCanf(%d,&n);s=fun(n);printf(,ztheresu1tis:%f/z,s);6、将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当S中的数为:87653142时,t中的数为:7531inc1ude<stdio.h>voidfun(1ongs,1ong*t)intd;1ongs1=1;*t=0;whi1e(s>0)(d=s%10;if(d%2!=0)(*t=d*s1+*t;s1=s1*10;)s=10;main()(1ongs,t;printf(,P1aseenters:);scanf(zz%1dz,&s);fun(s,&t);printf(zzTheresu1tis:%1dn/z,t);7、计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值从键盘传入,若k的值为500,则输出4622。inc1ude<stdio.h>intfun(intk)intm=0,mc=0,j;whi1e(k>=1)A(mc<10)(if(k%13=0)II(k%17=0)(m=m+k;me+;k-;)returnm;voidmain()printf(/,%dn,fun(500);8、已知一个数列的前三项分别为O,O,1以后的各项都是其相邻的前三项之和,计算并输出该数列前n项的平方根之和SUm。例如,当n=10时,程序的输出结果应为:23.197745oftinc1ude<stdio.h>inc1ude<math.h>doub1efun(n)(doub1esum,s,si,s2,s;intk;sum=1.0;if(n<=2)sum=0.0;s=0.0;si=0.0;s2=1.0;for(k=4;k<=n;k+)s=s+si+s2;sum+=sqrt(s);s=si;si=s2;s2=s;returnsum;voidmain()intn;PrintfCInputN=);scanf("%d",&n);printf(z/%f,fun(n);9、编写一个程序,从键盘输入叫输出大于m且紧随m的素数。#inc1ude<stdio.h>intfun(intm)inti,k;for(i=m+1;i+)for(k=2;k<i;k+)if(i%k=0)break;if(k>=i)return(i);voidmain()(intn;printf(,P1aseentern:);scanf("%d",&n);printf(z,%dnz,fun(n);10、判断两个整数m和n是否互质(即是否有公共的因子)(m1,n1)o方法是:用2到t(t取m和n中较小的那个数)之间的数分别去除m和n,若m和n能同时被某个数除尽,贝IJn1和n不互质;否则它们互质。例如,若输入187和85,则应输出NO(表示它们不互质,它们有公因子17)。若输入89和187,则应输出YeS(表示它们互质)。inc1ude<stdio.h>intIsThat(intm,intn)(intk,t,mk=1;t=m;if(m>n)t=n;for(k=2;k<=t;k+)if(m%k=0&&n%k=O)mk=0;break;returnmk;voidmain()(intm,n;printf("nP1easeenter2numbers:nz,);scanf(/,%d%dzz,&m,&n);if(IsThat(m,n)printf(z,Yesn,z);e1seprintf(Non);11、将十进制正整数m转换成k进制数(2k9)并输出(m,k从键盘输入)。例如,若输入8和2,则应输出IOOO(即十进制数8转换成二进制表示是1000)。#inc1ude<stdio.h>voidTrans(intm,intk)intaa20,i,j;for(i=0;m;i+)(aai=m%k;m/=k;for(j=i-1;j>=0;j)printf%d*,aaj);voidmain()(intb,n;printf(,znP1easeenteranumberandabase:,z);scanf(z,%d%d",&n,&b);Trans(n,b);12、统计从键盘输入的50个实数中有多少个正数、多少个负数、多少个零ftinc1ude<stdio.h>voidfun(int*zs,int*fs,int*1,f1oataa)(inti;for(i=0;i<50;i+)(if(aai>0)(*zs)+÷if(aai<0)(*fs)+;if(aai=0)(*1)+;voidmain()(f1oatnum50;inti,czs,cfs,c1;czs=cfs=c1=0;printf(z,P1easeenter50f1oatnumbers:n);for(i=0;i<50;i+)scanf(ii%fff,&numi);fun(fcczs,&cfs,&c1,num);Printf(n正数:%d,负数:%d,零:%dn,z,czs,cfs,c1);13、计算并输出方程2+2=i989的所有整数解#inc1ude<stdio.h>voidfunOintx,y;for(x=1;x<=44;x+)for(y=1;y<=44;y÷+)if(x*x+y*y=1989)printf(iix=%d,y=%dn”,x,y);voidmainO(Printf(“方程屋2+/2=1989的整数解为:n");fun();14、从键盘输入10个整数,求出其中的最大值。#inc1ude<stdio.h>intfun(intaa)intm,i;m=aa0;for(i=1;i<10;i+)if(aai>m)m=aai;returnm;voidmain()(intnum10,i;Printf("请从键盘输入10个整数:n");for(i=0;i<10;i+)scanf(ii%dff,numi);Printf("n最大的数是:dn",fun(num);12345112341112311112I111115、从键盘输入n值,输出如右图形。(例如n=5时)#inc1ude<stdio.h>voidfun(intn)inti,j;for(i=1;i<=n;i+)for(j=1;j<=i;j+)printf(a%3df9,1);for(j=2;j<=n+1-i;j+)printf("%3d”,j);printf(itnff);voidmain()(intn;Printf("n请输入图形的行数:”);scanf("%d",&n);fun(n);16、使用函数的方式,计算如下公式