【C#基础详解】(十)数组

10.1 数组简介

数组是一种数据结构,它一次性存储多个相同类型的变量。数组是使用类型声明的,数组具有以下属性:

1)数组从字面上理解就是存放一组数,但在C#语言中数组存放的并不一定是数字,也可以是其他数据类型。

2)数组的索引从零开始:具有n个元素的数组的索引是从0到n-1。

3)数组元素可以是任何类型,包括数组类型。

4)在一个数组中存放的值都是同一数据类型的,并且可以通过循环以及数据操作的方法对数组的值进行运算或操作。

定义数组:

数据类型[] 数组名;

int[] i;

10.2 一维数组

一维数组在数组中最常用,即将一组值存放到一个数组中,并为其定义一个名称,通过数组中元素的位置来存取值。创建一维数组的语法形式如下,在C#中,数组是对象,必须进行实例化。

语法:

//定义数组

int[] numbers;

//多种方式声明一维数组

数据类型[] 数组名 = new 数据类型[长度];

int[] i = new int[4];

数据类型[] 数组名 = {值 1, 值 2, …};

int[] i = {1, 2, 3, 4, …};

数据类型[] 数组名 = new 数据类型[长度]{值 1,值 2,…}

int[] i = new int[4]{1,2,3,4};

注意:

1)在定义数组时定义的数据类型代表了数组中每个元素的数据类型。

2)在使用数组前必须初始化数据,即为数组赋初值。

3)在初始化数组时指定了数组中的长度,也就是数组中能存放的元素个数。

4)在指定数组的长度后,数组中的元素会被系统自动赋予初始值,与类中段的初始化类似,数值类型的值为0、引用类型的值为null。

5)如果在初始化数组中直接对数组赋值了,那么数组中值的个数就是数组的长度。

6)由于在数组中存放了多个元素,在存取数组中的元素时要使用下标来存取。

10.3 二维数组

在C# 语言里多维数组中比较常用的是二维数组,也可以称之为多维数组。从定义的语法来看,它与一维数组的定义非常类似,每多一个维度则在定义时的[]中增加一个“,”。存取数组中的值也是将下标用“,”隔开。

语法:

//定义多维数组

数据类型[ , , ...] 数组名;

//创建多维数组并初始化

数据类型[ , , ...] 数组名 = new 数据类型[m,n,...] {{ , , ...},{ , , ...}};

多维数组最简单的形式是二维数组。一个二维数组,在本质上,是一个一维数组的列表。

初始化二维数组:

多维数组可以通过在括号内为每行指定值来进行初始化。下面是一个带有3 行 4 列的数组。

int [,] a = new int [3,4]

{

{0, 1, 2, 3} ,

{4, 5, 6, 7} ,

{8, 9, 10, 11}

};

二维数组示例:定义一个存放学生成绩的二维数组,并将该数组中每个学生的成绩输出。
double[,] points = {{ 90, 80 }, { 100, 89 }, { 88.5, 86 }};
for(int i = 0; i < points.GetLength(0); i++)
{
    Console.WriteLine("第" + (i + 1) + "个学生成绩:");
    for(int j = 0; j < points.GetLength(1); j++)
    {
        Console.Write(points[i,j] + " ");
    }
    Console.WriteLine();
    Console.ReadKey();
}

输出结果:

第1个学生成绩:

90 80

第2个学生成绩:

100 89

第3个学生成绩:

88.5 86

10.4 foreach遍历

foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字 in 隔开的两个项组成。in 右边的项是集合名,in 左边的项是变量名,用来存放该集合中的每个元素。

语法:

foreach(数据类型 变量名 in 数组名)

{

//语句块;

}

foreach遍历实例1
int[] arr3 = new int[5] {1, 2, 3, 4, 5};
foreach (int item in arr3)
{
    Console.WriteLine("foreach输出:{0}",item);
}

输出结果:

foreach输出:1

foreach输出:2

foreach输出:3

foreach输出:4

foreach输出:5

注意:

1)这里变量名的数据类型必须与数组的数据类型相兼容。

2)在foreach循环中,如果要输出数组中的元素,不需要使用数组中的下标,直接输 出变量名即可。

3)foreach语句仅能用于数组、字符串或集合类数据类型。

foreach遍历实例2
int[] n = new int[5];  //n是一个带有5个整数的数组
for ( int i = 0; i < 5; i++ )
{
    n[i] = i + 100;  //初始化数组n中的元素
}
foreach (int j in n )  //输出每个数组元素的值
{
    int i = j-100;
    Console.WriteLine("Element[{0}] = {1}", i, j);
}
Console.ReadKey();

输出结果:

Element[0] = 100

Element[1] = 101

Element[2] = 102

Element[3] = 103

Element[4] = 104

foreach遍历实例3:根据班级的人数创建一个数组,要求将每个人的名字都要放进去,并遍历输出
Console.WriteLine("请输入班级的总人数:");
int numbers = Convert.ToInt32(Console.ReadLine());
string[] names = new string[numbers];
for (int i = 0; i < numbers; i++)//numbers-1次循环
{
    Console.WriteLine($"请输入第{i + 1}个人的姓名");
    names[i] = Console.ReadLine();
}
Console.WriteLine("输入完毕,请按回车键查看!");
Console.ReadKey();
foreach (string item in names)
{
    Console.WriteLine(item);
}
Console.ReadKey();

10.5 冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,每次比较相邻两个元素,如果顺序不对就交换它们的位置,直到遍历完整个数列。这样一轮下来,最大或最小的元素会被排到数列的末尾或开头,然后再从剩余的元素中继续进行相邻元素的比较和交换,直到所有元素都有序为止。由于排序过程中较大或较小的元素会像气泡一样逐渐升上去或降下来,因此称为冒泡排序

