c#实验2 3

2023-05-16

上机练习题

(1)构造一个类,可以分别对任意多个整数、小数或字符串进行排序。

答:具体步骤和主要代码如下:

① 创建一个控制台应用程序exerciseSort。

② 在Program.cs文件中定义一个Sort类,并在其中定义三个重载的方法BubbleSort;在Program类的Main函数中测试对任意多个整数、小数或字符串的排序。Program.cs文件的主要代码如下所示:

using System;
namespace exerciseSort
{
   public static  class Sort
    {
         //此处设置double[]、string[]类型数组与int[]相似,代码略 

        public static void BubbleSort(params int[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                int tempindex = i;
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (array[tempindex] > array[j])
                    {
                        tempindex = j;
                    }
                }
                if (tempindex != i)
                {
                    int tempValue = array[tempindex];
                    array[tempindex] = array[i];
                    array[i] = tempValue;
                }
            }
        }

        public static void BubbleSort(params double[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                int tempindex = i;
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (array[tempindex] > array[j])
                    {
                        tempindex = j;
                    }
                }
                if (tempindex != i)
                {
                    double tempValue = array[tempindex];
                    array[tempindex] = array[i];
                    array[i] = tempValue;
                }
            }
        }

        public static void BubbleSort(params string[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                int tempindex = i;
                for (int j = i + 1; j < array.Length; j++)
                {
                    if (String.Compare(array[tempindex], array[j]) != -1)
                    {
                        tempindex = j;
                    }
                }
                if (tempindex != i)
                {
                    string tempValue = array[tempindex];
                    array[tempindex] = array[i];
                    array[i] = tempValue;
                }
            }
        }

    }


    class Program
    {
        static void Main(string[] args)
        {
            int[] a = { 2, 3, 5, 8, 9, 1, 0 };
            double[] b = { 1.2, 3.4, 6.5, 9, 12, 18, 1 };
            string[] s = { "China", "Japan", "Viet", "Abc" };
        
            Sort.BubbleSort(a);
            foreach (int item in a) {
                Console.Write("{0} ", item);
            }
            Console.WriteLine();

            Sort.BubbleSort(b);
            foreach (double item in b)
            {
                Console.Write("{0} ", item);
            }
            Console.WriteLine();

            Sort.BubbleSort(s);
            foreach (string item in s)
            {
                Console.Write("{0} ", item);
            }

Console.ReadKey();
        }
    }
}

 

 

③ 单击“启动调试”按钮运行该程序。

(2)自定义一个时间类,该类包含时、分、秒字段与属性,具有将时间增加1秒、1分和1小时的方法,具有分别显示时、分、秒和同时显示时分秒的方法。

说明:该类定义可用于控制台应用程序,也可用于Windows窗体应用程序。

答:具体步骤如下:

① 创建一个控制台应用程序exerciseClock。

② 在Program.cs文件中定义一个MyClock类,并在其中编写代码,具体代码如下所示:

 

 

 

③ 单击“启动调试”按钮运行程序。

 

 

 

 

(3)创建一个Windows应用程序,输入两个正整数,单击“计算”按钮,求出这两个正整数的最大公约数。

要求:将求最大公约数的算法声明为一个静态方法,由“计算”按钮调用。

答:具体步骤如下:

① 设计界面。新建一个C#的Windows应用程序,项目名称设置为exerciseHcf,向窗体添加3个文本框、3个标签和1个按钮,并按照图7.1所示调整控件位置和窗体尺寸。

 

图7.1  设计界面

② 设置属性。窗体和各个控件的属性设置如表7.1所示。

7.1  对象的属性设置

对象

属性名

属性值

Form1

Text

求最大公约数

label1~ label13

Text

整数1:          整数2:         最大公约数:

textBox1,textBox2

Name

txtNum1          txtNum2

textBox3

Name

txtResult

ReadOnly

True

button1

Name

btnCal

Text

计算

③ 编写代码。在Form1类中定义一个求最大公约数的静态方法CountCommonDivisor,并为按钮btnCal添加Click事件处理程序,具体代码如下所示:

public static int CountCommonDivisor(int x1, int x2)

{

........

略....

........

 

 

}

private void btnCal_Click(object sender, EventArgs e)

{

..........

略.....

.........

 

 

}

④ 运行程序。按照标签提示在文本框中输入2个整数,单击“计算”按钮查看结果。

1.选择题

(1)下面有关虚方法的描述中,正确的是    B    

