程序填空题
1.给定程序中,函数fun的功能是:求出形参ss所指
字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共有M个字符串,且串长 for(j=___len___; j>=0; j--) //len /**********found**********/ ss[i][m--]=ss[i][j]; for (j=___i+1___; j for (i=0; i 2. 给定程序中,函数fun的功能是:求ss所指字符串数 printf(\组中长度最长的字符串所在的行下标,作为函数值返回,printf(\并把其串长放在形参n所指变量中。ss所指字符串数组for (i=0; i if(i==0) *n=___len___; //len if((fs=fopen(source, ___r___))==NULL) //”r’ return 0; if(len>*n) { if((ft=fopen(target, \/**********found**********/ return 0; ___n=len___; printf(\//*n=len ch=fgetc(fs); k=i; } } return(k);} /**********found**********/ main() while(!feof(___fs__)) // fs { char ss[M][N]={\ { putchar( ch ); \/**********found**********/ cchongqing\ fputc(ch,___ft___); //ft 1 printf(\ for(i=0;i printf(\leng longest string is : %d\\n\printf(\ ch=fgetc(fs); } fclose(fs); fclose(ft); printf(\ 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(\ x2xnf(x)?1?x???? 2!n!xn?10?6。若x=2.5,函数值为:12.182494。 直到n!double fun(double x) { double f, t; int n; /**********found**********/ f = 1.0+___x___; t = x; n = 1; do { n++; /**********found**********/ t *= x/___n___; /**********found**********/ f += ___t___; } while (fabs(t) >= 1e-6); return f;} main(){ double x, y; x=2.5; y = fun(x); printf(\ printf(\第一空:x 第二空:n 第三空:t 5. 用筛选法可得到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;} main(){ int n=20, r;r = fun(n); printf(\第一空:a[i] 第二空:a[i] 第三空0 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=___i+1___; j if(n[k]>n[j]) ___k=j___; if(k!=i) { strcpy(t,ss[i]); strcpy(ss[i],ss[k]); 6.函数fun的功能是:从三个形参a,b,c中找出中间/**********found**********/ 的那个数,作为函数值返回。例如:当a=3,b=5,c=4时, strcpy(ss[k],___t__); 中数为4。 n[k]=n[i]; } }} int fun(int a, int b, int c) main() { int t; { char ss[M][N]={\/**********found**********/ \ t = (a>b) ? (b>c? b :(a>c?c:___a___)) : int i; ((a>c)?___a___ : ((b>c)?c:___b___)); printf(\ return t;} for(i=0; i for(i=0; i 7. 函数fun的功能是:计算 printf(\ 第一空:i+1 第二空:k=j 第三空:t 2 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所指数组中数据的个数。 #define N 9 void fun(int a[], int n) { int i,j, max, min, px, pn, t; for (i=0; i {/**********found**********/ max = min = ___a[i]___; px = pn = i; for (j=i+1; j { max = a[j]; px = j; } /**********found**********/ if (min>___a[j]___) { 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(\ for (i=0; i printf(\ for (i=0; i 第一空:a[i] 第二空:a[j] 第三空:a[j] ___max.name___,max.age);} 第一空:*std 第二空:std[i].age 第三空:max.name 11.给定程序中,函数fun的功能是:将s所指字符串 中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537。 void fun(char *s) { int i, j=0, k=0; char t1[80], t2[80]; for(i=0; s[i]!='\\0'; i++) if(s[i]>='0' && s[i]<='9'){ /**********found**********/ t2[j]=s[i]; __j++___; } else t1[k++]=s[i]; t2[j]=0; t1[k]=0; /**********found**********/ for(i=0; i for(i=0; i<___j___; i++) s[k+i]=t2[i];} main() { char s[80]=\ printf(\ fun(s); printf(\第一空: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。 #define N 9 int fun(int a[], int n) { int i,j; j = 0; for (i=0; i /**********found**********/ if (a[i]%2==___1___){ /**********found**********/ a[j] = a[i]; ___j++___; } /**********found**********/ return ___j___;} main() { int b[N]={9,1,4,2,3,6,5,8,7}, i, n; printf(\ for (i=0; i printf(\ printf(\ for (i=0; i printf(\第一空:1 第二空:j++ 第三空j 10. 给定程序中,函数fun的功能是:将形参std所指 结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。 typedef struct { char name[10]; int age; }STD; STD fun(STD std[], int n) { STD max; int i; /**********found**********/ max= ___*std_; for(i=1; i /**********found**********/ if(max.age<___std[i].age__) max=std[i]; return max;} main( ) { STD std[5]={\ \ STD max; max=fun(std,5); printf(\/**********found**********/ printf(\ 3 13. 给定程序中,函数fun的功能是:对形参s所指字 符串下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。例如,形参s所指的字符串为: baawrskjghzlicda,执行后p所指字符数组中的字符串应为:aachjlsw。 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**********/ for(j=___i___+2 ; j { x=s[i]; s[i]=s[t]; s[t]=x; }} for(i=1,j=0; i { char s[80]=\ printf(\ fun(s,p); printf(\第一空:t=i 第二空:i 第三空 0 { str[ j ]= str[i]; ___j++___; } else k++; /***************found**************/ str[j]=___0___ ; /***************found**************/ return( ___k___ );} main(){ char string[81], x; clrscr(); printf(\ gets(string); printf(\ scanf(\ printf( \deleting %d '%c'(s), the string becomes:\\n%s\\n\x), x, string);} 第一空:j++ 第二空:0 第三空:k 16. 给定程序中已建立一个带有头结点的单向链表,链 表中的各结点按结点数据域中的数据从小到大顺序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点仍保持从小到大顺序排序。 #define N 8 14. 给定函数int MySearch(char *str,char *s)的功typedef struct list 能是:统计字符串s在字符串str中出现的次数。例如,{ int data; 若输入字符串”12 123 12345”和”23”,则应输出2(表 struct list *next; 示字符串”23”在字符串”12 123 12345”中出现了两} SLIST; 次)。若输入字符串”33333”和”33”,则应输出4(表void fun( SLIST *h, int x) 示字符串”33”在字符串”33333”出现了四次)。 { SLIST *p, *q, *s; int MySearch( char* str, char* s ){ s=(SLIST *)malloc(sizeof(SLIST)); char* p; /**********found**********/ int n =0; s->data=___x___; for( ; *str; ) q=h; /***************found***************/ p=h->next; if( ( p = strstr( str, s ) ) != ___NULL___ ) while(p!=NULL && x>p->data) { { n++; str=p+1; } /**********found**********/ else q=___p___; /***************found***************/ p=p->next; } ___*str___; s->next=p; /***************found***************/ /**********found**********/ return( ___n___ );} q->next=__s__;} main() SLIST *creatlist(int *a) { char str1[81], str2[21]; { SLIST *h,*p,*q; int i; printf(\ h=p=(SLIST *)malloc(sizeof(SLIST)); gets(str1); for(i=0; i void outlist(SLIST *h) 15. 给定函数 char *MyDelete(char *str,char c)的{ SLIST *p; 功能是:在字符串str中删除变量c中的字符,有几个删 p=h->next; 几个,并返回所删字符的个数。例如,若输入字符串”ab if (p==NULL) abc bcdef”和字符’b’,则应输出字符串”a ac printf(\cdef”和3(表示删了3个字符’b’)。 else int MyDelete( char* str, char c ) { printf(\{ int i, j=0, k=0; do{printf(\ for( i = 0; str[i]; i++ ) while(p!=NULL); if( str[i] != c ) printf(\/***************found**************/ 4 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. (4)给定程序的功能是:调用函数fun将指定源文 件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。 int fun(char *source, char *target) { FILE *fs,*ft; char ch; /**********found**********/ if((fs=fopen(source, ___r___))==NULL) return 0; if((ft=fopen(target, \ 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;} 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 18. 给定程序中,函数fun的功能是:读自然数1~10以及它们的平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。 int fun(char *fname ) { FILE *fp; int i,n; float x; if((fp=fopen(fname, \ return 0; for(i=1;i<=10;i++) /**********found**********/ fprintf(__fp__,\ 5 printf(\/**********found**********/ ___fclose(fp)___; printf(\/**********found**********/ if((fp=fopen(___fname___,\ return 0; fscanf(fp,\ while(!feof(fp)) {printf(\ fscanf(fp,\ fclose(fp); return 1;} main(){ char fname[]=\ fun(fname);} 第一空:fp 第二空:fclose(fp) 第三空:fname 19. 给定程序的功能是:从键盘输入若干行文本(每行 不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。 void WriteText(FILE *); void ReadText(FILE *); main() {FILE *fp; if((fp=fopen(\ { printf(\ WriteText(fp); fclose(fp); if((fp=fopen(\ { printf(\ ReadText(fp); fclose(fp);} /**********found**********/ void WriteText(FILE ___*fw___) { char str[81]; printf(\ gets(str); while(strcmp(str,\/**********found**********/ fputs(___str___,fw); fputs(\ gets(str); }} void ReadText(FILE *fr) { char str[81]; printf(\file and output to screen :\\n\ fgets(str,81,fr); while( !feof(fr) ) { /**********found**********/ printf(\str___); fgets(str,81,fr); }} 第一空:*fw 第二空:str 第三空:str 20. 给定程序的功能是:调用 fun函数建立班级通讯 录。通讯录中记录每个学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到myfile5.dbf的二进制文件中。 #define N 5 typedef struct { int num; char name[10]; char tel[10]; }STYPE;