【真题1】 给定程序中,函数fun 的功能是:将自然数1~10 以及它们的平方根写 到名为myfile3.txt 的文本文件中,然后再顺序读出显示在屏幕上。 #include < math.h > #include < stdio.h > int fun(char *fname ) { FILE *fp; int i,n; float x; if((fp=fopen(fname, "w"))==NULL) return 0; for(i=1;i< =10;i++) /**********found**********/ fprintf(___【1】___, "%d %f\n", i, sqrt((double)i)); printf("\nSucceed!\n"); /**********found**********/ ___【2】___; printf("\nThe data in file :\n"); /**********found**********/ if((fp=fopen(___【3】___,"r"))==NULL) return 0; fscanf(fp,"%d%f",&n,&x); while(!feof(fp)) {printf("%d %f\n", n, x); fscanf(fp,"%d%f", &n, &x);} fclose(fp); return 1; } main() { char fname[]="myfile3.txt"; fun(fname); } (2011年2月) 解析: 本题考核点为:文件的打开,关闭和读写操作。 题中第一个空填"fp":是向文件指针fp所指向的文件中写数据。 题中第二个空填"fclose(fp);":此语句是文件的关闭操作。 题中第三个空填"fname":fopen 函数用于文件的打开操作,其调用形式一般 为:fopen(文件名,使用文件方式)。"fname"为所要打开的文件名。 答案:【1】fp 【2】fclose(fp) 【3】fname 【真题2】 给定程序modi.c 中函数fun 的功能是:把 m(1≤m≤10)个字符串连接 起来,组成一个新串,放入pt中。 例如:把3 个串:"abc","CD","EF"串连起来, 结果是"abcCDEF"。 请改正函数 fun 中的语法错误,使它能统计出正确结果。 注 意:不要改动 main 函数。 #include < conio.h > #include < stdio.h > #include < string.h > int fun(char str[][10], int m, char *pt) { /************found************/ Int k,q,i; for(k=0;k< m;k++) { q=strlen(str[k]); for(i=0;i< q;i++) /************found************/ pt[i]=str[k,i]; pt+=q; pt[0]=0; } } main() { int m,h; char s[10][10], p[120]; clrscr() ; printf("\nPlease enter m:"); scanf("%d", &m); gets(s[0]); printf("\nPlease enter %d string:\n",m); for (h=0; h<m; h++) gets(s[h]); fun(s,m,p); printf("\nThe result is:%s\n",p); } (2011年2月) 解析: 本题的考核点是C语言的一些基本用法和数组的使用。 C 语言是区分大小写的,所以,"Int k, q, i; "应改为"int k, q, i; "。 二维数组定义的一般形式为:类型说明符 数组名[常量表达式][常量表达式] 例 如char str[k][i]定义str为k 行i 列的字符数组。所以"pt[i]=str[k,i];"应改 为"pt[i]=str[k][i];"。 【真题3】 规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是: 除了前面连续的*号之外,将串中其它*号全部删除。在编写函数时,不得使用C 语 言提供的字符串函数。 例如,字符串中的内容为:****A*BC*DEF*G******, 删除后,字符串中的内容应当是:****ABCDEFG。 注意:部分源程序存在文件 prog.c中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括 号中填入你编写的若干语句。 #include < stdio.h > #include < conio.h > void fun(char *a) {……} main() { char s[81]; printf("Enter a string:\n"); gets(s); fun(s); printf("The string after deleted:\n"); puts(s); } (2011年2月) 解析: 本题的考核点是删除字符串中字符的算法。 提示思路:先将原串中的串 首连续的*号字符赋给一字符串数组,再从原串中的第一个非*字符开始,将非* 号的字符追加其后,最后将新串覆盖原串。 void fun(char *a) { char b[81]; int i=0,j=0; /*将原字符串中的字符串首连续的*号字符赋给一字符串数组b*/ while (a[i] && (a[i]=='*')) {b[j]=a[i]; j++; i++;} else k++; while (a[i]) /*从原串中的第一个非*字符开始,将非*号的字符追加在数组b 后*/ if (a[i]!='*') {b[j]=a[i];j++;i++;} else i++; b[j]='\0';j=0;i=0; while(b[j]) /*将字符串b 中的所有字符复制到a 字符串中覆盖原串 */ {a[i]=b[j];i++;j++;} a[i]='\0'; } |