码迷,mamicode.com
首页 > 编程语言 > 详细

C# 课堂总结5-数组

时间:2015-07-10 00:23:14      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

一、

数组:解决同一类大量数据在内存存储和运算的功能。

1、一维数组
定义:制定类型,指定长度,指定名称。
int[] a=new int[5]
int[] a=new int[5]{23,23,23,1,2,1}
int[] a=new int[]{45,23,34}会把前三个值赋值,后两个元素保持默认值0.
int[] a=new int[]{34,234,5,3,4,23};

取值:
数组名[下标值]

数组的优点:
1.对于大量数据来说,保存的时候,定义一个数组即可解决。
2.用循环来控制数组的下标,可以对数组进行批量操作。
eg.
int[] a=new int[5];
//数组的批量赋值
for(int i=0;i<5;i++)
{
a[i]=(i+1)*4;
}
//数组的批量取值
for(int j=0;j<5;j++)
{
console.writeline(a[j]);
}

案例一:做一个教练为10个球员打分的程序。

数组的应用
一、冒泡排序
1.冒泡排序是用双层循环解决。外层循环的是趟数,里层循环的是次数。
2.趟数=n-1;次数=n-趟数。
3.里层循环使用if比较相邻的两个数的大小。进行数值交换。

程序如下

 1 static void Main2(string[] args)
 2         {
 3             int[] a = new int[8] { 9, 12, 7, 5, 15, 2, 1, 8 };
 4             for (int i = 1; i <= a.Length - 1; i++)//趟数
 5             {
 6                 for (int j = 1; j <= a.Length - i; j++)//次数, 趟数+次数==数组个数,a.Length - i,每趟都有沉到底的一个不用再排
 7                 {
 8                     if (a[j - 1] < a[j])
 9                     {
10                         int t = a[j - 1];
11                         a[j - 1] = a[j];
12                         a[j] = t;
13                     }
14                 }
15             }
16             //显示
17             for (int k = 0; k < a.Length; k++)
18             {
19                 Console.WriteLine(a[k]);
20             }
21             Console.ReadKey();
22         }

 

二、折半查找
前提:数组必须是有序的
思路:用两个变量分别代表上限(top)和下限(bottom)的下标,再用一个变量代表中间的下标(mid)。
1.求中间的下标:mid=(top+bottom)/2
2.上限下标下移:top=mid+1.假设数组是升序排列。
3.下限下标上移:bottom=mid-1.
4.循环条件是:bottom>=top

程序如下:

 1 //折半查找
 2         static void Main3(string[] args)
 3         {
 4             int[] d = new int[] { 3, 5, 7, 9, 11, 13, 14, 18 };
 5             Console.Write("请输入要查找的数字:");
 6             int find = Convert.ToInt32(Console.ReadLine());
 7             int top = 0;
 8             int bottom = d.Length - 1;
 9             int mid;
10             while (top <= bottom)
11             {
12                 //取中间的坐标
13                 mid = (bottom + top) / 2;
14                 //取中间的值
15                 int n = d[mid];
16                 if (find > n)
17                 {
18                     top = mid + 1;
19                 }
20                 else if (find < n)
21                 {
22                     bottom = mid - 1;
23                 }
24                 else
25                 {
26                     Console.WriteLine("你找到了该数字,在第" + (mid + 1) + "");
27                     break;
28                 }
29             }
30             Console.ReadKey();
31         }

 

 

二维数组

eg.1推箱子

 

eg.2 抽手机号中奖问题

 1   //eg.8  抽奖游戏
 2         static void Main8(string[] args)
 3         {
 4             Console.WriteLine("请输入要抽奖的手机号的个数:");
 5             int a = int.Parse(Console.ReadLine());
 6 
 7             string[] b=new string[a];
 8 
 9             for (int i = 0; i < b.Length; i++)
10             {
11                 Console.WriteLine("请输入第"+(i+1)+"个手机号:");
12                 b[i] = Console.ReadLine();
13             }
14 
15             DateTime dt = DateTime.Now;
16             dt = dt.AddSeconds(5);
17             while (true)
18             {
19                 for (int i = 0; i < b.Length;i++ )
20                 {
21                     Console.Clear();
22                     Console.WriteLine(b[i]);
23                     Thread.Sleep(50);
24 
25                     //break 跳出的只是for 不是 while 循环,错误
26                     //if (dt.ToString("yyyy/MM/ddHHmmss") == DateTime.Now.ToString("yyyy/MM/ddHHmmss"))
27                     //{
28                     //    //Console.WriteLine("18753351659");
29                     //    break;
30                     //}
31                     //else
32                     //{
33 
34                     //}
35                     
36                     
37                 }
38 
39                 if (dt.ToString() == DateTime.Now.ToString())
40                 {
41                     //Console.WriteLine("18753351659");
42                     break;
43                 }
44                 else
45                 {
46 
47                 }
48             }
49             //Console.Clear(); 作弊方法
50             //Console.WriteLine("18753351639");
51             Console.ReadLine();
52         }

