实验目标: 掌握C#的基本用法 实验人: ZhangSiyang 实验内容: [C#特性演示,C#实现的冒泡排序,矩形每行成员及行内最大值的输出]

目录

C#特性演示

代码

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static int Main(string[] args)
        {
            Program n = new Program();          //写的方法,马马虎虎的,仅作试水

            Console.WriteLine("即将演示数字 A 与 B 的交换");
            n.swap(3, 7);
            Console.ReadLine();
            //清屏

            Console.WriteLine("即将演示 串的输入与输出");
            n.xingminghenianling();
            Console.ReadLine();


            Console.WriteLine("即将演示 用 If 判断成绩");
            n.panduanjige_if();
            Console.ReadLine();


            Console.WriteLine("即将演示 用 Switch 判断成绩");
            n.panduanjige_switch();
            Console.ReadLine();


            Console.WriteLine("即将演示 用 Switch 判断该月天数");
            n.panduantianshu();
            Console.ReadLine();


            Console.WriteLine("即将演示 分段函数");
            n.fenduanhanshu();
            Console.ReadLine();
            Console.Write("演示完成,按任意键以退出");
            Console.Read();

            return 0;
        }
        public int swap(int a, int b)
        {

            Console.WriteLine("A IS: {0}, B IS: {1}.", a, b);
            a = a * b;          //也可以交换,就是这两个数不能太大,b还不能为0
            b = a / b;
            a = a / b;
            Console.WriteLine("A IS: {0}, B IS: {1}.", a, b);
            return 0;
        }
        public int xingminghenianling()
        {
            Console.Write("Please Input Your Name:");
            string xingming = Console.ReadLine();
            Console.Write("Please Input Your Eage:");
            int nianling = int.Parse(Console.ReadLine());
            Console.WriteLine("Your Name Is:{0},Eage Is:{1}", xingming, nianling);
            return 0;
        }
        public int fengefu()
        {
            Console.WriteLine("------------------------");  //被弃用的分隔符
            return 0;
        }
        public int panduanjige_if()
        {
            Console.Write("Please Input Your Score:");
            double get = double.Parse(Console.ReadLine());
            int score = -1;
            if (get >= 0 && get <= 100)
            {
                score = (int)get / 10;
                if (score > 8)
                    Console.WriteLine("Nice!!!");
                else if (score > 5)
                    Console.WriteLine("Good!!");
                else
                    Console.WriteLine("It's Time To Learn.");
            }
            else
                Console.WriteLine("大哥你这不按套路出牌啊!");
            return score;
        }
        public int panduanjige_switch()
        {
            Console.Write("Please Input Your Score:");
            double get = double.Parse(Console.ReadLine());
            int score = -1;
            string flag;
            if (get >= 0 && get <= 100)
            {
                score = (int)get / 10;
                switch (score)
                {
                    case 10:
                    case 9: flag = "Nice!!!"; break;
                    case 7:
                    case 8:
                    case 6: flag = "Good!!"; break;
                    default: flag = "It's Time To Learn."; break;
                }
            }
            else
                flag = "大哥你这不按套路出牌啊!";
            Console.WriteLine(flag);
            return score;
        }
        public int panduantianshu()
        {
            int mouth;
            Console.WriteLine("What time is it today?");
            mouth = int.Parse(Console.ReadLine());
            string flag;
            switch (mouth)
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12: flag = "31"; break;
                case 4:
                case 6:
                case 9:
                case 11: flag = "30"; break;
                case 2: flag = "28 OR 29"; break;
                default: flag = "你进入了异世界"; break;
            }
            Console.WriteLine(flag);
            if (flag == "28 OR 29")
                flag = "28";
            if (flag == "你进入了异世界")
                flag = "0";
            return int.Parse(flag);
        }
        public int fenduanhanshu()
        {
            double x;
            int y;
            Console.Write("Please Input X:");
            x = (int)double.Parse(Console.ReadLine());
            if (x > 0)
                y = 1;
            else if (x == 0)
                y = 0;
            else
                y = -1;
            Console.WriteLine("{0}", y);
            return y;
        }
    }
}

运行

我们来做好朋友吧 这种行为就不好了

编写思路与难题

这道题是我写的第一个 C# 程序,再往前只有课上的纸上代码,不算是写程序。现在回头来但的话大概有一下几个特点:

分模块书写,制成方法体[体?]

一开始我也是打算写成一大坨代码的,写着写着感觉 C# 比 C 啰嗦多了,十四寸的本上翻页翻得我直着急。所以……当然是写成函数方法啦!还能以后再用,虽然不大可能……

更多的考虑到了意外情况

其实之前我在编写 C 程序时也有这方面的考虑,但是写十行代码其中有九行都是数据检查未免太让人感觉尴尬了,代码也不够高效。但是最近又在想,现在电脑性能这么好,简单的程序错误却可能导致用户流失,我还是把心中所想放到代码之中吧。心中没有想到的当然也就没有进行检查了 > 想不到检查方法的也没有写,检查方法忒复杂的也没有写……

