C语言练习题(所提供的源程序均采用自定义函数方式解决,如不采用函数方式,也可直接在main函数中借鉴该思想编程,因时间有限,所有程序未能一一验证,仅供参考使用)1、定义一个函数intfun(inta,intb,intc),它的功能是:若a,b,c能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。#includestdio.hintfun(inta,intb,intc){if(a+bc&&b+ca&&a+cb){if(a==b&&b==c)return3;elseif(a==b||b==c||a==c)return2;elsereturn1;}elsereturn0;}voidmain(){inta,b,c,shape;printf(\nInputa,b,c:);scanf(%d%d%d,&a,&b,&c);printf(\na=%d,b=%d,c=%d\n,a,b,c);shape=fun(a,b,c);printf(\n\nTheshape:%d\n,shape);}2、编写一个程序,将两个变量的值交换,例如变量a中的值原为3,b中的值原为8,程序运行后a中的值为8,b中的值为3。#includestdio.hvoidfun(int*x,int*y){intt;t=*x;*x=*y;*y=t;}voidmain(){inta=3,b=8;printf(%d%d\n,a,b);fun(&a,b);printf(%d%d\n,a,b);}3、从键盘输入3个数,将最大值放在变量a中,最小值放在变量c中。例如,输入的数为:551234,输出结果应当是:a=55.0,b=34.0,c=12.0。#includestdio.hvoidfun(float*p,float*q,float*s){floatk;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(){floata,b,c;printf(Inputabc:);scanf(%f%f%f,&a,&b,&c);printf(a=%4.1f,b=%4.1f,c=%4.1f\n\n,a,b,c);fun(&a,&b,&c);printf(a=%4.1f,b=%4.1f,c=%4.1f\n\n,a,b,c);}4、编写函数fun(intn),它的功能是:计算正整数n的所有因子(1和n除外)之和作为函数值返回。例如:n=120时,函数值为239。#includestdio.hintfun(intn){inti,s=0;for(i=2;in;i++)if(n%i==0)s=s+i;returns;}voidmain()/*主函数*/{printf(%d\n,fun(120));}5、计算s,并输出111S=1+──+───+……+──────1+21+2+31+2+3+…+nn通过键盘输入,例如:若n的值为11时,则函数值为:1.833333#includestdio.h#includestdlib.hfloatfun(intn){inti;floats=1.0,h=1;for(i=2;i=n;i++){h=h+i;s=s+1.0/h;}returns;}voidmain(){intn;floats;printf(\nPleaseenterN:);scanf(%d,&n);s=fun(n);printf(theresultis:%f,s);}6、将一个整数中的每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,t中的数为:7531。#includestdio.hvoidfun(longs,long*t){intd;longs1=1;*t=0;while(s0){d=s%10;if(d%2!=0){*t=d*s1+*t;s1=s1*10;}s/=10;}}main(){longs,t;printf(\nPleaseenters:);scanf(%ld,&s);fun(s,&t);printf(Theresultis:%ld\n,t);}#includestdio.hintfun(ints){intd,t=0;ints1=1;while(s0){d=s%10;if(d%2!=0){t=d*s1+t;s1=s1*10;}s/=10;}returnt;}main(){ints;printf(\nPleaseenters:);scanf(%d,&s);printf(Theresultis:%d\n,fun(s));}7、计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值从键盘传入,若k的值为500,则输出4622。#includestdio.hintfun(intk){intm=0,mc=0,j;while((k=1)&&(mc10)){if((k%13==0)||(k%17==0)){m=m+k;mc++;}k--;}returnm;}voidmain(){printf(%d\n,fun(500));}8、已知一个数列的前三项分别为0,0,1,以后的各项都是其相邻的前三项之和,计算并输出该数列前n项的平方根之和sum。例如,当n=10时,程序的输出结果应为:23.197745。#includestdio.h#includemath.hdoublefun(n){doublesum,s0,s1,s2,s;intk;sum=1.0;if(n=2)sum=0.0;s0=0.0;s1=0.0;s2=1.0;for(k=4;k=n;k++){s=s0+s1+s2;sum+=sqrt(s);s0=s1;s1=s2;s2=s;}returnsum;}voidmain(){intn;printf(InputN=);scanf(%d,&n);printf(%f\n,fun(n));}9、编写一个程序,从键盘输入m,输出大于m且紧随m的素数。#includestdio.hintfun(intm){inti,k;for(i=m+1;;i++){for(k=2;ki;k++)if(i%k==0)break;if(k=i)return(i);}}voidmain(){intn;printf(\nPleaseentern:);scanf(%d,&n);printf(%d\n,fun(n));}10、判断两个整数m和n是否互质(即是否有公共的因子)(m≠1,n≠1)。方法是:用2到t(t取m和n中较小的那个数)之间的数分别去除m和n,若m和n能同时被某个数除尽,则m和n不互质;否则它们互质。例如,若输入187和85,则应输出No(表示它们不互质,它们有公因子17)。若输入89和187,则应输出Yes(表示它们互质)。#includestdio.hintIsThat(intm,intn){intk,t,mk=1;t=m;if(mn)t=n;for(k=2;k=t;k++)if(m%k==0&&n%k==0){mk=0;break;}returnmk;}voidmain(){intm,n;printf(\nPleaseenter2numbers:\n);scanf(%d%d,&m,&n);if(IsThat(m,n))printf(Yes\n);elseprintf(No\n);}11、将十进制正整数m转换成k进制数(2≤k≤9)并输出(m,k从键盘输入)。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。#includestdio.hvoidTrans(intm,intk){intaa[20],i,j;for(i=0;m;i++){aa[i]=m%k;m/=k;}for(j=i-1;j=0;j--)printf(%d,aa[j]);}voidmain(){intb,n;printf(\nPleaseenteranumberandabase:\n);scanf(%d%d,&n,&b);Trans(n,b);}12、统计从键盘输入的50个实数中有多少个正数、多少个负数、多少个零#includestdio.hvoidfun(int*zs,int*fs,int*l,floataa[]){inti;for(i=0;i50;i++){if(aa[i]0)(*zs)++;if(aa[i]0)(*fs)++;if(aa[i]==0)(*l)++;}}voidmain(){floatnum[50];inti,czs,cfs,cl;czs=cfs=cl=0;printf(\nPleaseenter50floatnumbers:\n);for(i=0;i50;i++)scanf(“%f”,&num[i]);fun(&czs,&cfs,&cl,num);printf(\n正数:%d,负数:%d,零:%d\n,czs,cfs,cl);}13、计算并输出方程X2+Y2=1989的所有整数解#includestdio.hvoidfun(){intx,y;for(x=1;x=44;x++)for(y=1;y=44;y++)if(x*x+y*y==1989)printf(“x=%d,y=%d\n”,x,y);}voidmain(){printf(“方程x^2+y^2=1989的整数解为:\n”);fun();}14、从键盘输入10个整数,求出其中的最大值。#includestdio.hintfun(intaa[]){intm,i;m=aa[0];for(i=1;i10;i++)if(aa[i]m)m=aa[i];returnm;}voidmain(){intnum[10],i;printf(“请从键盘输入10个整数:\n”);for(i=0;i10;i++)scanf(“%d”,&num[i]);printf(“\n最大的数是:%d\n”,fun(num));}15、从键盘输入n值,输出如右图形。(例如n=5时)#includestdio.hvoidfun(intn){inti,j;for(i=1;i=n;i++){for(j=1;j=i;j++)printf(“%3d”,1);for(j=2;j=n+1-i;j++)printf(“%3d”,j);printf(“\n”);}}voidmain(){intn;printf(“\n请输入图形的行数:”);scanf(“%d”,&n);fun(n);}123451123411123111121111116、使用函数的方式,计算如下公式的值。111A1=1,A2=──,A3=──,……An=────1+A11+A21+A(n-1)例如:若n=10,则应输出:0.617977。#includestdio.hfloatfun(intn){floatA=1;inti;for(i=1;i=n;i++)A=1.0/(1+A);returnA;}voidmain(){intn;printf(\nPleaseentern:);scanf(%d,&n);printf(A%d=%f\n,n,fun(n));}*17、使用函数的方式,,按下面的公式计算并输出数列的第m项。┌2,m=1;│3,m=2;FFF(m)=┤5,m=3;└FFF(m-3)+FFF(m-1),m3;例如,若输入整数9,则应输出:47。(不用做)*18、使用函数的方式,按以下递归公式求函数值┌10(n=1)fun(n)=│└fun(n-1)+2(n1)例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。(不用做)19、计算并输出当0x0.97时下列多项式的值,直到|S(n)-S(n-1)|0.0000