二、简单应用(40分)1.函数调用1.1拆分三位数28.22.简单应用题请编写一个函数sortnum(intnum),参数num是一个三位的整数,该函数将num的百位、十位和个位的数字进行重排,并返回由上述的三个数字组成的最大的三位数。注意:部分源程序已存在文件test28_2.cpp中。如输入456后,输出结果如下:654请勿修改主函数main和其他函数中的任何内容,仅在函数sortnum的花括号中填写若干语句。文件test28_2.cpp的内容如下:#includeiostream.hintsortnum(intnum){}voidmain(){intnum;intresult=0;cout请输入一个三位数;cinnum;coutsortnum(num)endl;}【答案】intnumber[3],i,j,temp;for(i=0;i3;i++){number[i]=num%10;num=num/10;}for(i=0;i2;i++){for(j=i+1;j3;j++)if(number[j]=number[i]){temp=number[j];number[j]=number[i];number[i]=temp;}}num=number[2]*100+number[1]*10+number[0];returnnum;1.2月份转换40.22.简单应用题请编写一个函数printdate(intyear,intmonth,intday),该函数实现将输入的3个数字转换成英语数字纪年输出的功能,如输入March9,1978,则输出197839。注意:使用switch结构实现该函数的基本功能并应该能够判断错误的输入。部分源程序已存在文件test40_2.cpp中。请勿修改主函数main和其他函数中的任何内容,仅在函数printdate的花括号中填写若干语句。源程序文件test40_2.cpp清单如下:#includeiostream.hvoidprintdate(intyear,intmonth,intday){}voidmain(){printdate(1978,3,9);}【答案】voidprintdate(intyear,intmonth,intday){if(year0||month1||month12||day1||day31){coutERROR;return;}switch(month){case1:coutJanuary;break;case2:coutFebruary;break;case3:coutMarch;break;case4:coutApril;break;case5:coutMay;break;case6:coutJune;break;case7:coutJuly;break;case8:coutAuguest;break;case9:coutSeptember;break;case10:coutOctober;break;case11:coutNovember;break;case12:coutDecember;break;}coutday,yearendl;}1.3平方根29.22.编程题编写函数fun(),它的功能是求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并做为函数值返回。例如:n为1000时,函数值应为s=153.909064。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#includeconio.h#includemath.h#includestdio.hdoublefun(intn){}main(){clrscr();printf(s=%f\n,fun(1000));}【答案】doublefun(intn){doubles=0.0;inti;for(i=0;in;i++)/*从0~n中找到既能被3整除同时又能被7整除的数,并将这些数求和*/if(i%3==0&&i%7==0)s=s+i;s=sqrt(s);/*对s求平方根*/returns;}1.4求幂一25.22.简单应用题请编写两个函数intsum_of_powers(intk,intn),powers(intm,intn),求1到6的k次方的和,sum_of_powers中参数k和n分别表示k次方和所求数列中最大的一个自然数,最后返回所求值,powers中参数m和n分别表示m为底数n为指数,最后返回所求值。要求使用for循环和函数嵌套(intsum_of_powers中调用powers)实现算法。输出结果如下:sumof4powersofintergersfrom1to6=2275注意:部分源程序已存在文件test25_2.cpp中。请勿修改主函数main和其他函数中的任何内容,仅在函数sum_of_powers和powers的花括号中填写若干语句。文件test25_2.cpp的内容如下:#includeiostream.hconstintk(4);constintn(6);intsum_of_powers(intk,intn),powers(intm,intn);voidmain(){coutsumofkpowersofintergersfrom1ton=;coutsum_of_powers(k,n)endl;}intsum_of_powers(intk,intn){}intpowers(intm,intn){}【答案】(1)intsum_of_powers(intk,intn){intsum(0);for(inti(1);i=n;i++)sum+=powers(i,k);returnsum;}(2)intpowers(intm,intn){inti,product(1);for(i=1;i=n;i++)product*=m;returnproduct;}1.5求幂二30.22.简单应用题请编写一个函数fun(intx,intn),该函数返回x的n次幂的值,其中x和n都是非负整数。x的n次幂的计算方法是1与x相乘n次,如x的20次幂的计算为1与x相乘20次。注意:部分源程序已存在文件test30_2.cpp中。请勿修改主函数main和其他函数中的任何内容,仅在函数fun的花括号中填写若干语句。如输入3和4,输出结果如下:3481文件test30_2.cpp清单如下:#includeiostream.hdoublefun(intx,intn){}voidmain(){intx,n;cinxn;coutfun(x,n)endl;}【答案】if(x==0)return0;if(n==0)return1;inty=1;for(inti=0;in;i++)y*=x;returny;30.22.简单应用题请编写一个函数fun(intx,intn),该函数返回x的n次幂的值,其中x和n都是非负整数。x的n次幂的计算方法是1与x相乘n次,如x的20次幂的计算为1与x相乘20次。注意:部分源程序已存在文件test30_2.cpp中。请勿修改主函数main和其他函数中的任何内容,仅在函数fun的花括号中填写若干语句。如输入3和4,输出结果如下:3481文件test30_2.cpp清单如下:#includeiostream.hdoublefun(intx,intn){}voidmain(){intx,n;cinxn;coutfun(x,n)endl;}【答案】if(x==0)return0;if(n==0)return1;inty=1;for(inti=0;in;i++)y*=x;returny;1.6计算因子33.22.简单应用题请编写一个函数fun(),它的功能是计算并输出给定整数n的所有因子(不包括1与自身)之和(规定n的值不大于1000)。例如:主函数从键盘给输入n的值为856,则输出为sum=763。注意:部分源程序已存在文件test33_2.cpp中。请勿修改主函数main和其他函数中的任何内容,仅在函数fun的花括号中填写若干语句。文件test33_2.cpp清单如下:#includestdio.h#includeiostream.hintfun(intn){}voidmain(){intn,sum;coutInputn:endl;cinn;sum=fun(n);coutsum=\nsumendl;}【答案】intfun(intn){ints=0,i;for(i=2;i=n-1;i++)if(n%i==0)s+=i;returns;}1.7累加一37.22.简单应用题请编写函数fun(),其功能是计算并输出下列多项式值Sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n!例如:从键盘输入15,则输出为s=2.718282。注意:部分源程序以存在文件test37_2.cpp中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。文件test37_2.cpp的内容如下:#includestdio.h#includeiostream.hdoublefun(intn){}voidmain(){intn;doubles;coutInputn:endl;cinn;s=fun(n);couts=sendl;}1.8累加二38.22.简单应用题请编写函数fun(),其功能是计算并输出当x0.97时下列多项式的值,直到∣Sn-Sn-1∣0.000001为止。Sn=1+0.5x+0.5(0.5-1)x2/2!+0.5(0.5-1)(0.5-2)x3/3!+…0.5(0.5-1)(0.5-2)…(0.5-n+1)xn/n!例如:主函数从键盘给x输入0.21后,则输出为s=1.100000。注意:部分源程序以存在文件test38_2.cpp中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。文件test38_2.cpp的内容如下:#includestdio.h#includeiostream.h#includemath.hdoublefun(doublex){}voidmain(){doublex,s;coutInputx:endl;cinx;s=fun(x);couts=sendl;}【答案】doublefun(doublex){doubles1=1.0,p=1.0,sum=0.0,s0,t=1.0;intn=1;do{s0=s1;sum+=s0;t*=n;p*=(0.5-n+1)*x;s1=p/t;n++;}while(fabs(s1-s0)=1e-6);returnsum;}1.9冒泡排序23.22.简单应用题请编写一个函数voidbubble(doubledata[],intlength),其中data是一维数组,存放比较的数据,length是数组中存放元素的个数,用冒泡法将数据(个数可变)排序后由小到大输出。冒泡法是常用的排序算法,这种算法执行效率不高,但比较简单,就是将相邻的两个数据作比较,把较小的数据交换到前面。纵向看来,交换过程中较小的数据就好像水中的气泡不断浮起。要求使用for循环实现算法。注意:部分源程序已存在文件test23_2.cpp中。请勿修改主函数main和其他函数中的任何内容,仅在函数bubble的花括号中填写若干语句。文件test23_2.cpp的内容如下:#includeiostream.hvoidbubble(doubledata[],intlength){}voidmain(){intn;co