如何只遍历一次数组,从中找到两个最小的数.
public static void findmin(int[] arr)
{
int min1, min2;
if (arr[0] > arr[1])
{
min1 = 1; min2 = 0;
}
else {
min1 = 0; min2 = 1;
}
for (int i = 2; i < arr.Length; i++)
{
if (arr[i] < arr[min2]) {
if (arr[i] < arr[min1]) {
min2 = min1;//顺序不能颠倒
min1 = i;//顺序不能颠倒
}
else
{
min2 = i;
}
}
}
Console.WriteLine("{0} {1}",arr[min1],arr[min2]);
}
1.c#函数只能在某个类中定义,函数不能嵌套定义即在某个函数中定义其它函数。
函数由访问属性(public,private,protected,…);
2、函数调用:如果是静态函数,可以通过类名去直接调用;如果是非静态函数则需要通过类对象去调用。
3、形式参数与实际参数传递:
1) 值传递:基本值类型数据
static void swap(int x, int y)//不能交换x,y值
{
int t = x; x = y; y = t;
}
2) 引用传递:
static void swap(int[] arr)
{
int t = arr[0]; arr[0] = arr[1]; arr[1] = t;//能交换arr[0],arr[1]值
}
4、输出参数out
static void fun(int x1, int x2, out int x3)
{
x3 = x1 + x2;
}
static void Main(string[] args)
{
int x = 10, y = 100, z;
fun(x, y, out z);//接收输出参数值,不需要为z赋初始值
Console.WriteLine(x+" "+y+" "+z);
Console.ReadLine();
}
5、带有可变参数的函数
static int fun(int a,params int[] x)
{
int s = 0;
for (int i = 0; i < x.Length; i++)
s += x[i];
return s;
}
static void Main(string[] args)
{
Console.WriteLine(fun(1,2,3,4));
Console.WriteLine(fun(1));
Console.WriteLine(fun(1,3,4,4,6,7));
Console.ReadLine();
}
6.、递归函数:函数递归调用递归函数:1)递推公式,2)递归出口
//求阶乘
static long fac(int n){
if(n==0||n==1)
return 1;
else
return n*fac(n-1);//n!=n*(n-1)!
}
汉诺塔程序:
A ,B,C
n=1: A-->C
n>1: 将A柱 n-1盘借助于C搬到B柱
将A柱最后盘搬到C
将B柱 n-1盘借助于A搬到C柱
static void disp(string a,string c)
{
Console.WriteLine("{0}--->{1}", a, c);
}
static void hannota(string a, string b, string c, int n)
{
if (n == 1)
disp(a, c);
else
{
hannota(a, c, b, n - 1);
disp(a, c);
hannota(b, a, c, n - 1);
}
}
练习:编写一个程序找出100~1000之间的所有姐妹素数。
注: 姐妹素数是指相邻两个奇数均为素数。
class Pr4_2
{
static bool sushu(int n)
{
bool flag=true;
for (int i = 2; i <= Math.Sqrt(n); i++)
{
if (n % i == 0)
{
flag = false;
break;
}
}
return flag;
}
static void Main(string[] args)
{
for (int i = 100; i < 998; i++)
{
bool jg = sushu(i);
if (jg)
{
bool jg1 = sushu(i + 2);
if (jg1)
Console.WriteLine("{0,-3} {1,-3}" ,i,(i+2));
}
}
Console.ReadLine();
}
利用求n!的方法计算 2!+4!+5!的值。分别利用递归和非递归方法实现求n!
(1)递归:
class Pr4_6
{
static int digui(int n)
{
int sum=0;
if (n == 0 || n == 1)
sum = 1;
else
sum = n * digui(n - 1);
return sum;
}
static void Main(string[] args)
{
int sum =digui(2)+digui(4)+digui(5);
Console.WriteLine("{0}+{1}+{2}={3}","2!","4!","5!", sum);
Console.ReadLine();
}
}
(2)非递归:
class Pr4_6
{
static int digui(int n)
{
int sum=1;
if (n == 0 || n == 1)
sum = 1;
else
for (int i = 2; i <= n; i++)
sum = sum * i;
return sum;
}
static void Main(string[] args)
{
int sum =digui(2)+digui(4)+digui(5);
Console.WriteLine("{0}+{1}+{2}={3}","2!","4!","5!", sum);
Console.ReadLine();
}
}