《C语言程序设计函数练习题及参考答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计函数练习题及参考答案.docx(51页珍藏版)》请在第一文库网上搜索。
1、C语言程序设计练习题及参考答案1、定义一个函数intfun(inta,intb,intc),它的功能是:若a,b,c能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。#inc1udeintfun(inta,intb,intc)if(a+bc&b+ca&a+cb)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
2、,&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。inc1udevoidfun(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中。例如,
3、输入的数为:551234,输出结果应当是:a=55.O,b=34.0,c=12.Ooftinc1udevoidfun(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
4、,b=%4.If,c=%4.1fnn”,a,b,c);4、编写函数fun(intn),它的功能是:计算正整数n的所有因子(1和n除外)之和作为函数值返回。例如:n=120时,函数值为239。inc1ude#inc1udeintfun(intn)(inti,s=0;for(i=2;ifun(120);fc1ose(wf);5、计算s,并输出1S=I+1+21+2+31+2+3+n1.833333n通过键盘输入,例如:若n的值为11时,则函数值为:#inc1ude#inc1udef1oatfun(intn)(inti;f1oats=1.0,h=1;for(i=2;i=n;i+)h=h+i;s=s+
5、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中的数为:7531inc1udevoidfun(1ongs,1ong*t)intd;1ongs1=1;*t=0;whi1e(s0)(d=s%10;if(d%2!=0)(*t=d*s1+*t;s1=s1*10;)s=10;main()(1on
6、gs,t;printf(,P1aseenters:);scanf(zz%1dz,&s);fun(s,&t);printf(zzTheresu1tis:%1dn/z,t);7、计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值从键盘传入,若k的值为500,则输出4622。inc1udeintfun(intk)intm=0,mc=0,j;whi1e(k=1)A(mc10)(if(k%13=0)II(k%17=0)(m=m+k;me+;k-;)returnm;voidmain()printf(/,%dn,fun(500);8、已知一个数列的前三项分别为O,O,1以后的各项都是其相邻的
7、前三项之和,计算并输出该数列前n项的平方根之和SUm。例如,当n=10时,程序的输出结果应为:23.197745oftinc1udeinc1udedoub1efun(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、编写一个程序,从键盘输入叫输出大于
8、m且紧随m的素数。#inc1udeintfun(intm)inti,k;for(i=m+1;i+)for(k=2;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(
9、表示它们互质)。inc1udeintIsThat(intm,intn)(intk,t,mk=1;t=m;if(mn)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转换成二进制
10、表示是1000)。#inc1udevoidTrans(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个实数中有多少个正数、多少个负数、多少个零ftinc1udevoidfun(int*zs,int*fs,int*1,f1oataa)(inti;for(i=0;i0)(*zs)+;
11、if(aai0)(*fs)+;if(aai=0)(*1)+;voidmain()(f1oatnum50;inti,czs,cfs,c1;czs=cfs=c1=0;printf(z,P1easeenter50f1oatnumbers:n);for(i=0;i50;i+)scanf(ii%fff,&numi);fun(fcczs,&cfs,&c1,num);Printf(n正数:%d,负数:%d,零:%dn,z,czs,cfs,c1);13、计算并输出方程2+2=i989的所有整数解#inc1udevoidfunOintx,y;for(x=1;x=44;x+)for(y=1;y=44;y+)if(
12、x*x+y*y=1989)printf(iix=%d,y=%dn”,x,y);voidmainO(Printf(“方程屋2+/2=1989的整数解为:n);fun();14、从键盘输入10个整数,求出其中的最大值。#inc1udeintfun(intaa)intm,i;m=aa0;for(i=1;im)m=aai;returnm;voidmain()(intnum10,i;Printf(请从键盘输入10个整数:n);for(i=0;i10;i+)scanf(ii%dff,numi);Printf(n最大的数是:dn,fun(num);12345112341112311112I111115、从键盘输入n值,输出如右图形。(例如n=5时)#inc1udevoidfun(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、使用函数的方式,计算如下公式