https://visualstudio.microsoft.com/zh-hans/free-developer-offers/
using System;
//引入命名空间
namespace c_sharp_rumen
//定义命名空间
{
class Program
{//定义类
static void Main(string[] args)
//定义一个Main方法
{
Console.WriteLine("Hello World!");
//方法体
}
}
}
using System 告诉编译器使用System命名空间中的类型。
namespace c_sharp_rumen 声明一个新的命名空间,名字为c_sharp_rumen,下面的类属于这个命名空间。
class Program 声明一个新的类类型,名字叫做Program。
static void Main(string[] args) 声明一个方法,名称为Main,Main方法就是类的一个成员,Main是一个特殊函数,编译器把它作为程序的起始点。
语句以分号结束;这个语句使用命名空间System下的Console类把一个字符串输出到控制台;没有第一行的using语句,编译器就找不到Console类。
标识符:字母 下划线 可以用在任何位置,数字不能放在首位, @字符只能放在标示符的首位。
标识符不能与关键字重复,
保留关键字 | ||||||
---|---|---|---|---|---|---|
abstract | as | base | bool | break | byte | case |
catch | char | checked | class | const | continue | decimal |
default | delegate | do | double | else | enum | event |
explicit | extern | false | finally | fixed | float | for |
foreach | goto | if | implicit | in | in (generic modifier) | int |
interface | internal | is | lock | long | namespace | new |
null | object | operator | out | out (generic modifier) | override | params |
private | protected | public | readonly | ref | return | sbyte |
sealed | short | sizeof | stackalloc | static | string | struct |
switch | this | throw | true | try | typeof | uint |
ulong | unchecked | unsafe | ushort | using | virtual | void |
volatile | while | |||||
上下文关键字 | ||||||
add | alias | ascending | descending | dynamic | from | get |
global | group | into | join | let | orderby | partial (type) |
partial (method) | remove | select | set |
Camel命名法: 首个单词的首字母小写,其余单词的首字母大写(enemyHp)。
Pascal命名规范: 每个单词的第一个字母都大写(EnemyHp),如果使用到英文单词的缩写,全部使用大写(PI HP MP)。
变量使用Camel命名,方法和类使用Pascal命名规范。
每个c#程序必须带一个Main方法(函数),Main方法首字母大写。
语句是描述一个类型或告诉程序去执行某个动作的一条源代码指令,语句以分号结束。
int var1 = 5;
System.Console.WriteLine("The value of var1 is {0}",var1);
块是一个由大括号包围起来的0条或多条语句序列,它在语法上相当于一条语句。
{
int var1 = 5;
System.Console.WriteLine("The value of var1 is {0}",var1);
}
块的内容:
1,某些特定的程序结构只能使用块
2,语句可以以分号结束,但块后面不跟分号
Console.Write(""Hello world1.");
System.Console.WriteLine("Hello world2.");
Console.WriteLine("两个数相加{0}+{1}={2}",3,34,34);
Write是Console类的成员,它把一个文本字符串发送到程序的控制台窗口,WriteLine是Console的另外一个成员,它和Write实现相同的功能,但会在每个输出字符串的结尾添加一个换行符。
下面的语句使用了3个标记,但只有两个值
Console.WriteLine("Three integers are {1},{0} and {1}",3,5);
但是标记不能引用超出替换值列表长度以外位置的值
type表示使用什么类型的变量来存储数据,name表示存储这个变量的名字
int age; int hp; string name;
类型 | 描述 | 范围 | 默认值 |
---|---|---|---|
bool | 布尔值 | True 或 False | False |
byte | 8 位无符号整数 | 0 到 255 | 0 |
char | 16 位 Unicode 字符 | U +0000 到 U +ffff | ‘\0’ |
decimal | 128 位精确的十进制值,28-29 有效位数 | (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 | 0.0M |
double | 64 位双精度浮点型 | (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 | 0.0D |
float | 32 位单精度浮点型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F |
int | 32 位有符号整数类型 | -2,147,483,648 到 2,147,483,647 | 0 |
long | 64 位有符号整数类型 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
sbyte | 8 位有符号整数类型 | -128 到 127 | 0 |
short | 16 位有符号整数类型 | -32,768 到 32,767 | 0 |
uint | 32 位无符号整数类型 | 0 到 4,294,967,295 | 0 |
ulong | 64 位无符号整数类型 | 0 到 18,446,744,073,709,551,615 | 0 |
ushort | 16 位无符号整数类型 | 0 到 65,535 | 0 |
赋值变量
using System;
namespace _002_bian_liang
{
class Program
{
static void Main(string[] args)
{
byte myByte = 12;
float number = 12.5f; //注意赋值时的浮点数默认是double类型,所以需要加上f
double number1 = 12.6;
Console.WriteLine("byte:{0} float:{1} double:{2}",myByte,number,number1);
char myChar = 'a';
string muString = "a";
bool muBool = true;
}
}
}
转义序列 | 含义 |
---|---|
\ | \ 字符 |
’ | ’ 字符 |
" | " 字符 |
? | ? 字符 |
\a | Alert 或 bell |
\b | 退格键(Backspace) |
\f | 换页符(Form feed) |
\n | 换行符(Newline) |
\r | 回车 |
\t | 水平制表符 tab |
\v | 垂直制表符 tab |
\ooo | 一到三位的八进制数 |
\xhh . . . | 一个或多个数字的十六进制数 |
使用@不识别转义字符
如果我们不想去识别字符串中的转义字符,可以在字符串前面加一个@符号(除了双引号其他转义字符都不在识别)
举例:string sentence = @“I’m a good man. " " You are bad girl!” ,使用两个引号表示一个引号
@字符的两个作用示例:
1,默认一个字符串的定义是放在一行的,如果想要占用多行
2,用字符串表示路径
“c:\xxx\xx\xxx.doc”
使用@"c:\xxx\xx\xxx.doc"更能读懂
多变量赋值
string name1,name2;
算术运算符
下表显示了 C# 支持的所有算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:
运算符 | 描述 | 实例 |
---|---|---|
+ | 把两个操作数相加 | A + B 将得到 30 |
- | 从第一个操作数中减去第二个操作数 | A - B 将得到 -10 |
* | 把两个操作数相乘 | A * B 将得到 200 |
/ | 分子除以分母 | B / A 将得到 2 |
% | 取模运算符,整除后的余数 | B % A 将得到 0 |
++ | 自增运算符,整数值增加 1 | A++ 将得到 11 |
– | 自减运算符,整数值减少 1 | A-- 将得到 9 |
更详细的可以参考这个网址
https://www.runoob.com/csharp/csharp-operators.html
数据类型转换
序号 | 方法 & 描述 |
---|---|
1 | ToBoolean 如果可能的话,把类型转换为布尔型。 |
2 | ToByte 把类型转换为字节类型。 |
3 | ToChar 如果可能的话,把类型转换为单个 Unicode 字符类型。 |
4 | ToDateTime 把类型(整数或字符串类型)转换为 日期-时间 结构。 |
5 | ToDecimal 把浮点型或整数类型转换为十进制类型。 |
6 | ToDouble 把类型转换为双精度浮点型。 |
7 | ToInt16 把类型转换为 16 位整数类型。 |
8 | ToInt32 把类型转换为 32 位整数类型。 |
9 | ToInt64 把类型转换为 64 位整数类型。 |
10 | ToSbyte 把类型转换为有符号字节类型。 |
11 | ToSingle 把类型转换为小浮点数类型。 |
12 | ToString 把类型转换为字符串类型。 |
13 | ToType 把类型转换为指定类型。 |
14 | ToUInt16 把类型转换为 16 位无符号整数类型。 |
15 | ToUInt32 把类型转换为 32 位无符号整数类型。 |
16 | ToUInt64 把类型转换为 64 位无符号整数类型。 |
程序示例
using System;
namespace convertType
{
class Program
{
static void Main(string[] args)
{
int i = 75;
float f = 53.005f;
double d = 2345.7652;
bool b = true;
Console.WriteLine(i.ToString());
Console.WriteLine(f.ToString());
Console.WriteLine(d.ToString());
Console.WriteLine(b.ToString());
string readContent = Console.ReadLine(); //接收用户输入的一行
int contentConvert = Convert.ToInt32(readContent);
Console.WriteLine(contentConvert);
}
}
}
bool var1 = true;
if(var1)
Console.WriteLine(var1);
if (score > 50)
{
score++;
Console.WriteLine("您输入的分数大于50"+score);
}
else
{
score--;
Console.WriteLine("您输入的分数小于等于50"+score);
}
? :
int myInterger = 100;
string res = (myInterger < 10) ? "less than 10" : "more than 10";
Console.WriteLine(res);
int state = 0;
switch (state)
{
case 0:
Console.WriteLine("游戏开始!");
break;
case 1:
Console.WriteLine("游戏结束!");
break;
case 2:
Console.WriteLine("游戏胜利");
break;
default:
Console.WriteLine("未知错误");
break;
}
int i=1,j = 1;
while (i < 10 )
{
while (j <= i)
{
Console.Write("{0}×{1}={2} ", i, j, i * j);
j++;
}
Console.WriteLine();
i++;
j = 1;
}
int index = 1;
do
{
Console.WriteLine(index);
index++;
} while (index < 10);
int i,j;
for (i = 1; i < 10; i++)
{
for (j = 1; j <=i; j++)
{
Console.Write("{0}×{1}={2} ", i, j, i * j);
}
j = 1;
Console.WriteLine();
}
接受用户输入的整数,如果用户输入的是大于0的偶数,就相加,如果用户输入的是大于0的奇数就不相加,如果用户输入的是0,就把和输出并退出程序。
int sum = 0;
while (true)
{
int num = Convert.ToInt32(Console.ReadLine());
if (num == 0) //这两个if换顺序就是错误的
{
break;
}
if (num % 2 == 1)
{
continue;
}
sum += num;
}
Console.WriteLine("sum = {0}", sum);
插件推荐 resharper
编程输出1000以内的所有素数
using System;
namespace exercise_xunhuan
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
bool isZhi = true;
for (int i = 2; i <= 1000; i++)
{
for (int j = 2; j < i; j++)
{
if (i%j==0)
{
isZhi = false;
break;
}
}
if (isZhi)
{
Console.WriteLine(i);
}
isZhi = true;
}
}
}
}
判断输入的前5个是否是大写字母
string str = Console.ReadLine();
bool isAll = true;
for (int i = 0; i < 6; i++)
{
if ( str[i] > 'A' && str[i] < 'Z')
{
}
else
{
Console.WriteLine("输入的前5个不全是大写字母");
isAll = false;
break;
}
}
if (isAll)
{
Console.WriteLine("输入的前5个都是大写字母");
}
一个控制台应用程序,求1000之内的所有“完数”。所谓“完数”是指一个数恰好等于它的所有因子之和。例如6是完数,因为6=1+2+3。
for (int i = 1; i <= 1000; i++)
{
int sum = 1;
string str = "1";
for (int j = 2; j < i; j++)
{
if (i % j == 0)
{
sum += j;
str += "+" + j;
}
}
if (sum == i)
{
Console.WriteLine(i + "=" + str + "是完数");
}
}
int num = Convert.ToInt32(str);//当字符串里面存储的是整数的时候,就可以转化成int double类型,否则出现异常
//当字符串里面是一个小数的时候,就可以转化成double类型
int mynum = 234234;
string str2 = Convert.ToString(mynum);//它可以把一个int float double byte类型转换成字符串
string str3 = mynum + "";//一个int float double类型直接加上一个空的字符串,相当于把这个数字转化成一个字符串
using System;
namespace ENUM_TYPE
{
enum GameState:byte//修改该枚举类型的存储类型,默认为int
{
{
Pause = 100, // 默认代表的是整数0,一般默认不修改
Failed = 101,// 默认代表的是整数1
Success=102,// 默认代表的是整数2
Start=200// 默认代表的是整数3
};
class Program
{
static void Main(string[] args)
{
GameState state = GameState.Start;
Console.WriteLine(state);
int num = (int)state;
Console.WriteLine(num);
}
}
}
枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0.
定义结构体
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};
实例
using System;
using System.Text;
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};
public class testStructure
{
public static void Main(string[] args)
{
Books Book1; /* 声明 Book1,类型为 Books */
Books Book2; /* 声明 Book2,类型为 Books */
/* book 1 详述 */
Book1.title = "C Programming";
Book1.author = "Nuha Ali";
Book1.subject = "C Programming Tutorial";
Book1.book_id = 6495407;
/* book 2 详述 */
Book2.title = "Telecom Billing";
Book2.author = "Zara Ali";
Book2.subject = "Telecom Billing Tutorial";
Book2.book_id = 6495700;
/* 打印 Book1 信息 */
Console.WriteLine( "Book 1 title : {0}", Book1.title);
Console.WriteLine("Book 1 author : {0}", Book1.author);
Console.WriteLine("Book 1 subject : {0}", Book1.subject);
Console.WriteLine("Book 1 book_id :{0}", Book1.book_id);
/* 打印 Book2 信息 */
Console.WriteLine("Book 2 title : {0}", Book2.title);
Console.WriteLine("Book 2 author : {0}", Book2.author);
Console.WriteLine("Book 2 subject : {0}", Book2.subject);
Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);
Console.ReadKey();
}
}
//第一种 数组的初始化方式
int[] scores1 = {23,43,432,42,34,234,234,2,34} ;//使用这种方式赋值的时候,一定要注意 在数组声明的时候赋值
//第二种数组创建的方式
int[] scores2 = new int[10];
int[] scores3;
scores3 = new int[10];
int[] scores4 = new int[10]{3,43,43,242,342,4,234,34,234,5};
Console.WriteLine(scores[10]);//当我们访问一个索引不存在的值的时候,会出现异常exception
char[] charArray = new char[2]{'a','b'};
Console.WriteLine(charArray[1]);
遍历
int[] scores = {23, 2, 32, 3, 34, 35, 45, 43, 543};
//scores.Length//得到数组的长度
//for (int i = 0; i < scores.Length; i++)
//{
// Console.WriteLine(scores[i]);
//}
//int i = 0;
//while (i
//{
// Console.WriteLine(scores[i]);
// i++;
//}
foreach (int temp in scores )//foreach会依次取到数组中的值,然后赋值给temp,然后执行循环体
{
Console.WriteLine(temp);
}
str.ToLower();//把字符串转化成小写 并返回,对原字符串没有影响
string res = str.ToUpper();//把字符串转化成大写 并返回,对原字符串没有影响
string res = str.Trim();//去掉字符串前面和后面的空格,对原字符串没有影响
string res = str.TrimStart();
string res = str.TrimEnd();
string[] strArray=str.Split(’.’);//把原字符串按照指定的字符进行拆分
https://www.runoob.com/csharp/csharp-string.html
找出100到999之间的水仙花数;“153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3”
using System;
namespace bian_laing_exercise
{
class Program
{
static void Main(string[] args)
{
for (int i = 100; i <= 999; i++)
{
int bai = (int)(i / 100);
int shi = (int)(i / 10) - bai * 10;
int ge = i - bai * 100 - shi * 10;
if (i == (bai*bai*bai) + (shi*shi*shi) + (ge*ge*ge))
{
Console.WriteLine("{0} = ({1} * {1} * {1}) + ( {2} *{2} * {2}) + ({3} * {3} * {3})", i, bai, shi, ge);
}
}
}
}
}
for (int i = 100; i < 1000; i++)
{
int ge = i%10;
int shi = (i/10)%10;
int bai = i/100;
int res = ge*ge*ge + shi*shi*shi + bai*bai*bai;
if (res == i)
{
Console.WriteLine(i);
}
}
3个可乐瓶可以换一瓶可乐,现在有364瓶可乐。问一共可以喝多少瓶可乐,剩下几个空瓶!
int sum = 364;
int yu = 364;
while (yu > 3)
{
sum += yu / 3;
yu = yu % 3 + yu / 3;
}
Console.WriteLine("{0},{1}",sum,yu);
编写一个控制台程序,要求用户输入一组数字用空格间隔,对用户输入的数字从小到大输出。
string[] str = Console.ReadLine().Split(' ');
int[] numArry = new int[str.Length];
for (int i = 0; i < str.Length; i++)
{
numArry[i] = Convert.ToInt32(str[i]);
}
Array.Sort(numArry);
foreach (int item in numArry)
{
Console.Write(item + " ");
}
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。
string[] str = Console.ReadLine().Split(' ');
int[] numArry = new int[str.Length];
for (int i = 0; i < str.Length; i++)
{
numArry[i] = Convert.ToInt32(str[i]);
}
int min = numArry[0];
int minNum = 0;
for (int j = 1; j <numArry.Length; j++)
{
if (numArry[j] < min)
{
min = numArry[j];
minNum = j;
}
}
if (minNum > 0)
{
int temp = numArry[minNum];
numArry[minNum] = numArry[0];
numArry[0] = temp;
}
foreach (int item in numArry)
{
Console.Write(item + " ");
}
如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
int num = Convert.ToInt32(Console.ReadLine());
int count100 = num / 100;
int remain = num % 100;
int count50 = remain / 50;
remain = remain % 50;
int count10 = remain / 10;
remain = remain % 10;
int count5 = remain / 5;
remain = remain % 5;
int count2 = remain / 2;
remain = remain % 2;
Console.WriteLine("100的准备" + count100);
Console.WriteLine("50的准备" + count50);
Console.WriteLine("10的准备" + count10);
Console.WriteLine("5的准备" + count5);
Console.WriteLine("2的准备" + count2);
Console.WriteLine("1的准备" + remain);
输入一个字符串,判断其是否是C#的合法标识符。
string str = Console.ReadLine();
bool isRight = true;
if ((str[0] >= 'a' && str[0] <= 'z') || (str[0] >= 'A' && str[0] <= 'Z') || str[0] == '_' || str[0] == '@')
{
}
else
{
isRight = false;
}
for (int i = 1; i < str.Length; i++)
{
if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || str[i] == '_' ||
(str[i] >= '0' && str[i] <= '9'))
{
}
else
{
isRight = false;
}
}
if (isRight == false)
{
Console.WriteLine("不是合法标识符");
}
else
{
Console.WriteLine("是合法标识符");
}
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。
string str = Console.ReadLine();
bool isHui = true;
for (int i = 0; i < str.Length / 2; i++)
{
//i str.length-1-i;
if (str[i] != str[str.Length - 1 - i])
{
isHui = false; break;
}
}
if (isHui)
{
Console.WriteLine("是回文串");
}
else
{
Console.WriteLine("不是回文串");
}
using System;
namespace HAN_SHU
{
class Program
{
static int Plus(int num1, int num2)//定义一个函数
//函数定义的时候,参数我们叫做形式参数(形参),num1跟num2在这里就是形参,形参的值是不确定的
{
{
int sum = num1 + num2;
return sum;//返回值
}
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
int res = Plus(1, 2);//当调用函数的时候,这里传递的参数就是实际参数(实参),实参的值会传递给形参做运算
Console.WriteLine(res);
}
}
}
定义一个函数,用来实现取得一个数字的所有因子,把所有因子返回。
using System;
namespace HAN_SHU
{
class Program
{
static int[] GetDivisor(int number)
{
int count = 0;
for (int i = 1; i <= number; i++)
{
if (number % i == 0)
{
count++;
}
}
int[] array = new int[count];
int index = 0;
for (int i = 1; i <= number; i++)
{
if (number % i == 0)
{
array[index] = i;
index++;
}
}
return array;
}
static void Main(string[] args)
{
int num = Convert.ToInt32(Console.ReadLine());
int[] array = GetDivisor(num);
foreach (int temp in array)
{
Console.Write(temp + " ");
}
}
}
}
定义一个函数,用来取得数字的和,但是数字的个数不确定。
解决方案:
1,定义一个函数,参数传递过来一个数组;
2,定义一个参数个数不确定的函数,这个时候我们就要使用参数数组。
除了参数数组,所有函数的参数都是固定的,那么调用的时候,参数是一定要传递的
using System;
namespace HAN_SHU
{
class Program
{
static int Sum(int[] array)//如果一个函数定义了参数,那么在调用这个函数的时候,一定要传递对应类型的参数,否则无法调用(编译器编译不通过)
{
int sum = 0;
for (int i = 0; i < array.Length; i++)
{
sum += array[i];
}
return sum;
}
static int Plus(params int[] array)//这里定义了一个int类型的参数数组,参数数组和数组参数(上面的)的不同,在于函数的调用,调用参数数组的函数的时候,我们可以传递过来任意多个参数,然后编译器会帮我们自动组拼成一个数组,参数如果是上面的数组参数,那么这个数组我们自己去手动创建
{
int sum = 0;
for (int i = 0; i < array.Length; i++)
{
sum += array[i];
}
return sum;
}
static void Main(string[] args)
{
int sum = Sum(new int[] { 23, 4, 34, 32, 32, 42, 4 });
Console.WriteLine(sum);
int sum2 = Plus(23, 4, 5, 5, 5, 32, 423, 42, 43, 23, 42, 3);//参数数组就是帮我们 减少了一个创建数组的过程
Console.WriteLine(sum2);
}
}
}
当我们在结构体中定义一个函数的时候,这个函数就可以通过结构体声明的变量来调用,这个函数可以带有参数,那么调用的时候必须传递参数,这个函数,可以使用结构体中的属性。
namespace Struct_Han_Shu {
struct Vector3
{
public float x;
public float y;
public float z;
public double Distance()
{
return Math.Sqrt(x*x + y*y + z*z);
}
}
class Program {
static void Main(string[] args)
{
Vector3 myVector3;
myVector3.x = 3;
myVector3.y = 3;
myVector3.z = 3;
Console.WriteLine(myVector3.Distance());
}
}
}
为什么使用函数重载?
假设我们有一个函数用来实现求得一个数组的最大值
static int MaxValue(int[] intArray){
....
return;
}
这个函数只能用于处理int数组,如果想处理double类型的话需要再定义一个函数
static double MaxValue(double[] doubleArray){
...
return;
}
函数名相同,参数不同,这个叫做函数的重载(编译器通过不同的参数去识别应该调用哪一个函数),编译器会根据你传递过来的实参的类型去判定调用哪一个函数。
namespace _函数的重载 {
class Program {
static int MaxValue(params int[] array)
{
Console.WriteLine("int类型的maxvalue被调用 ");
int maxValue = array[0];
for (int i = 1; i < array.Length; i++)
{
if (array[i] > maxValue)
{
maxValue = array[i];
}
}
return maxValue;
}
static double MaxValue(params double[] array)
{
Console.WriteLine("double类型的maxvalue被调用 ");
double maxValue = array[0];
for (int i = 1; i < array.Length; i++) {
if (array[i] > maxValue) {
maxValue = array[i];
}
}
return maxValue;
}
static void Main(string[] args)
{
int res = MaxValue(234, 23, 4);//编译器会根据你传递过来的实参的类型去判定调用哪一个函数
double res2 = MaxValue(23.34, 234.5, 234.4);
Console.WriteLine(res);
Console.WriteLine(res2);
Console.ReadKey();
}
}
}
5、委托的定义与使用
C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。
using System;
namespace _委托的使用 {
//定义一个委托跟函数差不多,区别在于
//1,定义委托需要加上delegate关键字
//2,委托的定义不需要函数体
public delegate double MyDelegate(double param1, double param2);
class Program {
static double Multiply(double param1, double param2)
{
return param1*param2;
}
static double Divide(double param1, double param2)
{
return param1/param2;
}
static void Main(string[] args)
{
MyDelegate de;//利用我们定义的委托类型声明了一个新的变量
de = Multiply;//当我们给一个委托的变量赋值的时候,返回值跟参数列表必须一样,否则无法赋值
Console.WriteLine(de(2.0, 34.1));
de = Divide;
Console.WriteLine( de(2.0,34.1) );
Console.ReadKey();
}
}
}
f(n)=f(n-1)+f(n-2) f(0)=2 f(1)=3 ,用程序求得f(40)
using System;
namespace HAN_SHU_EXERCISE
{
class Program
{
static int F(int n)
{
if (n == 0) return 2;//递归的结束条件
if (n == 1) return 3;
return F(n - 1) + F(n - 2);//函数的递归调用
}
static void Main(string[] args)
{
Console.WriteLine(F(40));
}
}
}
利用递归方法求5!
using System;
namespace HAN_SHU_EXERCISE
{
class Program
{
static int Factorial(int n)
{
if (n == 1) return 1;
return n * Factorial(n - 1);
}
static void Main(string[] args)
{
Console.WriteLine(Factorial(5));
}
}
}
编一个程序,解决百钱买百鸡问题。某人有100元钱,要买100只鸡。公鸡5元钱一只,母鸡3元钱一只,小鸡一元钱3只。问可买到公鸡,母鸡,小鸡各为多少只。把所有的可能性打印出来。
for (int i = 0; i <= 100/5; i++)
{
for (int j = 0; j <= (100 - i*5)/3; j++)
{
int remainMoney = 100 - 5*i - 3*j;
int number = remainMoney*3;
if ( (i + j + number) == 100)
{
Console.WriteLine("公鸡"+i+" 母鸡"+j+" 小鸡"+number);
}
}
}