1.函数
基本结构:
访问修饰符 返回值类型 函数名(形参){
函数体
}
eg:
static int Max(int num)
{
return 2;//表示函数结束,return后面的代码不能执行
}
//static:静态
练习一:
//判断是否为素数
static bool isSushu(int num)
{
//i从2开始,因为1不是素数
for (int i = 2; i < num; i++)
{
//能被整除的数不是素数
if (num % i == 0)
{
return false;
}
}
return true;//上面循环没一次执行,就是素数
}
//翻转数字
static int getReverse(int num)
{
string strnum = Convert.ToString(num);//将数字变量转为字符串变量
string strnum2 = "";
for (int i = strnum.Length - 1; i >= 0; i--)
{
strnum2 += strnum[i];
}
return Convert.ToInt32(strnum2);
}
//传2个参数
string str = Console.ReadLine();
string[] strArry = str.Split(" ");
int M = Convert.ToInt32(strArry[0]);
int N = Convert.ToInt32(strArry[1]);
string strOut = "";
//循环遍历N至M之间的数(输入的时候第一个小于第二个)
for (int i = M; i <= N; i++)
{
if (isSushu(i) && isSushu(getReverse(i)))
{
if (strOut == "")//当输出字符串为空时,不加逗号
{
strOut += i;
}
else
{
strOut += "," + i;
}
}
}
//当输出字符串为空时,输出no
if (strOut == "")
{
Console.WriteLine("no");
}
Console.WriteLine(strOut);
方法中的参数数组
//当一次需要输入多个数时,可用params,会将输入的参数变为一个数组
static void getNum(params int[] numArray)
{
Console.WriteLine(string.Join(" ", numArray));//将数组中的元素按照指定符号连接成一个字符串,数组转字符串
}
getNum(1, 3, 5, 7, 9, 32);
练习
static void getDivisor(int num)
{
for (int i = 1; i <= num; i++)
{
if (num%i==0)
{
Console.WriteLine(i);
}
}
}
int num =Convert.ToInt32(Console.ReadLine()) ;
getDivisor(num);
2.函数重载(Overload)
有时候我们可能需要使用同一个函数,但是传入的参数类型不一样,或者函数体中只有细微变动,这样我们可以使用函数重载的方式,根据传入参数的类型执行对应的函数
static int getNum(int num)
{
Console.WriteLine(num);
return num;
}
static double getNum(double num)
{
Console.WriteLine(num);
return num;
}
getNum(1.4);
练习 求斐波那契数列
- 提示:已知 1 1 2 3 5 8 13 21 34... 我们发现后面数是前两个数的和,我们称这种数列为斐波那契数列
- 题目要求:输入n,求出n项的斐波那契数列
- 例:输入4 输出 1 1 2 3
static int fib(int n)
{
if (n==1||n==2)
{
return 1;
}
return fib(n - 1) + fib(n - 2);
}
int num = Convert.ToInt32(Console.ReadLine());
for (int i = 1; i <= num; i++)
{
Console.Write(fib(i)+" ");
}
练习
有关系式1 * 1+2 * 2+3 * 3+...k * k<2000,编一个程序,求出满足此关系的k的最大值,利用递归和循环解决这个问题
//找关系式:f(k)=1^2+2^2+...+k^2,f(k-1)=1^2+2^2+...+(k-1)^2,f(k)=f(k-1)+k^2,f(1)=1
static int getFk(int k)
{
if (k == 1) return 1;
return getFk(k - 1)+k*k;
}
int i = 1;
while (true)
{
if (getFk(i)>=2000)
{
break;
}
i++;
}
Console.WriteLine(i-1);//取比i小1的数,为最大值
练习: 猴子摘桃问题
static int getP(int day)
{
if (day == 10) return 1;
return (getP(day + 1)+1)*2;
}
for (int i = 1; i < 11; i++)
{
Console.WriteLine("第{0}天剩余桃子数:{1}", i,getP(i));
}