1、实验一 面向对象程序设计一、实验目的1掌握 Visual Studio(C#编程界面)和一些工具的基本使用方法;2掌握 C#类型系统;3掌握 C#控制语句用法;4掌握数组的用法;5掌握简单 C#类的编写。二、实验内容(实验过程中编写的程序复制到本文件中,下课整理后上交)1填空并验证struct SomeVal public Int32 x; class SomeRef public Int32 x; SomeVal v1; / 分配到 栈 (堆/栈)Console.WriteLine(v1.x); /能运行吗? 不能 v1 = new SomeVal();Console.WriteLine(v
2、1.x); /输出 0 v1.x =5; Console.WriteLine(v1.x); /输出 5 SomeRef r1;Console.WriteLine(r1.x); /能运行吗? 不能 r1 = new SomeRef(); / 分配到 堆 (堆/栈)Console.WriteLine(r1.x); /输出 0 r1.x =5;Console.WriteLine(r1.x); /输出 5 SomeVal v2 = v1;SomeRef r2 = r1;v1.x = 9;r1.x = 8;Console.WriteLine(r1.x); /输出 8 Console.WriteLine(
3、r2.x); /输出 8 Console.WriteLine(v1.x); /输出 9 Console.WriteLine(v2.x); /输出 5 2创建控制台应用程序。1)在程序主方法中,由用户依次输入一个字符串 text,以及一个加密字符key,其中变量 key 保存为 int 类型。(提示:加密字符通过 Console.ReadKey().KeyChar 输入)2)进行字符串加密。此处采用的加密方法是:将密钥字符与字符串中的每个字符进行异或运算。如a与l异或结果为字符P。编译运行程序,查看字符串加密结果。(提示:异或运算只能在整数之间进行,结果也是整数,注意类型转换。可用foreach
4、(char c in text)循环处理字符串。用+=运算符可将字符添加到字符串中。)3)进行字符串解密。原理:异或运算具有可逆性,如字符P与l的异或仍为字符a。编写代码取回原字符串并输出。输出格式参考:请输入字符串:abcdefg请输入加密字符:1加密后的字符串为:PSRUTWV解码后的字符串为:abcdefg实验代码:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;namesp
5、ace ConsoleApplication1class Programstatic void Main(string args)Console.WriteLine(“请输入字符串:“);string text = “;string text1 = Console.ReadLine();Console.WriteLine(“请输入加密字符:“);char key = Console.ReadKey().KeyChar;foreach (char c in text1)int ptr = c key;text += (char)ptr;Console.WriteLine(“加密后的字符串为:“)
6、;Console.WriteLine(text);string text2 = “;foreach (char c in text)int pt = c key;text2 += (char)pt;Console.WriteLine(“解密后的字符串为:“);Console.WriteLine(text2);Console.ReadKey();3参数修饰符的用法:设计一个工具类,包含四个函数,尽可能重载:函数一:输入 3 个参数值,返回其算术平均值函数二:输入 3 个参数值,使用 ref 参数,输出几何平均值、均方根平均值。函数三,输入 3 个参数值,使用 out 参数,同样输出几何平均值、均
7、方根平均值。函数四,输入 n 个参数,自行决定参数格式,要求输出几何平均值、均方根平均值。在主函数中进行测试。class MeanToolpublic static double Mean(double a, double b, double c)return ;class Programpublic static void Main()double value1 = 2.0, ;Console.WriteLine(“函数1:0“, MeanTool.Mean(value1, );double result1 = 0.0;实验代码:using System;using System.Colle
8、ctions.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication2class MeanToolpublic static double Mean(double a, double b, double c)return (a + b + c) / 3;public static double Mean1(ref double a, ref double b, ref double c,ref double jh,ref double fjg)jh
9、=Math.Pow(a * b * c), (1.0 / 3.0);fjg=Math.Sqrt(a * a) + (b * b) + (c * c) / 3.0);Console.WriteLine(“函数 2:几何平均值为:0“, Math.Pow(a * b * c), (1.0 / 3.0);Console.WriteLine(“函数 2:方均根平均值平均值为:0“, Math.Sqrt(a * a) + (b * b) + (c * c) / 3.0);return fjg;public static double Mean2(double a, double b, double c,
10、 out double jh, out double fjg)jh = Math.Pow(a * b * c), (1.0 / 3.0);fjg = Math.Sqrt(a * a) + (b * b) + (c * c) / 3.0);Console.WriteLine(“函数 3-几何平均值:0“, jh);Console.WriteLine(“函数 3-几何平均值:0“, fjg);return jh;public static double Mean3(double array, int n,out double jh,out double fjg)double s = 1, g =
11、0;for (int i = 0; i =max)max=xi;a = i / 4;b = i % 4;Console.WriteLine(“主对角线上元素最大值在(“ + a + “,“ + b + “),为“ + max); Console.ReadLine();5链表的每个结点定义如下:Node int data; Node next;/这只是示意,不是 C#代码创建一个 Node 类,一个 MyLinkedList 类,进行如下操作。 初始为 10 个结点的单向链表,结点数据用随机函数产生。输出该链表。 定义在首尾增加数据值的方法。 定义一个方法,接受任意数量参数,构造链表。 在如下
12、main 方法中测试该链表,创建一个链表,分别在首尾增加一个数据值为 100 的结点,输出链表。public static void Main(string args)MyLinkedList l = new MyLinkedList();/默认生成带10个元素的链表Console.WriteLine(l);l.addToHead(100);l.addToTail(100);Console.WriteLine(l);l = new MyLinkedList(1, 2, 3, 4);/传入任意数量整数,构造链表Console.WriteLine(l);lass MyLinkedList提供部分代码(不必一定按这样的方式设计):public cprivate Node head;public MyLinkedList()Random rd = new Random();head = new Node(rd.Next(100);Node pre = head;for (int i = 1; i 10; i+)Node node = new Node(rd.Next(100);pre.Next = node;pre = node;