{ int data; struct list *next; } SLIST;
void fun( SLIST *h) { SLIST *p, *q; p=h->next; if (p!=NULL) { q=p->next;
while(q!=NULL) { if (p->data==q->data) { p->next=q->next; /**********found**********/ free(q);
/**********found**********/ q=p->next; } else
{ p=q;
/**********found**********/ q=q->next;}} } }
26.2改错 用选择法对数组中的n个元素按从小到大的顺序进行排序。 #define N 20
void fun(int a[], int n) { int i, j, t, p;
for (j = 0 ;j < n-1 ;j++) {
/************found************/ p = j;
for (i = j;i < n; i++)
if(a[i] < a[p])
/************found************/ p = i;
t = a[p] ; a[p] = a[j] ; a[j] = t; }}
26.3程序 编写函数fun,求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些的个数。例如,若传送个m的值为50,则程序输出: 7 11 14 21 22 28 33 35 42 44 49。 #define M 100
void fun ( int m, int *a , int *n ) {int i ;
*n=0 ;
for(i=7 ; i<=m; i++)
if((i % 7 == 0) || (i % 11 == 0)) a[(*n)++]=i ;} 第二十七套:
27.1填空 计算下式前n项的和作为函数值返回。 例如,当形参n的值为110时,函数返回:9.612558。 double fun(int n)
{ int i; double s, t; /**********found**********/ s=0;
/**********found**********/ for(i=1; i<=n; i++) { t=2.0*i;
/**********found**********/
s=s+(2.0*i-1)*(2.0*i+1)/(t*t); } return s;}
27.2改错 统计substr所指zfc在str所指字符串中出现的次数。例如 若字符串为aaas lkaaas, 子字符串为as,则应输出2。 fun (char *str,char *substr)
{ int i,j,k,num=0;
/************found************/ for(i = 0; str[i]; i++)
for(j=i,k=0;substr[k]==str[j];k++,j++) /************found************/ if(substr[k+1]=='\\0') { num++; break; }
return num; } 27.3程序
编写函数fun 根据以下公式求pi的值(要求满足精度0.0005,即某项小于0.0005时停止迭代) 程序运行后,如果输入精度0.0005,则程序输出为3.14。 double fun ( double eps) { double s=1,t=1./3; int n=1;
while(t>=eps){ s+=t; n++; t=t*n/(2.0*n+1); } return (s*2.0); } 第二十八套:
28.1填空 统计形参s所指字符串中数字字符出现的次数,并放在形参t所指的变量中,最后在函数中输出。例如:形参s所指的字符串为:abcdef35adgh3kjsd7.结果输出:4。 void fun(char *s, int *t) { int i, n;
n=0;
/**********found**********/ for(i=0; s[i] !=NULL; i++) /**********found**********/ if(s[i]>='0'&&s[i]<= '9') n++; /**********found**********/
*t=n; }
28.2改错 通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。 例如,变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。 int fun(int *x,int y)
{ int t ;
/**************found**************/ t = *x ; *x = y ;
/**************found**************/ return(t) ;}
28.3程序 求出1-----1000之间能被7或11整除、但不能同时被7和11整除的所有整数并将其放在a所指的数组中,通过n返回这些数的个数。 void fun (int *a, int *n) { int i ; *n = 0 ;
for(i = 7 ; i < 1000 ; i++)
if(((i % 7) == 0 || (i % 11) == 0) && (i % 77) != 0) a[(*n)++] = i ;} 第二十九套:
29.1填空 函数fun功能是将行参b所指结构体中数据进行修改,把修改后的数据作为函数值返回主函数进行输出。例如b所指变量t中 学号、姓名、和三门的成绩是:10002、“ZhangQi”、93、85、87,修改后输出t中的数据应为:10004、“LiJie”、93、85、87。 #include
float score[3];};
void fun( struct student *b) { int i;
/**********found**********/ b->sno = 10004;
/**********found**********/
strcpy(b->name, \main()
{ struct student t={10002,\ int i;
printf(\
printf(\ Name: %s\\nScores: \ for (i=0; i<3; i++) printf(\ printf(\
/**********found**********/ fun(&t);
printf(\
printf(\ Name: %s\\nScores: \ for (i=0; i<3; i++) printf(\
printf(\
29.2改错应用递归发求a的平方根。求平方根的迭代公式为: 例如,a为2时,平方根值为:1.414214。
/**********found**********/
double fun(double a, double x0) { double x1, y; x1=(x0+ a/x0)/2.0;
/**********found**********/ if( fabs(x1-x0)>0.00001 )
y=fun(a,x1); else y=x1;
return y; }
29.3程序 学生的记录由学好和成绩组成,N名学生的数据放在主函数中结构体数组s中,编写函数,把高于等于平均分的学生数据放在b所指的数组中,把高于或等于平均分的学生人数通过形参n传回,pjf通过函数值返回。 #define N 12 typedef struct { char num[10]; double s; } STREC;
double fun( STREC *a, STREC *b, int *n ) { double t=0 ; int i ; *n = 0 ;
for(i = 0 ; i < N ; i++) t = t + a[i].s ;
t = t / N ;
for(i = 0 ; i < N ; i++) if(a[i].s > t) b[(*n)++] = a[i] ; return t ;} 第三十套:
30.1填空 函数fun功能是将行参a所指结构体变量中数据赋给函数中的结构体变量b,并进行修改b中的学号和姓名,最后输出修改后的数据。 例如a所指变量中 学号、姓名、和三门的成绩是:10001、“ZhangSan”、93、80、88,修改后输出b中的数据应为:10002、“LiSi”、95、80、88。 struct student { long sno;
char name[10]; float score[3];};
void fun(struct student a) { struct student b; int i; /**********found**********/ b = a;
b.sno = 10002;
/**********found**********/ strcpy(b.name, \
printf(\
printf(\ Name: %s\\nScores: \/**********found**********/
for (i=0; i<3; i++) printf(\ b.score[i]);
printf(\
30.2改错 函数功能:从s所指字符串中删除所有小写字母c。 void fun( char *s ) { int i,j;
for(i=j=0; s[i]!='\\0'; i++) if(s[i]!='c')
/************found************/ s[j++]=s[i];
/************found************/
s[j]='\\0';}
30.3 程序 函数功能:将字符中的前导*号全部移到字符串的尾部。 例如,字符串中的内容为:*******A*BC*DEF*G****移动后,字符串中的内容应当是: A*BC*DEF*G***********。 void fun( char *a )
{ /* 以下代码仅供参考 */ char *p,*q;
int n=0; p=a;
while(*p=='*') /* 统计串头'*'个数n */ {n++; p++;}
q=a;
/* 向前复制字符串,请填写相应的语句完成其功能 */ while(*p) { *q=*p; p++;q++; }
for(;n>0;n--) /* 在串尾补n个'*' */ *q++='*';
*q='\\0'; } 第三十一套:
31.1 填空 对形参s所指字符串中下表为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。例如,行参s所指的字符串为:baawrakjghzlicda,执行后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**********/ t=i; /**********found**********/ for(j=i+2 ; j