C# 小例子

时间:2023-03-09 05:42:31
C# 小例子

数组冒泡排序(升序排序)

             int[] num = { , , , , , , , , , , ,  };
//第一种
for (int i = ; i < num.Length - ; i++)
{
for (int j = ; j < num.Length - i - ; j++)
{
if (num[j] > num[j + ])
{
int temp = num[j];
num[j] = num[j + ];
num[j + ] = temp;
}
}
}
//第二种
for (int i = ; i < num.Length - ; i++)
{
for (int j = ; j < num.Length - ; j++)
{
if (num[j] > num[j + ])
{
int temp = num[j];
num[j] = num[j + ];
num[j + ] = temp;
}
}
}
//第三种
for (int i = ; i < num.Length - ; i++)
{
for (int j = ; j < num.Length - - i; j++)
{
if (num[j] > num[j + ])
{
int temp = num[j];
num[j] = num[j + ];
num[j + ] = temp;
}
}
}
//第四种:
for (int i = ; i < num.Length - ; i++)
{
for (int j = i + ; j < num.Length; j++)
{
if (num[i] > num[j])
{
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}

C#中有提供专门排序的方法:System.Array.Sort(要排序的数组);//升序排序

升序排序可以先降序后再反转排序 。

数组降序排序

             int[] num = { , , , , , , , , , , ,  };
//第一种
for (int i = ; i < num.Length - ; i++)
{
for (int j = ; j < num.Length - i - ; j++)
{
if (num[j] < num[j + ])
{
int temp = num[j];
num[j] = num[j + ];
num[j + ] = temp;
}
}
}
//第二种
for (int i = ; i < num.Length - ; i++)
{
for (int j = ; j < num.Length - ; j++)
{
if (num[j] < num[j + ])
{
int temp = num[j];
num[j] = num[j + ];
num[j + ] = temp;
}
}
}
//第三种
for (int i = ; i < num.Length - ; i++)
{
for (int j = ; j < num.Length - - i; j++)
{
if (num[j] < num[j + ])
{
int temp = num[j];
num[j] = num[j + ];
num[j + ] = temp;
}
}
}
//第四种:
for (int i = ; i < num.Length - ; i++)
{
for (int j = i + ; j < num.Length; j++)
{
if (num[i] < num[j])
{
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}

可用C#中中提供的专门排序的方法来降序,降序排序可以先Array.Sort() 再 Array.Reverse()。【先升序再反转过来】

降序排序可以先升序后再反转排序 。

数组反转排序

             string[] str = { "a", "b", "c", "d", "e", "f", "g" };
for (int i = ; i < str.Length / ; i++)
{
string temp = str[i];
str[i] = str[str.Length - - i];
str[str.Length - - i] = temp;
}

C#中有提供专门排序的方法:System.Array.Reverse(要排序的数组);//颠倒排序,反转排序

输入一个年份和月份输出这个月份的天数:

             Console.WriteLine("请输入年份");
try
{
int year = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入月份");
try
{
int month = Convert.ToInt32(Console.ReadLine());
if (month >= && month <= )
{
int day = ;
switch (month)
{
case :
case :
case :
case :
case :
case :
case : day = ; break;
case : if ((year % == ) || (year % == && year % != )) day = ; else day = ; break;
default: day = ; break;
}
Console.WriteLine("{0}年{1}月有{2}天", year, month, day);
}
else { Console.WriteLine("输入的月份超出范围"); }
}
catch { Console.WriteLine("输入的月份有误,程序退出"); }
}
catch { Console.WriteLine("输入的年份有误,程序退出"); }
Console.ReadKey();

不断要求用户输入姓名,输入q就结束

             string strname = "";

             while (strname != "q")
{
Console.WriteLine("请输入你的姓名,输入q结束");
strname = Console.ReadLine();
}
Console.ReadKey();
//do...while
/*do
{
Console.WriteLine("请输入你的姓名,输入q结束");
strname = Console.ReadLine();
} while (strname != "q");
Console.ReadKey();*/

不断要求输入一个数字(假定用户输入的是正整数),当用户输入end时显示刚才输入的数字中的最大值

             string input = "";
int max = ;
while (input != "end")
{
Console.WriteLine("请输入一个数字,输入end将显示输入数中的最大值");
input = Console.ReadLine();
if (input != "end")
{
try
{
int number = Convert.ToInt32(input);
if (number > max)
{
max = number;
}
}
catch
{
Console.WriteLine("您收收入的字符串有误,请重新输入");
}
}
else
{
Console.WriteLine("您刚才输入的数字中最大值为{0}", max);
}
} Console.ReadKey();

九九乘法表

             for (int i = ; i <= ; i++)
{
for (int j = ; j <= i; j++)
{
Console.Write("{0}*{1}={2}\t", i, j, i * j);
} Console.WriteLine();
} Console.ReadKey();

 百钱买百鸡:(公鸡5元/只,母鸡3元/只,小鸡3只/元)

 //方法

         /// <summary>
/// 求百钱买百鸡的购买方案,返回三种购买方案。
/// </summary>
/// <param name="Num1">返回的包含第一种购买方案的输出型数组,数组下标从0开始,依次为公鸡数量、母鸡数量、小鸡数量</param>
/// <param name="Num2">返回的包含第二种购买方案的输出型数组,数组下标从0开始,依次为公鸡数量、母鸡数量、小鸡数量</param>
/// <param name="Num3">返回的包含第三种购买方案的输出型数组,数组下标从0开始,依次为公鸡数量、母鸡数量、小鸡数量</param>
public static void BuyChicken(out int[] Num1, out int[] Num2, out int[] Num3)
{
//g5,m3,x(1/3)
Num1 = new int[];
Num2 = new int[];
Num3 = new int[];
//int g, m, x;
string str = "";
for (int Cock = ; Cock <= ; Cock++)
{
for (int Hen = ; Hen <= ; Hen++)
{
int Chicken = - Cock - Hen;
if (Cock * + Hen * + Chicken / == && Chicken % == )
{
str += Cock.ToString() + "|" + Hen.ToString() + "|" + Chicken.ToString() + "|";
}
}
}
string[] strArray = str.Split(new char[] { '|' });
for (int i = ; i < strArray.Length; i++)
{
if (i >= && i <= )
Num1[i] = Convert.ToInt32(strArray[i]);
if (i >= && i <= )
Num2[i - ] = Convert.ToInt32(strArray[i]);
if (i >= && i <= )
Num3[i - ] = Convert.ToInt32(strArray[i]);
}
} //调用
int[] Num1;
int[] Num2;
int[] Num3;
BuyChicken(out Num1, out Num2, out Num3);
Console.WriteLine("公鸡数量:{0},母鸡数量:{1},小鸡数量:{2}", Num1[], Num1[], Num1[]);
Console.WriteLine("公鸡数量:{0},母鸡数量:{1},小鸡数量:{2}", Num2[], Num2[], Num2[]);
Console.WriteLine("公鸡数量:{0},母鸡数量:{1},小鸡数量:{2}", Num3[], Num3[], Num3[]);
             for (int Cock = ; Cock <= ; Cock++)
{
for (int Hen = ; Hen <= ; Hen++)
{
int Chicken = - Cock - Hen;
if (Cock * + Hen * + Chicken / == && Chicken % == )
{
Console.WriteLine("Cock:{0},Hen:{1},Chicken:{2}", Cock, Hen, Chicken);
}
}
}

求水仙花数

         /// <summary>
/// 求水仙花数
/// </summary>
/// <returns>返回的包含水仙花数的数组</returns>
public static string[] SxhNum()
{
int a, b, c;
string str = null;
for (int num = ; num < ; num++)
{
a = num / ;//
b = num / % ;//
c = num % ;//
if (Math.Pow(a, ) + Math.Pow(b, ) + Math.Pow(c, ) == num)
{
str += num.ToString() + "|";
}
}
return str.Substring(, str.Length - ).Split(new char[] { '|' });
} //调用
string[] str = SxhNum();
for (int i = ; i < str.Length; i++)
{
Console.WriteLine("水仙花数:" + str[i]);
}
             int a, b, c, num;
for (num = ; num < ; num++)
{
a = num / ;
b = num / % ;
c = num % ;
if (a * a * a + b * b * b + c * c * c == num)
Console.WriteLine("水仙花数:" + num);
}

用while continue实现计算1 到100(含)之间的除了能整除7以外的所有数的和:【4315】

             int sum = ;
int i = ;
while (i <= )
{
if (i % == )
{
i++;
continue;
}
sum += i;
i++;
}
Console.WriteLine(sum);
Console.ReadKey();

找出1到100之内所有的素数(质数)【有25个】

             for (int i = ; i <= ; i++)
{
bool b = true;//放在两个循环之间,保证变量b为true
for (int j = ; j < i; j++)
{
//除尽说明不是质数,没有再进行下去的必要
if (i % j == )
{
b = false;
break;
}
}
if (b)
{
Console.WriteLine(i);
}
} Console.ReadKey();

依次输入分数求总分和平均分:

             Console.WriteLine("请输入班级人数");
int count = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
int i = ;
int sum = ;
while (i <= count)
{
Console.WriteLine("请输入第{0}个人的成绩", i);
int score = Convert.ToInt32(Console.ReadLine());
sum += score;
i++;
}
Console.WriteLine("班级的总分数为{0},平均分为{1}", sum, sum / count);
Console.ReadKey();

不断要求输入一个数字,然后打印该数字的两倍,输入q时结束

             string input = "";
while (input != "q")
{
Console.WriteLine("请输入一个数字,将打印该数字的两倍");
input = Console.ReadLine();
if (input != "q")
{
try
{
int number = Convert.ToInt32(input);
Console.WriteLine("您能输入的数字的二倍为{0}", number * );
}
catch
{
Console.WriteLine("您输入的字符串不能够转换为数字,请重新输入");
}
}
else
{
Console.WriteLine("您输入的为q,程序退出");
}
}

1-100之间的数整相加,得到累加值大于20的当前数

             int sum = ;
for (int i = ; i <= ; i++)
{
sum += i;
if (sum >= )
{
Console.WriteLine("加到{0}的时候,总和大于了20", i); break;
}
} Console.ReadKey();

一组数:1,1,2,3,5,8,13,21,34...... ,每一个是前两个的和,求除第n个数:【斐波那契数列】

 //写一个方法
public static int Foo(int i)
{
if (i <= )
return ;
else if (i > && i <= )
return ;
else return Foo(i - ) + Foo(i - );
} //在Main函数中调用
Console.WriteLine("输入你要求第几个数!");
int num = int.Parse(Console.ReadLine());
Console.WriteLine("第{0}个数为:{1}", num, Foo(num));

1

             Console.WriteLine("输入你要求第几个数!");
int num = int.Parse(Console.ReadLine()); int n0 = , n1 = ;
int n = ;
for (int i = ; i < num; i++)
{
n = n0 + n1;
n0 = n1;
n1 = n;
}
Console.WriteLine(n);

2

“斐波那契数列”是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci,生于公元1170年,卒于1240年.籍贯大概是比萨).他被人称作“比萨的列昂纳多”.1202年,他撰写了《珠算原理》(Liber Abaci)一书.他是第一个研究了印度和阿拉伯数学理论的欧洲人.他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点相当于今日的阿尔及利亚地区,列昂纳多因此得以在一个阿拉伯老师的指导下研究数学.他还曾在埃及、叙利亚、希腊、西西里和普罗旺斯研究数学.
  斐波那契数列指的是这样一个数列:,,,,,,,,……
  这个数列从第三项开始,每一项都等于前两项之和.它的通项公式为:(/√)*{[(+√)/]^n - [(-√)/]^n}(又叫“比内公式”,是用无理数表示有理数的一个范例.)【√5表示根号5】
  很有趣的是:这样一个完全是自然数的数列,通项公式居然是用无理数来表达的【斐波那挈数列通项公式的推导】
  斐波那契数列:,,,,,,,,……
  如果设F(n)为该数列的第n项(n∈N+).那么这句话可以写成如下形式:
  F() = ,F()=F()=,F(n)=F(n-)+F(n-) (n≥)
  显然这是一个线性递推数列.
通项公式的推导方法:
  设常数r,s
  使得F(n)-r*F(n-)=s*[F(n-)-r*F(n-)]
  则r+s=,-rs=
  n≥3时,有
  F(n)-r*F(n-)=s*[F(n-)-r*F(n-)]
  F(n-)-r*F(n-)=s*[F(n-)-r*F(n-)]
  F(n-)-r*F(n-)=s*[F(n-)-r*F(n-)]
  ……
  F()-r*F()=s*[F()-r*F()]
  将以上n-2个式子相乘,得:
  F(n)-r*F(n-)=[s^(n-)]*[F()-r*F()]
  ∵s=-r,F()=F()=
  上式可化简得:
  F(n)=s^(n-)+r*F(n-)
  那么:
  F(n)=s^(n-)+r*F(n-)
  = s^(n-) + r*s^(n-) + r^*F(n-)
  = s^(n-) + r*s^(n-) + r^*s^(n-) + r^*F(n-)
  ……
  = s^(n-) + r*s^(n-) + r^*s^(n-) +……+ r^(n-)*s + r^(n-)*F()
  = s^(n-) + r*s^(n-) + r^*s^(n-) +……+ r^(n-)*s + r^(n-)
  (这是一个以s^(n-)为首项、以r^(n-)为末项、r/s为公差的等比数列的各项的和)
  =[s^(n-)-r^(n-)*r/s]/(-r/s)
  =(s^n - r^n)/(s-r)
  r+s=,-rs=1的一解为 s=(+√)/,r=(-√)/
  则:
F(n)=(√)*{[(+√)/]^n - [(-√)/]^n} 代入n值可求出相应数

“斐波那契数列”介绍

求一组数1,12,123,1234,12345,123456,1234567,......,第n个数的递归算法(n<=9)

 //写一个方法
string Func(int n) //n<=9
{
if(n<=)
return "";
return Func(n-)+n.ToString();
} //在Main方法中调用
Console.WriteLine("请输入你要求第几个数!");
int num = int.Parse(Console.ReadLine());
Console.WriteLine(Func(num));

将一个数组中的奇数放到一个集合中,再将偶数放到另一个集合中最终将两个集合合并为一个集合,并且奇数项是在左边,偶数显示在右边:

             int[] num = { , , , , , , , ,  };
List<int> Listou = new List<int>();//int类型泛型集合
List<int> ListJi = new List<int>();//int类型泛型集合
for (int i = ; i < num.Length; i++)
{
if (num[i] % == )
{
Listou.Add(num[i]);//添加到集合
}
else
{
ListJi.Add(num[i]);//添加到集合
}
}
ListJi.AddRange(Listou);
foreach (var item in ListJi)
{
Console.Write(item + " ");
}
for (int i = ; i < ListJi.Count; i++)//输出
{
Console.Write(ListJi[i] + " ");
}

提示用户输入一个字符串,通过foreach循环将用户输入的字符串赋值给一个字符数组:

             Console.WriteLine("请输入一个字符串");
string input = Console.ReadLine();
char[] ch = new char[input.Length];
int i = ;
foreach (var item in input)
{
ch[i] = item;//将字符串的字符赋值给字符数组的元素
i++;
}
foreach (var item in ch)//输出
{
Console.WriteLine(item);
}

统计一个字符串中每个字符出现的字数,不考虑大小写:

             string str = "Welcome to China!";
Dictionary<char, int> dic = new Dictionary<char, int>();
for (int i = ; i < str.Length; i++)
{
if (str[i] == ' ' || str[i] == '!')
{
continue;
}
//如果dic已经包含当前循环到的这个键
if (dic.ContainsKey(str[i]))//是否包含当前键
{
dic[str[i]]++;//当前对应键的值加1
}
else//没有这个键,第一次出现
{
dic[str[i]] = ;//当前对应键的值为1
}
}
foreach (KeyValuePair<char, int> kv in dic)//输出,KeyValuePair定义可设置或检索的键/值对
{
Console.WriteLine("字母{0}出现了{1}次", kv.Key, kv.Value);
}

1

         /// 统计一个字符串中每个字符出现的字数,不考虑大小写
/// </summary>
/// <param name="str">统计的字符串</param>
/// <param name="dic">用来存放字符串中每个字符和字符出现的数量</param>
public static void CharTemp(string str, Dictionary<char, int> dic)
{
for (int i = ; i < str.Length; i++)
{
if (str[i] == ' ' || str[i] == '!')
{
continue;
}
if (dic.ContainsKey(str[i]))
{
dic[str[i]]++;
}
else
{
dic[str[i]] = ;
}
}
} ///再在Main函数中调用
string str = "Welcome to China!";
Dictionary<char, int> dic = new Dictionary<char, int>();
CharTemp(str, dic);
foreach (KeyValuePair<char, int> kv in dic)//输出,KeyValuePair定义可设置或检索的键/值对
{
Console.WriteLine("字母{0}出现了{1}次", kv.Key, kv.Value);
}

2