加字符串结束符,所以应填:'\\0'。 ***************************************************
给定程序MODI1.C中函数 fun 的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num )为止: π 1 1 1
┄┄≈1 - ┄┄ + ┄┄ - ┄┄ + ... 4 3 5 7
例如, 程序运行后, 输入0.0001, 则程序输出3.1414。
请改正程序中的错误,使它能输出正确的结果。
注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include
float n, t, pi ;
t = 1 ; pi = 0 ; n = 1 ; s = 1 ; while(t >= num) {
pi = pi + t ; n = n + 2 ; s = -s ; t = s % n ; }
pi = pi * 4 ; return pi ; }
main( )
{ float n1, n2 ;
printf(\ scanf(\ n2 = fun(n1) ;
printf(\ }
解题思路:
第一处:要判断t的最后一项绝对小于指定的数,由于t是实数,那么应改为while(fabs(t)>=num)。 第二处:t是s除以n的值,而不是取余数,所以应改t=s/n;。 ***************************************************
请编写一个函数void fun (char a[],char b[],int n),其功能是:删除一个字符串中指定下标的字符。其中, a指向原字符串, 删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。 例如,输入一个字符串: World,然后输入3,则调用该函数后的结果
为: Word。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include
void fun (char a[], char b[], int n) { }
main( )
{ char str1[LEN], str2[LEN] ; int n ;
printf(\ gets(str1) ;
printf(\the position of the string deleted:\ scanf(\ fun(str1, str2, n) ;
printf(\new string is: %s\\n\str2) ; NONO() ; }
解题思路:
本题是利用字符串拷贝和字符串连接来生成新的字符串。 参考答案:
void fun (char a[], char b[], int n) {
strncpy(b, a, n) ; b[n] = 0 ;
strcat(b, a + n + 1) ; }
※※※※※※※※※※※※※※※※※※※※※※※※※
第32套: 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构! 给定源程序: #include
void fun(char (*ss) __1__, int k) { int i=0 ;
while(i< __2__) {
ss[i][k]=__3__; i++; } }
main() { char x[N][M]={\\ int i;
printf(\ for(i=0;i for(i=0; i 解题思路: 本题是根据给定的字符串数组中删除串长大于某个值的右边字符串。 第一处:函数的定义,试题中已用M作为字符串的长度,所以应填:M。 第二处:利用while循环,分别对字符串数组中的每个字符串置字符串结束符,程序中已经给定了N个字符串,所以应填:N。 第三处:置字符串结束符,所以应填:0(或'\\0')。 *************************************************** 给定程序MODI1.C中函数fun的功能是:根据以下公式求π值,并作为函数值返回。 例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。 π 1 1 2 1 2 3 1 2 3 4 ─=1+ ─ + ─×─ + ─×─×─ + ─×─×─×─+?? 2 3 3 5 3 5 7 3 5 7 9 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include while( t>eps) { s+=t; t=t * n/(2*n+1); n++; } return(s); } main() { double x; printf(\enter a precision: \ printf(\ Pi=%lf\\n\\n\ } 解题思路: 第一处: 初始化t的值,根据程序中的计算程序和试题的要求得出,t应为1。 第二处: 根据公式π/2得出,所以返回时应原有s的基础上乘以2作为返回值。 *************************************************** 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号; 若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。函数fun中给出的语句仅供参考。例如,字符串中的内容为:*******A*BC*DEF*G****,若n的值为4,删除后, 字符串中的内容应当是:****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍 为:*******A*BC*DEF*G****。n的值在主函数中输入。 在编写函数时,不得使用C语言提供的字符串函数。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun( char *a, int n ) { int i=0,j,k=0; while(a[k]=='*') k++; /* k为统计*字符个数 */ if(k>n) { i=n;j=k; /* 以下完成将下标为k至串尾的字符前移k-n个位置 */ } } main() { char s[81]; int n; printf(\ printf(\fun( s,n ); printf(\string after deleted:\\n\ NONO(); } 解题思路: 本题是考察字符串的操作。 利用for循环来判断a[j]的字符是否是字符串结束符,如果不是字符串结束符,则把a[j] 的字符依次存放到a[i]。其中,变量i是n的初始值,变量j是字符串前导的*号数。 参考答案: void fun( char *a, int n ) { int i=0,j,k=0; while(a[k]=='*') k++; /* k为统计*字符个数 */ if(k>n) { i=n;j=k; /* 以下完成将下标为k至串尾的字符前移k-n个位置 */ for(; a[j] !=0 ; j++) a[i++]=a[j]; a[i] = 0; } } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第33套: 给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放 在变量tfname中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(char *source, char *target) { FILE *fs,*ft; char ch; if((fs=fopen(source, ___1___))==NULL) return 0; if((ft=fopen(target, \ return 0; printf(\ ch=fgetc(fs); while(!feof(___2___)) { putchar( ch ); fputc(ch,___3___); ch=fgetc(fs); } fclose(fs); fclose(ft); printf(\ return 1; } main() { char sfname[20] =\ FILE *myf; int i; char c; myf=fopen(sfname,\ printf(\ for(i=1; i<30; i++){ c='A'+rand()%;fprintf(myf,\ fclose(myf);printf(\ if (fun(sfname, tfname)) printf(\ else printf(\ } 解题思路: 本题要求是把一个文件中的内容复制到另一个文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。 第一处:要求打开一个读方式的源文件,因此可以填上\或\。打开读文件操作的流是fs。 第二处:用while循环来判断源文件是否已读到文件结束符,int feof(FILE *stream),因 此,此处只能填写fs。 第三处:把已经读取的字符写入目标文件中,打开写文件操作的流是ft,因此,此处只能填写ft。 *************************************************** 给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为偶数的数依 次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。 例如,当s中的数为:87653142时,t中的数为:8642。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun (long s, long *t) { int d; long sl=1; *t = 0; while ( s > 0) { d = s; if (d%2=0) { *t=d* sl+ *t; sl *= 10; } s \\= 10; } } main() { long s, t; printf(\enter s:\scanf(\ fun(s, &t); printf(\ } 解题思路: 第一处:判断相等的条件是==。 第二处:整除的符号是/。 *************************************************** 函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上, b数的十位和个位数依次放在c数的百位和个位上。 例如,当a=45,b=12时,调用该函数后,c=5142。 注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include void fun(int a, int b, long *c) { } main() { int a,b; long c; printf(\ scanf(\ fun(a, b, &c); printf(\ NONO(); } 解题思路: 本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。 取a十位数字的方法:a/10 取a个位数字的方法:a 参考答案: void fun(int a, int b, long *c) { *c=(a)*1000+(b/10)*100+(a/10)*10+(b); } ※※※※※※※※※※※※※※ ※※※※※※※※※※※ 第34套: 用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数 表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止。这样会得到一个序列: 2,3,5,7,11,13,17,19,23,?? 函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include { int a[10000], i,j, count=0; for (i=2; i<=n; i++) a[i] = i; i = 2; while (i for (j=a[i]*2; j<=n; j+=___1___) a[j] = 0; i++; while (___2___==0) i++; } printf(\prime number between 2 to %d\\n\ for (i=2; i<=n; i++) if (a[i]!=___3___) { count++; printf( count?\[i]); } return count; } main() { int n=20, r; r = fun(n); printf(\number of prime is : %d\\n\ } 解题思路: 第一处:所有2的倍数的数从数表中删去,所以应填:a[i]。 第二处:找出下一个不是的a[i],所以应填:a[i]。 第三处:输出素数,只要判断a[i]不是0就是素数,所以应填:0。 **************************** *********************** 给定程序MODI1.C中函数fun的功能是: 为一个偶数寻找两个素数, 这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include void fun(int a,int *b,int *c) { int i,j,d,y; for(i=3;i<=a/2;i=i+2) { Y=1; for(j=2;j<=sqrt((double)i);j++) if(i%j==0) y=0; if(y==1) { d==a-i; for(j=2;j<=sqrt((double)d);j++) if(d%j==0) y=0; if(y==1) { *b=i; *c=d; } } } } main() { int a,b,c; do { printf(\a: \scanf(\ while(a%2); fun(a,&b,&c); printf(\= %d + %d\\n\ } 解题思路: 第一处:变量y错写成Y。 第二处:给变量d进行赋值,所以应改为:d=a-i;。 *************************************************** 请编写函数fun, 它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。 例如,在主函数中从键盘给n输入20后, 输出为: s=0.583333。 注意: 要求n的值不大于100。 部分源程序在文件PROG1.C中。 请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include } main() { int n; double s; printf(\n: \scanf(\ s=fun(n); printf(\ NONO(); } 解题思路: 本题是计算n(包括n)以内能被5或9整除的所有自然数的倒数之和。 参考答案: double fun(int n) { int i; double sum=0.0; for(i=1; i<=n; i++) if(i%5 == 0 || i%9 == 0) /* 被5或9整除 */ sum+=1.0/i; return sum; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第35套: 给定程序中,函数fun的功能是建立一个N×N的矩阵。 矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值 全部为3,?依次类推。例如,若N=5,生成的矩阵为: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun(int (*a) __1__) { int i,j,k,m; if(N%2==0) m=N/2 ; else m=N/2+1; for(i=0; i for(j= __2__ ; j main() { int x[N][N]={0},i,j; fun(x); printf(\ for(i=0; i 解题思路: 第一处:建立一个N×N的矩阵,所以应填:[N]。 第二处:j的起始变量值应i。 第三处:也应该填写i+1。 *************************************************** 给定程序MODI1.C中函数 fun 的功能是: 将十进制正整数m转换成k(2≤k≤9) 进制数, 并按高位到低位顺序输出。 例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。 请改正 fun 函数中的错误,使它能得出正确的结果。 注意:不要改动 main 函数。不得增行或删行,也不得更改程序的结构! 给定源程序: #include int aa[20], i; for( i = 0; m; i++ ) { aa[i] = m/k; m /= k; } for( ; i; i-- ) printf( \ } main() { int b, n; printf( \enter a number and a base:\\n\ scanf( \ fun( n, b ); printf(\ } 解题思路: 第一处:应该取模而不是整除,所以应为:aa[i]=m%k;。 第二处:输出aa的位置不正确,所以应为:printf(\。 *************************************************** 编写一个函数,从num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址。(注意: 主函数中用****作为结束输入的标志,函数fun中给出的语句仅供参考。) 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include int i,k=0,len, maxlen; /* k为a数组中最长串所在元素的下标,初始为0,maxlen为其串 长 */ maxlen=strlen(a[k]); for(i=1;i /* 以下完成查找最长串 */ } *max=a[k]; } main() { char ss[10][81],*ps; int n,i=0; printf(\输入若干个字符串:\ gets(ss[i]); puts(ss[i]); while(!strcmp(ss[i],\ { i++; gets(ss[i]); puts(ss[i]); } n=i; fun(ss,n,&ps); printf(\ NONO(); } 解题思路: 本题是考察考生怎样从已输入的字符串中找出长度最大的字符串。求字符串的长度可以使用strlen函数。 参考答案: fun(char(*a)[81],int num,char **max) { int i,k=0,maxlen; /* k为a数组中最长串所在元素的下标,初始为0,maxlen为其串长 */ maxlen=strlen(a[k]); for(i=1;i /* 以下完成查找最长串 */ if(strlen(a[i]) > maxlen) { maxlen = strlen(a[i]) ; k = i ; } } *max=a[k]; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第36套: 给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数, 存放在形参n所指的存储单元中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include typedef struct list { int data; struct list *next; } SLIST; SLIST *creatlist(int *a); void outlist(SLIST *); void fun( SLIST *h, int *n) { SLIST *p; ___1___=0; p=h->next; while(p) { (*n)++; p=p->___2___; } } main() { SLIST *head; int a[N]={12,87,45,32,91,16,20,48}, num; head=creatlist(a); outlist(head); fun(___3___, &num); printf(\ } SLIST *creatlist(int a[]) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i } p->next=0; return h; } void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf(\list is NULL!\\n\ else { printf(\ do { printf(\p=p->next; } while(p!=NULL); printf(\ } } 解题思路: 本题是要求统计出带有头结点的单向链表中结点的个数。 第一处:对n所指的存储单元进行初始化,所以应填:*n。 第二处:指向p的下一个结点,所以应填:next。 第三处:函数调用,在主函数中已经给出了head,所以应填:head。 *************************************************** 给定程序MODI1.C中函数fun的功能是:求出s所指字符串中最后一次出现的t 所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串; 若未找到,则函数值为NULL。 例如,当字符串中的内容为:\,t中的内容为:\时, 输出结果应是:abcdx。 当字符串中的内容为:\,t中的内容为:\时, 则程序输出未找到信息:not be found!。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include char * fun (char *s, char *t ) { char *p , *r, *a; a = Null; while ( *s ) { p = s; r = t; while ( *r ) if ( r == p ) { r++; p++; } else break; if ( *r == '\\0' ) a = s; s++; } return a ; } main() { char s[100], t[100], *p; printf(\enter string S :\scanf(\ printf(\scanf(\ p = fun( s, t ); if ( p ) printf(\result is : %s\\n\ else printf(\ } 解题思路: 第一处:指向空指针错误,Null应NULL。 第二处:比较指针位置的值是否相等,所以应改为:if(*r==*p)。 *************************************************** 函数fun的功能是: 将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。 例如,若s所指字符串中的内容为:\,其中字符A的ASCII码 值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为 奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其它依此类推。最后t所指的数组中的内容应是:\。 注意: 部分源程序存在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun(char *s, char t[]) { } main() { char s[100], t[100]; printf(\enter string S:\scanf(\ fun(s, t);