one
1.用戶輸入一個整數,用if...else判斷是偶數還是奇數 Console.WriteLine("請輸入一個整數:"); int a = Convert.ToInt32(Console.ReadLine()); if (a / 2 == 0) { Console.WriteLine("偶數"); } else { Console.WriteLine("奇數"); } 2.輸入一個字母,判斷是大寫還是小寫字母 Console.WriteLine("請輸入一個字母:"); char ch = char.Parse(Console.ReadLine()); if (ch > 'a' && ch < 'z') { Console.WriteLine("小寫"); } else Console.WriteLine("大寫"); 3.求1~99所有奇數的和,用while語句 int i = 0, sum = 0; while (i<100) { sum += i; i++; } Console.WriteLine(sum); 4.用戶輸入三個整數,將最大數和最小數輸出 Console.WriteLine("請輸入第1個數:"); int a = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("請輸入第2個數:"); int b = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("請輸入第3個數:"); int c = Convert.ToInt32(Console.ReadLine()); int max = Math.Max(Math.Max(a, b), c); int min = Math.Min(Math.Min(a, b), c); Console.WriteLine("max={0},min={1}",max,min); 5.輸入三個數,按從小到大的順序排列 比較特殊的做法: int[] num = new int[3]; Console.WriteLine("請輸入第1個數"); num[0] = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("請輸入第2個數"); num[1] = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("請輸入第3個數"); num[2]= Convert.ToInt32(Console.ReadLine()); //int min = num[0] < num[1] ? (num[0] < num[2] ? num[0] : num[2]) : (num[1] < num[2] ? num[1] : num[2]); int min =Math.Min(Math.Min(num[0],num[1]),num[2]); int max = Math.Max(Math.Max(num[0],num[1]),num[2]); for (int i = 0; i < 3; i++) { if (num[i]<max&&num[i]>min) { Console.WriteLine("{0},{1},{2}",min,num[i],max); } } 一般的做法: Console.WriteLine("請輸入第1個數:"); int a = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("請輸入第2個數:"); int b = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("請輸入第3個數:"); int c = Convert.ToInt32(Console.ReadLine()); int temp; if (a > b) { temp = a; a = b; b = temp; } if (a > c) { temp = a; a = c; c = temp; } if (b > c) { temp = b; b = c; c = temp; } Console.WriteLine("{0},{1},{2}",a,b,c); 6.將1~200末位數為5的整數求和 int sum = 0; for (int i = 1; i <= 200; i++) { if (i % 5==0) { sum += i; } } Console.WriteLine(sum); 7.計算2.5的3次方 方法一: double sum =1; for (int i = 0; i < 3; i++) { sum *= 2.5; } Console.WriteLine(sum); 方法二: Console.WriteLine(Math.Pow(2.5, 3)); 8.將24的所有因子求積 int sum = 0; for (int i = 1; i <= 24; i++) { if (24%i==0) { sum += i; } } Console.WriteLine(sum); 9.輸入一個年份看是否為閏年 int i = Convert.ToInt32(Console.ReadLine()); if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) { Console.WriteLine("閏年"); } else Console.WriteLine("平年"); 10.輸入一段字符判斷是大寫,還是小寫。若是小寫,轉換為大寫,若是大寫,轉換為小寫 string a = Convert.ToString(Console.ReadLine()); char b = char.Parse(a); if (b >= 'a' && b <= 'z') { Console.WriteLine(a.ToUpper()); } else Console.WriteLine(a.ToLower()); 11.判斷一個數是否為素數(質數) int b = 1; int a = Convert.ToInt32(Console.ReadLine()); for (int i = 2; i <= a/2; i++) { if (a % i == 0) { b = 0; break; } } if (b == 0) { Console.WriteLine("不是素數"); } else Console.WriteLine("是素數"); 12.一個名為Circle類包含一個字段(半徑),兩個方法,一個方法求面積,另一個方法求周長,並在Main函數中傳遞相應的數據,來顯示他的周長和面積 class Circle { public double sq(double r) { return Math.PI * r * r; } public double zc(double r) { return 2 * Math.PI * r; } } class Program { static void Main(string[] args) { Circle cir = new Circle(); Console.WriteLine("sq={0},zc={1}",cir.sq(3),cir.zc(3)); } } 13.設計一個形狀為figure,字段的個數和構造函數的設計自己考慮,另外設計一個虛方法 設計一個圓的類Circle,繼承figure類,並重寫求面積的方法 設計完成後在Main函數中定義square和circle的實例,並調用求面積的方法,輸出他們的面積 class Figure { public virtual double sq(int a,int b) { return a + b; } public virtual double cq(double r) { return r; } } class Circle:Figure { public override double cq(double r) { return Math.PI * r * r; } } class Square:Figure { public override double sq(int a, int b) { return a * b; } } class Program { static void Main(string[] args) { Circle cir = new Circle(); Console.WriteLine("cq={0}",cir.cq(3)); Square sq = new Square(); Console.WriteLine("sq={0}", sq.sq(1,2)); } } 14.設計一個類,包含兩個字段(double類型)和一個構造函數,初始化這兩個字段,另外還包含一個虛方法(輸出這兩個字段的和) 構造另外一個類,此類繼承設計的那個類要求重寫虛方法(輸出這兩個數的積) 在Main函數中定義上面類的實例,傳入適當的參數,使得他們在屏幕上顯示。 class FatherClass { public double a; public double b; public FatherClass() { this.a = a; this.b = b; } public virtual double Sum(double a,double b) { return a + b; } } class SonClass:FatherClass { //public SonClass() : base() { }構造函數 public override double Sum(double a, double b) { return a * b; } } class Program { static void Main(string[] args) { FatherClass fs = new FatherClass(); SonClass ss = new SonClass(); Console.WriteLine(ss.Sum(2.2,3.3)); } }
two
1. 輸入一個十進制的數,輸出它的十六進制數。 Console.WriteLine("請輸入一個十進制的數:"); int i = int.Parse(Console.ReadLine()); Console.WriteLine("它的十六進制數是:{0:x}", i); 2. 輸入一個英文小寫字母,將它轉換成大寫字母。 //第一種方法: Console.WriteLine("請輸入一個英文字母:"); char a = Convert.ToChar(Console.ReadLine()); if (a > 'a' && a < 'Z') { Console.WriteLine(a.ToString()); } else Console.WriteLine(a.ToString().ToUpper()); // 第三種方法:(int類型的轉換) int c = Convert.ToInt32(Console.Read()); char x = (char)c; Console.WriteLine(x.ToString().ToUpper()); //第二種方法(char類型) Console.WriteLine("請輸入一個英文字母:"); char a = Convert.ToChar(Console.Read()); if (a > 65 && a < 90) { Console.WriteLine(a); } else { Console.WriteLine(a.ToString().ToUpper()); } //第四種方法:(string類型) Console.WriteLine("請輸入一個英文小寫字母:"); string a = Convert.ToString(Console.ReadLine()); Console.Write(a.ToUpper()); 3. 輸入三個整數,求三個數的和。 Console.WriteLine("請輸入三個整數:"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int c = int.Parse(Console.ReadLine()); //方法一: int sum = a + b + c; Console.WriteLine("這三個整數的和是:{0}", sum); //方法二: Console.WriteLine("這三個整數的和是:{0}", a + b + c); 4. 輸入一個DOUBLE類型數,輸出它的整數部分。 Console.WriteLine("輸入一個DOUBLE類型數:"); double a = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("{0:#}", a); 5. 輸入兩個數輸出其中最大的一個。(使用三目運算符)。 Console.WriteLine("請輸入兩個數:"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int max; max = a > b ? a : b; Console.WriteLine("max={0}", max); 6. 求1+2+3+……+10的和。 int a; int sum = 0; for (a = 1; a <= 10; sum += a++) ; Console.WriteLine("sum={0}", sum); 7. 輸入一個圓的直徑,求它的周長和面積。 Console.WriteLine("請輸入一個圓的直徑:"); double d = Convert.ToDouble(Console.ReadLine()); double c = 2 * Math.PI * d / 2; double s = Math.PI * d / 2 * d / 2; Console.WriteLine("周長={0},面積={1}", c, s); 8. 輸入一個數,判斷它是否同時被3和5整除。 Console.WriteLine("請輸入一個數:"); int s = int.Parse(Console.ReadLine()); if (s % 3 == 0 && s % 5 == 0) { Console.WriteLine("{0}能夠同時被3和5整除", s); } else Console.WriteLine("{0}不能夠同時被3和5整除", s); 9. 說出console.write()與console.writeline();console.read()與console.readline();const與readonly ;%與/的區別。 /* console.write()與console.writeline(); * console.writeLine()換行,而console.write()不換行 * console.read()與console.readline(); * console.readline()是讀取輸入的一行的數據,而console.read()是讀取首字母的ASC的值 * const與readonly * const 編譯常量 ,是靜態的 ,不能和static一起用 ;readonly 執行常量 * %與/的區別* * %是取余,/是取整 * / 10. 打印出: NAME SEX ADDRESS SA 16 BEIJING TT 20 WUHAN Console.WriteLine("NAME\tSEX\tADDRESS"); Console.WriteLine("SA\t16\tBEUING"); Console.WriteLine("TT\t20\tWUHAN");
three
第一題 Console.WriteLine("請輸入一個十進制的數:"); int i = int.Parse(Console.ReadLine()); Console.WriteLine("它的十六進制數是:{0:x}", i); 第二題 第一種方法: Console.WriteLine("請輸入一個英文字母:"); char a = Convert.ToChar(Console.ReadLine()); if (a > 'a' && a < 'Z') { Console.WriteLine(a.ToString()); } else Console.WriteLine(a.ToString().ToUpper()); 第三種方法:(int類型的轉換) int c = Convert.ToInt32(Console.Read()); char x = (char)c; Console.WriteLine(x.ToString().ToUpper()); 第二種方法(char類型) Console.WriteLine("請輸入一個英文字母:"); char a = Convert.ToChar(Console.Read()); if (a > 65 && a < 90) { Console.WriteLine(a); } else { Console.WriteLine(a.ToString().ToUpper()); } 第四種方法:(string類型) Console.WriteLine("請輸入一個英文小寫字母:"); string a = Convert.ToString(Console.ReadLine()); Console.Write(a.ToUpper()); 第三題 Console.WriteLine("請輸入三個整數:"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int c = int.Parse(Console.ReadLine()); 方法一: int sum = a + b + c; Console.WriteLine("這三個整數的和是:{0}", sum); 方法二: Console.WriteLine("這三個整數的和是:{0}", a + b + c); 第四題 Console.WriteLine("輸入一個DOUBLE類型數:"); double a = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("{0:#}", a); 第五題 Console.WriteLine("請輸入兩個數:"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int max; max = a > b ? a : b; Console.WriteLine("max={0}", max); 第六題 int a; int sum = 0; for (a = 1; a <= 10; sum += a++) ; Console.WriteLine("sum={0}", sum); 第七題 Console.WriteLine("請輸入一個圓的直徑:"); double d = Convert.ToDouble(Console.ReadLine()); double c = 2 * Math.PI * d / 2; double s = Math.PI * d / 2 * d / 2; Console.WriteLine("周長={0},面積={1}", c, s); 第八題 Console.WriteLine("請輸入一個數:"); int s = int.Parse(Console.ReadLine()); if (s % 3 == 0 && s % 5 == 0) { Console.WriteLine("{0}能夠同時被3和5整除",s); } else Console.WriteLine("{0}不能夠同時被3和5整除",s); string a = "Hello world!"; Console.WriteLine("{0}", a); Console.WriteLine("請輸入數據:"); string data = Convert.ToString(Console.ReadKey());//是將輸入的數據轉換為string類型,然後用ReadLine讀出,並賦值給變量data Console.WriteLine("你輸入的數據是:{0}", data);
four
1. 輸入一個郵箱地址,如果正確則顯示success否則顯示error(正確的郵箱地址包含@)。 Console.WriteLine("請輸入一個郵箱地址:"); bool b =true; while (b) { string str = Convert.ToString(Console.ReadLine()); if (str.Contains("@") && str.Contains(".com")) { Console.WriteLine("Success"); } else Console.WriteLine("error"); } 2. 輸入一個小寫字母,要求輸出它的大寫字母。 Console.Write("請輸入一個小寫字母:"); string a = Convert.ToString(Console.ReadLine()); Console.WriteLine(a.ToUpper()); //字符串大小寫相互轉換 //String類型 while (true) { string str = Convert.ToString(Console.ReadLine()); char ch = char.Parse(str); if (ch >= 'a' && ch <= 'z') { Console.WriteLine(str.ToUpper()); } else Console.WriteLine(str.ToLower()); } ============================================================================================ //Char類型 while (true) { char ch = char.Parse(Console.ReadLine()); //if (ch >= 'a' && ch <= 'z') if (ch >= 97 && ch <= 122) { Console.WriteLine((char)(ch - 32)); } else Console.WriteLine((char)(ch + 32)); } 3. 輸入一個5位數整數,將其倒向輸出。(例如:輸入12345,輸出 54321). while (true) { Console.WriteLine("輸入整數:"); int a = Convert.ToInt32(Console.ReadLine()); int length = a.ToString().Length; int[] b = new int[length]; for (int i = 0; i <= length - 1; i++) { int num = length - i; int num1 = Convert.ToInt32(Math.Pow(10, num)); int num2 = Convert.ToInt32(Math.Pow(10, num - 1)); int cout1 = a % num1; b[i] = cout1 / num2; //Console.Write(b[num - 1]); } ================================================================== 方法一:使用Array類的Reverse()方法 Array.Reverse(b); foreach (int m in b) { Console.Write(m); } Console.Write("\n"); } ================================================================== 方法二:使用堆棧 Stack numbers = new Stack(); //填充堆棧 foreach (int number in b) { numbers.Push(number); //Console.Write(number); } //遍歷堆棧 foreach (int number in numbers) { //Console.Write(number); } //清空堆棧 while (numbers.Count != 0) { int number = (int)numbers.Pop(); Console.Write(number); } Console.Write("\n"); ================================================================== 輸入幾個數按照1,2,3的格式輸出(簡單的說就是每兩個數字之間必須用逗號隔開) string str = Convert.ToString(Console.ReadLine()); string[] arraystr = str.Split(',');//數組的動態存儲,用Realdine讀取。 Array.Reverse(arraystr);//逆著輸出 foreach (string i in arraystr) { Console.Write("{0}\0",i); } 4. 從界面輸入5個數, 然後根據這5個數,輸出指定數目的”*”,如有一個數為5,則輸出”*****”. while (true) { int n = int.Parse(Console.ReadLine()); for (int i = 0; i < n; i++) { Console.Write("*"); } Console.Write("\n"); } 5. 將如下字符串以”.”分割成3個子字符串. ” www.hovertree.com”。 string a = "www.hovertree.com"; string[] str = a.Split('.'); Console.WriteLine("{0}\0{1}\0{2}",str[0],str[1],str[2]); 算法:不管輸入多長如例子a.b.c.e.f.g.h.i 輸出為 a b c d e f g h有點則分割,沒點就輸出 bool b = true; while (b) { Console.Write("輸入數據:"); string a = Convert.ToString(Console.ReadLine()); if (a.Contains(".")) { Console.WriteLine(a.Replace('.',' '));//此處用到了替換,直接將‘.’替換為 ''; } else Console.WriteLine(a); } 6. 1 2 3 5 3 5 7 9 4 5 6 2 4 0 3 0 5 6 2 3 + 2 3 0 8 =? 8 5 3 1 9 7 5 1 int[,] num1 = { { 1, 2, 3, 5 }, { 4, 5, 6, 2 }, { 5, 6, 2, 3 }, { 8, 5, 3, 1 } }; int[,] num2 = { { 3, 5, 7, 9 }, { 4, 0, 3, 0 }, { 2, 3, 0, 8 }, { 9, 7, 5, 1 } }; int[,] sum = new int[4, 4]; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { sum[i, j] = num1[i, j] + num2[i, j]; } } for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { Console.Write("{0}\t", sum[i, j]); } Console.Write("\n"); } } 7. 2 4 9 1 2 1 3 5 * 4 5 =? 1 0 int[,] num1 = new int[2, 3] { { 2, 4, 9 }, { 1, 3, 5 } }; int[,] num2 = new int[3, 2] { { 1, 2 }, { 4, 5 }, { 1, 0 } }; int[,] sum = new int[2, 3]; for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { sum[i, j] = num1[i, j] * num2[j, i]; } } for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { Console.Write("{0}\t", sum[i, j]); } Console.Write("\n"); } } 8 輸入a,b,c的值。求 ax*x+bx+c=0的根。 while (true) { Console.WriteLine("請輸入三個數:"); double a = Convert.ToInt32(Console.ReadLine()); double b = Convert.ToInt32(Console.ReadLine()); double c = Convert.ToInt32(Console.ReadLine()); double d = b * b - 4 * a * c; double x1 = (Math.Sqrt(d) - b) / (2 * a); double x2 = (-b - (Math.Sqrt(d))) / (2 * a); if (b * b - 4 * a * c < 0) { Console.WriteLine("該方程沒有根"); } else if (x1==x2) { Console.WriteLine("該方程的根是:x1=x2={0}", x1); } else Console.WriteLine("該方程的根是:x1={0},x2={1}", x1, x2); } 9 輸入5個數,將其重小到大排列輸出。(使用冒泡) 非冒泡排序 Console.WriteLine("請輸入五個數"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int c = int.Parse(Console.ReadLine()); int d = int.Parse(Console.ReadLine()); int e = int.Parse(Console.ReadLine()); int min1 = a < b ? (a < c ? a : c) : (b < c ? b : c); //比較三個數的大小 int min2 = d < e ? d : e; int min = min1 < min2 ? min1 : min2; Console.WriteLine(min); 冒泡排序: Console.Write("請按1,2,3的格式輸入幾個數字:"); string str = Convert.ToString(Console.ReadLine()); string[] arraystr = str.Split(','); int arraylength = arraystr.Length; int[] num = new int[arraylength]; int count = arraylength - 1; for (int i = 0; i <arraylength; i++) { num[i] = int.Parse(arraystr[i]); } for (int i = 0; i < count; i++) { for (int j = 0; j < count - i; j++) { if (num[j] > num[j + 1]) { int temp; temp = num[j]; num[j] = num[j + 1]; num[j + 1] = temp; } } } foreach (int i in num) { Console.Write("{0}\0",i); } 10 輸入一個數n,求n!。(使用遞歸) bool b = true; while (b) { Console.Write("輸入數:"); int n = Convert.ToInt32(Console.ReadLine()); int sum = 1; for (int i = 1; i <= n; i++) { sum *= i; } Console.WriteLine(sum); } }
five
1. 創建一個Employ類, 實現一個計算全年工資的方法. class Employ { public int Getyearmoney(int monthmoney) { return 12 * monthmoney; } static void Main(string[] args) { Employ employ = new Employ(); Console.Write("請輸入月工資:"); int monthmoney = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("年工資為:{0}",employ.Getyearmoney(monthmoney)); } } 2. 定義一個方法, 既可以求2個整數的積,也可以求3或4個整數的積. public static int Cj(params int[] nums) { int Mul = 1; foreach (int num in nums) { Mul *= num; } return Mul; } static void Main(string[] args) { ///將數字按照字符串的格式輸出 Console.WriteLine("請輸入數據:"); string a = Convert.ToString(Console.ReadLine()); string[] str = a.Split(','); int[] num = new int[str.Length]; for (int i = 0; i < str.Length; i++) { num[i]=int.Parse(str[i]);//將string[]轉換為int[]類型; } int c = 0; foreach (int i in num)//遍歷數組乘積累積 { c = Cj(num); } Console.WriteLine(c); } 3. 編寫一個方法,求兩點(x1,y1)與(x2,y2)之間的距離(用戶自己輸入點的坐標); class Program { public int Mul(int x1, int y1, int x2, int y2) { return Convert.ToInt32(Math.Sqrt(Convert.ToDouble((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)))); } static void Main(string[] args) { Program pr = new Program(); Console.Write("第一個點的橫坐標:"); int x1 =Convert.ToInt32(Console.ReadLine()); Console.Write("第一個點的縱坐標:"); int y1 =Convert.ToInt32(Console.ReadLine()); Console.Write("第二個點的橫坐標:"); int x2 =Convert.ToInt32(Console.ReadLine()); Console.Write("第二個點的縱坐標:"); int y2 =Convert.ToInt32(Console.ReadLine()); Console.WriteLine("這兩個點之間的距離是:{0}",pr.Mul(x1, y1, x2, y2)); } } class Program { /// <summary> /// 求兩點間的距離 /// </summary> /// <param name="point"></param> /// <returns></returns> public int Fartwopoint(int[,] point) { Console.Write("第一個點的橫坐標:"); int x1 = int.Parse(Console.ReadLine()); Console.Write("第一個點的縱坐標:"); int y1 = int.Parse(Console.ReadLine()); Console.Write("第二個點的橫坐標:"); int x2 = int.Parse(Console.ReadLine()); Console.Write("第二個點的縱坐標:"); int y2 = int.Parse(Console.ReadLine()); int[,] a = new int[2, 2] { { x1, y1 }, { x2, y2 } }; double d = Convert.ToDouble((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); int c = Convert.ToInt32(Math.Sqrt(d)); return c; } static void Main(string[] args) { Program pr = new Program(); int[,] point = new int[2, 2]; Console.WriteLine(pr.Fartwopoint(point)); } } 方法二: class Program { public int Mul(int x1, int y1, int x2, int y2) { return Convert.ToInt32(Math.Sqrt(Convert.ToDouble((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)))); } static void Main(string[] args) { Program pr = new Program(); Console.Write("第一個點的橫坐標:"); int x1 =Convert.ToInt32(Console.ReadLine()); Console.Write("第一個點的縱坐標:"); int y1 =Convert.ToInt32(Console.ReadLine()); Console.Write("第二個點的橫坐標:"); int x2 =Convert.ToInt32(Console.ReadLine()); Console.Write("第二個點的縱坐標:"); int y2 =Convert.ToInt32(Console.ReadLine()); Console.WriteLine("這兩個點之間的距離是:{0}",pr.Mul(x1, y1, x2, y2)); } } ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 方法三: class Point { private int x1; private int y1; private int x2; private int y2; public int Jl(int x1,int y1,int x2,int y2) { int z = Convert.ToInt32(Math.Sqrt(Convert.ToInt32((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)))); return z; } static void Main(string[] args) { Point poi = new Point(); Console.WriteLine(poi.Jl(poi.x1,poi.x2,poi.y1,poi.y2)); } } 4. 創建一個Student類, 定義5個字段和2個方法,上述類裡, 定義兩個同名方法GetAge, 一個返回年齡,一個根據傳入的出生年月,返回年齡。 class Student { private int id; private int age; private string name; private string sex; private DateTime birthday; public int GetAge(int age) { return age; } public int GetAge(DateTime birthday) { return DateTime.Now.Year - birthday.Year + 1; } static void Main(string[] args) { Console.WriteLine("請輸入出生日期:"); string stubirthday = Convert.ToString(Console.ReadLine()); Student stu = new Student(); stu.birthday = Convert.ToDateTime(stubirthday); Console.WriteLine("年齡:{0}",stu.GetAge(stu.birthday)); } } 5. 編寫一個方法,輸入一個整數,然後把整數一反序返回(比如輸入8976,返回6798); 8976 = 8 x 1000 +9 x 100 +7 x 10 +6 x 1; 6798 = 6 x 1000 +7 x 100 +9 x10 +8 x 1; 1000 = Math.Pow (10, a.Length); a-length --; 6 = a %10 ,7 = a /1000 - a/100,9 = a/100 -a/10 6. 定義一個類,完成一個方法,以數字表示的金額轉換為以中文表示的金額, 如下24000,098.23貳千肆佰萬零玖拾捌元貳角八分,1908.20 壹千玖佰零捌元貳角 7. static ,viod 是什麼意思,get與set,ref與out,public與private的區別是什麼。 Static靜態類 Void 無返回值 get 可讀,set 可寫 ref開始必須賦值 out開始不須直接賦值 public 公共可訪問的類 private私有的僅在內部類中使用
six
1. 封裝一個N!,當輸入一個數時,輸出它的階層。 sealed class Data//密封類 { public int N(int a) { int sum =1; for(int i =1;i<=a;i++) { sum *= i; } return sum; } } private void button1_Click(object sender, EventArgs e) { Data dt = new Data(); MessageBox.Show(dt.N(3).ToString()); } 2. 定義一個索引,訪問其相關的內容。 ==定義Student 和Students 兩個類 public class Student { public Student(int id, string name, int age, string sex) { this.id = id; this.name = name; this.age = age; this.sex = sex; } private int id; public int Id { get { return id; } set { id = value; } } private string name; public string Name { get { return name; } set { name = value; } } private int age; public int Age { get { return age; } set { age = value; } } private string sex; public string Sex { get { return sex; } set { sex = value; } } } public class Students { Student[] stu = new Student[3]; public Students() { Student stu1 = new Student(1,"a",23,"men"); Student stu2 = new Student (2,"b",23,"women"); Student stu3 =new Student (3,"c",21,"men"); stu[0]=stu1; stu[1]=stu2; stu[2]= stu3; } public Student this[int index] { get { return stu[index]; } set { stu[index] =value; } } } private void button1_Click(object sender, EventArgs e) { Students stu = new Students(); MessageBox.Show(stu[0].Name+" "+stu[1].Sex+" "+stu[2].Id); } 3. 定義一個抽象類,並在子類中實現抽象的方法. //定義抽象類Abtr abstract class Abtr { public abstract int Num(int a,int b,int c);// 抽象類的抽象方法 public virtual int Max(int a,int b,int c) //抽象類的虛方法 { int max1 = Math.Max(a, b); int max = Math.Max(max1, c); return max; } } //子類是抽象類 abstract class CAbtr : Abtr { public abstract override int Num(int a, int b, int c); } //子類不是抽象類時候 class CAbtr : Abtr { public override int Num(int a, int b, int c) { return Convert.ToInt32(Math.Sqrt(Convert.ToDouble(a * b * c))); } public override int Max(int a, int b, int c) { int max1 = Math.Max(a, b); int max = Math.Max(max1, c); return 100*max; } } 4. 有三角形,矩形,正方形,梯形,圓,橢圓,分別求出各自的周長,面積(abstract). abstract class Refent { public abstract int Sanjiaozc(int d,int h,int a,int b); public abstract int Sanjiaomj(int d, int h,int a,int b); public abstract int Juxizc(int l, int h); public abstract int Juximj(int l, int h); public abstract int Zhengzc(int a); public abstract int Zhengmj(int a); public abstract int Tixingzc(int a, int b , int h,int c,int d); public abstract int Tixingmj(int a, int b, int h,int c,int d); public abstract int Cirzc(int r); public abstract int Cirmj(int r); } class CRent:Refent { int zc; int mj; public override int Sanjiaozc(int d,int h,int a,int b) { zc = d+ a + b; return zc; } public override int Sanjiaomj(int d, int h, int a, int b) { mj = d * h / 2; return mj; } public override int Juxizc(int l, int h) { zc = 2*(l + h); return zc; } public override int Juximj(int l, int h) { mj = 2 * l * h; return mj; } public override int Zhengzc(int a) { zc = 4 * a; return zc; } public override int Zhengmj(int a) { mj = a * a; return mj; } public override int Tixingzc(int a, int b, int h, int c, int d) { zc = a + b +c +d; return mj; } public override int Tixingmj(int a, int b, int h, int c, int d) { mj = (a + b) * h / 2; return mj; } public override int Cirmj(int r) { mj = Convert.ToInt32(Math.PI * r * r); return mj; } public override int Cirzc(int r) { zc = Convert.ToInt32(2 * Math.PI * r); return zc; } } 5. 分析:為什麼String類不能被繼承. string類是密封類 6. 定義一個接口,接口必須含有一個方法, 用一個實現類去實現他. interface Inte { int GetAge(string date); } public class Employee:Inte { public int GetAge(string date) { DateTime dt = DateTime.Parse(date); int age =dt.Year - DateTime.Now.Year; return age; } } 7. 說明接口和抽象類的區別. 1. 接口不能有構造函數,抽象類有構造函數 2. 接口允許方法的實現,抽象方法是不能被實現的 3. 接口裡面不須override來重寫,抽象類一定要override重寫 8. 如果從TextBox輸入一個參數, 就求圓的周長, 兩個參數就求矩形的周長,三個參數就求三角形的周長. ***對於params的用法還不是很了解?ArrayList, 還有HashTable class ZC { public int C(params int[] a) { int sum = 0; foreach (int i in a) { if (a.Length == 1) { sum += Convert.ToInt32(2 * Math.PI * i); } if (a.Length == 2) { sum += 2* i; } if (a.Length==3) { sum += i; } } return sum; } } WinFrom中的代碼: private void button1_Click(object sender, EventArgs e) { ZC zc = new ZC(); string s = textBox1.Text.Trim(); string[] str = s.Split(','); int[] a = new int[str.Length]; for (int i = 0; i < str.Length; i++) { a[i] = int.Parse(str[i]); } MessageBox.Show(zc.C(a).ToString()); } 9. 說明重載與重寫的區別。 1.重載函數之間的參數類型或個數是不一樣的.重載方法要求在同一個類中. (解釋:例如原來有一個構造函數 public Student(){}, 現在有重載了這個構造函數 public Student(int age ,int id,string name) { this.age = age ; this.name = name ; this.id = id; }) 2.重寫要求返回類型,函數名,參數都是一樣的,重寫的方法在不同類中. 10. 完成一個小型的計算器,不熟悉的功能可以不完成 11. 12. Public private internal protected的使用范圍。 大到小:Public protected internal private Public 所有類,protected 子父類訪問internal當前項目,private當前類
seven
1.定義一個委托,委托一個去借東西的方法Send,如果借到了返回GOOD!,否則NO! class Borrow { public delegate string Send(); public string Br(Send send) { return send(); } public string OK() { return "GOOD!"; } public string NO() { return "NO!"; } } 調用: Borrow b = new Borrow(); MessageBox.Show(b.Br(b.OK)); 2.定義一個事件,當我激發它時,返回一個結果給我. class Event1 { public delegate string Eve(); public event Eve eve; //事件 public string Trigger() { if (eve != null) return eve(); else return ""; } public string A1() { return "A1"; } public string A2() { return "A2"; } } 調用: Event1 event1 = new Event1(); event1.eve += event1.A1; MessageBox.Show(event1.Trigger()); 3.定義一個拿100元錢去買東西的委托,書的價格是58元,本的價格是20元,返回剩余的錢. class Event1 { public delegate int Eve(int sum); public event Eve eve; //事件 public int Trigger(int sum) { if (eve != null) return eve(sum); else return 0; } public int Book(int sum) { return sum-=58; } public int Text(int sum) { return sum-=20; } } 調用: Event1 event1 = new Event1(); int sum = 100; event1.eve += event1.Book; sum = event1.Trigger(sum); event1.eve += event1.Text; sum = event1.Trigger(sum); MessageBox.Show(sum.ToString()); 4.說出委托與事件的區別. 事件屬於委托,委托不屬於事件.事件是委托的一個變量.
eight
private void button1_Click(object sender, EventArgs e) { MessageBox.Show(Max(1, 4, 6, 8, 3).ToString()); } public int Max(params int[] array) { int max = Int32.MinValue; foreach (int i in array) { max = Math.Max(i, max); } return max; } private void button2_Click(object sender, EventArgs e) { string str = ""; for (int i = 0; i < 4; i++) { for (int j = 0; j < 2*i+1; j++) { str += "* "; } str += "\r\n"; } for (int i = 0; i < 3; i++) { for (int j = 5; j > 2*i; j--) { str += "* "; } str += "\r\n"; } richTextBox1.Text = str; } private void button3_Click(object sender, EventArgs e) { DateTime date1 = DateTime.Parse("1998-1-1 00:00:00"); DateTime date2 = DateTime.Parse("2009-3-13 00:00:00"); TimeSpan time = date2 - date1; int days = time.Days+1; if (days % 5 == 0) { MessageBox.Show("曬網"); } else { if (days % 5 > 3) { MessageBox.Show("曬網"); } else { MessageBox.Show("打魚"); } } } /// <summary> /// 求200小孩。。。。。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button4_Click(object sender, EventArgs e) { int length = 200; int[] array = new int[length]; for (int i = 0; i < length; i++) { array[i] = i + 1; } string str = null; for (int i = 1; i <= length; i++) { str += i.ToString() + ","; } Out(str, array); } public void Out(string str,int []array) { if (array.Length == 3) { MessageBox.Show(array[1].ToString()); } else { int lit = array.Length % 4; string st = ""; for (int i = lit; i>0; i--) { st += array[array.Length - i].ToString()+","; } for (int i = 1; i <= array.Length; i++) { if (i % 4 == 0) { str=str.Replace(","+array[i - 1].ToString() + ",", ","); } } int length = str.Length; if (st == "") { str = str; } else { str = str.Replace(st, ""); str = st + str; } string[] arraystring = str.Split(','); int[] arrayint = new int[arraystring.Length-1]; for (int i = 0; i <arraystring.Length-1; i++) { arrayint[i] = int.Parse(arraystring[i]); } Out(str, arrayint); } } private void button5_Click(object sender, EventArgs e) { int sum = 0; Random rand = new Random(); for (int i = 0; i < 100; i++) { int x = rand.Next(65, 91); char y = Convert.ToChar(x); if (y == 'A' || y == 'O' || y == 'E' || y == 'I' || y == 'U') { sum++; } } MessageBox.Show(sum.ToString()); } private void button6_Click(object sender, EventArgs e) { string str = "2,"; for (int i = 3; i <= 100; i++) { int j; for ( j = 2; j < i; j++) { if (i % j == 0) { break; } } if (i==j) { str += i.ToString()+","; } } MessageBox.Show(str); } private void button7_Click(object sender, EventArgs e) { int i = 27863654; string str = Convert.ToString(i, 2); string sumstr = str.Replace("0", ""); MessageBox.Show(sumstr.Length.ToString()); } private void button8_Click(object sender, EventArgs e) { string str = ""; for (int i = 100; i < 1000; i++) { int a = i % 10;//個位 int b = (i / 10) % 10;//十位 int c = i / 100;//百位 int sum = a * a * a + b * b * b + c * c * c; if (sum == i) { str += i.ToString() + ","; } } MessageBox.Show(str); } private void button9_Click(object sender, EventArgs e) { int sum = 0; string str = ""; for (int i = 2; i < 1000; i++) { for (int j = 1; j < i; j++) { if (i % j == 0) { sum += j; } } if (sum == i) { str += i.ToString() + ","; } sum = 0; } MessageBox.Show(str); } private void button10_Click(object sender, EventArgs e) { int sum = 0; int length; for (int i = 1; i < 9; i++) { sum += Convert.ToInt32( 200 * Math.Pow(2, i)); } sum += 200; length = 100 + Convert.ToInt32(sum / Math.Pow(2, 9)); MessageBox.Show(length.ToString()); } private void button11_Click(object sender, EventArgs e) { int n = 225; int i = 2; string str = ""; while (n != 1) { while (n % i == 0) { if (n / i !=1) { str += i.ToString()+"*"; } else { str += i.ToString(); } n = n / i; } i++; } MessageBox.Show(str); } private void button12_Click(object sender, EventArgs e) { int max = 20; int min = 5; //最大公約數 string strmax = ""; //for (int i = min; i >0; i--) //{ // if (max % i == 0 && min % i == 0) // { // strmax = i.ToString(); // break; // } //} //zuixiaogongbeishu for (int i = max; i <= max*min; i++) { if (i%max==0 && i%min==0) { strmax += i.ToString() + ","; break; } } MessageBox.Show(strmax); } private void button13_Click(object sender, EventArgs e) { int[,] array = new int[20, 2]; array[0, 0] = 2; array[0, 1] = 1; for (int i = 1; i < 20; i++) { for (int j = 0; j < 2; j++) { if (j == 0) { array[i, j] = array[i - 1, j] + array[i - 1, j + 1]; } else { array[i, j] = array[i - 1, j - 1]; } } } double dmin = 1; for (int i = 0; i < 20; i++) { dmin *= array[i, 1]; } double bsum = 0; for (int i = 0; i < 20; i++) { bsum += (dmin / array[i, 1]) * array[i, 0]; } MessageBox.Show(bsum.ToString()+"/"+dmin.ToString()); //double min=Math.Min(dmin,bsum); //double maxcount = 0; //for (double i = min; i > 0; i--) //{ // if (dmin % i == 0 && bsum % i == 0) // { // maxcount = i; // break; // } //} //string str = (bsum / maxcount).ToString() + "//" + (dmin / maxcount).ToString(); //MessageBox.Show(str); } private void button14_Click(object sender, EventArgs e) { Humen student1 = new Humen(); student1.Age = 10; Humen student2 = new Humen(); student2.Age = student1.Age + 2; }
nine
C#基礎測試題
一. 填空
1. CLR中文意思是 公共語言運行庫
2. MSIL中文意思是 微軟中間語言
3. GC中文意思是 垃圾回收機制
4. Visual studio 2005 中INT 占 4 個字節.
5. 語句結構分為 順序結構,選擇結構,循環 結構.
6. 聲明一個空間用 namespace 關鍵字,聲明一個類用 class 關鍵字,定義抽象類用 abstract 關鍵字,定義密封類使用 sealed 關鍵字, 實例化一個對象使用 new 是 關鍵字.類的默認修飾符是 internal
7. 修飾符有 4 種,分別是 public protected internal private
8. LONG轉換成INT 屬於 顯示 轉換, INT 轉換成STRING 用 方法.STRING 轉換成INT 用 int.Parse() 方法,還可以使用 方法 Convert.ToInt32() .
9. 彈出一個對話框使用 MessageBox.Show();
10. 面向對象的三大特性是 繼承 , 封裝 , 多態
11. 取出字符串中的子字符串用 Substring() 方法,替換用 Replace() 方法,分割用 Split() 方法,查找其中一項的位置用 IndexOf() 方法,查找其中是否包含用 Contains() 方法.
12. 快速排序用 Array.Sort() ,倒序用 Array.Reverse() .
二. 選擇題
1.c#程序的主方法是(B )
A.main() B.Main() C.class() D.namespace()
2.Console類位於下列哪個命名空間( C)
A.System.Text B.System.IO C.System D.System.Collections
3.下列屬於值類型的有(B,C,D)(多選)
A.class B.enum C.struct D.int E.string
4. static const int i = 1 這句代碼是否有誤(A)
A.有 B.無
5.下列哪些方法能對字符串進行操作(ABCD)(多選)
A.Trim() B.IndexOf() C.Insert() D.ToUpper() E.Add()ArrayList HashTable
6.以下說法正確的是(AB)(多選)
A.構造函數名必須和類名相同
B.一個類可以聲明多個構造函數
C.構造函數可以有返回值
D.編譯器可以提供一個默認的帶一個參數的構造函數
7.下列關於抽象類的說法正確的是(ACD)(多選)
A.抽象類能夠擁有非抽象方法
B.抽象類可以被實例化
C.抽象類裡可以聲明屬性
D.抽象類裡可以聲明字段
8. 可用作C#程序用戶標識符的一組標識符是(B)
A. void define +WORD B. a3_b3 _123 YN
C. for -abc Case D. 2a DO sizeof
9. C#的數據類型有(B)
A 值類型和調用類型
B 值類型和引用類型
C 引用類型和關系類型
D 關系類型和調用類型
三. 判斷題
(1).一個子類可以有多個父類。錯
(2).子類可以直接繼承父類中的構造函數。錯
(3).抽象類裡面可以有方法的實現。對
(4).int i,char x=‘a’,如果i=x,則i=97 對
(5).電腦是一個對象 錯
(6).String.Format(“{0}*{1}={2}”,2,3,4),打印結果為2*3=4 對
(7).抽象方法在子類必須實現 錯
(8).public int Add(Params int[]a)可以把一個數組當參數傳遞。對
(9).抽象類沒有構造函數 錯 有,不能被實例化
(10).string是密封類 對
(11).接口內有構造函數 錯
四. 分析題
1.寫出結果
public abstract class A { public A() { Console.WriteLine('A'); } public virtual void Fun() { Console.WriteLine("A.Fun()"); } } publicclass B: A { public B() { Console.WriteLine('B'); } public newvoid Fun() { Console.WriteLine("B.Fun()"); } publicstatic void Main() { A a = new B(); a.Fun(); } } A B A.Fun()
2.寫出結果
public class A { public virtual void Fun1(int i) { Console.WriteLine(i); } public void Fun2(A a) { a.Fun1(1); Fun1(5); } } public class B : A { public override void Fun1(inti) { base.Fun1 (i+ 1); } public static voidMain() { B b = newB(); A a = newA(); a.Fun2(b); b.Fun2(a); } }
2
5
1
6
五. 比較題
1. Console.Write();與Console.WriteLine();
Console.Write()是輸出一行數據不換行
Cosole.WriteLine()是輸出一行數據換行
2. Console.Read();與Console.ReadLine();
Console.Read()是讀出首字母的ASCII碼,後者是讀出字符串.
Console.ReadLine()是讀取一行數據
3. const與readonly
const是靜態的編譯常量,不能和static在一起用
readonly是執行常量
4. 值類型和引用類型
(1) 值類型:以棧進行存儲.
(2) 引用類型:以堆進行存儲.
5. String與string,StringBuilder
String是C#中獨特數據類型
string 是靜態類型
StringBuilder的效率,比string的效率高,stringBuilder不聲明新的區域只是擴大原有區域,而string是要聲明新的區域,消耗內存
6. Array與ArrayList,Hastable
Array 是數組
ArrayList處理字符串時和Array不一樣,動態添刪該ArrayList.Add();
Hashtable鍵值對
7. 接口與抽象類
接口裡都是抽象的方法
接口沒有構造函數,
抽象類可以包括能夠哦實現的方法
抽象類有構造函數
8. i++和++i
++i操作數加一 (i)先加,(i加的結果給變量)再用
i++操作數不先加一 先用(值先給變量),在加(i再加)。
9.重寫與重載
1.重載函數之間的參數類型或個數是不一樣的.重載方法要求在同一個類中.
2.重寫要求返回類型,函數名,參數都是一樣的,重寫的方法在不同類中.
10.&和&&
&位與
&&邏輯與
11.事件與委托
事件是委托的變量,委托不是事件
12.ref,out
ref開始必須賦值
out開始不須直接賦值 ,out必須要重新賦值。
六. 解答題
1. 解釋static,void。
static 是靜態類,寄存性變量,是全局變量
void無返回類型
2. 簡述 private、 protected、 public、 internal 修飾符的訪問權限
Public 是公共類,可以在所有項目中訪問
Protected只能在子類和父類之間訪問
Internal在當前項目訪問
Private在當前類中訪問
3. 什麼是裝箱和拆箱
裝箱:值類型轉換為引用類型
拆箱:引用類型轉換為值類型
4. 輸入一個英文小寫字母,將它轉換成大寫字母(快速轉換)。
string a =Convert.ToString(Console.ReadLine());
Console.WriteLine(a.ToUpper());
5. * * * *
* * *
* *
* 打印出來(算法)
Console.WriteLine("請輸入行數"); int a =Convert.ToInt32(Console.ReadLine()); for (int =0;i<a;i++) { for(intj =0;j< i;j++) { Console.WriteLine(“ ”); } for(int j=0;j<=a-i;i++) { Console.WriteLine(“* ”); } Console.Write(“\n”); }
6. 1!+3!+5!(使用遞歸實現)(算法)
方法一:
int A(int a) { if(a==0 || a==1) return 1; else returna*A(a-1); } 調用: int sum=0; for(inti=1;i<=5;i+=2) { sum+=A(i); }
方法二:
int a = Convert.ToInt32(Console.ReadLine()); int m = 1; intsum = 0; for(int i = 1; i <= a; i++) { m *= 2 * i - 1; sum += m; } Console.WriteLine(sum);
7. 輸入5個數,將其重小到大排列輸出。(使用冒泡)(算法)
Console.WriteLine("請按1,2,3,4,5的格式輸入五個數:"); string str = Convert.ToString(Console.ReadLine()); string[] s = str.Split(','); int length = s.Length-1; int[] num =newint[s.Length]; for( int i =0 ;i<s.Length; i++) { num[i] = int.Parse(s[i]); } for(int i =0;i<length;i++) { for(int j =0;j<length-i;j++) { int temp; if( num[j]>num[j+1]) { temp =num[j+1]; num[j+1]=num[j]; num[j]=temp; } } } foreach(int i in num) { Console.Write(i+"\0"); }
8. 定義一個事件,當我激發它時,返回一個結果給我。(算法)
class Event1 { public delegatestring Eve(); public event Eveeve; public stringTrigger() { if(eve!=null) return eve(); else return ""; } public stringA1() { return "A1"; } public stringA2() { return "A2"; } } 調用: Event1 event1=new Event1(); event1.eve+=event1.A1; MessageBox.Show(event1.Trigger());
ten
筆試試卷
C#基礎
1. 傳入某個屬性的set方法的隱含參數的名稱是什麼?
value
2. 如何在C#中實現繼承?
繼承類或接口
3. C#支持多重繼承麼?
支持多層繼承,不支持多繼承
4. 被protected修飾的屬性/方法在何處可以訪問?
子類或當前類
5. 私有成員會被繼承麼?
不能
6. 請描述一下修飾符protected internal。
在子類和當前程序集可見
7. C#提供一個默認的無參數構造函數,當我實現了另外一個有一個參數的構造函數時候,還想保留這個無參數的構造函數。這樣我應該寫幾個構造函數?
2個
8. C#中所有對象共同的基類是什麼?
Object類(超級類)
9. 重載和覆寫有什麼區別?
1 重載是在當前類進行,而重寫是在子類中;
2 重載的方法返回值可以不同,方法名相同,參數列表不同,而重寫方法名和參數列表及返回值都相同
10. 在方法定義中,virtual有什麼含意?
定義為虛方法,以便於子類重寫或隱藏
11. 能夠將非靜態的方法覆寫成靜態方法麼?
(不能)
但是可以寫成靜態方法關鍵字new
12. 可以覆寫私有的虛方法麼?
不能
13. 能夠阻止某一個類被其他類繼承麼?
可以,將該類加上sealed申明可實現
14. 能夠實現允許某個類被繼承,但不允許其中的某個方法被覆寫麼?
可以,將不允許被重寫的方法申明為私有方法或靜態方法
15. 什麼是抽象類(abstract class)?
是對現實世界中某個類型的一個抽象,例如可將一棵樹定義為一個抽象類,各種樹有不同的特性(高度,樹形等),也有相同的部分(都由樹枝樹干組成等)。不能實例化,只能通過繼承實現。抽象類中即可有抽象方法(以便個性的實現),也有實現方法(共性)。
(若干個類的共同特征。)
16. 何時必須聲明一個類為抽象類?
當一個類的不同對象既有相同的共性的地方又有個性的地方時,可將共性的方法設計為實現方法,將其個性的地方設計為抽象方法
若干個類有共同的屬性和方法,事件時候必須聲明一個抽象類)
17. 接口(interface)是什麼?
(接口是一種服務的描述,然後去實現它。)
定義各種抽象方法的一種機制,不同於類的是,接口可以多繼承,接口不能實例化,通過繼承實現接 口。實現接口必須要實現接口中的所有方法。
18. 為什麼不能指定接口中方法的修飾符?
接口中的方法均為抽象方法,並且其默認為public,接口中的方法只有一個定義,沒有實現,要使用其方法必須要繼承該接口。而不能實例化接口,以獲得該方法。
19. 可以繼承多個接口麼?
可以
20. 那麼如果這些接口中有重復的方法名稱呢?
可以在調用時加上其接口的前綴來唯一標示它
在接口方法名稱前面帶上一個接口名稱)
21. 接口和抽象類的區別是什麼?
1 接口中的方法都是抽象方法,而抽象類中可以有實現的方法
2 接口中無構造函數,而抽象類有
3 接口方法在子類重寫不需要Override關鍵字修飾
4 繼承接口的類必須實現接口的所有方法,而繼承抽象類的類不需要實現父類的所有抽象方法
5.接口默認的是一個public方法 不能有訪問修飾
接口和抽象類均不能實例化new)
22. 如何區別重載方法?
一個方法非重載版本返回值和參數列表可以不同
23. const和readonly有什麼區別?
Const為編譯常量,編譯後即不可更改,已經賦值;
Readonly為執行常量,在運行時賦值。
24. System.String 和System.StringBuilder有什麼區別?
System.String 的值不可修改,對System.String 的對象賦值是對其引用賦值;
對System.StringBuilder賦值,將直接對該對象的值進行修改,當需要進行大批量的字符串操作時其效率很高。
String.string返回新的值
String.StringBuilder不返回原始值
25. 如何理解委托?
委托是一種將方法封裝的機制,它可以把方法當做參數進行傳遞和調用。可同時委托多個方法形成委托連,來關聯多個事件或方法。(委托是一用來存儲方法的,可以把方法當做變量傳遞。存儲方法時候會檢查方法的聲明)
Asp.Net
1.什麼是服務器端控件?請舉例。這些控件與一般的Html控件在使用上有何區別?
可以再服務器端運行的控件,比如Button,Text,DropDownList等,一般的Html控件只能激發客戶端事件,而服務端控件激發後會發生回傳,將控件的狀態回傳服務器端並激發相關的服務器控件的事件。
服務器控件被標識為ruant:server;而html不會被標識。
2.GridView數據源可以有哪些?
1 數據集(包括DateSet,DataTable等)
2 集合(鍵值對,哈希表,字典,隊列等)
3.xml 文件
3.什麼是用戶控件?
用戶自定義的控件集合,可通過將多個功能關聯的控件組織在一起(如登錄要用到的各種控件),形成用戶控件以提高代碼的重用性
(繼承自UserControl)
4.什麼是code-Behind技術?(後台)
即代碼後置技術,完成前後台代碼的分離,方便維護和代碼管理
aspx,ascx,然後是程序代碼邏輯文件,.cs,.vb,文件、將程序邏輯和頁面分離開)
5.向服務器發送請求有幾種方式?
get和Post表單提交方式
6.在頁面中傳遞變量有幾種方式?
1 session(跨頁面)
2 cookie(跨頁面)
3 application (存在一定的風險,登錄所有人使用一個application)
4 viewstate(當前頁面)
7.Machine.Config和Web.Config是什麼關系?
Machine.Config包括Web.Config,包含和被包含的關系
所頁面繼承Machine.Config,web.config某些項目和網站做些特殊的配置)
8.什麼是強類型DataSet?如何使用?采用它對分層架構有什麼作用?
強類型DataSet定義時即將確定其數據類型,用強類型DataSet定義數據庫的實體,在業務邏輯層即可將它當做類來處理,使用起來就象操作類一樣。它可盡量降低系統架構的耦合。
(DataSet1 dt = new DataSet1();)
強類型DataSet是指需要預先定義對應表的各個字段的屬性和取值方式的數據集,對於所有這些屬性都需要從DataSet,DataTable,DataRow繼承,生成相應的用戶自定義類。強類型的一個重要特征,就是開發者可以直接通過操作強類型數據集對象中的域屬性來實現對關系數據對象的操作,而不是向非強類型數據集那樣,使用結果集進行操作。
9.ViewState是什麼?
它是保存網頁控件狀態的一個對象,在當前頁中可設置及保存相關的控件的狀態,其采用的是保存在請求體中,在服務器和客戶端往返的機制,即其不需要保存在客戶端或長期保持在服務器端,其采用Base64對控件狀態編碼。
ViewState是一個隱藏域,保存這個頁面所有服務器的狀態,在服務器和客戶端進行往返,實現一個有狀態的Http協議。
10.如何改變ViewState存儲?
添加票據信息
11.如何在頁面回發後清空服務器端控件值?
設置其IsPostBack屬性值為TRUE,在調用控件的Clear()方法
跳轉到當前頁面。
(if(!IsPostBack){Response.Redirect(“this.aspx”);})
(if(!IsPostBack){Server.Transfer(“this.aspx”);})
(
//重寫page的LoadViewState方法
//不加載viewState中的數據。
if(!IsPostBack){protected override voidLoadViewState(object savestatus)
{//base.LoadViewState(savestatus)}}
)
12.如何判斷頁面是否是回發?
通過IsPostBack屬性
13.Global.asax是做什麼用的?談談你的使用?
可用於站點全局變量的設置,session開始和結束事件的設置等。
在Global.Asax中設置一個全局變量Application,(讓其自增)可用於統計登錄站點人數的統計。
14.Asp.net身份驗證有哪些方式?你是如何做的?
有4種:
1 none 無驗證
2 Form驗證(適合局域網及Internet)
3 Windows身份驗證(使用於局域網)
4 PassPort驗證微軟提供,收費)
對身份驗證的設置是在Web.Config中進行的
15.請描述Asp.net數據驗證機制。根據驗證邏輯生成對應腳本,驗證時腳本
Asp.Net提供多種服務器端的驗證控件,如是否為空的驗證控件(驗證是否為空值),比較驗證控件(比較兩個控件輸入的值是否相等),范圍驗證控件(驗證一個值是否在一個范圍內),規則驗證控件(如Email和電話號碼的驗證),綜合驗證控件(記錄其他驗證控件的驗證結果信息,相當於一個驗證匯總)
16.什麼是Ajax技術?.Net2.0中提供了哪些接口支持?你是如何實現Ajax效果的?
異步Javascript 和 XML的英文簡寫,其包括異步無刷新,JavaScript,Dom操作及XML技術的運用,ASP.Net 2.0中集成了相關的Ajax控件(AjaxExtension),通過該空間中的屬性及觸發器的設置可實現一些Ajax效果。
IcallBackEventHander
JavaScript
1.獲取以下html片段的第二個<span />元素。
<div id=”d1”><span>1</span><span>2</span></div>
2.說出以下表達式值:
typeof(NaN)
typeof(Infinity)
typeof(null)
typeof(undefined)
Object.constructor
Function.constructor
3.說出下面這個函數的作用
function(destination, source) {
for (property in source) {
destination[property] = source[property];
}
return destination;
};
4.說出下面代碼的運行結果
var a = "123abc";
alert(typeof(a++));
alert(a);
數據庫
1.列舉ADO.NET主要對象,並闡述其用途。
DataSet(離線數據集,相當於內存中的一張表),Connection(由於數據庫連接操作),Command(由於數據庫更新操作),DataAdaper(數據庫離線狀態下的查詢及更新操作),DataReader(只讀向前的數據查詢對象)
2.DataReader和DataSet有什麼區別?
DataReader:連線操作對象,只讀向前 大量數據
DataSet:離線操作對象,相當於內存中的一張表,少量數據
3.什麼是索引?有什麼作用?
索引用於標示數據在內存的地址
索引是一個單獨的、物理的數據庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。
4.Sql Server2000和Sql Server2005編寫、調試存儲過程有哪些不同?
5.如何設計樹狀數據結構?
通過設置標號和父標號,做成動態鏈表形式。
6.有以下3個表:
S (S#,SN,SD,SA) S#,SN,SD,SA 分別代表學號、學員姓名、所屬單位、學員年齡
C (C#,CN ) C#,CN 分別代表課程編號、課程名稱
SC ( S#,C#,G ) S#,C#,G 分別代表學號、所選修的課程編號、學習成績
a.使用標准SQL嵌套語句查詢選修課程名稱為’稅收基礎’的學員學號和姓名。
Select S#,SN from s
Where S# in
(select S# from SC where S.S#=SC.S# and C# in
(select C# from C where CN=’稅收基礎’
)
)
b.使用標准SQL嵌套語句查詢選修課程編號為’C2’的學員姓名和所屬單位。
Select SN ,SD from s where S# in(select S#from SC where C#=’C2’)
c.使用標准SQL嵌套語句查詢不選修課程編號為’C5’的學員姓名和所屬單位。
Select SN ,SD from s where S# in(select S#from SC where C# is not C2)
d.使用標准SQL嵌套語句查詢選修全部課程的學員姓名和所屬單位。
e.查詢選修了課程的學員人數。
Select count(*) from S where S# in (select S#from SC )
f.查詢選修課程超過5門的學員學號和所屬單位。
Select SN,SD from S JOIN (SELECT SC.S# FROM SC GROUP BYS# having count(*)>5) C ON S.S# =C.S#