A.虚方法能在程序运行时,动态确定要调用的方法,因而比非虚方法更灵活。

B.在定义虚方法时,基类和派生类的方法定义语句中都要带上virtual修饰符。

C.重写基类的虚方法时,为消除隐藏基类成员的警告,需要带上new修饰符。

D.在重写虚方法时,需要同时带上override和virtual修饰符。

(2)下列方法中,     C     是抽象方法。

A.static void func( ) { }       B.virtual  void func( ) { }

C.abstract void func( ) { }        D.override  void func( ) { }

(3)下列关于接口的说法中,  B   是错误的。

A.一个类可以有多个基类和多个基接口。

B.抽象类和接口都不能被实例化。

C.抽象类自身可以定义字段成员而接口不可以。

D.类不可以多重继承而接口可以。

(4)已知类Base、Derived 的定义如下:

class Base

public void Hello()

{  System.Console.Write("Hello in Base!");  }

}

class Derived : Base

{  

public new void Hello()

{  System.Console.Write("Hello in Derived!");   }

则语句段“Derived x = new Derived(); x.Hello();”在控制台中的输出结果为__D_______。

A.Hello in Base!               B.Hello in Base!Hello in Derived!

C.Hello in Derived!             D.Hello in Derived!Hello in Base!

 

2. 思考和阅读

(1)什么是类的继承?怎样定义派生类?

答:继承涉及到一个基类型和一个派生类型,其中基类型表示的是泛例,而派生类型表示的是特例。特例从泛例中派生出来,也就是说特例继承了泛例。被继承的类叫基类,继承后产生的类叫做派生类。

在C#中,派生类隐式地继承基类的所有成员,包括方法、字段、属性和事件(基类的私有成员、构造函数、析构函数除外),同时可以添加自己的成员来进行功能扩展。

(2)简述创建派生类时,构造函数的调用。

答:C#编译器自动在派生类构造函数中首先自顶向下地调用基类构造函数,以初始化从基类中继承的成员,最后调用自身的构造函数。如果某个派生类中没有明确定义任何构造函数,编译器会自动为之生成一个默认构造函数,并在其中调用其基类构造函数。

(3)怎样定义基类虚方法,并在派生类中重写基类虚方法?

答:在基类中,需要使用关键字virtual将某个方法显式声明为虚方法,然后再在派生类中必须使用override显式声明一个方法以重写某个虚拟方法。方法重写时,必须注意派生类中的方法应该与基类中被重写的方法有相同的方法名、返回值类型、参数列表和访问权限。

(4)抽象方法与虚方法有什么异同?

答:① 当方法前使用了virtual关键字时,它就成为虚拟方法;虚拟方法是多态的基础,在派生类中能够改变方法的执行,改变基类中虚方法的过程叫重写或覆盖。

② 当方法前使用了abstract关键字时,它就成为抽象方法;抽象方法是一个不完全的方法,它只有方法头,没有具体的方法体;抽象方法是一种虚拟方法(但不能用关键字virtual显式声明),是隐含的虚拟,而且必须被派生类实现重写。

③ 抽象方法与虚拟方法的差别在于:虚拟方法有实现,抽象方法没有实现。

(5)什么是抽象类?它有什么特点?它和接口有何异同?

答:抽象类是基类的一种特殊类型,必须用关键字abstract修饰。它除了拥有普通的类成员之外,还有抽象类成员。抽象类成员中的方法和属性,只有声明(使用关键字abstract),而没有实现部分。抽象类永远也不能实例化。

接口像一个抽象类,可以定义方法成员、属性成员、索引器和事件等,但接口不提供对成员的实现,而继承接口的类则必须提供接口成员的实现。可以将接口看做是只包含抽象方法的纯抽象类。接口最终还是需要由类或结构来实现,即要求类要实现接口的抽象方法成员,这与派生类保证要实现它的基类的抽象方法一样。

虽然接口和抽象类在句法和语义上紧密相关,但它们仍有一个重要的区别:接口只能包含抽象方法、抽象属性和抽象索引器,而抽象类还可能包含数据成员,以及完全实现的方法、属性和索引器。

(6)简述通过委托来调用对象方法的基本过程。

答:基本过程如下:

① 使用关键字delegate声明委托类型。

② 委托的实例化。委托是一种特殊的数据类型,必须实例化之后才能用来引用方法。

③ 通过委托变量调用方法。在使用委托对象调用所引用的方法时,必须保证参数的类型、个数和顺序与方法声明匹配。

上机实验: 编写一个程序,计算两个指定年份之间的闰年并输出,运行界面如图6.5所示。

要求:利用组合框选择或输入起止年份,起始年份不能大于终止年份;利用列表框输出闰年;窗体左下角显示当前的日期和时间。 

 

图6.5 计算闰年

答:具体步骤如下:

① 设计界面。新建一个C#的Windows应用程序,项目名称设置为exerciseLeapYear,向窗体中添加4个标签、2个组合框、1个列表框和1个按钮,并按图6.5所示调整控件位置和窗体尺寸。

② 设置属性。窗体和各个控件的属性设置如表6.5所示。

表6.5  对象的属性设置

对象

属性名

属性值

Form1

Text

计算指定年份间的闰年

label1~label3

Text

起始年份        终止年份        闰年列表

label4

Name

lblNow

Text

当前日期和时间

comboBox1,

comboBox2

Name

cbo1            cbo2

Text

1949            2010

listBox1

Name

lstYear

button1

Name

btnCal

Text

计算

timer1

Enabled

True

③ 编写代码。首先,双击窗体,打开代码视图,在Form1_Load事件处理程序中添加相应代码,如下所示:

private void Form1_Load(object sender, EventArgs e)

{

 

 

}

然后,双击按钮btnCal,在其Click事件处理程序中添加相应代码,如下所示:

private void btnCal_Click(object sender, EventArgs e)

{

 

 

 

}

最后,双击定时器timer1,在其Tick事件处理程序中添加相应代码,如下所示:

private void timer1_Tick(object sender, EventArgs e)

{

 


}   

