优秀学习资料 欢迎下载
}
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; }