路漫漫其修远兮,吾将上下而求索 - 百度文库
实验八 函 数(二) 参考答案
/*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 中并返回。 【参考答案】*/
double fun(double x[9]) { int i ;
double avg=0.0,sum=0.0; //将变量avg、sum定义为双精度型,并给其赋初值为0.0 for (i=0;i< 8;i++)
{ avg=(x[i]+x[i+1])/2; //通过for循环分别求出相邻两个元素的平均值放入变量avg中 sum+=sqrt(avg); //使用求平方根函数sqrt()对各平均值开方求和,最终结果输出到变量 sum }
return sum; /*返回计算结果*/ }
2.(sy8-2.c) 编写函数fun,实现矩阵(3行3列)的转置(即行列互换)。例如,输入下
100面的矩阵:??200300??,程序输出:
400500600???700800900????100400700?。 ???200500800??300600900???【解题思路】
方阵转置,只需要将左下半三角元素和右上半三角元素对换即可。 【参考答案】
int fun(int array[3][3]) { int i,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,函数的功能是:统计一行字符串中单词的个数作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。 【解题思路】I am a student!
在给出的参考程序中,若判断出当前字符为非空格,而它前面的字符是空格,则单词数累加 1;若当前字符为非空格,而其前面的字符也为非空格,则单词数不累加 1,程序细节可以参考程序的注释部分。 【参考答案1】
int fun( char s[]) 1
路漫漫其修远兮,吾将上下而求索 - 百度文库
{ int i,word=0,num=0;/*word标志是否是单词,num用来记录单词数*/ for(i=0;s[i]!=’\\0’;i++) if(s[i]== ‘ ’ ) word=0; //没有单词或结束单词 else if(word==0) //遇到非空格且之前没有单词,则表示遇到新的单词 { num++; //计数器加1 word=1; //标志变量改成1 }
return num; /*返回统计结果*/ }
【参考答案2】
int fun( char s[]) {int i,n=1;
for(i=0;s[i]!=0;i++) {
if(s[i]==' '&&(s[i+1]>='a'&&s[i+1]<='z')) n++; }
return n; }
4.(sy8-4.c) 请编写函数 fun,函数的功能是:在字符串中的所有数字字符前加一个$字符。例如,输入A1B23CD45,则输出为:A$1B$2$3CD$4$5。
【解题思路】
通过一中间数组和一循环来实现。方法是:从字符串的首字符开始,判断字符是否为数字,若是,将字符$和数字字符赋给中间数组,反之,将字符直接赋给中间数组,直至字符串尾,最后将中间数组赋给原字符串。 【参考答案1】
void fun(char s[]) { char p[160]; int i,j=0;
for(i=0;s[i]!=0;i++) {
if(s[i]>='0'&&s[i]<='9') p[j++]='$'; p[j++]=s[i]; }
p[j]=0;
for(i=0;p[i]!=0;i++) s[i]=p[i]; s[i]=0; }
【参考答案2】 2
路漫漫其修远兮,吾将上下而求索 - 百度文库
void fun(char *s) { char p[80]; int i=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+'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
3
大学生c语言程序设计(第四版谭洪强)实验8答案



