参考书籍:《C#程序设计实验指导与习题测试》

  • 掌握for循环语句的使用
  • 掌握while循环语句的使用
  • 掌握do…while循环语句的使用
  • 掌握循环语句的嵌套
  • 掌握跳转语句的使用
  • 了解程序异常处理机制

实验1:求n!

输入整数n,分别利用for循环、while循环、do…while循环求n!

for循环语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
int n = 0;
int i = 1;
int ret = 1;

Console.Write("请输入整数n的值,我来计算n的阶乘 >>>: ");
String s = Console.ReadLine();
n = int.Parse(s);

for(i=1;i<=n;i++)
{
if (n == 0)
{
Console.WriteLine("0!=1");
}
else
{
ret *= i;
}
}
Console.WriteLine("{0}!={1}", n, ret);
Console.ReadKey();
}
}
}
1
2
请输入整数n的值,我来计算n的阶乘 >>>: 0
0!=1
1
2
请输入整数n的值,我来计算n的阶乘 >>>: 3
3!=6

while循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
int n = 0;
int i = 1;
int ret = 1;

Console.Write("请输入整数n的值,我来计算n的阶乘 >>>: ");
String s = Console.ReadLine();
n = int.Parse(s);

while(i<=n)
{
if (n == 0)
{
Console.WriteLine("0!=1");
break;
}
else
{
ret *= i;
}

i++;
}

Console.WriteLine("{0}!={1}", n, ret);
Console.ReadKey();
}
}
}
1
2
请输入整数n的值,我来计算n的阶乘 >>>: 5
5!=120

do…while循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
int n = 0;
int i = 1;
int ret = 1;

Console.Write("请输入整数n的值,我来计算n的阶乘 >>>: ");
String s = Console.ReadLine();
n = int.Parse(s);

do
{
if (n == 0)
{
Console.WriteLine("0!=1");
break;
}
else
{
ret *= i;
}

i++;
}
while (i <= n);

Console.WriteLine("{0}!={1}", n, ret);
Console.ReadKey();
}
}
}
1
2
请输入整数n的值,我来计算n的阶乘 >>>: 4
4!=24

实验2:输出斐波那契数列

输入斐波那契数列,1,1,2,3,5…当值大于10000时停止显示,每行显示5项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
int n1 = 1;
int n2 = 1;
int next = 2;
int flag = 0;

while(n1 <= 10000)
{
Console.Write("{0}\t",n1);
flag++;

next = n1 + n2;
n1 = n2;
n2 = next;

if (flag % 5 == 0)
{
Console.WriteLine();
}
}
Console.ReadKey();
}
}
}

1
2
3
4
1       1       2       3       5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765

实验3:鸡兔同笼问题

一个笼子里总共有h只鸡和兔,鸡和兔的总脚数为f,h,f由用户输入,求鸡和兔各有多少只

$$
y=\left{\begin{array}{ll}
\frac{x^{2}-3 x}{x+1}+2 \pi+\sin x & x \geqslant 0 \
\ln (-5 x)+6 \sqrt{|x|+\mathrm{e}^{4}}-(x+1)^{3} & x<0
\end{array}\right.
$$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
//设鸡有i只,兔有j只
//i+j=h;2i+4j=f;
int i, j, h, f;

Console.Write("请输入鸡和兔子共有多少只: ");
String s = Console.ReadLine();
h = int.Parse(s);
Console.Write("请输入共有多少只脚(必须是偶数): ");
s = Console.ReadLine();
f = int.Parse(s);

while(f%2!=0)
{
Console.WriteLine("脚的个数必须是偶数!请重新输入!");
Console.Write("请输入共有多少只脚(必须是偶数): ");
s = Console.ReadLine();
f = int.Parse(s);
}

bool solution = false;//判断是否有解

for(i=0;i<=h;i++)
{
for(j=0;j<=h;j++)
{
if((i+j==h)&&((2*i+4*j)==f))
{
Console.WriteLine("鸡有{0}只,兔有{1}只", i, j);
solution = true;
}
}
}

if(!solution)
{
Console.WriteLine("无解!!!");
}

Console.ReadKey();
}
}
}
1
2
3
请输入鸡和兔子共有多少只: 3
请输入共有多少只脚(必须是偶数): 4
无解!!!
1
2
3
4
5
请输入鸡和兔子共有多少只: 26
请输入共有多少只脚(必须是偶数): 99
脚的个数必须是偶数!请重新输入!
请输入共有多少只脚(必须是偶数): 102
鸡有1只,兔有25
1
2
3
请输入鸡和兔子共有多少只: 25
请输入共有多少只脚(必须是偶数): 66
鸡有17只,兔有8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//解法二
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
//设鸡有i只,兔有j只
//i+j=h;2i+4j=f;
int i, j, h, f;

Console.Write("请输入鸡和兔子共有多少只: ");
String s = Console.ReadLine();
h = int.Parse(s);
Console.Write("请输入共有多少只脚(必须是偶数): ");
s = Console.ReadLine();
f = int.Parse(s);

while(f%2!=0)
{
Console.WriteLine("脚的个数必须是偶数!请重新输入!");
Console.Write("请输入共有多少只脚(必须是偶数): ");
s = Console.ReadLine();
f = int.Parse(s);
}

bool solution = false;

j = f / 2 - h;
i = h - j;

