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

相关文章
|
7月前
|
C#
C#学习相关系列之数组---常用方法使用(二)
C#学习相关系列之数组---常用方法使用(二)
|
7月前
|
存储 C#
C#学习系列相关之数组(一)---数组的定义与使用
C#学习系列相关之数组(一)---数组的定义与使用
|
1月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
3月前
|
存储 C# 索引
C# 一分钟浅谈:数组与集合类的基本操作
【9月更文挑战第1天】本文详细介绍了C#中数组和集合类的基本操作,包括创建、访问、遍历及常见问题的解决方法。数组适用于固定长度的数据存储,而集合类如`List<T>`则提供了动态扩展的能力。文章通过示例代码展示了如何处理索引越界、数组长度不可变及集合容量不足等问题,并提供了解决方案。掌握这些基础知识可使程序更加高效和清晰。
88 2
|
2月前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
3月前
|
SQL 开发框架 安全
并发集合与任务并行库:C#中的高效编程实践
在现代软件开发中,多核处理器普及使多线程编程成为提升性能的关键。然而,传统同步模型在高并发下易引发死锁等问题。为此,.NET Framework引入了任务并行库(TPL)和并发集合,简化并发编程并增强代码可维护性。并发集合允许多线程安全访问,如`ConcurrentQueue&lt;T&gt;`和`ConcurrentDictionary&lt;TKey, TValue&gt;`,有效避免数据不一致。TPL则通过`Task`类实现异步操作,提高开发效率。正确使用这些工具可显著提升程序性能,但也需注意任务取消和异常处理等常见问题。
56 1
|
4月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
105 0
|
4月前
|
存储 C# 索引
C# 集合语法全解
C# 集合语法全解
35 0
|
6月前
|
存储 开发框架 .NET
C#中的数组探索
C#中的数组探索
|
7月前
|
C#
C#获取文件基本信息,文件名称、修改时间、文件路径等
C#获取文件基本信息,文件名称、修改时间、文件路径等
73 0