實驗六 指標
阿新 • • 發佈:2021-12-15
實驗任務1
二分查詢演算法查詢特定元素
#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); index=binarySearch(a,N,key); if(index>=0) { printf("%d在陣列中,下標為%d\n",key,index); } else { printf("%d不在陣列中\n",key); } return 0; } 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)) low--; else low++; } return -1; }
實驗任務2
/* 設輸入的字串中只包含字母和*號。 編寫函式,實現:除了字串前導的*號之外,將串中其他*號全部刪除。 例如,若字串中的內容為****A*BC*DEF*G******* 刪除後,字串中的內容則應當是****ABCDEFG 在編寫函式時,不得使用C語言提供的字串函式。*/ #include <string.h> #include <stdio.h> #include <stdlib.h> void fun(char *a) { /*****ERROR********/ int i=0; char *p = a; /****ERROR***/ while (*p && *p == '*') { a[i] = *p; i++; p++; } while (*p) { /******ERROR*******/ if (*p != '*') { a[i] = *p; i++; } p++; } /******ERROR*******/ a[i] = '\0'; } int main() { char s[81]; printf("Enter a string :\n"); gets(s); /***ERROR******/ fun(s); printf("The string after deleted:\n"); puts(s); return 0; }
實驗任務3
/* 設輸入的字串中只包含字母和*號。 編寫函式,實現:除了字串前導和尾部的*號之外,將串中其他*號全部刪除。 例如,若字串中的內容為****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) { // 補足函式實現 // ××× char *high=s,*low=s; while(*low) { low++; high++; } while(s<high) { if(*s==*high) { s++; high--; } else return 0; } return 1; }
實驗任務五
#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) for(j=i, k=0; substr[k] == str[j]; k++, j++) if(substr[k+1] == '\0') { num++; break; } return(num); }