eg.3 红篮球摇号问题

 1  //eg.9 摇号 蓝球,红球
 2         static void Main9(string[] args)
 3         {
 4             //int lan = 0;
 5             string[] a = new string[8];
 6             Random r = new Random();
 7 
 8             //a[0] =Convert.ToString(r.Next(17));
 9             //a[1] = " ";
10 
11             int i = 2;
12             for ( ; i<= a.Length - 1; )
13             {
14                 int b = r.Next(34);
15                 //if(a.Contains(a[i])),这样就永远返回true类型了
16                 if (a.Contains(b.ToString()))
17                 {
18                     continue;
19                 }
20                 else
21                 {
22                     a[i] = b.ToString();
23                     i++;
24                 }
25             }
26 
27             a[0] = Convert.ToString(r.Next(17));
28             a[1] = " ";
29 
30             foreach (string j in a)
31             {
32                 Console.Write(j+"\t");
33             }
34         }

eg.4 投票选举问题(下标的选择 也可由投票的号码来定)

 1 //eg.5-1 投票 0--代表第一个人候选人,1代表第二个候选人。。。。共5个人(老师版)
 2         static void Main51(string[] args)
 3         {
 4             //30
 5             int[] vote = new int[5];
 6             for (int i = 0; i < 20; i++)
 7             {
 8                 Console.Write("请第" + (i + 1) + "位同学投票(0-4):");
 9                 int temp = Convert.ToInt32(Console.ReadLine());
10                 if (temp < 0 || temp > 4)
11                 {
12                     Console.WriteLine("废票");
13                     continue;
14                 }
15                 else
16                 {
17                     vote[temp]++;
18                 }
19             }
20 
21             //计算最终得票
22             int max = 0, maxSub = 0;
23             for (int i = 0; i < vote.Length; i++)
24             {
25                 //把每位候选人的票数显示出来。
26                 Console.WriteLine("" + (i + 1) + "号候选人的票数是" + vote[i]);
27                 //计算谁得票最多
28                 if (vote[i] > max)
29                 {
30                     max = vote[i];
31                     maxSub = i;
32                 }
33             }
34             //显示最终结果
35             Console.WriteLine("最终投票结果为:" + maxSub + "号候选人当选,当选的票数是" + max + "票。");
36             Console.ReadKey();
37         }
38         //eg.5-2 投票 1--代表第一个人候选人,2代表第二个候选人。。。。共5个人
39         static void Main52(string[] args)
40         {
41             int[] ren = new int[20];
42             int[] vote = new int[5];
43 
44             for (int i = 0; i <= ren.Length - 1; i++)
45             {
46                 Console.WriteLine("请第" + (i + 1) + "公民投票:");
47                 ren[i] = int.Parse(Console.ReadLine());
48                 if (ren[i] > 5 || ren[i] < 0)
49                 {
50                     Console.WriteLine("废票,请重投票!");
51                     i--;
52                     continue;
53                 }
54                 else
55                 {
56                     vote[ren[i] - 1]++;
57                 }
58             }
59 
60             int max = vote[0];
61             for (int i = 0; i < vote.Length; i++)
62             {
63                 if (max <= vote[i])
64                 {
65                     max = vote[i];
66                 }
67             }
68             Console.WriteLine("最高票数是{0}票", max);
69 
70             for (int i = 0; i < vote.Length; i++)
71             {
72                 if (max == vote[i])
73                 {
74                     //int y = i + 1;
75                     Console.WriteLine("候选人是第{0}位选手。", i + 1);
76                 }
77             }
78         }

 

C# 课堂总结5-数组

标签:

原文地址:http://www.cnblogs.com/zyh-club/p/4631711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!