预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

实验八函数(二)参考答案1.(sy8-1.c)请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。【解题思路】在给出的参考程序中,由于函数要求的返回值为双精度型,所以先将变量avg、sum定义为双精度型,初值为0.0,然后通过for循环分别求出相邻两个元素的平均值放入变量avg中,再使用求平方根函数sqrt()对各平均值开方求和,最终结果输出到变量sum中并返回。【参考答案】doublefun(doublex[9]){inti;doubleavg=0.0,sum=0.0;//将变量avg、sum定义为双精度型,并给其赋初值为0.0for(i=0;i<8;i++){avg=(x[i]+x[i+1])/2;//通过for循环分别求出相邻两个元素的平均值放入变量avg中sum+=sqrt(avg);//使用求平方根函数sqrt()对各平均值开方求和,最终结果输出到变量sum}returnsum;/*返回计算结果*/}2.(sy8-2.c)编写函数fun,实现矩阵(3行3列)的转置(即行列互换)。例如,输入下面的矩阵:,程序输出:。【解题思路】方阵转置,只需要将左下半三角元素和右上半三角元素对换即可。【参考答案】intfun(intarray[3][3]){inti,j,t;for(i=0;i<3;i++)for(j=0;j<i;j++)t=array[i][j],array[i][j]=arrar[j][i],array[j][i]=t;}3.(sy8-3.c)请编写函数fun,函数的功能是:统计一行字符串中单词的个数作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。【解题思路】在给出的参考程序中,若判断出当前字符为非空格,而它前面的字符是空格,则单词数累加1;若当前字符为非空格,而其前面的字符也为非空格,则单词数不累加1,程序细节可以参考程序的注释部分。【参考答案】intfun(chars[]){inti,word=0,num=0;/*word标志是否是单词,num用来记录单词数*/for(i=0;s[i]!=’\0’;i++)if(s[i]==‘’)word=0;//没有单词或结束单词elseif(word==0)//遇到非空格且之前没有单词,则表示遇到新的单词{num++;//计数器加1word=1;//标志变量改成1}returnnum;/*返回统计结果*/}4.(sy8-4.c)请编写函数fun,函数的功能是:在字符串中的所有数字字符前加一个$字符。例如,输入A1B23CD45,则输出为:A$1B$2$3CD$4$5。【解题思路】通过一中间数组和一循环来实现。方法是:从字符串的首字符开始,判断字符是否为数字,若是,将字符$和数字字符赋给中间数组,反之,将字符直接赋给中间数组,直至字符串尾,最后将中间数组赋给原字符串。【参考答案】voidfun(char*s){charp[80];inti=0,j=0;while(s[i]!='\0')/*假如s[i]不为字符串结束符,则继续循环*/{if((s[i]>='0')&&(s[i]<='9')){p[j]='$';p[j+1]=s[i];j=j+2;}/*假如s[i]为数字字符,则将$置于p[j]中,数字字符置于p[j+1]中*/else{p[j]=s[i];j=j+1;}/*否则将s[i]置于p[j]中*/i++;}p[j]='\0';}5.(sy8-5.c)请补充函数fun(),该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组str中。例如:当n=13572468时,str=“86427531”。【参考答案】第一处:n>0第二处:n%10+'0'第三处:str[i]=′\0′6.(sy8-6.c)str是一个由数字和字母字符组成的字符串,由变量num传入字符串长度。请补充函数fun(),该函数的功能是:把字符串str中的数字字符转换成数字并存放到整型数组bb中,函数返回数组bb的长度。例如:str=“Bcd123e456hui890”,结果为:123456890。【参考答案】第一处:s[i]>=′0′&&s[i]<=′9′第二处:s[i]-′0′第三处:n