}
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(\