每个编程题都需要编写两个或两个以上函数。第四章例题及书后习题:【例4-10】计算组合数)!(!!nmnmCnm。#includestdio.hvoidmain(){intm,n;longcmn,factorial(int);scanf(“%d%d”,&m,&n);cmn=factorial(m)/factorial(n)/factorial(m-n);printf(“Result=%ld\n”,cmn);getch();}longfactorial(intx){longy=1;for(;x0;x--)y=y*x;return(y);}【例4-13】请设计程序,从键盘上输入两个正整数a和b,求它们的最大公约数。#includestdio.hintgcd(inta,intb){intr;while(b!=0){r=a%b;a=b;b=r;}returna;}main(){inta,b,c;scanf(%d%d,&a,&b);printf(%d\n,gcd(a,b));getch();}【例4-14】给定正整数n,求所有小于n的n的互质数。互质数是指两个数没有除1以外的公约数,如:n=9,则2、4、5、7、8为9的互质数。请按如下的输出格式输出:n=9--24578。#includestdio.hinthuzhi(intm,intn){intj;for(j=2;jm;j++)if(m%j==0&&n%j==0)return0;return1;}main(){intn,m;scanf(“%d”,&n);printf(“n=%3d--”,n);for(m=2;mn;m++)if(huzhi(m,n))printf(“%3d”,m);getch();}【例4-15】请设计程序,从键盘上输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。#includestdio.hintletter,digit,space,other;voidstat(charc){if(c=’A’&&c=’Z’||c=’a’&&c=’z’)letter++;elseif(c==32)space++;elseif(c=’0’&&c=’9’)digit++;elseother++;}voidmain(){charc;while((c=getchar())!=’\n’)stat(c);printf(“letter=%ddigit=%dspace=%dother=%d\n”,letter,digit,space,other);getch();}【例4-16】用迭代法求a的近似值。迭代公式为:)(211nnnxaxx。要求前后两次求出值的差的绝对值小于10-6时迭代中止。#includestdio.h#includemath.hfloatsquare(floata){floatx0,x1;x0=a/2;x1=0.5*(x0+a/x0);while(fabs(x0-x1)=1.0e-6){x0=x1;x1=0.5*(x0+a/x0);}returnx1;}voidmain(){floata;scanf(“%f”,&a);if(a0)printf(“aisnegetive”);elseprintf(“square(%.1f)=%.1f”,a,square(a));getch();}【例4-17】用二分法求方程2x3-4x2+3x-6=0在(-10,10)之间的一个近似实根,要求绝对值误差不超过10-5。#includestdio.h#includemath.hfloatf(floatx){return2*x*x*x-4*x*x+3*x-6;}voidmain(){floatm=-10,n=10,r;r=(m+n)/2.0;while(1){if(f(m)*f(n)0)n=r;elsem=r;if(fabs(f(r))1e-5)break;r=(m+n)/2.0;}printf(“Theresultis%6.3f\n”,r);getch();}书后编程题:1.程序的功能是:寻找并输出11至999之间的数m,它满足m、m2、m3均为回文数。例如m=11,m2=121,m3=1331皆为回文数,故m=11是满足条件的一个数。请设计函数intvalue(longm),其功能是判断m是否是回文数,如是,则函数返回1,否则返回0。#includestdio.hintvalue(longm){inta[80],i,j=1;for(i=1;m!=0;i++){a[i]=m%10;m=m/10;}i--;while(j=i)if(a[j++]!=a[i--])break;if(ji)return1;elsereturn0;}main(){longm;inta,b,c;for(m=11;m=999;m++){a=value(m);b=value(m*m);c=value(m*m*m);if((a+b+c)==3)printf(%d\n,m);}getch();}2.编程,通过函数调用求从键盘上任意输入的一个正整数的反序数。如:输入为123,则调用函数后的输出结果为321。#includestdio.hvoidnixu(intx,intn){inta,i;for(i=0;in;i++){if(i==0){a=x%10;printf(%d,a);}elseif(i==1)nixu(x/10,n-1);}}voidmain(){intx,y,n=1;printf(Inputinteger:);scanf(%d,&x);y=x;while(y/10!=0){y/=10;n++;}nixu(x,n);getch();}3.编程,通过函数调用输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身。#includestdio.hintshuxian(n){inti,j,k;i=n/100;j=n/10-i*10;k=n%10;if(n==i*i*i+j*j*j+k*k*k)return1;elsereturn0;}voidmain(){intn,m;for(n=100;n1000;n++){m=shuxian(n);if(m==1)printf(%d\n,n);}getch();}4.一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。编程,通过函数调用求它在第10次落地时,共经过多少米?第10次反弹多高?#includestdio.hmain(){voidmove(floath,floats);floath=100,s=100;move(h,s);getch();}voidmove(floath,floats){inti;for(i=2;i=10;i++){h/=2;s+=2*h;}h/=2;printf(Thewhlolelengthis%4.1f\nthetenthheightis%4.1f,s,h);getch();}5.编程,通过函数调用计算级数前n项的!......!3!2132nxxxxn例如,输入n=10,x=0.3时,函数值为1.349859。#includestdio.hfloatjiecheng(floatx,intn){inti=1;floatsum=0.0,term=1.0;while(i=n){sum+=term;term*=x/i;i++;}returnsum;}main(){floatx;intn;scanf(%d%f,&n,&x);printf(%f\n,jiecheng(x,n));getch();}第五章例题及书后习题:【例5-1】请设计顺序查找法程序。程序设计要求如下:(1)编写函数intsearch(inta[],intn,intx),其功能是在长度为n的数组中查找整数x是否存在,若存在函数返回x在数组中的下标,否则返回-1。(2)编写函数main,定义并初始化一个一维数组a,接受从键盘上输入的整数x,用a和x作为实在参数调用函数search,根据调用函数得到的结果,输出x所在的下标或输出“Notfound!”。#includestdio.hIntsearch(inta[],intn,intx){inti;for(i=0;in;i++)if(a[i]==x)break;if(in)return1;elsereturn-1;}main(){chara[10]={10,9,8,7,6,5,4,3,2,1};intx,i;scanf(“%d”,&x);i=search(a,10,x);if(i!=-1)printf(“%d”,i);elseprintf(“Notfound!”);getch();}【例5-2】请设计选择排序法程序。程序设计要求如下:(1)编写函数voidsort(inta[],intn),其功能是将长度为n的数组a中的元素按升序排列。(2)编写函数main,定义一个数组a,从键盘上输入10个整数依次赋给数组中的各个元素,用a和10作为实在参数调用函数sort对a数组排序,并输出排序后的结果。#includestdio.hvoidsort(inta[],intn){inti,t,j,k;for(i=0;in-2;i++){k=i;for(j=i+1;jn;j++)if(a[k]a[j])k=j;t=a[i];a[i]=a[k];a[k]=t;}}main(){inti,a[10]={10,9,8,7,6,5,4,3,2,1};sort(a,10);for(i=0;i10;i++)printf(%3d,a[i]);getch();}【例5-3】从键盘上输入数据给一个3×5的整型数组赋值,找出数组中最大元素值及其所在的行列位置。#includestdio.hintzhao(inta[3][5]){inti,j,maxi=0,maxj=0,max;max=a[0][0];for(i=0;i3;i++)for(j=0;j5;j++)if(a[i][j]max){max=a[i][j];maxi=i;maxj=j;}printf(%3d%d%d,max,maxi,maxj);}main(){inta[3][5],i,j;for(i=0;i3;i++)for(j=0;j5;j++)scanf(%3d,&a[i][j]);zhao(a);getch();}【例5-4】请设计程序,求矩阵a的转置矩阵。【例5-12】从键盘上输入一行文本,统计其中有多少个单词(假设连续的一组字母视为一个单词,单词之间用空格分隔)。#includestdio.hintdanci(charstr[80]){inti,k=0,count=0;if(str[0]!='')count++;for(i=1;str[i]!='\0';i++)if(str[i]!=''&&str[i-1]=='')count++;printf(%d,count);}voidmain(){charstr[80];gets(str);danci(str);getch();}【例5-13】输入一行英文字符,对其加密后输出。加密方法为:每个字母取其后的第3个字母,并保持原来的大小写状态,如'A'变成'D','B'变成'E',…,'X'变成'A','Y'变成'B','Z'变成'C',…。#includestdio.hintjiasan(charstr[80]){inti,j=0;for(i=0;str[i]!='\0';i++){j=str[i]+3;if(j90&&j94||j122&&j126)j=j-26;str[i]=j;}}main(){charstr[80];inti;gets(str);jiasan(str);puts(str);getch();}【例5-14】使用冒泡排序法将a数组中的10