二分法和遍历搜索法 求解任意实数平方根 (C语言)

 

【实验要求】

  1. 程序支持用户通过命令行输入非负实数。
  2. 程序同时输出非负平方根和运行时间。
  3. 记录蛮力法和二分法的运行时间随着问题规模变化的增长表格。
  4. 蛮力法的整数区间和小数区间的搜索都使用蛮力法。
  5. 二分法的整数区间和小数区间的搜索都使用二分法。

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define deta 0.0001//每次调节的步长 

/**********
author:YXP
e-mail:yxp189@protonmail.com
**********/

double immediate_sqrt(double num);//遍历搜索求解 
double dichotomy_sqrt(double num);//二分法求解 

int main(int argc, char *argv[]) 
{
	long start, finish;
	double totaltime;
	
	printf ("\nPlease type in the NUM:");
	double num,root;
	scanf ("%lf",&num);
	start = clock();
	root = immediate_sqrt(num); //蛮力法 
	//root = dichotomy_sqrt(num);//二分法 
	finish = clock();
	totaltime = (double)((finish-start)/CLOCKS_PER_SEC);
	printf(">>程序运行时间%.8f秒\n",totaltime);
	printf (">>The root=%lf",root);
	
	return 0;
}

double immediate_sqrt(double num)
{
	double root,temp;
	for (temp = 0;((root+deta)*(root+deta))<num;){
		root += deta;
	}
	return root;
}

double dichotomy_sqrt(double num)
{
	double root,mid,head=0,tail=num;
	while ((tail -head )>deta){
		mid = (head+tail)/2;
		if (mid*mid == num){
			root = mid;
			goto AAA;
		}
		if ((mid*mid)>num){
			tail = mid;
		}else{
			head = mid;
		}
	}
	root = mid;
	AAA:;
	return root;	
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值