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