编写时遇到的的困难

  1. 写成的方法不知道怎么被 Main 调用; 这个在 Google 之后解决了,但也只是照猫画虎
  2. 该怎么输入与存储成绩才好?一开始是用 int score = int.Parse(Console.ReadLine()) / 10 的,可那样无法解决带小数成绩的录入以及对数据合法性的判断。 为了带小数成绩我写出了 int score = (int)double.Parse(Console.ReadLine()) 这样的方法,但这样还是无法解决数据合法性[ 102 居然是合法数据,你信吗?],综合考虑之后,下面的解决方案诞生: CS public int panduanjige_switch() { Console.Write("Please Input Your Score:"); double get = double.Parse(Console.ReadLine()); int score = -1; string flag; if (get >= 0 && get <= 100) { score = (int)get / 10; switch (score) { case 10: case 9: flag = "Nice!!!"; break; case 7: case 8: case 6: flag = "Good!!"; break; default: flag = "It's Time To Learn."; break; } } else flag = "大哥你这不按套路出牌啊!"; Console.WriteLine(flag); return score; }
  3. 对!还有问题。我想把某一个月份含有的天数返回给主调函数,当遇上 2 月时,怎么办?!!!

    Console.WriteLine(flag);
    if (flag == "28 OR 29")
    	flag = "28";
    if (flag == "你进入了异世界")
    	flag = "0";
    return int.Parse(flag);
    

    收获

  4. Program n = new Program();

  5. Console.Clear

  6. 有时候,把程序写的复杂点也不是什么什么坏事儿

C#-冒泡排序

代码

using System;

namespace Bubble_Sort
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rd = new Random();   //为随机赋值做准备[这个过程不知道叫什么]

            int[] box = new int[27];
            for (int i = 0; i < 27; i++)
            {
                box[i] = rd.Next(1000); //随机赋值
            }
            int s;                      //交换用的空盒子

            for (int i = 0; i < 27; i++)
            {
                Console.Write("{0:D3}  ", box[i]);  //以宽度为三的格式输出
                if ((i + 1) % 5 == 0)               //逢五换行
                    Console.Write("\n");
            }

            Console.WriteLine("\n\n以上是初始数组,下面是排序之后的数组\n");

            for (int i=0;i<26;i++)      //冒泡排序
            {
                for(int j=i+1;j<27;j++)
                {
                    if(box[j]>box[i])
                    {
                        s = box[i];         //数值交换
                        box[i] = box[j];    //数值交换
                        box[j] = s;         //数值交换
                    }
                }
            }

            for (int i = 0; i < 27; i++)    //交换完成,输出
            {
                Console.Write("{0:D3}  ", box[i]);
                if ((i+1) % 5 == 0)
                    Console.Write("\n");
            }

            Console.Write("\n按任意键以退出");
            Console.ReadLine();
        }
    }
}

运行

Bubble_Sort

编写思路与难题

写这道题的时候已经熟练了不少了,因此也没太多值得说的 1. Random.Next() 返回的值随机性太差了,只能用来做范例 2. 换行这样做:

if ((i + 1) % 5 == 0)               //逢五换行
	Console.Write("\n");
大概没有更好的方法了吧
  1. 格式化表示法变了,有点不适应, Google 解决
  2. 也许可以自制一个退出提示,为了命令提示符下运行的用户

    Console.Write("\n按任意键以退出");
    	Console.ReadLine();
    

    收获

  3. for 循环的效率比 foreach 高一点点

  4. Console.Write("{0:D3} ", box[i]);

  5. Console.Write("{0:000.000} ", box[i]);

多维数组相关操作

代码

using System;

namespace ShuchuJuzhenZuidazhi
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rd = new Random();

            double[,] box = new double[8,8];
            int add;
            for(int i=0;i<8;i++)
            {
                for (int n = 0; n < 8; n++)
                    box[i,n] = rd.Next(1000) / 7.0;
            }

            for (int i = 0; i < 8; i++)
            {
                add = 0;
                for (int n = 0; n < 8; n++)
                {
                    Console.Write("{0:000.000}  \t", box[i, n]);
                    if (box[i, n] > box[i, add])
                        add = n;
                }
                Console.WriteLine("\t\t### MAX IS {0:.000}", box[i, add]);
            }
        }
    }
}

运行

数组相关

编写思路与难题

  1. 定义多重数组,并为之赋值
  2. 每行成员以及行内最大值的输出 困难:越到最后越是没有什么话说,这里主要遇到的是数组的声明及使用。嘛,也很简单 box[i, n]

    收获

  3. 多多思考程序的界面设计,不要看起来一片模糊

  4. Console.Write("{0:000.000} \t", box[i, n]);

  5. Console.WriteLine("\t\t### MAX IS {0:.000}", box[i, add]);