C# 课堂总结5-数组

一、

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

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         }
时间: 2024-10-10 01:15:16

C# 课堂总结5-数组的相关文章

课堂作业(数组)

一.阅读并运行示例PassArray.java,观察并分析程序输出的结果,小结. 运行结果: 答:按引用传递与按值传送数组类型方法参数的最大关键在于: 使用前者时,如果方法中有代码更改了数组元素的值,实际上是直接修改了原始的数组元素. 使用后者则没有这个问题,方法体中修改的仅是原始数组元素的一个拷贝.

课堂练习(数组结对开发)

合作过程: 上次设计的思路和编程语言的不同,通过沟通讨论统一思想决定使用java进行编程,陈鹏负责编程,李国帅负责进行代码的审查和代码的测试.  设计思路: 设定三个变量,max是(子数组中的和的最大值,初始值为array[j]).result1(当前子数组的和,初始值为array[j]); 先让用户自己设定数组的长度,之后输入数组(输入的数组进行是否全为负数的判断): 在遍历之前增添一个for循环进行首尾相接: 之后在从数组第一位开始遍历数组, max=max+array[i],若result

linux基础—课堂随笔09_数组

数组:(6.14 第一节) 取分区利用率,大于百分之八十则发出警报 取分区第一列 取分区使用率: 脚本: 检查脚本语法: ——end 数组切片: 1.跳过前两个取后面 2.跳过前两个取三个 生成10个随机数保存于数组中,找出最大和最小值(10:05 左右) Eval 变量的间接引用: 创建临时文件: 创建一个file开头,后面跟6个随机字符的临时文件 创建一个file开头,后面跟时间以及6个随机字符的临时文件 1. 2. 创建临时文件夹 -d 指定文件夹存放路径 -p install 安装复制文

第四周课堂实践总结

课堂知识点总结 数组边界值即为其中的最大最小值 循环与递归 循环语句 for循环语句(循环体只有一条语句时,大括号最好不要省略) for(表达式1:表达式2:表达式3) { 若干语句 } while循环语句(循环体只有一条语句时,大括号最好不要省略) while(表达式) { 若干语句 } do-while循环语句 do{ 若干语句 }while(表达式); 递归 递归算法是一种直接或间接地调用自身的算法.在编写程序时,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解.递

实践一:个人项目实践

1. 设计一个类(不妨叫做A ),实现对一维数组的指定范围内的元素相加运算.   [课堂讲解过]   数组长度:100,范围:实验数据A列:1~100 程序代码: package qqq; import java.util.Scanner; public class A { public static void main(String[]args) { int []arr= {-2574,-4010,8243,771,2447,-5197,2556,8044,3314,3617,6065,-28

8.17 课堂练习代码,循环与数组

/* 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身. 例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方. */ #include <stdio.h> void main() { int num,ge,shi,bai; for(num = 100; num < 1000; num++) { ge = num % 10; shi = num / 10 % 10; bai = num / 100; if(ge*ge*ge

课堂作业数组最大和

题目: 输入一个一维整形数组,数组里有正数也有负数. 一维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选).源代码.结果截图.总结. 设计思想: 1.设计思想: 首先设置两个变量,分别用来存储数组长度也就是number和结果result:然后再通过语句来询问用户需要的数组长度再设个动态数组用来让用户输入数组中的数字,将每一个数值都存放进数组对应位

课堂练习求环整数组中最大子数组之和

设计思路:之前还有一个课堂练习,是用户输入一个整数组,求其中最大子数组之和,我借鉴的其他同学的代码,仅在此基础上修改的.运用try,catch使得用户不必在输入数组之前输入数组的长度,但是需要一个除整数以外的数来结尾.一共使用了3个循环,运用一个循环得出每个数组中最大子数组之和的最大值,一个是用来计算最大子数组之和,最后一个用来实现数组的前移.第一个循环中包着另外两个循环.总的来说,是在之前课堂练习的基础上增加了将一个数组中的每个数做一次最前面的数,从中求出最大值. 程序代码: 1 import

课堂练习——数组

题目1 星光大道:有5个选手,20个评委投票.一人只能投一票. 1 static void Main(string[] args) 2 { 3 //星光大道:有5个选手,20个评委投票. 也就是说:20个人给这5个人投票. 4 5 int[] pingwei = new int[20]; //评委 20个评委的数组 6 7 int[] xuanshou = new int[5] { 0, 0, 0, 0, 0 }; //选手 5个选手的数组 8 9 for (int i = 0; i < 20;

软件工程课堂训练——结对开发之环数组最大和

一.题目及要求: 题目:返回一个整数数组中最大子数组的和 要求(新加):①如果数组A[0]...A[j-1]首尾相邻,允许A[i-1]...A[n-1],A[0]...A[j-1]之和最大:②同时返回最大子数组的位置. 结对人员:胡亚宝  焦燕 二.设计思路: 我们要解决两个问题:求出环数组中最大的子数组:并且定位出该子数组的位置,把它们的名称输出来.要解决这两个问题,我们从以下两个方面入手: ①求出最大子数组:将数组数值按顺序排好称为“一趟”,每求出一趟的最大子数组后,将第一个数值放到最后一个