9.11 编程练习

1.设计函数min(x,y),返回两个double数值中较小的数值,同时用一个简单的驱动程序测试该函数。

#include <stdio.h>
double min(double,double);
int main(void)
{
	double a,b;
	double min_num;
	while((scanf("%lf %lf",&a,&b))!=2)
	{
		printf("please enter two number.\n");
	}	
	min_num=min(a,b);
	printf("the minisum number is %f\n",min_num);
}
double min(double a,double b)
{
	return a<b?a:b;
}
2.设计函数chline(ch,i,j),实现指定字符i列到j列的输入,并用一个简单的驱动程序测试该函数。

#include <stdio.h>
void chline(char ch,int i,int h);
int main(void)
{
	int i=5,j=3;
	char ch='x';
	chline(ch,i,j);
	
	return 0;
}
void chline(char ch,int i,int h)
{
	int n,m;
	for(n=1;n<=h;n++)
	{
		for(m=1;m<=i;m++)
		{
			putchar(ch);
		}
		putchar('\n');
	}
}


3.编写一个函数。函数的3个参数是一个字符和两个整数。字符参数是需要输入的字符。第一个整数说明了在每行中该字符输出的个数,而第二个整数指的是需要输出的行数。编写一个调用该函数的程序。

#include <stdio.h>
void chline(char ch,int i,int h);
int main(void)
{
	int i,j;
	char ch;
	printf("Enter two number,the first as column and latter as row\n");
	while((scanf("%d %d",&i,&j))!=2)
		continue;
	while(getchar()!='\n');
	printf("Enter a charact for print\n");
	ch=getchar();
	while(getchar()!='\n');
	chline(ch,i,j);
	
	return 0;
}
void chline(char ch,int i,int h)
{
	int n,m;
	for(n=1;n<=h;n++)
	{
		for(m=1;m<=i;m++)
		{
			putchar(ch);
		}
		putchar('\n');
	}
}
4.两数值的谐均值可以这样计算:首先对两数值的倒数取平均值,然后再取倒数,编写一个带有两个double参数的函数,计算着两个参数的谐均值。
#include <stdio.h>
double xiejun(double a,double b);
int main(void)
{
	double a,b;
	printf("请输入两个不为0的浮点数\n");
	while((scanf("%lf %lf",&a,&b))!=2&&a==0&&b==0)
	{
		printf("请输入两个不为0的浮点数\n");
	}
	printf("这两个数的谐均数是%f\n",xiejun(a,b));
	return 0;
}
double xiejun(double a,double b)
{
	return 1/((1/a+1/b)/2);
}
5.编写并测试函数larger_of(),其功能是将两个double类型的变量的数值替换成他们中的较大值。例如,larger_of(x,y)会把x,y中的较大值重新赋值给x和y。

#include <stdio.h>
void chang(double* a,double* b);
int main(void)
{
	double a,b;
	printf("请输入两个不为0的浮点数\n");
	while((scanf("%lf %lf",&a,&b))!=2)
	{
		printf("请输入两个不为0的浮点数\n");
	}
	printf("函数调用前,a=%.2f和b=%.2f\n",a,b);
	chang(&a,&b);
	printf("函数调用后,a=%.2f和b=%.2f\n",a,b);
	return 0;
}
void chang(double* a,double* b)
{
	double large;
	large=*a>*b?*a:*b;
	*a=*b=large;
}
6.编写一个程序,使其从标准输入读取字符,直到遇到文件结尾。对于每个字符,程序需要检查并报告字符是否是一个字母。如果是的话,程序还应该报告该字母在字母表中的数值位置。例如,c和C的字母位置都是3.可以先实现这样一个函数:接受一个字符参数,如果该字符为字母则返回该字母的数值位置,否则返回-1。
#include <stdio.h>
#include <ctype.h>
int PosionOfChar(char ch);
int main(void)
{
	char ch;
	while((ch=getchar())!=EOF)
	{
		if(ch!='\n')
			printf("%c:%d ",ch,PosionOfChar(ch));
	}
	return 0;
}
int PosionOfChar(char ch)
{
	int posion;
	if(isalpha(ch))
	{
		if(isupper(ch))
		{
			ch=tolower(ch);
		}
		posion=ch-96;
	}
	else
	{
		posion=-1;
	}
	return posion;
}
7.在第6章“C控制语句:循环”的程序清单6.20中,函数power()的功能是返回一个double类型的某个正整数次幂。现在改进该函数,使其能正确计算负幂。同时,该函数实现0的任何次幂为0,并且任何数值的0次幂为1.使用循环的方法编写该函数并且在一个程序中测试它。

