专业的JAVA编程教程与资源

网站首页 > java教程 正文

C# - 操作数组及元素 034(c#实现一个简单的数组处理类)

temp10 2025-01-24 13:58:01 java教程 56 ℃ 0 评论

操作数组

主要是通过循环遍历数组(一般使用for循环结构)

数组nums的长度为5,下标为0-4; for循环中也是0-4,因此将for循环的循环变量放入数组的下标中实现对数组的循环遍历

C# - 操作数组及元素 034(c#实现一个简单的数组处理类)

示例1:打印给出的中国历史数组中的朝代名字(夏,商,周,秦,汉,晋,隋,唐,宋,元,明,清)

//也可以声明为字符串数组
char[] cd = new char[12]{ '夏', '商', '周', '秦', '汉', '晋', '隋', '唐', '宋', '元', '明', '清' };
 for (int i = 0; i < 12; i++)
 {
     Console.WriteLine("中国历史各个朝代的名称为: {0}朝  i的值为{1}", cd[i],i);
 }
 Console.ReadKey();

数组的Length属性

每个数组都有该属性,是一个只读属性即只能获取或使用该属性的值,不能修改其值

Length属性的作用:返回当前数组的长度即数组元素的总个数;因为该属性的值可以随元素个数变动,因此推荐以后使用此属性,更便于使用循环遍历数组

//将示例1修改为使用Length属性
//声明数组为下面格式
//通过cd.Length得到当前数组的长度
char[] cd ={ '夏', '商', '周', '秦', '汉', '晋', '隋', '唐', '宋', '元', '明', '清' }; 
//因为数组 cd的元素总个数为 12
//因此 cd.Length的值 等于 12
 for (int i = 0; i < cd.Length; i++)  //相当于 for (int i = 0; i < 12; i++)
 {
     Console.WriteLine("中国历史各个朝代的名称为: {0}朝  i的值为{1}", cd[i],i);
 }
//int[] nums={1,2,3};//数组中有3个元素
//因此 nums.Length 的值就等于 3
 Console.ReadKey();

操作数组元素

主要是对元素的赋值,修改,比较其值大小,求和与平均值,求最大与最小值,排序

1 对数组中的元素进行赋值;各个元素的值可以一样

示例2:输入5个学生的成绩并打印输出

//以下各条代码含义之前都说过,不再解释
int[] scores = new int[5];
 for (int i = 0; i < scores.Length; i++)
 {
     Console.WriteLine("请输入第 {0} 个学生的成绩", i + 1);
     int result = Convert.ToInt32(Console.ReadLine());
     scores[i] = result;
 }
 Console.WriteLine("打印输出");
 for (int i = 1; i <= scores.Length; i++)
 {
     Console.WriteLine("第{0}个人的成绩为 {1}", i, scores[i - 1]);
 }
 Console.ReadKey();

拓展:让用户决定输入多少个人的成绩

2 通过下标修改数组元素的值 修改元素的值会改变原数组该元素的值

//修改元素的值
int[] nums = { 1, 2, 3, 1, 5 };
for (int i = 0; i < nums.Length; i++)
{
    //元素原值
    Console.Write("{0}\t", nums[i]);
}
Console.WriteLine("");
nums[3] = 4;//将第四个元素值改为4
//修改其他元素值的操作以此类推
for (int i = 0; i < nums.Length; i++)
{
    //元素修改后的值
    Console.Write("{0}\t", nums[i]);
}
Console.ReadKey();

3 比较数组元素的大小; 就是比较元素值的大小(只以数值类型为例,其他类型以后再说)

4 求数组中元素值的和与平均数

 int[] nums = { 31, 89, 53, 31, 35 };
 int sum = 0; double avg = 0;
 for (int i = 0; i < nums.Length; i++)
 {
     sum += nums[i];//加的是当前下标元素中的值
 }
 avg = sum / nums.Length;
 Console.WriteLine("和为 {0}  平均值为 {1:0.00}",sum,avg);

5 求其最大值与最小值;假设第一个元素是最大值或最小值,让其他元素与其进行比较

