实验6
1 #include <stdio.h> 2 #define N 5 3 int binarySearch(int *x, int n, int item); // 函数声明 4 int main() 5 { 6 int a[N] = {2, 7, 19, 45, 66}; 7 int i, index, key; 8 printf("数组a中的数据:\n"); 9 for (i = 0; i < N; i++) 10 printf("%d ", a[i]); 11 printf("\n"); 12 printf("输入待查找的数据项: "); 13 scanf("%d", &key); 14 // 调用函数binarySearch()在数组a中查找指定数据项key,并返回查找结果给index 15 // 补足代码① 16 index=binarySearch(a,5,key); 17 // ××× 18 if (index >= 0) 19 printf("%d在数组中,下标为%d\n", key, index); 20 else 21 printf("%d不在数组中\n", key); 22 return 0; 23 } 24 // 函数功能描述: 25 // 使用二分查找算法在从地址x开始的连续n个数据项中,查找特定数据项item 26 // 如果找到,返回其下标; 如果没找到,返回-1 27 int binarySearch(int *x, int n, int item) 28 { 29 int low, high, mid; 30 low = 0; 31 high = n - 1; 32 while (low <= high) 33 { 34 mid = (low + high) / 2; 35 if (item == *(x + mid)) 36 /*补足代码②*/return (mid); 37 else if (item < *(x + mid)) 38 /*补足代码③*/high=mid-1; 39 else 40 /*补足代码④*/low=mid+1; 41 } 42 return -1; 43 }



#include <string.h> #include <stdio.h> #include <stdlib.h> void fun(char *a) { /*****ERROR1********/ int i=0; char *p = a; /****ERROR2***/ while (*p && *p == '*') { a[i] = *p; i++; p++; } while (*p) { /******ERROR3*******/ if (*p != '*') { a[i] = *p; i++; } p++; } /******ERROR4*******/ a[i] = '\0'; } int main() { char s[81]; printf("Enter a string :\n"); gets(s); /***ERROR5******/ fun(&s[0]); printf("The string after deleted:\n"); puts(s); return 0; }

/* 设输入的字符串中只包含字母和*号。 编写函数,实现:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。 例如,若字符串中的内容为****A*BC*DEF*G******* 删除后,字符串中的内容则应当是****ABCDEFG****** 在编写函数时,不得使用C语言提供的字符串函数。 */ #include <stdio.h> #include <stdlib.h> #include <string.h> void fun(char *a) { /**ERROR******/ int i=0; char *t = a, *f = a; char *q = a; while (*t) t++; t--; while (*t == '*') t--; while (*f == '*') f++; /***ERROR***/ while (q < f) { a[i] = *q; q++; i++; } while (q < t) { /***ERROR**/ if (*q != '*') { a[i] = *q; i++; } q++; } while (*q) { a[i] = *q; i++; q++; } /**ERROR**/ a[i] = '\0'; } int main() { char s[81]; printf("Entre a string:\n"); gets(s); /**ERROR**/ fun(s); printf("The sting after deleted:\n"); puts(s); return 0; }

#include <stdio.h> #include <string.h> #define N 80 int isPalindrome(char *s); // 函数声明 int main() { char str[N]; int flag; printf("Enter a string:\n"); gets(str); flag = isPalindrome(str); // 函数调用 if (flag) printf("YES\n"); else printf("No\n"); return 0; } // 函数定义 // 功能:判断指针s指向的字符串是否是回文串,如果是,返回1;否则,返回0。 int isPalindrome(char *s) { // 补足函数实现 // ××× int i,j,a; i=strlen(s); for(j=0;j<i/2;j++){ if(*(s+i-1-j)!=*(s+j)) return 0; else a=1; } return a; }


#include <stdio.h> #define N 80 int count(char *str, char *substr); // 函数声明 int main() { char str[N], substr[N]; int n; gets(str); // 输入母串 gets(substr); // 输入子串 n = count(str, substr); // 函数调用 printf("%d\n", n); return 0; } int count(char *str, char *substr) { int i, j, k; int num = 0; for(i=0; /*待补足①*/i<80; ++i) for(/*待补足②*/j=i, k=0; substr[k] == str[j]; k++, j++) if(substr[/*待补足③*/k+1] == '\0') { num++; break; } return(num); }


通过这次实验,我对指针与调用函数有了更深的了解,了解了对字符串函数类型题目的解决方法
浙公网安备 33010602011771号