fun(head, &num);
printf(\
36.2改错 求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从地址开始的字符串;若未找到,则函数值为NULL例如,当字符串的内容为:“abcdabfabcdx”,t中的内容为:“abd”时,ze程序输出未找到信息:not be found!。 char * fun (char *s, char *t ) { char *p , *r, *a;
/************found************/ a = NULL; while ( *s ) { p = s; r = t; while ( *r )
/************found************/ if ( *r == *p ) { r++; p++; } else break;
if ( *r == '\\0' ) a = s; s++; } return a ;}
36.3程序 将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全部都删除;串中剩余字符所形成的一个新串放在t所指的数组中。 例如,若s所指zf窜中的内容为:“ABCDEFG123456”,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其它依次类推。最后t所指的数组中的内容应是:“246”。 void fun(char *s, char t[]) { int i, j = 0 ;
for(i = 0 ; i < strlen(s) ; i += 2) if(s[i] % 2 == 0) t[j++] = s[i] ; t[j] = 0 ;} 第三十七套:
37.1填空 在形参ss所指字符串数组中,查找含有形参substr所指子串并输出,若没找到则输出相应信息。ss所指字符串数组中共有N个字符串,且串的长度小于M。程序中库函数strstr(s1,s2)的功能是在s1串中查找s2子串,若没有,函数值为0,若有,为非0。 #define N 5
#define M 15
void fun(char (*ss)[M], char *substr) { int i,find=0;
/**********found**********/ for(i=0; i< N ; i++)
/**********found**********/ if( strstr(ss[i], substr) != NULL ) { find=1; puts(ss[i]); printf(\ } /**********found**********/
if (find==0) printf(\
37.2改错 求三个函数的最小公倍数 例如,给主函数中的变量x1、x2、x3分别输入15 11 2,则输出结果应当是:330。 /************found************/ fun(int x, int y, int z ) { int j,t ,n ,m; j = 1 ; t=j%x; m=j%y ; n=j%z;
while(t!=0||m!=0||n!=0) { j = j+1; t=j%x; m=j%y; n=j%z; }
/************found************/ return j;}
37.3程序 只删除字符串前导和尾部的*号,串中之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。例如,字符串的内容为: ****A*BC*DEF*G*******删除后A*BC*DEF*G。 void fun( char *a ) { int j =0 ;
char *p=a; while(*p) {
if(*p != '*') a[j++]=*p ; p++ ;} a[j]=0;} 第三十八套:
38.1填空 把形参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;} 38.2改错 求出两个非零正整数的最大公约数,作为函数的返回值 例如,若给num1和num2分别输入49和21,则输出的最大公约数为7;若给num1和num2分别输入27和81,则输 出的最大公约数为27。 int fun(int a,int b) { int r,t; if(a /************found************/ t=a;a=b;b=t; } r=a%b; while(r!=0) { a=b; b=r; r=a%b; } /************found************/ return(b);} 38.3程序 函数功能删除字符串中的所有*号。例如 字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:ABCDEFG。 void fun( char *a ) { int j =0 ; char *p=a; while(*p) { if(*p != '*') a[j++]=*p ; p++ ; } a[j]=0;} 第三十九套: 39.1填空 在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串数组共有N个字符串,且串长小于M。 #define N 5 #define M 10 int fun(char (*ss)[M], int k) { int i,j=0,len; /**********found**********/ for(i=0; i /**********found**********/ strcpy(ss[j++],ss[i]); } return j;} 39.2改错 逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的字符串。 例如,若主函数中a字符串为:aBCDeFgH,主函数中b字符串为:ABcd则c中的字符串应为:aBcdeFgH。 {/************found************/ int k = 0; /************found************/ while( *p || *q ) { if( *p<*q ) c[k]=*q; else c[k]=*p; if(*p) p++; if(*q) q++; k++; }} 39.3程序 功能:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****ABCDEFG。 void fun( char *a ) { /* 以下代码仅供参考 */ int i=0,k; while(a[i]=='*') i++; k=i; while(a[i]!='\\0') /* 以下程序段实现非*字符前移 */ { if(a[i] != '*') a[k++]=a[i]; i++; } a[k]='\\0';} 第四十套: 40.1填空 给定程序中建立一个带头结点的单向链表,链表中的各节点按结点数据域的数据递增有序链接。函数功能:把形参值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。 #define N 8 typedef struct list { int data; struct list *next; } SLIST; void fun( SLIST *h, int x) { SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST)); /**********found**********/ s->data=x; q=h; p=h->next; while(p!=NULL && x>p->data) { /**********found**********/ q=p; p=p->next; } s->next=p; /**********found**********/ q->next=s;} 40.2改错 功能:计算正整数的各位上的数字之积。 例如,若输入:252,则输出应该是:20。若输入:202,则输出是:0。 long fun (long num) {/************found************/ long k=1; do { k*=num ; /************found************/ num/=10 ; } while(num) ; return (k) ;} 40.3 程序 功能:计算n门课程的平均分,计算结果作为函数值返回。例如,若有5门课程的成绩是:90.5,72,80,61.5,55 则函数的值为:71.80。 float fun ( float *a , int n ) { int i; float ave=0.0; for(i=0; i 41.1 填空 功能:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。例如,有10个整数:46,30,32,40,6,17,45,15,48,26,平均值为:30.500000主函数中输出:m=30.0。 #define N 10 double fun(double x[],double *av) { int i,j; double d,s; s=0; for(i=0; i for(i=0; i if(x[i]<*av && *av - x[i]<=d){ /**********found**********/ d=*av-x[i]; j=i;} /**********found**********/ return x[j];} 41.2 改错 功能:根据整型形参n,计算如下公式的值。 例如,若n=10,则应输出:0.617977。 /************found************/ float fun ( int n ) { float A=1; int i; /************found************/ for (i=2; i<=n; i++) A = 1.0/(1+A); return A ;} 41.3 程序 程序定义了N×N的二维数组,并在函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m。例如:若m的值为2,a数组中的值为 则返回主程序后a数组中的值应为 。