C# - 操作数组及元素 034

C# - 操作数组及元素 034

首页冒险解谜元素之源更新时间:2024-05-09
操作数组

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

数组下标与循环变量的规律

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

示例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是只读属性

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();

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved