大学生C语言程序设计(第四版 谭洪强)实验8答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验八 函 数(二) 参考答案

/*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列)的转置(即行列互换)。例如,输入下

面的矩阵:⎪⎪⎪⎭⎫ ⎝⎛900800700600500400300200100,程序输出: ⎪⎪⎪⎭

⎫ ⎝⎛900600300800500200700400100。 【解题思路】

方阵转置,只需要将左下半三角元素和右上半三角元素对换即可。

【参考答案】

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[])

{ 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[])

{ c har 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】

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%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

相关文档
最新文档