C#面向对象程序设计课程实验三:实验名称:C#数组和集合

简介: C#面向对象程序设计课程实验三:实验名称:C#数组和集合

343f49c550c848068b789049af14d650.jpg

实验内容:C#数组和集合


image.png


一、实验目的

实验目的及要求

  • (1)掌握数组声明与创建;
  • (2)掌握数组的引用及初始化;
  • (3) 利用调试程序来修改程序的逻辑错误;


二、实验环境

Microsoft Visual Studio 2008

三、实验内容与步骤

3.1.1、实验内容


  • 定义一个数组,用来存储输入的 10 个学生的考试成绩,计算并输出平均成绩、 最高成绩和最低成绩及其对应的数组下标。
  • 项目名称为 XT5-2,程序的运行界面如 图所示。(教材第 5 章 140 页 3.2 题)


0ea17739da6340219dae3588a874d038.png


注意考虑以下情况:

①输入成绩在 0-100 的范围之外的处理。

②如果输入的成绩后面带有分号等标点符号,也可以过滤。

③当有多个相同的最高或最低分时,也能分别显示出来。


3.1.2、实验步骤


实验的程序如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 实验三_1_
{
    class Program
    {
        static double Average(int[] Scores)
        {
            double total = 0;
            for (int i = 0; i < Scores.GetLength(0); i++)
                total += Scores[i];
            return (double)(total / Scores.GetLength(0));
        }
        static void Main(string[] args)
        {
            int[] Scores = new int[10];
            for (int i = 0; i < Scores.Length; i++)
            {
                int a;
                Console.Write("请输入第{0}个学生成绩 :", i);
                a = int.Parse(Console.ReadLine());
                Scores[i] = a;
            }
            int a1 = 0;
            int high = 0;
            for (int i = 0; i < 10; i++)
            {
                if (Scores[i] > high)
                {
                    high = Scores[i];
                    a1 = i;
                }
            }
            int a2 = 0;
            int low =100;
            for (int j = 0; j < 10; j++)
            {
                if (Scores[j] < low)
                {
                    low = Scores[j];
                    a2 = j;
                }
            }
            Console.WriteLine("平均成绩: {0}", Average(Scores));
            Console.WriteLine("最高成绩: {0},下标是: {1}",high ,a1);
            Console.WriteLine("最低成绩: {0},下标是: {1}",low ,a2);
            Console.ReadLine();
        }
    }
}


注意考虑以下情况:

  • ①输入成绩在 0-100 的范围之外的处理。
    可以将这个语句 a = int.Parse(Console.ReadLine());
    的后面添加语句为


        if (a < 0 || a > 100)
                {
                    Console.WriteLine("输入错误");
                    a = a - 1;
                }
                else 
          Scores[i] = a;


  • ②如果输入的成绩后面带有分号等标点符号,也可以过滤。
a = Console.ReadLine();
 a = Regex.Replace(a,@"[^\d]*", "");


使用Regex.Replace将其标点转换成字符。

在用int.Parse转换为整形数字。

  • ③当有多个相同的最高或最低分时,也能分别显示出来


      int high = 0;
      for (int i = 0; i < 10; i++)
            {
                If (Scores[i] > high) 
        high = Scores[i];
            }
            Console.Write("最高成绩为{0},下标是", high);
            for (i = 0; i < 10; i++)
            {
                if (a[i] == high)
          Console.Write(",{0}", high +1);
            } 


  • 这样可以在有多个相同的最高分时,也能分别显示出来。同理,最低分也用同样思路。

实验的运行效果如下:

b96628a2102d477c9a7f17b5a2693e67.jpg


3.2.1、实验内容


  • 定义一个 4X5 的二维数组,使元素值为行、列号之积,然后输出此矩阵并计算每一列的平均值。
  • 项目名称为 xt5-4,程序的运行界面如图所示。(教材第 5 章 140 页 3.4 题)。


d3c9a117a6e4407d84cfa093090f8b78.png


3.2.2、实验步骤


实验的程序如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 实验三_2_
{
    class Program
    {
        static void Main(string[] args)
        {
            double[] aver1 = new double[5];
            double [] aver2=new double [4];
            int[,] arr = new int[4, 5];      
            for (int i = 0; i < 4; i++)
                for (int j = 0; j < 5; j++)
                    arr[i, j] = (i + 1) * (j + 1);
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 5; j++)
                    Console.Write("{0}\t", arr[i, j]);
                Console.WriteLine();
            }
            for (int i = 0; i < 4; i++)
            {
                aver2[i] = 0;
                for (int j = 0; j < 5; j++)
                {
                    aver2[i] += arr[i, j];
                }
                aver2[i] /= 5 * 1.0;
            }
            for (int i = 0; i < 4; i++)
            {
                Console.WriteLine("第" + (i + 1) + "行的平均值为: {0}", aver2[i]);
            }
            Console.WriteLine();
            for (int i = 0; i < 5; i++)
            {
                 aver1[i] = 0;
                 for (int j = 0; j < 4; j++)
                 {
                     aver1[i] += arr[j, i];
                 }
                 aver1[i] /= 4 * 1.0;
            }
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("第" + (i + 1) + "列的平均值为: {0}", aver1[i]);
            }
            Console.ReadLine();
        }
    }
}

实验的运行效果如下:


4aed1e2589cf4dbdb16db8ffe4975dc9.jpg


3d8543f458774ab68fc62d37448315ba.jpg

四、实验总结

  • 1、通过本次实验总结掌握了数组的输入与输出的方法。
  • 2、掌握了C#数组的相关的程序算法。
  • 3、掌握了数组的Length属性可以获取数组的长度等。


3dd3e52a2329498c9a5a97672aa0e8ea.jpg

相关文章
|
2天前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
2天前
|
存储 C#
C#学习系列相关之数组(一)---数组的定义与使用
C#学习系列相关之数组(一)---数组的定义与使用
|
2天前
|
C#
C#获取文件基本信息,文件名称、修改时间、文件路径等
C#获取文件基本信息,文件名称、修改时间、文件路径等
11 0
|
2天前
|
存储 SQL C#
C# 读取二维数组集合输出到Word预设表格
C# 读取二维数组集合输出到Word预设表格
|
2天前
|
存储 安全 C#
C#使用集合组织相关数据
C#使用集合组织相关数据
12 0
|
2天前
|
C#
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
78 1
|
2天前
|
存储 安全 Java
34.C#:listT泛型集合
34.C#:listT泛型集合
25 1
|
2天前
|
存储 C#
33.c#:hashtable集合
33.c#:hashtable集合
16 1
|
2天前
|
存储 安全 Java
32.C#:ArrayList集合
32.C#:ArrayList集合
19 1
|
2天前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
172 2