int[] nums = { 31, 89, 53, 31, 35 };
//方式1
//假设最大/小值为数组的第一个元素
int max = nums[0], min = nums[0];
//从第二个元素开始比较
for (int i = 1; i < nums.Length; i++)
{
  //如果当前下标元素的值比假设元素的值还大
    if (nums[i] > max)
    {
      //                            nums[i]>max
     //nums[1]>nums[0];   89>31  为真    max=89 替换原值 31
    //nums[2]>nums[0];   53>89  为假    max=89 还是原值 89
    //nums[3]>nums[0];   31>89  为假    max=89 还是原值 89
   //nums[4]>nums[0];    35>89  为假    max=89 还是原值 89   
        max = nums[i]; //将当前下标元素的值赋值给变量max
    }
  //如果当前下标元素的值比假设元素的值还小
    if (nums[i] < min)
    {
      //与最大值比较过程类似
        min = nums[i];
    }
}
Console.WriteLine("数组中元素的最大值为 {0} 最小值为 {1}",max,min);
//================================================
//方式2  从0开始
int max=0,min=0;
for (int i = 0; i < nums.Length; i++)
{
    if (nums[i] > max)
    {
        max = nums[i];
    }
    if (nums[i] < min)
    {
        min = nums[i];
    }
}
Console.ReadKey();

拓展:不仅打印出最大/小值,还要打印出最大小值的下标

错误判断最小值的代码

for (int i = 1; i < nums.Length; i++)
{
    if (nums[i] > max)
    {
        max = nums[i];
    }
  	else
    {
        min = nums[i];
    }
}

max与min不是同一变量,因此不能使用else判断最小值

6 对数组元素进行排序(暂时使用方法)

7 上面的求和,平均值,最大/小值都可以使用数组的快捷方法得到

//需要添加一个命名空间
using System.Linq;

//使用数组的方法排序
 int[] nums = { 31, 89, 53, 31, 35 };
 Array.Sort(nums);//排序(升序) 由小到大
 for (int i = 0; i < nums.Length; i++)
 {
     Console.Write("{0}\t", nums[i]);
 }
 Console.WriteLine("");
 //反转排序(与sort排序结果相反) 由大到小
 Array.Reverse(nums);
 for (int i = 0; i < nums.Length; i++)
 {
     Console.Write("{0}\t", nums[i]);
 }
 Console.ReadKey();
//以下方法在using System.Linq;命名空间下
//继承IEnumerable接口的方法
 nums.Sum();//总和  239 
 nums.Average();//平均值  47.8
 nums.Max();//最大值 89
 nums.Min();//最小值  31

示例3:将字符串数组元素使用符号&连接打印输出如:张三&李四&王五

拓展:使用用户指定的其他字符或字符串进行连接(最后不再出现该符号)

 Console.Title = "使用&符号连接元素打印输出";
 string[] strs = {"数据类型","分支结构","循环结构","枚举","结构","数组" };
 for (int i = 0; i < strs.Length; i++)
 {
     Console.Write(strs[i]+" & ");
 }
 Console.ReadKey();

示例:录入班级学生姓名,性别,年龄,语文,数学,历史考试成绩的基本信息,最后打印输出基本信息加个人成绩的总分与平均分

编程思路(仅供参考)

1)没说有多少人,需要用户确定人数 2)一个人就需要8个变量,考虑使用枚举或者结构,变量类型不同且存在关系,选择使用结构 3)需要录入多人基本信息使用for循环结构 4)需要打印班级多人信息使用数组便于打印输出

//定义结构及其字段
 struct Student
 {
     public string _name;
     public string _gender;
     public int _age;
     public int _chinese;
     public int _math;
     public int _history;
     public int _sum;
     public double _avg;
 }
Console.WriteLine("请输入班级人数");
int count = Convert.ToInt32(Console.ReadLine());
//声明Student结构类型的数组
Student[] stus = new Student[count];
for (int i = 0; i < stus.Length; i++)
{
   //跨步大了一些,应该可以理解
    Console.WriteLine("请输入第 {0} 个人的姓名", i + 1);
    stus[i]._name = Console.ReadLine();
    Console.WriteLine("请输入 {0} 的性别", stus[i]._name);
    stus[i]._gender = Console.ReadLine();
    Console.WriteLine("请输入 {0} 的年龄", stus[i]._name);
    stus[i]._age = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("请输入 {0} 的语文成绩", stus[i]._name);
    stus[i]._chinese = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("请输入 {0} 的数学成绩", stus[i]._name);
    stus[i]._math = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("请输入 {0} 的历史成绩", stus[i]._name);
    stus[i]._history = Convert.ToInt32(Console.ReadLine());
    stus[i]._sum = stus[i]._chinese + stus[i]._math + stus[i]._history;
    stus[i]._avg = stus[i]._sum / 3;
}
Console.WriteLine("======   打印输出学生信息  ======");
Console.WriteLine("");
for (int i = 0; i < stus.Length; i++)
{
    Console.WriteLine("姓名:{0} 性别:{1} 年龄:{2} 语文:{3} 数学:{4} 历史:{5} 总分:{6} 平均分:{7}", stus[i]._name, stus[i]._gender, stus[i]._age, stus[i]._chinese, stus[i]._math, stus[i]._history, stus[i]._sum, stus[i]._avg);
}
Console.ReadKey();

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表