程序填空题
1.给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共有M个字符串,且串长
/**********found**********/ n=len; ___1___=i;} } for(i=0; i /**********found**********/ for(j=___2___; j>=0; j--) ss[i][m--]=ss[i][j]; for(j=0; j main(){char ss[M][N]={\\cchongqing\ i; printf(\for(i=0; i printf(\result:\\n\ for(i=0; i printf(\参考答案 第一空:k 第二空len 第三空 ss[i][j] 2.给定程序中,函数fun的功能是:求ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长 /**********found**********/ int fun(char (*ss) ___1___, int *n) { int i, k=0, len=0; for(i=0; i /**********found**********/ if(i==0) *n=___2___; if(len>*n) { /**********found**********/ ___3___; k=i; } } return(k);} main() { char ss[M][N]={\\cchongqing\ n,k,i; printf(\ string are :\\n\ for(i=0;i printf(\ %d\\n\printf(\ %s\\n\第一空: [N] 第二空:len 第三空 *n=len 3.函数fun的功能是:把形参a所指数组中最大值放在a[0]中,接着求出a所指数组中最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,把a数组元素中次小值放在a[3]中;其余依次类推。例如:若a所指数组中的数组最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5.形参n中存放a所指数组中数据的个数. #include /**********found**********/ void fun(int ___1___, int n) { int i, j, max, min, px, pn, t; /**********found**********/ for (i=0; i /**********found**********/ for (j=___3___; j { max = a[j]; px = j; } if (min > a[j]) { min = a[j]; pn = j; }} if (px != i) { t = a[i]; a[i] = max; a[px] = t; if (pn == i) pn= px; } if (pn != i+1) { t = a[i+1]; a[i+1] = min; a[pn] = t; }}} main() { int b[N]={1,4,2,3,9,6,5,8,7}, i; printf(\ :\\n\ for (i=0; i printf(\ :\\n\for (i=0; i 第一空:*a或a[N] 第二空:2 第三空:i+1 4.给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制过程中,把复制的内容输出到终端屏幕.主函数中源文件中入在变量sfname k ,目标文件名放在变量tfname中. #include #include int fun(char *source, char *target) { FILE *fs,*ft; char ch; /**********found**********/ if((fs=fopen(source, ___1___))==NULL) return 0; if((ft=fopen(target, \ return 0; printf(\ ch=fgetc(fs); /**********found**********/ while(!feof(___2___)) { putchar( ch ); /**********found**********/ fputc(ch,___3___); ch=fgetc(fs); } fclose(fs); fclose(ft); printf(\ 1;} main(){char sfname[20] =\tfname[20]=\ FILE *myf; int i; char c; myf=fopen(sfname,\ printf(\ for(i=1; i<30; i++) {c='A'+rand()%;fprintf(myf,\printf(\ fclose(myf);printf(\ if (fun(sfname, tfname)) printf(\ else printf(\ 5.用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所表倍数;依次类推,直到所找的下一个数等于n为止。这样会得一个序列:2,3,5,7,11,13,17,19,23??函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。 #include { 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+=___1___) a[j] = 0; i++; /**********found**********/ while (___2___==0) i++; } printf(\ for (i=2; i<=n; i++) /**********found**********/ if (a[i]!=___3___) {count++; printf( count?\ return count;} main(){ int n=20, r;r = fun(n); printf(\ : %d\\n\第一空:a[i] 第二空:a[i] 第三空0 6.函数fun的功能是:从三个形参a,b,c中找出中间的那个数,作为函数值返回。例如:当a=3,b=5,c=4时,中数为4 #include int fun(int a, int b, int c) { int t; /**********found**********/ t = (a>b) ? (b>c? b :(a>c?c:___1___)) : ((a>c)?___2___ : ((b>c)?c:___3___)); return t;} main(){ int a1=3, a2=5, a3=4, r; r = fun(a1, a2, a3); printf(\ : %d\\n\第一空:a 第二空:a 第三空:b 7.函数fun的功能是:计算 f(x)?1?x?x2xn2!???n! 直到 xn?10?6n!。若x=2.5,函数值为:12.182494。 #include /**********found**********/ f = 1.0+___1___; t = x; n = 1; do { n++; /**********found**********/ t *= x/___2___; /**********found**********/ f += ___3___; } while (fabs(t) >= 1e-6); return f;} main(){ double x, y; x=2.5; y = fun(x); printf(\ printf(\ y=%-12.6f \\n\第一空:x 第二空:n 第三空:t 8.给定程序中,函数fun的功能是:对形参ss所指字符串数组中的M个字符串按长度由短到长进行排序。ss所指字符串数组中共有M个字符串,且串长 void fun(char (*ss)[N]) { int i, j, k, n[M]; char t[N]; for(i=0; i /**********found**********/ for(j=___1___; j { strcpy(t,ss[i]); strcpy(ss[i],ss[k]); /**********found**********/ strcpy(ss[k],___3___); n[k]=n[i]; } }} main() { char ss[M][N]={\\ int i; printf(\ for(i=0; i printf(\ for(i=0; i 第一空:i+1 第二空:k=j 第三空:t 9.函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,接着把形参a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放在a[2]中,把a所指数组元素中的次大值放在a[3];其余以此类推。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动后,数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数据的个数。 # include void fun(int a[], int n) { int i,j, max, min, px, pn, t; for (i=0; i {/**********found**********/ max = min = ___1___; px = pn = i; for (j=i+1; j { max = a[j]; px = j; } /**********found**********/ if (min>___3___) { min = a[j]; pn = j; } } if (pn != i) { t = a[i]; a[i] = min; a[pn] = t; if (px == i) px =pn; } if (px != i+1) { t = a[i+1]; a[i+1] = max; a[px] = t; } }} main() { int b[N]={9,1,4,2,3,6,5,8,7}, i; printf(\ :\\n\ for (i=0; i printf(\ :\\n\ for (i=0; i 第一空:a[i] 第二空:a[j] 第三空:a[j] 10.给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。 #include STD fun(STD std[], int n) { STD max; int i; /**********found**********/ max= ___1___; for(i=1; i /**********found**********/ if(max.age<___2___) max=std[i]; return max;} main( ) { STD std[5]={\ \ }; STD max; max=fun(std,5); printf(\/**********found**********/ printf(\ Age : %d\\n\ ___3___,max.age);} 第一空:*std 第二空:std[i].age 第三空:max.name 11.给定程序中,函数fun的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537。 #include if(s[i]>='0' && s[i]<='9'){ /**********found**********/ t2[j]=s[i]; ___1___; } else t1[k++]=s[i]; t2[j]=0; t1[k]=0; /**********found**********/ for(i=0; i for(i=0; i<___3___; i++) s[k+i]=t2[i];} main() { char s[80]=\ printf(\ string is : %s\\n\ fun(s); printf(\ %s\\n\第一空:j++; 第二空:s[i]=t1[i];第三空:j 12.函数fun的功能是:把形参a所指数组中的奇数原顺序依次放到a[0]、a[1]、a[2]、??中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若a所指数组中数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后a所指数组中数据为:9、1、3、5、7,返回值为5。 #include for (i=0; i /**********found**********/ if (a[i]%2==___1___){ /**********found**********/ a[j] = a[i]; ___2___; } /**********found**********/ return ___3___;} main() { int b[N]={9,1,4,2,3,6,5,8,7}, i, n; printf(\ :\\n\ for (i=0; i printf(\ : %d \\n\ printf(\ :\\n\ for (i=0; i printf(\第一空:1 第二空:j++ 第三空j 13.给定程序中,函数fun的功能是:对形参s所指字符串下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。例如,形参s所指的字符串为:baawrskjghzlicda,执行后p所指字符数组中的字符串应为:aachjlsw。 #include void fun(char *s, char *p) { int i, j, n, x, t; n=0; for(i=0; s[i]!='\\0'; i++) n++; for(i=1; i /**********found**********/ ___1___; /**********found**********/ for(j=___2___+2 ; j for(i=1,j=0; i { char s[80]=\ printf(\ %s\\n\ fun(s,p); printf(\ %s\\n\第一空:t=i 第二空:i 第三空 0 14.给定函数int MySearch(char *str,char *s)的功能是:统计字符串s在字符串str中出现的次数。例如,若输入字符串”12 123 12345”和”23”,则应输出2(表示字符串”23”在字符串”12 123 12345”中出现了两次)。若输入字符串”33333”和”33”,则应输出4(表示字符串”33”在字符串”33333”出现了四次)。 #include int MySearch( char* str, char* s ){ char* p; int n =0; for( ; *str; ) /***************found***************/ if( ( p = strstr( str, s ) ) != ___1___ ) { n++; str=p+1; } else /***************found***************/ ___2___; /***************found***************/ return( ___3___ );} main() { char str1[81], str2[21]; printf(\ gets(str1); printf(\ gets(str2); printf( \are(is) appeared in str1 %d times\\n\第一空:NULL 第二空:*str=0 第三空:n 15.给定函数 char *MyDelete(char *str,char c)的功能是:在字符串str中删除变量c中的字符,有几个删几个,并返回所删字符的个数。例如,若输入字符串”ab abc bcdef”和字符?b?,则应输出字符串”a ac cdef”和3(表示删了3个字符?b?)。 #include int MyDelete( char* str, char c ) { int i, j=0, k=0; for( i = 0; str[i]; i++ ) if( str[i] != c ) /***************found**************/ { str[ j ]= str[i]; ___1___; } else k++; /***************found**************/ str[j]=___2___ ; /***************found**************/ return( ___3___ );} main(){ char string[81], x; ; printf(\ gets(string); printf(\ scanf(\ printf( \deleting %d '%c'(s), the string becomes:\\n%s\\n\第一空:j++ 第二空:0 第三空:k 16.给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据从小到大顺序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点仍保持从小到大顺序排序。 #include struct list *next; } SLIST; void fun( SLIST *h, int x) { SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST)); /**********found**********/ s->data=___1___; q=h; p=h->next; while(p!=NULL && x>p->data) { /**********found**********/ q=___2___; p=p->next; } s->next=p; /**********found**********/ q->next=___3___;} SLIST *creatlist(int *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; p->next=q; p=q; } p->next=0; return h;} void outlist(SLIST *h) { SLIST *p; p=h->next; if (p==NULL) printf(\ else { printf(\ do{printf(\while(p!=NULL); printf(\main() { SLIST *head; int x; int a[N]={11,12,15,18,19,22,25,29}; head=creatlist(a); printf(\ outlist(head); printf(\ \ scanf(\ fun(head,x); printf(\ outlist(head);} 第一空:x 第二空:p 第三空:s 17.给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。 #include int fun(char *source, char *target) { FILE *fs,*ft; char ch; /**********found**********/ if((fs=fopen(source, ___1___))==NULL) return 0; if((ft=fopen(target, \ return 0; printf(\ ch=fgetc(fs); /**********found**********/ while(!feof(___2___)) { putchar( ch ); /**********found**********/ fputc(ch,___3___); ch=fgetc(fs); } fclose(fs); fclose(ft); printf(\ return 1;} main() { char sfname[20] =\ tfname[20]=\ FILE *myf; int i; char c; myf=fopen(sfname,\ printf(\ for(i=1; i<30; i++) {c='A'+rand()%;fprintf(myf,\printf(\ fclose(myf);printf(\ if (fun(sfname, tfname)) printf(\ else printf(\ 第一空: “r” 第二空:fs 第三空:ft