谭浩强C语言第五版的一些课后习题
第六章 第九题
折半查找 (从大到小排列)
int main(){
int BinarySearch(int s[],int key);
//由大到小的一组数据
int arr[5]={0};
int p;
printf("输入5个数 从大到小 :\n");
int i;
for(i=0;i<5;i++){
scanf("%d",&arr[i]);
}
printf("输入的数组为:\n");
for(i=0;i<5;i++){
printf("%d ",arr[i]);
}
printf("\n输入需要查找的数:\n");
scanf("%d",&p);
printf("找%d\n",p);
int ans=BinarySearch(arr,p);
if(ans>=0)
printf("查找成功!下标为:%d\n",ans);
else
printf("查找失败!\n");
return 0;
}
int BinarySearch(int s[],int key)
{
int low,high,mid;
low=0;
high=5-1;
while(low<=high)
{
mid=(low+high)/2; //计算中间元素序号
if(s[mid]==key) //中间元素与关键字相等
return mid;
else if(s[mid]>key) //中间元素大于关键字
low=mid+1; //比它大 往右(小的方向)找
else
high=mid-1; //比它小 往左(大的方向)找
return -1; //查找失败返回-1
}
谭浩强C语言第五版的一些课后习题
第五章 第三题
输入两个正整数m n,求最大公约数和最小公倍数
int main(){
int maxnum(int m,int n); //函数声明
int minnum(int m,int n);
//输入两个正整数 求最大公约数和最小公倍数
printf("输入两个正整数:\n");
int m,n;
scanf("%d%d",&m,&n);
while(m<=0||n<=0){
printf("输入有误,请重新输入:\n");
scanf("%d%d",&m,&n);
}
printf("输入成功~\n");
//函数调用
int max=maxnum(m,n);
int min=minnum(m,n);
printf("最大公约数为:%d\t最小公倍数为:%d\n",max,min);
return 0;
}
int maxnum(int m,int n){//求最大公约数
int ans=0;
if(m<n){ //把m指向较大的值
int temp=m;
m=n;
n=temp;
}
//辗转相除法求最大公约数
while(n!=0){
ans=m%n;//ans保存余数
m=n;
n=ans;
}
return m;
}
int minnum(int m,int n){//求最小公倍数
int maxnum(int m,int n);
int g=maxnum(m,n);//g保存最大公约数
int ans=0;
//最小公倍数=m*n/最大公约数
ans=m*n/g;
return ans;
}