第11套
1.程序填空题
给定程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。
例如,s所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> #include <string.h> char *fun(char *s) { int i, j, k, n; char *p, *t; n=strlen(s)+1; t=(char*)malloc(n*sizeof(char)); p=(char*)malloc(n*sizeof(char)); j=0; k=0; for(i=0; i<n; i++) { if(((s[i]>='a')&&(s[i]<='z'))|| ((s[i]>='A')&&(s[i]<='Z'))) { /**********found**********/ t[j]=__1__; j++; } else { p[k]=s[i]; k++; } } /**********found**********/ for(i=0; i<__2__; i++) t[j+i]=p[i]; /**********found**********/ t[j+k]= __3__; return t; } int main() { char s[80]; printf("Please input: "); scanf("%s",s); printf("nThe result is: %sn",fun(s)); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:求出以下分数序列的前n项之和。
2/1,3/2,5/3,8/5,13/8,21/13,……
例如,若n=5,则应输出:8.391667。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> /**************found**************/ fun( n ) { int a = 2, b = 1, c, k ; double s=0.0 ; for ( k = 1; k <= n; k++ ) { s = s + 1.0 * a / b ; /**************found**************/ c = a; a += b; b += c; } return(s) ; } int main( ) { int n = 5 ; printf("nThe value of function is: %fn", fun(n)); return 0; }
3.程序设计题
编写函数fun,其功能是:求Fibonacci数列中大于s的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:
F(0)=0 F(1)=1
F(n)=F(n-1)+F(n-2)
例如,当s=1000时,函数值为1597。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); int fun(int s) { } int main() { int n; n=1000; printf("n=%d,f=%dn",n,fun(n)); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, n, s ; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for (i = 0 ; i < 10 ; i++) { fscanf(fp, "%d", &n) ; s = fun(n) ; fprintf(wf, "%dn", s) ; } fclose(fp) ; fclose(wf) ; }
1.(1)s[i] (2)k (3)'