  private void Form1_Load(object sender, EventArgs e)
        {
            object[] d = new object[3000];
            int k = 0;
            for (int i = 0; i < 3000; i++)
            {
                d[i] = k.ToString();
                k = k + 1;
            }
            object[] f = new object[3000];
            int m = 0;
            for (int i = 0; i < 3000; i++)
            {
                f[i] = m.ToString();
                m = m + 1;
            }
            comboBox1.DataSource = d;
            comboBox2.DataSource = f;
            timer1.Interval = 1000;
            timer1.Start();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            int j = 0;
            label4.Text = System.DateTime.Now.ToString();
            int a = int.Parse(comboBox1.Text.ToString());
            int b = int.Parse(comboBox2.Text.ToString());
            object[] c = new object[3000];
            if (a > b)
            {
                MessageBox.Show("起e始º?年¨º份¤Y不?可¨¦大䨮于®¨²终?止1年¨º份¤Y");
                return;
            }
            for (int i = a; i <= b; i++)
            {
                if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
                {
                    c[j] = i.ToString();
                    j++;
                }
            }
            listBox1.DataSource = c;

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            label4.Text = System.DateTime.Now.ToString();
        }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c#实验2 3 的相关文章

  • 彻底解决 error: Unable to find vcvarsall.bat

    1 windows上做Python开发 xff0c 搭环境还真不比Linux容易 error Unable to find vcvarsall bat这个错误眼熟吧 xff1f 凡是安装和操作系统底层密切相关的Python扩展 xff0c
  • ubuntu下解决微信不能发送图片的问题

    安装sudo apt install libjpeg62 i386 xff0c 可以解决ubuntu下不能发送微信截图的问题
  • dpkg安装deb缺少依赖包的解决方法--Ubuntu 16.04 LTS 安装网易云音乐

    一 去网易云音乐官网下载对应的安装包 我下载的是netease cloud music 1 0 0 2 amd64 ubuntu16 04 deb 二 开始安装 sudo dpkg span class hljs attribute i s
  • 个人号微信机器人API接口

    发送APP类消息 和发送小程序是同一个接口 xff0c 此接口可发送xml中包含appmsg的消息 xff0c 例如 xff1a 短视频 xff0c 直播 xff0c 音乐 xff0c 第三方APP等 请求URL xff1a http 域名
  • Fiddler抓包(下载安装及使用)

    一 下载安装 1 下载 官网链接 xff1a https www telerik com Fiddler Classic xff08 经典版 xff09 xff0c 这个版本是免费的 xff0c 不过只能在Windows上使用 Fiddle
  • URL&HTTP协议详解

    URL xff1a 统一资源定位符 这就意味着我们可以通过URL的方式去访问的资源 xff08 接口 xff09 URI xff1a 统一资源标识符 是一种抽象的概念 xff0c 本身没有具体去实现 一 URL URL是实现接口访问的第一步
  • CentOS7学习笔记(安装配置到常用命令)

