否则,如只写 judge(st)则此次函数调用毫无意义,因返回值未被利用;有时不必如此,如子 函数返回值类型为空时,此时调用语句可直接写tans(sm),如输出欢迎界面的子函数,只需输出 一个界面即可,无需返回值:再如数组名作函数参数时,因主调函数和被调函数中的数组是同 个数组,在子函数中对数组加以改变,原函数中的数组也相应改变,故此时无返回原数组也 发生了改变! (9)求最长单词并输出一题提示:设一个标记变量fag,用fag=0或1代表前一个字符是否 空格,当且仅当前一个字符是空格,且当且字符是字母代表单词开始。当前一个字符不是字母 而当且字符不是字母是单词结束 第二次作业说明 递归法NS图画法,如求n!对应的N-S图如下 主函数:输入n,调用递归函数f求n! 输出 /*递归法求阶乘子函数* int f(int m) 或 return m return(x 说明:数组元素作参数是将数组元素的值传递到形参对应的内存空间中,之后操作是对形参对 应空间的数值进行的,故原来的数组内容不变:而数组名作参数是将数组名的值(即数组首地 址)传递到形参对应的单元中,从而形参的值就是原数组的首地址,之后的操作是根据形参的 值即原数组的首地址进行的,从而原数组的内容改变。 exchange(a0],a[1)-- exchang(inti,intj){ float tmp;tmp=i;i=jj=tmp}/*互换的是形参i与j* excange(a)-- excange(int bD)(float tmp; tmp=bO].b[l=tmp;}/*b=a均为原数组首址* 813’、递推法求勒让德多项式值 #include<stdio. h Int n, I; float x,y,yl, y2 anf(%f%d”,&f&n)/*注意数据类型与格式控制符一致,比如读入实数用%f°/ if(n==0y=1; else if(n==1)y=x: el yl=l; y2=x 应yl=xy2=1;*/ for(i=2; i<=n; i++) y=(2*n-1)*xy1-(n-1)*y2)h;/*应y=(2*i-1)x-y1-(i-1)*y2yiv yl=y2 printf("the result is %fny) /+intn; float x; int p[n]or(i=2;<mn;i+)p[i]=pi-1]+p[i-2]x;因数组名大小必须为常数,故错误* /*intn; float x;intp(n,x),for(i=2;K<n;i++)(n,x=p(n-1x)+pn-2,x)*x:因intp(nx)既非定义变量(不 符合变量命名规则),也非定义函数(函数的形参应指定类型),且赋值语句左侧既非变量,也 非数组名,故严重错误* 递归法自己想!可参考下例类似得到。 817递归法将一个整数以字符形式输出。如483,先用 butchart(输出字符4后 putchar(8)最后否则,如只写 judge(str[i])则此次函数调用毫无意义,因返回值未被利用;有时不必如此,如子 函数返回值类型为空时,此时调用语句可直接写 trans(str),如输出欢迎界面的子函数,只需输出 一个界面即可,无需返回值;再如数组名作函数参数时,因主调函数和被调函数中的数组是同 一个数组,在子函数中对数组加以改变,原函数中的数组也相应改变,故此时无返回原数组也 发生了改变! (9)求最长单词并输出一题提示:设一个标记变量 flag,用 flag=0 或 1 代表前一个字符是否 空格,当且仅当前一个字符是空格,且当且字符是字母代表单词开始。当前一个字符不是字母, 而当且字符不是字母是单词结束。 第二次作业说明 一、递归法 N-S 图画法,如求 n!对应的 N-S 图如下: 主函数:输入 n,调用递归函数 f 求 n!: /*递归法求阶乘子函数*/ int f(int m) 或 二、 说明:数组元素作参数是将数组元素的值传递到形参对应的内存空间中,之后操作是对形参对 应空间的数值进行的,故原来的数组内容不变;而数组名作参数是将数组名的值(即数组首地 址)传递到形参对应的单元中,从而形参的值就是原数组的首地址,之后的操作是根据形参的 值即原数组的首地址进行的,从而原数组的内容改变。 exchange(a[0],a[1]) ---> exchang(int i,int j){float tmp;tmp=i;i=j;j=tmp}/*互换的是形参 i 与 j*/ excange(a) ---> excange(int b[]){float tmp;tmp=b[0];b[1]=tmp;}/*b=a 均为原数组首址*/ 8.13’、递推法求勒让德多项式值 #include<stdio.h> void main() { int n,i; float x,y,y1,y2; printf(“input x & n\n”); scanf(“%f %d”,&f,&n) /*注意数据类型与格式控制符一致,比如读入实数用%f*/ if(n= =0)y=1; else if(n= =1)y=x; else { y1=1;y2=x; /*应 y1=x;y2=1;*/ for(i=2;i<=n;i++) { y=((2*n-1)*x-y1-(n-1)*y2)/n; /*应 y=((2*i-1)*x-y1-(i-1)*y2)/i*/ y1=y2; y2=y; } } printf(“the result is %f\n”,y); } /*int n;float x;int p[n];for(i=2;i<n;i++)p[i]=p[i-1]+p[i-2]*x;因数组名大小必须为常数,故错误*/ /* int n;float x;int p(n,x); for(i=2;i<n;i++)p(n,x)=p(n-1,x)+p(n-2,x)*x;因 int p(n,x)既非定义变量(不 符合变量命名规则),也非定义函数(函数的形参应指定类型),且赋值语句左侧既非变量,也 非数组名,故严重错误*/ 递归法自己想!可参考下例类似得到。 8.17 递归法将一个整数以字符形式输出。如 483,先用 putchar()输出字符 4,后 putchar(‘8’),最后 输入 n p=f (n) 输出 p m= =1 Y N return(1) return(f(n-1)) m= =1 Y N x=1 X=f(m-1) return(x)