实验6
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)) high=mid-1; else low=mid+1; } return -1; }
2
#include<string.h> #include<stdio.h> #include<Stdlib.h> void fun(char *a) { int i=0; char *p=a; while(*p&&*p=='*') { a[i]=*p; i++; p++; } while(*p) { if(*p!='*') { a[i]=*p; i++; } p++; } a[i]='\0'; } int main(){ char s[81]; printf("Enter a string :\n"); gets(s); 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; }
4
#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; } int ispalindrome(char *s) { char *a=s; char *b=s; int i=0,j=0; while(*b){ b++; j++; } b--; j--; while(i!=j&&j!=i+1){ if(*a!=*b){ return 0; } a++;i++; b--;j--; } if(i==j||j==i+1) return 1; }
5
#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<N; ++i) for(j=i, k=0; substr[k] == str[j]; k++, j++) if(substr[k+1] == '\0') { num++; break; } return(num); }
实验总结:
数组的认识不够深,运用不熟练。实验四中因为不知道如何表示*a,*b分别从前往后、从后往前相遇而多设了一组int i,j来表示;还需要重新再学习数组。
再次练习了二分法,还是以填空的形式,自己写也要能写出来。
实验五 子串与母串自己写可能写不出来。
还有去掉内*或内及后*,oj题我用数组写的一直是错的,要回去好好看一下为什么错了