    一 下载安装 访问linux org xff0c 选择centos xff0c 找到centos对应版本的镜像网站下载 新建虚拟机 安装 xff1a 语言默认英文 xff0c 最好不要改动 xff0c 不然有可能会有乱码问题 时区选择sha
  • Microsoft 365自定义安装,卸载Access、Publisher、Skype

    买电脑送的Office 2019只有Word Excel PowerPoint三件套 xff0c 一般情况都是够用的 xff0c 可以前往Microsoft 帐户 服务和订阅中下载一键安装 但是拥有Microsoft 365 xff08 原
  • Vimium如何使用

    Vimium是什么 vimium是一款支持全键盘操作浏览器的扩展 可以尽可能的解放鼠标 有一定的学习成本 xff0c 对本就拥有vim使用经验的人来说上手更容易 支持Chrome Edge Firefox 使用流畅后可以大大的提升浏览器的使
  • Linux 文件系统

    Linux 文件系统以及常见命令 Linux 文件系统block 与 inode文件类型权限目录树挂载 管道啥是管道管道的分类管道的实质 Linux 文件系统 在 Linux 中一切皆文件 xff0c 不仅仅是平时所使用的 txt pdf
  • 利用栈判断一个字符串是否为回文串

    include lt stdio h gt include lt string h gt 利用栈判断一个字符串是否为回文串 int main char a 101 s 101 int i len mid next top gets a 读入
  • Mysql 8.0 MGR部署限制和环境要求

    在mysql 8 0版本中 xff0c mgr功能进行了很大的改善和增强 xff0c 如果要部署组复制的服务器 xff0c 实例必须满足以下条件 xff1a 基础设置 xff1a 1 InnoDB存储引擎 disabled storage
  • ubuntu下安装vmware

    1 下载vmware xff0c https www vmware com cn products workstation pro workstation pro evaluation html 2 下载的vmware放到家目录下 3 ch
  • 使用devenv/MSBuild在命令行编译单个project

    一 使用devenv来build单个project devenv是VisualStudio的可执行程序 xff0c 一般安装在 C Program Files x86 Microsoft Visual Studio 10 0 Common7
  • 解决ROS常遇到的Couldn’t find executable named报错解决

    解决办法 xff1a 将执行文件打开权限允许作为程序执行文件
  • ubuntu下QtCreator启动无响应问题解决

    QtCreator正常使用 xff0c 系统重启后一打开就卡死 xff0c 无响应状态 xff0c 重装也没用 xff0c 查了半天才解决 解决方法 xff1a 删除系统配置目录下的QtProject文件夹 具体实施 xff1a 1 fin
  • PTA 数据结构 6-2 顺序表基本操作

    6 2 顺序表基本操作 xff08 10 分 xff09 本题要求实现顺序表元素的增 删 查找以及顺序表输出共4个基本操作函数 L是一个顺序表 xff0c 函数Status ListInsert Sq SqList amp L int po
  • Typora 的 markdown 语法

    Typora 的 markdown 语法 1 标题 使用简单的 ctrl 43 数字键 就可以快速完成各种级别的标题 也可以使用 表示一级标题 xff0c 表示二级标题 xff0c 以此类推 xff0c 有6个标题 2 下划线 ctrl 4
  • css弹性布局和相关属性

    弹性布局 弹性布局主要是解决移动端的问题 xff0c 但是并不代表它不能适用于PC端 xff0c 它最重要的技术就是一个叫弹性盒子 xff08 flexbox xff09 的东西 弹性盒子最主要的几个属性如下 display flex 这个
  • CSS动画

    CSS动画 CSS3的动画属性 下面的表格列出了 64 keyframes 规则和所有动画属性 xff1a 属性描述CSS 64 keyframes规定动画 3animation所有动画属性的简写属性 xff0c 除了 animation

随机推荐

  • JavaScript简介

    JavaScript 它是一种脚本语言 xff0c 提供页面与用户的交互途径 xff0c 主要包含三个方面的东西 ECMAScript ES 它主要是用来定义JavaScript的语法规范 xff0c 现在主流的版本是5 1 后期的主要部分
  • JavaScript 输出 语法

    JavaScript 显示方案 JavaScript 不提供任何内建的打印或显示函数 JavaScript 能够以不同方式 显示 数据 xff1a 使用 window alert 写入警告框使用 document write 写入 HTML
  • JavaScript 条件语句