if(i>=0&&j>=0)
{
Console.WriteLine("鸡有{0},兔有{1}", i, j);
solution = true;
}

if(!solution)
{
Console.WriteLine("无解!!!");
}

Console.ReadKey();
}
}
}

实验4:利用级数求π

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
double pi = 0;
double t = 1;
double n = 1;
int s = 1;

while(Math.Abs(t)>=Math.Pow(10,-6))//精度
{
pi += 4*t;
n += 2;
s = -s;
t = s / n;
}
Console.WriteLine("pi={0}", pi);
Console.ReadKey();
}
}
}
1
pi=3.141590653589692 

实验5:求最大公约数和最小公倍数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
int m, n, m1, n1;
int i;

//获得用户输入的两个数
Console.Write("请输入第一个整数: ");
String s = Console.ReadLine();
m = int.Parse(s);
Console.Write("请输入第二个整数: ");
s = Console.ReadLine();
n = int.Parse(s);

/*生成两个范围在(0-100)的随机数的代码
Random rNum = new Random();
m = rNum.Next(0, 101);
n = rNum.Next(0, 101);
*/

//比较两个数的大小
if (m<n)
{
m1 = m;
n1 = n;
}
else
{
m1 = n;
n1 = m;
}

//打印出排好序的两个数
Console.WriteLine("您输入的这两个数分别是 {0} , {1}", m1, n1);

//最大公约数的算法
for(i=n1;;i--)
{
if(m1 % i == 0 && n1 % i == 0)
{
Console.WriteLine("这两个数的最大公约数为 {0}", i);
break;
}
}

//最小公倍数的算法
for(i=m1;;i++)
{
if(i%m1==0&&i%n1==0)
{
Console.WriteLine("这两个数的最小公倍数为 {0}", i);
break;
}
}

Console.ReadKey();
}
}
}
1
2
3
4
5
请输入第一个整数: 25
请输入第二个整数: 5
您输入的这两个数分别是 5 , 25
这两个数的最大公约数为 5
这两个数的最小公倍数为 25
1
2
3
4
//随机数运行测试结果
您输入的这两个数分别是 4970
这两个数的最大公约数为 7
这两个数的最小公倍数为 490

实验6:打印九九乘法表

上九九乘法表、下九九乘法表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
int i, j;

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

Console.WriteLine();
}

Console.ReadKey();
}
}
}
1
2
3
4
5
6
7
8
9
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
int i, j;

for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)
{
if (i > j)
{
Console.Write("\t");
}
else
{
Console.Write("{0}*{1}={2}\t", i, j, i * j);
}
}

Console.WriteLine();
}
Console.ReadKey();
}
}
}
1
2
3
4
5
6
7
8
9
1*1=1   1*2=2   1*3=3   1*4=4   1*5=5   1*6=6   1*7=7   1*8=8   1*9=9
2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*6=36 6*7=42 6*8=48 6*9=54
7*7=49 7*8=56 7*9=63
8*8=64 8*9=72
9*9=81

实验7:素数的判断

分别利用for循环和while循环显示1~100内所有的素数,每行显示十项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
int i, k, n;
bool flag;
int count = 0;

for(n=2;n<=100;n++)
{
flag = true;
k = (int)Math.Sqrt(n);//根号下n,被除数的最大值

for(i=2;i<=k;i++)
{
if (n % i == 0)//符合条件的不是素数
{
flag = false;
break;
}
}
//while循环
/*i = 2;
while(i<=k)
{
if (n % i == 0)//符合条件的不是素数
{
flag = false;
break;
}
i++;
}*/

if (flag)
{
Console.Write("{0,3} ", n);
count++;
if (count % 10 == 0)
{
Console.WriteLine();
}
}
}

Console.ReadKey();
}
}
}
1
2
3
 2   3   5   7  11  13  17  19  23  29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97

实验8:异常处理

输入任意两个整数,求两者的商,使用程序异常处理机制捕捉零除异常参数格式异常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
int i, j, k;
Console.Write("请输入被除数: ");
String s = Console.ReadLine();
i = int.Parse(s);
Console.Write("请输入除数: ");
s = Console.ReadLine();
j = int.Parse(s);

k = i / j;

Console.WriteLine("{0}/{1}={2}", i, j, k);

Console.ReadKey();
}
}
}
1
2
3
4
请输入被除数: 6
请输入除数: 0
Unhandled exception. System.DivideByZeroException: Attempted to divide by zero.
at ConsoleApp3.Program.Main(String[] args) in J:\code\C#\ConsoleApp3\Program.cs:line 17
1
2
3
4
5
6
7
请输入被除数: 6
请输入除数: a
Unhandled exception. System.FormatException: Input string was not in a correct format.
at System.Number.ThrowOverflowOrFormatException(ParsingStatus status, TypeCode type)
at System.Number.ParseInt32(ReadOnlySpan`1 value, NumberStyles styles, NumberFormatInfo info)
at System.Int32.Parse(String s)
at ConsoleApp3.Program.Main(String[] args) in J:\code\C#\ConsoleApp3\Program.cs:line 15

起初我在测试时将除数和被除数的类型声明成了double型,为什么出现了下面这种情况???

1
2
3
请输入被除数: 6
请输入除数: 0
6/0=∞

到这里就结束了吗,没有,既然他算出来6/0=∞,呃…那我很想知道0/0=?,于是…???

1
2
3
请输入被除数: 0
请输入除数: 0
0/0=NaN