给豆浆出的c#基础题目
给豆浆出的c#基础题目
一、分析下面的程序会输出什么
namespace helloCs {
     using System;
     public class HelloCSharp {
         private void SayHello (string name) {
              Console.WriteLine ("Hello {0}", name);
         }
         public static void 
              HelloCSharp theAppObject = new HelloCSharp();
              if (args.Length > 0) {
                   theAppObject.SayHello(args[0]);
              } else {
                   theAppObject.SayHello ("You");
              }
              int val = 7 - 5 + 2;
              for (int i=0,j=0; ((i < 10) && (j < 50)); i++, j+= 5)
        Console.WriteLine (val.ToString ());
              Console.ReadLine ();        }
     };
}
本示例考察对C#基本语句语法的使用熟练情况,
考察知识点:
1.       函数调用
2.       for语句的使用
3.       及数组参数
二、把一个字符串随机排列后输出
下面是我给你写的一段示例程序,演示了随机输出一个字符串里的某个字符,你修改一下把字符串hello随机排列后输出,这里要动一下脑筋写算法了哦。
using System;
namespace ConsoleApplication1
{
     public class RandomOrder
     {
         static string s = "hello";
         public RandomOrder()
         {
              
         }
         public static void 
         {
              System.Random rand = new Random();   //声明一个Random对象
              int i = rand.Next(0,s.Length);       //产生0到s.Length的一个随机数
              Console.WriteLine(s[i]);             //随机输出s里的某一个字符
              Console.ReadLine();
         }
     }
}
我见你很喜欢用字符串当数组玩儿,出这个题目,让你熟悉一下数组的简单处理。
考察知识点:
1.       字符串的简单操作
2.       随机数的生成
3.       静态方法只能访问静态域
4.       字符数组的遍历和排序
三、两维矩形数组练习
我给你写了个方法PrintArray(),它接受一个两维数组的参数,你想法把参数里的元素都输出,你就假设传入的数组是int [4,2]吧。
using System;
namespace ConsoleApplication1
{
     public class ArrayClass
     {
         static void PrintArray(int[,] arr) 
         {
              //在这里想法把传进来的数组的员都都输出去
         }
         public static void Main() 
         {
              PrintArray(new int[,]{{1,2} , {3,4} , {5,6} , {7,8}});
         }
     }
}
你不是不太了解两维矩形数组和两维锯齿数组吗?其实int [4,2]这样声明的就是矩形数组,相当于阵列吧,你可以把它想象成一个平面,横竖都是整齐的。而int[4][2]就属于锯齿数组,你把它想象成是一个一维数组,而这个一维数组的每个元素又是一个数组,而且每个元素数组的长度可以不同。
考察知识点:
1. 矩形数组
2. 锯齿数组
3. 两维数组的遍历
四、方法版本控制
你分析一下下面这段程序每条输出语句会输出什么,写一下你的分析原理。
using System;
namespace ConsoleApplication1
{
     public interface IWawa
     {
         string Meth1();
         string Meth2();
         string Meth3();
     }
     public class MyBase:IWawa 
     {
         public virtual string Meth1() 
         {
              return "MyBase-Meth1";
         }
         public virtual string Meth2() 
         {
              return "MyBase-Meth2";
         }
         public virtual string Meth3() 
         {
              return "MyBase-Meth3";
         }
         }
     class MyDerived : MyBase 
     {
         public override string Meth1() 
         {
              return "MyDerived-Meth1";
         }
         public new string Meth2() 
         {
              return "MyDerived-Meth2";
         }
         public string Meth3() 
         {
              return "MyDerived-Meth3";
         }
         public static void 
         {
              MyDerived mD = new MyDerived();
              MyBase mB = (MyBase) mD;
              IWawa wa = new MyDerived();
              System.Console.WriteLine(mB.Meth1());
              System.Console.WriteLine(mB.Meth2());
              System.Console.WriteLine(mB.Meth3());
              System.Console.WriteLine(wa.Meth1());
              System.Console.WriteLine(wa.Meth2());
              System.Console.WriteLine(wa.Meth3());
              System.Console.WriteLine(mD.Meth1());
              System.Console.WriteLine(mD.Meth2());
              System.Console.WriteLine(mD.Meth3());
              System.Console.ReadLine();
         }
     }
}
这个示例演示了面向对象的多态,不过这演示的都是运行时多态,运行时多态主要包括重写和隐藏。
考察知识点:
1. 接口
2. 基类
3. 重写
4. 隐藏
5. 用基类引用子类
6. 用接口引用实现类
五、委托的简单使用
本示例是我做的给你演示委托的,我做了一些详细的注释,帮助你理解,上面的题目是考察你的,都没有做注释哦。
委托确实不是很好理解,但是想通了也就好说了,而且使用的时候都是按一个常规的套路走的,我不给你演示事件多播,回调等高级示例,就演示一个简单的吧。
要想使用委托,简单来说有以下几步,记住就行了,死的。
1、 定义
2、 声明,创建实例
3、 调用
你就把委托想象成函数的指针,这种说法并不科学,你可以把委托想象成是定义了一组指定返回类型,参数个数及类型的一个类就行,因为委托在编译后就是生成了一个类来包装这些东西。看我下面的例子
using System;
namespace ConsoleApplication1
{
     // 声明一个名为SimpleDelegate的代表元,该代表元有一个
     // string类型的参数。C#编译器编译时会产生一个新类,该
     // 类继承自System.Delegate,类名为SimpleDelegate
     public delegate void SimpleDelegate(string name);
     public class Sample 
     {
         // 定义与SimpleDelegate有相同参数类型的方法Hello()
         public static void Hello(string name)
         {
              Console.WriteLine("您好,{0}!",name);
         }
         // 定义与SimpleDelegate有相同参数类型的方法GoodBye()
         public static void GoodBye(string name)
         {
              Console.WriteLine("再见,{0}!",name);
         }
         public static void Main() 
         {
              // 创建一个SimpleDelegate实例s1
              SimpleDelegate s1=new SimpleDelegate(Hello);
              // 立即调用s1
              s1("蛙蛙王子");
              // 创建另一个SimpleDelegate实例s2
              SimpleDelegate s2=new SimpleDelegate(GoodBye);
              // 立即调用s2
              s2("大碗豆浆");
              // 将s1和s2组合成一个新的代表元s3
              SimpleDelegate s3=s1+s2;
              // 立即调用s3
              s3("千山一鸟");
              // 从组合的代表元s3中删除s1
              SimpleDelegate s4=s3-s1;
              // 立即调用s4
              s4("水中的太阳");
              Console.ReadLine();
         }
     }
}
看出来了吧,定义委托的时候就要指定方法的返回值和方法的参数,可以声明到类外面,也可以声明到类里面,不同的情况下可以选择声明委托的场合,咱的例子里是声明了一个公有的外部委托。然后实例委托的时候可以把符合条件的方法作为委托构造函数的参数(这种说法不准确哦),可以是静态方法,也可以是实例的方法,都行。最后呢,调用委托就相当于调用委托所指向的方法了,一个委托呢,可以指向好几个方法,并且还可以运算呢,这你都看到了吧,委托的基础教程差不多就是这样的。
好了,你先做做这几个题目吧,不懂的给我发邮件。我给你出的几个题目虽然覆盖面不是很广,但都很适合学习,你尽量从中多挖掘一些知识点儿,不懂的地方,做成列表发给我。我还有个建议,就是你去天极开通你的博客,把每天学到的东西写到里面,然后不懂的地方就在博客上提问,有问题了把描述发到你博客上,然后给我把链接发过来,我就去给你看看,这样把学习过程持久化下来,以后方便复习,我给你用ASP写的那个知识管理系统先别用了。
                    
                
                
            
        
浙公网安备 33010602011771号