    JavaScript 条件语句 条件语句 通常在写代码时 xff0c 您总是需要为不同的决定来执行不同的动作 您可以在代码中使用条件语句来完成该任务 在 JavaScript 中 xff0c 我们可使用以下条件语句 xff1a if 语句
  • JavaScript 循环

    JavaScript 支持不同类型的循环 xff1a for 循环代码块一定的次数for in 循环遍历对象的属性while 当指定的条件为 true 时循环指定的代码块do while 同样当指定的条件为 true 时循环指定的代码块 F
  • android系统logcat日志重定向到kernel,可以通过串口来输出

    修改system core rootdir init rc chmod 0660 sys power wake lock chmod 0660 sys power wake unlock 43 chmod 0660 proc kmsg St
  • JavaScript 数组知识图

  • javascript DOM 知识图

    HTML DOM 文档对象模型 当网页被加载时 xff0c 浏览器会创建页面的文档对象模型 xff08 Document Object Model xff09 主要目的就是把网页里面的元素当成对象一样支配 HTML DOM 定义了用于 HT
  • JavaScript 能够改变页面中的所有 HTML 元素

    JavaScript 能够改变页面中的所有 HTML 元素 改变 HTML 输出流 JavaScript 能够创建动态的 HTML 内容 xff1a 在 JavaScript 中 xff0c document write 可用于直接向 HT
  • audio 音频标签的使用 及实例

    audio 音频标签的使用 属性值描述autoplayautoplay如果出现该属性 xff0c 则音频在就绪后马上播放 controlscontrols如果出现该属性 xff0c 则向用户显示音频控件 xff08 比如播放 暂停按钮 xf
  • jQuery简介及简单语法

    什么是 jQuery xff1f jQuery是一个JavaScript函数库 jQuery是一个轻量级的 34 写的少 xff0c 做的多 34 的JavaScript库 jQuery库包含以下功能 xff1a HTML 元素选取HTML
  • jQuery里面的选择器

    jQuery里面的选择器 jQuery里面的选择器多种多样 xff0c 它支持css1 css3的选择器 xff0c 老版本的jQuery还支持Xpath的选择器 xff0c 在原来的CSS选择器上面又扩展了一些新的选择器 jQuery支持
  • jQuery事件

    什么是事件 xff1f 页面对不同访问者的响应叫做事件 事件处理程序指的是当 HTML 中发生某些事件时所调用的方法 jQuery 是为事件处理特别设计的 实例 xff1a 在元素上移动鼠标 选取单选按钮点击元素 在事件中经常使用术语 34
  • JavaScript 存储对象 sessionStorage (会话存储) 和 localStorage(本地存储)

    JavaScript 存储对象 Web 存储 API 提供了 sessionStorage xff08 会话存储 xff09 和 localStorage xff08 本地存储 xff09 两个存储对象来对网页的数据进行添加 删除 修改 查
  • 配色网站

    01渐变色 https www grabient com ref 61 producthunt 02 New Flat UI Color Picker 网站地址 xff1a http www flatuicolorpicker com Ne
  • AJAX 语法

    AJAX 创建 XMLHttpRequest 对象 XMLHttpRequest 用于在后台与服务器交换数据 这意味着可以在不重新加载整个网页的情况下 xff0c 对网页的某部分进行更新 创建 XMLHttpRequest 对象 所有现代浏
  • mtk平台dmesg配置

    mtk平台dmesg log buffer设置 CONFIG LOG BUF SHIFT
  • onreadystatechange 事件

    onreadystatechange 事件 当请求被发送到服务器时 xff0c 我们需要执行一些基于响应的任务 每当 readyState 改变时 xff0c 就会触发 onreadystatechange 事件 readyState 属性
  • 微信小程序开发

    官方文档 https developers weixin qq com miniprogram dev 微信小程序基础 一 安装微信开发者工具 安装地址 https developers weixin qq com miniprogram
  • c#实验一

    该文档包含部分代码 若下载工程文件可以https download csdn net download sereasuesue 12057862 xff08 1 xff09 编写一个Windows应用程序 xff0c 计算n xff0c n
  • c#实验2 3

    上机练习题 xff08 1 xff09 构造一个类 xff0c 可以分别对任意多个整数 小数或字符串进行排序 答 xff1a 具体步骤和主要代码如下 xff1a 创建一个控制台应用程序exerciseSort 在Program cs文件中定