APP測試點
#include <stdio.h>
#define N 5
int binarySearch(int *x, int n, int item); // 函式宣告
int main()
{
int a[N] = {2, 7, 19, 45, 66};
int i, index, key;
printf("陣列a中的資料:\n");
for (i = 0; i < N; i++)
printf("%d ", a[i]);
printf("\n");
printf("輸入待查詢的資料項: ");
scanf("%d", &key);
// 呼叫函式binarySearch()在陣列a中查詢指定資料項key,並返回查詢結果給index
// 補足程式碼①
index=binarySearch(a,N,key);
if (index >= 0)
printf("%d在陣列中,下標為%d\n", key, index);
else
printf("%d不在陣列中\n", key);
return 0;
}
// 函式功能描述:
// 使用二分查詢演算法在從地址x開始的連續n個數據項中,查詢特定資料項item
// 如果找到,返回其下標; 如果沒找到,返回-1
int binarySearch(int *x, int n, int item)
{
int low, high, mid;
low = 0;
high = n - 1;
while (low <= high)
{
mid = (low + high) / 2;
if (item == *(x + mid))
return mid;
else if (item < *(x + mid))
high=mid-1;
else
low=mid+1;
}
return -1;
}
實驗二
#include <stdio.h> #include <stdlib.h> void fun(char *a) { /*****ERROR1********/ int i=0;//first char *p = a; /****ERROR2***/ while(*p=='*') a[i++]=*p++; 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); 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; char *t = a, *f = a; char *q = a; while (*t) t++; t--; while (*t == '*') 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) { char *p=s;char*q=s;int flag=1; while(*q) q++; q--; while(p<q) { if(*p==*q) {p++; q--;} else { flag=0; break;} } return flag; }
實驗五
#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;*(str+i)!='\0'; ++i) { k=0; for(j=i; substr[k] == str[j]; j++) { k++; if(substr[k] == '\0') { num++; break; } } } return num; }
本次實驗,讓我們瞭解了指標的用法及其和陣列之間的聯絡,瞭解了二者的優缺點。