{ x=s[i]; s[i]=s[t]; s[t]=x; }}
for(i=1,j=0; i 31.2 改错 给定程序MODI1.C 中函数fun的功能是:求pi值。 float fun ( float num ) { int s ; float n, t, pi ; t = 1 ; pi = 0 ; n = 1 ; s = 1 ; /**************found**************/ while((fabs(t))>=num) { pi = pi + t ; n = n + 2 ; s = -s ; /**************found**************/ t = s / n ; } pi = pi * 4 ; return pi ;} 31.3 程序 编写函数viod fun(char a[],char b[],int n),其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的小标。例如,输入一个字符串:World,然后输入3,则调用该函数后的结果为:Word。 #define LEN 20 void fun (char a[], char b[], int n) { strncpy(b, a, n) ; b[n] = 0 ; strcat(b, a + n + 1) ;} 第三十二套: 32.1填空 在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。 #define N 5 #define M 10 /**********found**********/ void fun(char (*ss) [M], int k) { int i=0 ; /**********found**********/ while(i< N) { /**********found**********/ ss[i][k]=0; i++; }} 32.2 改错 根据下面的公式求pi值,作为函数值返回。例如,给定精度的变量eps输入0.0005时,应当输出pi=3.140578 。 double fun(double eps) { double s,t; int n=1; s=0.0; /************found************/ t=1; while( t>eps) { s+=t; t=t * n/(2*n+1); n++; } /************found************/ return(2*s);} 32.3程序 使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么都不做,字符串中间和尾部de*号不删除。 例如,字符串中的内容为:*******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****若nwei8则字符串仍为*******A*BC*DEF*G****。n的值在主程序中输入。 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.1填空 调用函数fun指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回为0.在复制的过程中,把复制的内容输出到终端屏幕。主函数中的源文件名放在变量sfname中,目标文件名放在变量tfname中。 int fun(char *source, char *target) { FILE *fs,*ft; char ch; /**********found**********/ if((fs=fopen(source, \ return 0; if((ft=fopen(target, \w\ return 0; printf(\ ch=fgetc(fs); /**********found**********/ while(!feof(fs)) { putchar( ch ); /**********found**********/ fputc(ch,ft); ch=fgetc(fs); } fclose(fs); fclose(ft); printf(\ return 1;} 33.2改错 将长整数中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍为高位,地位仍在低位。 例如,当s中的数为:87653142时,t中的数为:8642。 void fun (long s, long *t) { int d; long sl=1; *t = 0; while ( s > 0) { d = s; /************found************/ if (d%2==0) { *t=d* sl+ *t; sl *= 10; } /************found************/ s /= 10; }} 33.3程序 将两个两位数的正整数a,b合并形成一个整数放在C中。合并的方式是:将a的十位和个位依次放在c数的十位和千位上,b数的十位和个位依次放在c数的百位和个位上。 例如,当a=45,b=12时,调用该函数后,c=5142。 void fun(int a, int b, long *c) { *c=(a)*1000+(b/10)*100+(a/10)*10+(b);} 第三十四套: 34.1填空 用筛选法可得到2-------n(n小于10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找一下非0数,并从数表中删去该数的所有倍数;依次类推,直到找到的下一个数等于n为止,这样会得到一个序列:2,3,5,7,11,13,17,19,23, 函数fun用筛选法找出所有小于等于n的素数,并统计的个数作为函数值返回。 int fun(int n) { int a[10000], i,j, count=0; for (i=2; i<=n; i++) a[i] = i; i = 2; while (i /**********found**********/ for (j=a[i]*2; j<=n; j+=a[i]) a[j] = 0; i++; /**********found**********/ while (a[i]==0) i++; } printf(\ for (i=2; i<=n; i++) /**********found**********/ if (a[i]!=0) {count++; printf( count?\ } return count;} 34.2改错 为一个偶数寻找两个素数,这两素数之和等于该偶数,并将这俩个素数通过形参指针传回主函数。 void fun(int a,int *b,int *c) { int i,j,d,y; for(i=3;i<=a/2;i=i+2) { /**************found**************/ y=1; for(j=2;j<=sqrt((double)i);j++) if(i%j==0) y=0; if(y==1) { /**************found**************/ d=a-i; for(j=2;j<=sqrt((double)d);j++) if(d%j==0) y=0; if(y==1) { *b=i; *c=d; } } }} 34.3程序 计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。 例如,在主函数中键盘给nshuru20后,输出为:s=0583333。 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.1填空 函数fun的功能是建立一个N×N的矩阵,矩阵元素的结构规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,…依次类推。例如,若N=5,生成的矩阵为: 。 #define N 7 /**********found**********/ void fun(int (*a) [N]) { int i,j,k,m; if(N%2==0) m=N/2 ; else m=N/2+1; for(i=0; i a[i][j]=a[N-i-1][j]=i+1; for(k=i+1; k a[k][i]=a[k][N-i-1]= i+1; } 35.2改错 功能是:将十进制正整数m转换成k( )进制数,并按高位到低位顺序输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制是1000)。 void fun( int m, int k ) { int aa[20], i; for( i = 0; m; i++ ) {/**********found**********/ aa[i] = m%k; m /= k; } for( ; i; i-- ) /**********found**********/ printf( \35.3程序 编写一个函数从num个字符串中找到最长的一个字符串,并通过形参指针max传回该串地址(注意:主函数中用****作为结果输入的标志,函数fun中给出的语句仅供参考)。 fun(char(*a)[81],int num,char **max) { /* 以下代码仅供参考 */ int i,k=0,len, maxlen; /* k为a数组中最长串所在元素的下标,初始为0,maxlen为其串长 */ maxlen=strlen(a[k]); for(i=1;i { /* 以下完成查找最长串 */ } *max=a[k];} 第三十六套: 36.1填空 统计带出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。 #define N 8 typedef struct list { int data; struct list *next; } SLIST; SLIST *creatlist(int *a); void outlist(SLIST *); void fun( SLIST *h, int *n) { SLIST *p; /**********found**********/ *n=0; p=h->next; while(p) { (*n)++; /**********found**********/ p=p->next; }} main() { SLIST *head; int a[N]={12,87,45,32,91,16,20,48}, num; head=creatlist(a); outlist(head); /**********found**********/