主要是通过循环遍历数组(一般使用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