if (p!=j)
{t=a[j];a[j]=a[p];a[p]=t;} } }
putarr(int n,int *z) {int i;
for (i=1;i<=n;i++,z++) {printf(\
if (!(i)) printf(\ }printf(\}
main()
{ int aa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11; system(\
printf(\ fun(n,aa);
printf(\}
第1 处:for (i=j+1;i 第2 处:t=i; 改为 p=i; (3) 程序设计 规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前后连续的*号之外,将串中其它*号全部删除。形参h已指向字符串中的第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为:****A*BC*DEF*G******,删除后,字符串中的内容应当是:****ABCDEFG*******。在编写函数时,不得使用C语言提供的字符串函数。 注意:部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 答案: #include void fun(char *a,char *h,char *p) {char *x; int i=0,j=0; x=a; while (x if (*h!='*') {a[j]=*h; j++; h++;} else h++; p++; while (*p) {a[j]=*p; j++; p++;} a[j]='\\0'; } main() { char s[81],*t,*f; printf(\ t=f=s; while(*t) t++; t--; while (*t=='*') t--; while (*f=='*') f++; fun(s,f,t); printf(\ } 第三套 (1) 填空题 给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各结点数据域之和作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! #include struct list *next; } SLIST; SLIST *creatlist(int *); void outlist(SLIST *); int fun( SLIST *h) { SLIST *p; int s=0; p=h->next; while(p) { /**********found**********/ s+=p->___1___; /**********found**********/ p=p->___2___; } return s; } main() { SLIST *head; int a[N]={12,87,45,32,91,16,20,48}; head=creatlist(a); outlist(head); /**********found**********/ printf(\fun(___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(\ } } 第1 处:s+=p->data; 第2 处:p=p->next; 第3 处:printf(\ (2) 改错题 给定程序modi.c中,函数fun的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中,若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。 例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include fun(double *s,double *w) { int k,i; double sum; for (k=2,i=0;i /************found************/ sun=0.0; for(k=0,i=0;i /************found************/ if (i+1%5==0) { w[k]=sum/5;sum=0;k++;} } return k; } main() { double a[SIZE],b[SIZE/5]; int i,k; k=fun(a,b); printf(\ for (i=0;i { if(i%5==0) printf(\ printf(\ } printf(\ for(i=0;i 第1 处:sun=0.0; 改为 sum=0.0; 第2 处:if (i+1%5==0) 改为 if ((i+1)%5==0) (3) 程序设计 请编写一个函数fun,它的功能是:求出1到m之内(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。 例如,若传送给m的值为50,则程序输出: 7 11 14 21 22 28 33 35 42 44 49 注意:部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 /******本答案只作参考。******/ #include void fun ( int m, int *a , int *n ) { int i,count=0; for(i=1;i<=m;i++) { if(i%7==0 || i==0) { a[count++]=i; } } *n=count; } main( ) { int aa[M], n, k; system(\ fun ( 50, aa, &n ); for ( k = 0; k < n; k++ ) if((k+1) ==0) printf(\ else printf( \ printf(\}