#include <stdio.h>
#include <math.h>
double power(int n,int p);
int main(void)
{
	int n,p;
	printf("please enter two integer number1.\n");
	scanf("%d %d",&n,&p);
	power(n,p);
	printf("%d^%d is %.2f",n,p,power(n,p));
}
double power(int n,int p)
{
	int x;
	double rt=1;
	if(n!=0)
	{	
		if(p>0)
		{
			for(x=1;x<=p;x++)
			{		
				rt*=n;
			}	
		}



		if(p<0)
		{
			p=fabs(p);
			for(x=1;x<=p;x++)
			{		
				rt*=n;
			}	
			rt=1/rt;
		}
		
		
		if(p==0)
		{
			rt=1;
		}		
	}
	else
	{
		rt=0;
	}

	return rt;

}
8.使用递归函数重做练习7.

#include <stdio.h>
#include <math.h>
double power(int n,int p);
int main(void)
{
	int n,p;
	double result;
	int status;
	do{
		printf("please enter two integer number(q to quit):\n");
		status=scanf("%d %d",&n,&p);
		result=power(n,p);
		printf("%d^%d is %.2f\n",n,p,result);
	}while(status==2);
	
	return 0;
}

double power(int n,int p)
{
	int x;
	double rt=1;
	if(n!=0)
	{
		if(p==0)
		{
			rt=1;
		}
		else if(p>0)
		{
			rt=n*power(n,p-1);	
		}
		else
		{
			p=fabs(p);
			rt=1/(n*power(n,p-1));
		}
	}
	else
	{
		rt=0;
	}
	return rt;	
}
9.为了使程序清单9.8中的to_binary函数一般化,可以在新的函数to_base_n()中使用第二个参数,且该参数的范围从2到10.然后,这个新函数输出第一个参数在第二个参数规定的进制数下的数值结果。例如,to_base_n(129,8)的输出结果是201,也就是129的八进制数值。最后在一个完整的程序对该函数进行测试。

#include <stdio.h>
void to_binary_n(int num,int digit);
int main(void)
{
	int num,digit;
	double result;
	int status;
	do{
		printf("\nplease enter two integer number(q to quit):\n");
		status=scanf("%d %d",&num,&digit);
		to_binary_n(num,digit);
	}while(status==2);
}
void to_binary_n(int num,int digit)
{
	int r;
	r=num%digit;
	if(num!=0)
	{
		to_binary_n(num/digit,digit);
		printf("%d",num%digit);
	}
}
10.编写并测试一个函数Fibonacci(),在该函数中使用循环代替递归完成斐波那契数列的计算。

暂时还不会。






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Tensorflow、OpenAI搭建的强化学习框架,训练机器自动操盘 强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一。它主要用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。强化学习的特点在于没有监督数据,只有奖励信号。 强化学习的常见模型是标准的马尔可夫决策过程(Markov Decision Process, MDP)。按给定条件,强化学习可分为基于模式的强化学习(model-based RL)和无模式强化学习(model-free RL),以及主动强化学习(active RL)和被动强化学习(passive RL)。强化学习的变体包括逆向强化学习、阶层强化学习和部分可观测系统的强化学习。求解强化学习问题所使用的算法可分为策略搜索算法和值函数(value function)算法两类。 强化学习理论受到行为主义心理学启发,侧重在线学习并试图在探索-利用(exploration-exploitation)间保持平衡。不同于监督学习和非监督学习,强化学习不要求预先给定任何数据,而是通过接收环境对动作的奖励(反馈)获得学习信息并更新模型参数。强化学习问题在信息论、博弈论、自动控制等领域有得到讨论,被用于解释有限理性条件下的平衡态、设计推荐系统和机器人交互系统。一些复杂的强化学习算法在一定程度上具备解决复杂问题的通用智能,可以在围棋和电子游戏中达到人类水平。 强化学习在工程领域的应用也相当广泛。例如,Facebook提出了开源强化学习平台Horizon,该平台利用强化学习来优化大规模生产系统。在医疗保健领域,RL系统能够为患者提供治疗策略,该系统能够利用以往的经验找到最优的策略,而无需生物系统的数学模型等先验信息,这使得基于RL的系统具有更广泛的适用性。 总的来说,强化学习是一种通过智能体与环境交互,以最大化累积奖励为目标的学习过程。它在许多领域都展现出了强大的应用潜力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值