优秀学习资料 欢迎下载
}
while(t) {
m=m*10+t; t/=10; }
return m==n;
(5)在n个已排好序(设为从小到大)的数据(数或字符串)中查找某一个数据,如果找到了,就指出其在n个数中的位置;否则给出无该数据的信息。请用递归的方法实现二分查找来实现这一查找过程。
提示:采用二分法求解本问题的基本思路是:设数列为a1,a2,…,an,被查找的数为x,则查找首先对am(m = ( n + 1 ) / 2)进行,于是得到三种情形。
若x > am,则x只可能在区间[am + 1 , an] 若x < am,则x只可能在区间[a1 , am - 1] 若x = am,则am即为查找的数,求解结束。
从上面的分析发现,这个过程很适合用递归来实现。
#include\
void found(int s[],int max,int min,int l) {
int mid;
 mid=(max+min)/2;  if(mid>max||mid   printf(\此数不存在于此数列中!\else {   if(s[mid]==l)  {          printf(\该数在10个数中的位置是%d\}  else if(s[mid]>l) {   max--;   found(s,max,min,l);  优秀学习资料   欢迎下载    }   else   {     min++;     found(s,max,min,l);   }  }    getchar(); }  int main() {   int a[10],i,n;   for(i=0;i<10;i++)    scanf(\ scanf(\ found(a,9,0,n);  }    实验六  指针 实验  ( 验证性 综合性 实验      4学时)  1、目的要求:  (1)用指针作为函数参数完成字符串的传递。 (2)掌握函数中参数传递的两种方式。 (3)编写实验报告。   2、实验内容(参考实验指导书):  (1)编写一个函数char *delk( char *sp),把sp所指向的字符串中所有的“$”字符删除,并把处理后的字符串指针返回。  #include void delk(char *s,char c) {       char s2[50];      int i,j;       for(i=0,j=0;s[i]!='\\0';i++)   {         if(s[i]!=c)     {           s2[j]=s[i];          j++;     }   }  优秀学习资料   欢迎下载        s2[j]='\\0';        for(i=0;s2[i]!='\\0';i++)    {          s[i]=s2[i];    }        s[i]='\\0';  }  int main() {      char str[20],c;     printf(\请输入串字符\\n\gets(str);  printf(\请输入要删去的字符\\n\  scanf(\    delk (str,c);     puts(str); }    (2)写一个函数int find( char *s1, char *s2),函数find的功能是查找串s1中是否包含指定的词(s2指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的空格符分隔。  #include int find(char *s1,char *s2) {   int i=0,j=0;  char *p=s2;   for(;s1!='\\0';s1++,i++)  {    if(*s1!=*s2)   {     s2=p;    j=0;   }    if(*s1==*s2)   {     j++;    s2++;     if(*s2=='\\0')  优秀学习资料   欢迎下载     {      return i-j+2;    }   }  }   return -1; }  void main() {   char s1[30],s2[10];     printf(\请输入一句话:\\n\gets(s1);  printf(\请输入一个词:\\n\  gets(s2);   printf(\}    (3)编程实现将输入的十进制整数n通过函数DtoH转换为十六进制数,并将转换结果以字符形式输出。例如:输入十进制数79,将输出十六进制数4f。  #include     int i=0;     while(n!=0)  {    int bit=n;   a[i]=bit;   i++;   n=n/16;  }      return i;  }  int main() {      int x;      printf(\请输入一个十进制整数\\n\    scanf(\ 优秀学习资料   欢迎下载      int a[10]={0};      int nbits=DtoH(x,a);     int i;      printf(\转换成十六进制后的数为\\n\    for(i=nbits-1;i>=0;i--){   if(a[i]>9)     printf(\  else     printf(\ }      printf(\}    (4)定义函数void Merge(int a[], int n, int b[], int m),参数a、b为一维数组,数组中的数据为升序排列,n和m分别为它们的元素个数。函数的功能为:将数组a和b合并为一个数组,合并后的结果存放于数组a中,要求合并后的数组a仍旧为升序排列。请编程实现,并编写main函数对其测试。  #include void Merge(int a[],int n,int b[],int m) {   int *p,*q,i,j,k;  p=a;     q=b;   for(i=0;i<10;i++)  {    if(i>0&&*(p+i)<*(p+i-1))   {     *(p+i)=*q;    q++;   }  }   for(i=0;i<10;i++)    for(j=i+1;j<10;j++)    if(*(p+i)>*(p+j))    {      k=*(p+i);     *(p+i)=*(p+j);     *(p+j)=k;    }