while(*r)
if(*r==*p) { r++; p++; } else break;
/*********found**********/ if(*r== 0) n++; s++; }
return n;}
11.3程序fun函数功能:将放在字符串数组中的M个字符串(每串的长度不超过N),将顺序合并组成一个新的字符串。函数fun中给出的语句仅供参考。例如,字符串数组中的M个字符串为AAAA BBBBBBB CCC则合并后的字符串的内容应是:AAAABBBBBBBCCC。提示:strcat(a,b)功能是将字符串b复制到字符串a的串尾上,成为一个新串。
void fun(char a[M][N], char *b) { /* 以下代码仅供参考 */ int i; *b=0;
for(i = 0 ; i < M ; i++) strcat(b, a[i]) ;} 第十二套:
12.1填空 给定程序,函数fun的功能是将不带头结点的单向链表逆置。即若原链表结点数据域从头至尾的数据位:2、4、6、8、10,逆置后,从头至尾数据域依次:10、8、6、4、2。 typedef struct node { int data;
struct node *next; } NODE;
/**********found**********/ NODE * fun(NODE *h) { NODE *p, *q, *r; p = h;
if (p == NULL) return NULL; q = p->next; p->next = NULL; while (q)
{/**********found**********/ r = q->next; q->next = p;
p = q;
/**********found**********/ q = r ; }
return p;}
12.2改错 给定程序MODI1.C中函数fun的功能是:计算s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。例如:字符串中的数据为:AABBCCDDDEEFF,则输出应当是:ABBCDDEFF。
void fun(char *s, char t[]) { int i, j=0;
for(i=0; i /***********found**********/ if(i%2 || s[i]%2==0) t[j++]=s[i]; /***********found**********/ t[j]='\\0'; } 12.3程序 程序定义了M×N的二维数组,按列的顺序依次放到一维数组中。例如:二维数组中的数据为 则一维数组中为:33 44 55 33 44 55 33 44 55 33 44 55。同2.3 void fun(int (*s)[10], int *b, int *n, int mm, int nn) { /* 以下代码仅供参考 */ int i,j,np=0; /* np用作b数组下标 */ for(i = 0 ; i < nn ; i++) for(j = 0 ; j < mm ; j++) { b[np] = s[j][i] ; np = i * mm + j + 1; } *n=np; } 第十三套: 13.1填空 给定程序中,函数fun的功能是将不带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据位:10、4、2、8、6,排序后链表接点数据域从头至尾的数据为:2、4、6、8、10。 typedef struct node { int data; struct node *next; } NODE; void fun(NODE *h) { NODE *p, *q; int t; /**********found**********/ p = h->next ; while (p) { /**********found**********/ q = p->next ; while (q) { /**********found**********/ if (p->data >= q->data) { t = p->data; p->data = q->data; q->data = t; } q = q->next; } p = p->next; }} 13.2 改错 给定程序MODI1.C是建立一个带头节点的单向链表,并用随机函数为个节点数据域赋值。函数fun的作用是求出单向链表节点(不包括头节点)数据域中的最大值,并且作为函数值返回。 typedef struct aa { int data; struct aa *next; } NODE; fun ( NODE *h ) { int max=-1; NODE *p; /***********found**********/ p=h->next; while(p) { if(p->data>max ) max=p->data; /***********found**********/ p=p->next; } return max; } 13.3 程序 程序定义了M×N的二维数组中数据,按行的顺序依次放到一维数组中。一维数组中数据的个数放在形参n所指的存储单元中。例如:二维数组中的数据为 则一维数组中为:33 33 33 33 44 44 44 44 55 55 55 55。 void fun(int (*s)[10], int *b, int *n, int mm, int nn) { int i, j, k ; for(i = 0 ; i < mm ; i++) for(j = 0 ; j < nn ; j++) { k = i * nn + j ; b[k] = s[i][j] ; } *n = mm * nn ;} 第十四套: 14.1填空 给定程序中:函数fun的功能是用函数指向要调用的函数,并进行调用。规定在空2处使f指向函数f1,在2处使f指向函数f2。当调用正确时,程序输出: x1=5.000000, x2=3.000000, x1*x1+x1*x2=40.000000。 double f1(double x) { return x*x; } double f2(double x, double y) { return x*y; } double fun(double a, double b) { /**********found**********/ double (*f)(); double r1, r2; /**********found**********/ f = f1 ; /* point fountion f1 */ r1 = f(a); /**********found**********/ f = f2 ; /* point fountion f2 */ r2 = (*f)(a, b); return r1 + r2; } 14.2改错 给定程序MODI1.C是建立一个带头节点的单向链表,并用随机函数为个节点数据域赋值。函数fun的作用是求出单向链表节点(不包括头节点)数据域为偶数的值累加起来,并且作为函数值返回。 typedef struct aa { int data; struct aa *next; }NODE; int fun(NODE *h) { int sum = 0 ; NODE *p; /***********found**********/ p=h->next; while(p) { if(p->data%2==0) sum +=p->data; /***********found**********/ p=p->next; } return sum;} 14.3程序 编写函数fun,函数功能:判断字符串是否为回文?若是,函数返回1,主函数输出:YES,否则返回0,主函数输出NO。回文是指顺读和倒读都一样的字符串。 例如:字符串LEVEL是回文,而字符串123312就不是回文。 #define N 80 int fun(char *str) { int i, j = strlen(str) ; for(i = 0 ; i < j / 2 ; i++) if(str[i] != str[j - i - 1]) return 0 ; return 1 ; } 第十五套: 15.1填空 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到student.dat文件中。函数fun的功能是从文件中找出指定学号的学生数据,读入此学生数据 ,对该生的分数进行修改,使每门课的分数加3分,修改后的重写文件中该生的数据,即用该学生的新数据覆盖原数据,其它学生的数据不变,若找不到,则什么都不做。 #define N 5 typedef struct student { long sno; char name[10]; float score[3]; } STU; void fun(char *filename, long sno) { FILE *fp; STU n; int i; fp = fopen(filename,\/**********found**********/ while (!feof(fp)) { fread(&n, sizeof(STU), 1, fp); /**********found**********/ if (n.sno==sno) break; } if (!feof(fp)) { for (i=0; i<3; i++) n.score[i] += 3; /**********found**********/ fseek(fp, -1L*sizeof(STU), SEEK_CUR); fwrite(&n, sizeof(STU), 1, fp); } fclose(fp); } 15.2改错 利用插入法对字符串中的字符按从大到小的顺序进行排序。插入法基本算法是:对字符串头两个元素进行排序。然后再把第三个字符插入到前俩个字符中,插入后前三个字符仍然有序;再把第四个字符插入到前三个中去,……..。待排序字符串已在主程序中赋予。 #define N 80 void insert(char *aa) { int i,j,n; char ch; /**********found**********/ n=strlen( aa ); for( i=1; i /**********found**********/ ch=aa[i]; j=i-1; while ((j>=0) && ( ch aa[j+1]=ch; } } 15.3程序 N个学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。编写函数fun,找出学生的最高分。 #define N 8 struct slist { double s; struct slist *next;}; typedef struct slist STREC; double fun( STREC *h ) { double max=h->s; STREC *p; p=h->next; while(p) { if(p->s>max ) max=p->s; p=p->next; } return max; } 第十六套: 16.1填空 给定程序中函数fun的功能:求出行参ss所指字符串中最长的字符串的长度,将其余的字符串右边用字符*补齐,使其与最长的字符串等长。ss所指字符串数组中共有M个