对于大规模数据的排序效率较低,但对于小规模数据或基本有序的数据,冒泡排序是一种简单有效的排序方法。

经典冒泡排序代码
int[] list = new int[] { 7, 2, 4, 3, 8, 1, 5, 6, 9 };
int num = list.Length - 1;
for (int i = 0; i < num; i++)
{
    for (int j = 0; j < num - i; j++)
    {
        if (list[j] > list[j + 1])//若改为<,则为降序排列
        {
            int temp = list[j];//如果后值比本值大,则将本值后移
            list[j] = list[j + 1];//将后值赋予本值的位置
            list[j + 1] = temp;//将本值赋予后值的位置
        }
    }
}
foreach (int item in list)
{
    Console.Write(item);
}
Console.ReadKey();

输出结果:1 2 3 4 5 6 7 8 9

冒泡排序练习1:控制台输入班级人数,将每个人的年龄放入数组,将所有人的年龄求总和,求平均年龄,求最大年龄。
Console.Write("请输入班级人数:");
int num = int.Parse(Console.ReadLine());
int[] age = new int[num];
int sum = 0;
for (int i = 0; i < num; i++)
{
    Console.Write("请输入第{0}个人的年龄:", i + 1);
    age[i] = int.Parse(Console.ReadLine());
    sum += age[i];
}
Console.WriteLine("年龄总和为:" + sum);
Console.WriteLine("平均年龄为:" + (sum / num));
Console.ReadLine();
int agemax = 0;
for (int i = 0; i < num; i++)
{
    if (agemax < age[i])
    {
        agemax = age[i];
    }
}
Console.WriteLine("最大年龄是:" + agemax);
Console.ReadLine();
冒泡排序练习2:输入班级人数,输入每个人的分数,求总分、平均分、两个最高分,两个最低分。
Console.WriteLine("请输入班级的人数:");
int nums = int.Parse(Console.ReadLine());
int[] scores = new int[nums];
int allScores = 0;
for (int i = 0; i < nums; i++)
{
    Console.Write("请输入第{0}个学生的分数:", i + 1);
    scores [i] = int.Parse(Console.ReadLine());
    scores += scores [i];
}
Console.WriteLine($"总分为{allScores}");
Console.WriteLine($"平均分为{(allScores / nums)}");
Console.ReadLine();
for (int i = 0; i < nums; i++)//冒泡排序
{
    for (int j = 0; j < nums - 1; j++)
    {
        if (scores[j] > scores[j + 1])
        {
            int temp = scores[j];
            scores[j] = scores[j + 1];
            scores[j + 1] = temp;
        }
    }
}
Console.WriteLine($"两个最高分为:{scores[nums-1]},{scores [nums-2]}");
Console.WriteLine($"两个最低分为:{scores[0]},{scores[1]}");
Console.ReadLine();

10.6 综合练习

有五个学生,用结构体存储姓名、学号、年龄、分数;
1、通过循环,在控制台将学生信息依次输入
2、按照成绩从小到大的顺序排序,然后输出所有学生信息
public struct Person
{
    public string name;
    public int age;
    public string studentID;
    public int score;
}
class Program
{
    public static void Main (string[] args)
    {
        Person[] persons = new Person[5];
        for (int i = 0; i < persons.Length; i++)
        {
            Console.WriteLine($"请输入第{i + 1}位学生的姓名:");
            persons[i].name = Console.ReadLine();
            Console.WriteLine($"请输入第{i + 1}位学生的学号:");
            persons[i].studentID =
            int.Parse(Console.ReadLine());
            Console.WriteLine($"请输入第{i + 1}位学生的年龄:");
            persons[i].age = int.Parse(Console.ReadLine());
            Console.WriteLine($"请输入第{i + 1}位学生的成绩:");
            persons[i].score = int.Parse(Console.ReadLine());
        }
        Console.ReadKey();
        for (i = 0; i < persons.Length-1; i++) 
        {
            for (int j = 0; j < persons.Length-(i+1); j++) 
            {
                if(persons[j].score> persons[j+1].score)
                {
                    Person temp = persons[j];
                    persons[j] = persons[j + 1];
                    persons[j + 1] = temp;
                }
                }
            }
        foreach (Person item in persons) 
        {
            Console.WriteLine ($"姓名:{item.name} 年龄:{item.age},学号:{item.studentID},分数{item.score}");
        }
        Console.ReadKey();
    }
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C#中,有几种方法可以将数组作为函数的参数传入。第一种方法是使用参数数组,也就是在函数定义中的最后一个参数加上params关键字。通过这种方式,我们可以向函数传递不定数量的参数。例如,可以定义一个带有参数数组的函数,如下所示:```static int SumVals(params int[] vals)```。在调用这个函数时,可以直接传入一组整数作为参数,例如```SumVals(1, 2, 3, 4, 5)```。函数内部可以通过for循环对参数数组进行遍历,实现对数组中元素的操作。 另一种方法是直接传递数组作为函数的参数。在函数定义中,可以将参数的类型指定为数组类型,例如```static int Sum(int[] arr)```。在调用这个函数时,可以创建一个数组,并将其作为参数传入,例如```Sum(new int { 1, 2, 3, 4 })```。函数内部同样可以通过for循环遍历数组,进行相应的操作。 总之,在C#中,可以通过参数数组或直接传递数组作为函数的参数来代入数组。这两种方法都可以实现对数组元素的操作,只是在使用上稍有不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C#中参数数组、引用参数和输出参数示例详解](https://download.csdn.net/download/weixin_38650150/13992165)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C#---参数数组数组参数](https://blog.csdn.net/qq_46289420/article/details/111324240)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值