1、编写程序:运行时向用户提问“你考了多少分?(0-100)”,接受输入后判断其等级并显示
出来。判断依据:等级={优(90-100);良(80-89);中(70-79);及格(60-69);差(0-59);}
private static void Main(string[] args){int score = 0;while (true){try{Console.WriteLine("你考了多少分?(0 - 100)");score = Convert.ToInt32(Console.ReadLine());if (score < 0 || score > 100){Console.WriteLine("你数值不在0-100之间");continue;}break;}catch (Exception){Console.WriteLine("你的输入有误");}}Console.WriteLine(ShowLevel(score));Console.ReadKey();}private static string ShowLevel(int score){if (score >= 90) return "优";else if (score >= 80) return "良";else if (score >= 70) return "中";else if (score >= 60) return "及格";else return "差";}
2、编程输出九九乘法表.
private static void Main(string[] args){for (int i = 1; i < 10; i++){for (int j = 1; j <= i; j++){Console.Write("{0}X{1}={2}\t", i, j, i * j);}Console.WriteLine();}Console.ReadKey();}
3、定义长度50的数组,随机给数组赋值,并可以让用户输入一个数字n,按一行n个数输出数组
// (int[],Random,r.Next())private static void Main(string[] args){int[] n = new int[50];Random r = new Random();for (int i = 0; i < n.Length; i++){n[i] = r.Next(1, 100);}Console.WriteLine("输入一个数字(3-9),将按每行个数显示");int num = Convert.ToInt32(Console.ReadLine());ShowNum(n, num);Console.ReadKey();}private static void ShowNum(int[] n, int num){for (int i = 0; i < n.Length; i++){Console.Write("{0}\t", n[i]);if ((i + 1) % num == 0){Console.WriteLine();}}Console.WriteLine();}
4、编写一函数,接收一个字符串,把用户输入的字符串中的第一个字母转换成小写,然后返回
(命名规范,骆驼命名, name,SubString(0,1),s.SubString(1))
private static void Main(string[] args){Console.WriteLine("输入一个字符串");string str = Console.ReadLine();Console.WriteLine(ShowFirstCase(str));Console.ReadKey();}private static string ShowFirstCase(string str){string str1 = str.Substring(0, 1).ToLower();return str1 + str.Substring(1);}
5、编写一个函数,接收一个字符串,把用户输入的字符串中的第一个字母转换成大写,然后返回。
(命名规范,Pascal)
6、声明两个变量,int n1=10,n2=20,要求两个变量交换,最后输出n1为20,n2为10.
扩展:不使用第三变量如何交换?
private static void Main(string[] args){int n1 = 10, n2 = 20;Xchange(ref n1, ref n2);Console.WriteLine("n1:{0},n2:{1}", n1, n2);Console.ReadKey();}public static void Xchange(ref int n1, ref int n2){//方法1//int temp = n1;//n1 = n2;//n2 = temp;//方法2//n1 = n1 + n2;//n2 = n1 - n2;//n1 = n1 - n2;//方法3//n1 = n1 - n2;//n2 = n1 + n2;//n1 = n2 - n1;//方法4n1 = n1 ^ n2;n2 = n1 ^ n2;n1 = n1 ^ n2;}
7、用方法来实现:将上题封闭一个方法来做。提示:方法有两个参数n1,n2,在方法中将n1
n2进行交换,使用ref.
8、请用户输入一个字符串,计算字符串中的字符个数,并输出。
private static void Main(string[] args){Console.WriteLine("请输入一个字符串");string str = Console.ReadLine();Dictionary dic = new Dictionary();for (int i = 0; i < str.Length; i++){if (dic.ContainsKey(str[i])) dic[str[i]] += 1;else dic[str[i]] = 0;}foreach (KeyValuePair item in dic){Console.WriteLine("{0}:{1}", item.Key, item.Value);}Console.ReadKey();}
private static void Main(string[] args){Console.WriteLine("输入几个数?数值间用空格");//string[] s = Console.ReadLine().Split(' ', ',', StringSplitOptions.RemoveEmptyEntries);string[] s = Console.ReadLine().Split(new char[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);int[] n = new int[s.Length];for (int i = 0; i < n.Length; i++){n[i] = int.Parse(s[i]);}Console.WriteLine(GetMax(n));Console.ReadKey();}public static int GetMax(params int[] n){Array.Sort(n);Array.Reverse(n);return n[0];}
9、用方法来实现:计算两个数的最大值。思考:方法的参数?返回值?
扩展:计算任意多个数间的最大值(提示params)
10、用方法来实现:计算1-100之间的所有整数的和。
11、用方法来实现:计算1-100之间的所有奇数的和。
12、用方法来实现:判断一个给定的整数是否为质数.
13、用方法来实现:计算1-100之间的所有质数(素数)的和。
private static void Main(string[] args){Console.WriteLine(GetSum(1, 100));Console.ReadKey();}public static int GetSum(int n1, int n2){int sum = 0;for (int i = n1; i <= n2; i++){if (IsPrime(i) && i != 1){Console.WriteLine(i);sum += i;}}return sum;}public static bool IsPrime(int n){bool b = true;if (n == 1) return false;for (int i = 2; i <= n / 2; i++){if (n % i == 0){b = false;break;}}return b;}
14
15、用方法来实现:有一个字符串数组:{"马龙","迈克尔乔丹","雷吉米勒","蒂姆邓肯",
"科比布莱思特"},请输出最长的字符串.
private static void Main(string[] args){string[] s = { "马龙", "迈克尔乔丹", "雷吉米勒", "蒂姆邓肯", "科比布莱思特" };Console.WriteLine(GetMaxLength(s));Console.ReadKey();}public static string GetMaxLength(string[] s){int j = 0, n = 0;for (int i = 0; i < s.Length; i++){if (s[i].Length > n){j = i;n = s[i].Length;}}return s[j];}
16、用方法实现:请计算出一个整形数组的平均值,{1,3,5,7,93,33,4,4,6,8,10}。要求:
计算结果如果有小数,则显示小数点后两位(四舍五入)
private static void Main(string[] args){int[] n = { 1, 3, 5, 7, 93, 33, 4, 4, 6, 8, 10 };double avg = GetAvg(n);Console.WriteLine("{0}--{1}--{2}", avg, Math.Round(avg, 2), Convert.ToDouble(avg.ToString("0.00")));Console.ReadKey();}public static double GetAvg(params int[] n){double sum = 0;for (int i = 0; i < n.Length; i++){sum += n[i];}return sum / n.Length;}
17、请通过冒泡排序法对整数数组{1,3,5,7,99,2,4,6,8,10}实现升序排序。
private static void Main(string[] args){int[] n = { 1, 3, 5, 7, 99, 2, 4, 6, 8, 10 };int temp = 0;for (int i = 0; i < n.Length - 1; i++){for (int j = i + 1; j < n.Length; j++){if (n[i] > n[j]){temp = n[i];n[i] = n[j];n[j] = temp;}}}for (int i = 0; i < n.Length; i++){Console.Write(n[i] + ",");}Console.WriteLine();Console.ReadKey();}
18、为老师编写一个程序,该程序使用一个数组存储30个学生的考试成绩,并给各个数组元
素指定一个1-100的随机数,然后计算平均成绩。
private static void Main(string[] args){int[] n = new int[30];Random r = new Random();for (int i = 0; i < n.Length; i++){n[i] = r.Next(1, 101);}double sum = 0, avg = 0;for (int i = 0; i < n.Length; i++){sum += n[i];}avg = Math.Round(sum / n.Length, 2);Console.WriteLine(avg.ToString("0.00"));Console.ReadKey();}
19、有如下字符串:患者:“大夫,我咳嗽得很重。";大夫:"你多大年龄?";患者:"七十五
岁。";大夫:"二十岁咳嗽吗";患者:"不咳嗽。";大夫:"四十岁时咳嗽吗?";患者:"
也不咳嗽。";大夫:"那现在不咳嗽,还要等到什么时咳嗽?";。
需求:统计"咳嗽"出现次数,以及每次咳嗽出现的索引位置。
private static void Main(string[] args){string s = "患者:\"大夫,我咳嗽得很重。\";大夫:\"你多大年龄?\";患者:\"七十五" +"岁。\";大夫:\"二十岁咳嗽吗\";患者:\"不咳嗽。\";大夫:\"四十岁时咳嗽吗 ? \";患者:\"" +"也不咳嗽。\";大夫:\"那现在不咳嗽,还要等到什么时咳嗽?\"";List index = new List();//用string只是为了后面输出时直接一句Join即可.int count = 0, i = 0;do{i = s.IndexOf("咳嗽", i);if (i == -1 || i > s.Length - 2) break;index.Add(i.ToString());i += 2;count++;} while (true);string[] n1 = index.ToArray();Console.WriteLine(String.Join(",", n1));Console.ReadKey();}
20、将字符串" hello word,你 好 世界 ! "两端空格去掉,并且将其中的所有其
它空格都替换 成一个空格,输出结果为: "hello world,你 好 世界!".
private static void Main(string[] args){string s = " hello word,你 好 世界 ! ";s = s.Trim();string[] s1 = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);Console.WriteLine(string.Join(" ", s1));Console.ReadKey();}
21、制作一个控制台小程序。要求用户可以在控制台录入每个学生的姓名,当用户输入quit
(不区分大小写)时,程序停止接受用户的输入,并且显示出用户输入的学生的个数,以
及每个学生的姓名。
22、同上,再增加一个姓"王"的同学的个数,此处不考虑复姓问题。
private static void Main(string[] args){List names = new List();string s;int count = 0;do{Console.WriteLine("请输入学生姓名:(quit退出)");s = Console.ReadLine();if (s.ToLower() == "quit") break;if (s == ""){Console.WriteLine("请重新输入:");}else{names.Add(s);}} while (true);foreach (string name in names){Console.Write(name + "\t");if (name.Substring(0, 1) == "王") count++;}Console.WriteLine("共{0}个,姓王有{1}个", names.Count, count);Console.ReadKey();}
23、请将字符串数组{"中国","美国","巴西","澳大利亚","加拿大"}中的内容反转,然后
输出反转后的数组。不能用数组的Reverse()方法.
private static void Main(string[] args){string[] s = { "中国", "美国", "巴西", "澳大利亚", "加拿大" };string temp;for (int i = 0; i < s.Length / 2; i++){temp = s[i];s[i] = s[s.Length - 1 - i];s[s.Length - 1 - i] = temp;}Console.WriteLine(String.Join(",", s));Console.ReadKey();}
24、创建一个Person类,属性:姓名,性别,年龄;方法SayHi().再创建一个Employee类
继承Person类,扩展属性Salary,重写SayHi方法。
public class Person{private string _name;private char _gender;private int _age;public string Name { get => _name; set => _name = value; }public char Gender { get => _gender; set => _gender = value; }public int Age { get => _age; set => _age = value; }public virtual void SayHi(){Console.WriteLine("我是人类.");}}public class Employee : Person{private double _salary;public double Salary { get => _salary; set => _salary = value; }public override void SayHi(){Console.WriteLine("我是雇员.");}}
案例:使用WinForm窗体制作一个简易计算器,默认为"请选择"。要求:具有+-*/功能,当
用户点击"等于"按钮时,如果输入的为非数据则提示用户。
界面:两个数(两个textbox),一个操作运算符(combobox),一个等号(button),一个
结果(label)
private void txtOne_KeyDown(object sender, KeyEventArgs e){if (e.KeyValue >= 0 && e.KeyValue <= 9 || e.KeyCode == Keys.Back || e.KeyCode == Keys.Delete){}else{e.Handled = true;}}private void txtTwo_KeyDown(object sender, KeyEventArgs e){if (e.KeyValue >= 0 && e.KeyValue <= 9 || e.KeyCode == Keys.Back || e.KeyCode == Keys.Delete){}else{e.Handled = true;}}private void Form1_Load(object sender, EventArgs e){cboSign.SelectedIndex = 0;label1.Text = "";}private void button1_Click(object sender, EventArgs e){if (txtOne.Text == "" || txtTwo.Text == ""){MessageBox.Show("请输入完整两数.");return;}switch (cboSign.Text){case "请选择":MessageBox.Show("请选择运算符");break;case "+":label1.Text = (Convert.ToDouble(txtOne.Text) + Convert.ToDouble(txtTwo.Text)).ToString();break;case "-":label1.Text = (Convert.ToDouble(txtOne.Text) - Convert.ToDouble(txtTwo.Text)).ToString();break;case "*":label1.Text = (Convert.ToDouble(txtOne.Text) * Convert.ToDouble(txtTwo.Text)).ToString();break;case "/":if (Convert.ToDouble(txtTwo.Text) != 0){label1.Text = (Convert.ToDouble(txtOne.Text) / Convert.ToDouble(txtTwo.Text)).ToString();}else{MessageBox.Show("第二数为0,重新输入.");}break;default:MessageBox.Show("请选择正确的运算符.");break;}}
25、编写代码说明什么是方法重载。要求编写3个方法。//方法名相同参数不同
GDI+(Graphics Device Interface)是一种绘图装置接口。可将应用程序和绘图硬件分隔,
让我们能够编写与装置无关的应用程序。
它可以让我们不需注意特定显示装置的详细数据,便可在屏幕或打印机显示信息。
我们可以呼叫GDI+类别所提供的方法,然后这些方法会适当地呼叫特定的装置驱动程序,而完成
绘图。而且与.Net进行了更好的融合。
GDI(Graphics Device Interface)是属于绘图方法的API(Application Programming Interface)
坐标系统
与常规坐标不同。起点(0,0)在左上角,X轴由左向右递增,Y轴由上向下递增。
命名空间:
using System.Drawing;
1、画直线
日常画直线需要:一支有颜色的笔,一张纸,直线两点的确立,绘制直接的人(对象).
创建GDI对象: Graphics
画出直线后,拖动窗体到桌面之外,再拖动回桌面,会发现部分红线"消失",那是因为窗体进入
桌面后,会自动重新绘制窗体,但红线只是代码控制绘制了一次,回到桌面没有再绘,所以就会
部分消失。
解决问题:
窗体有一个一事件Paint事件,当窗体进行重绘时就会发生,于是上面窗体回到桌面时就有
重绘,可以此事件中加入红线绘制,这样窗体回到桌面一样也会绘制红线,而不发生消失。
因此只窗体重绘,那么红线一起就重绘了。图:
练习:画直线
界面:
代码:
private void button1_Click(object sender, EventArgs e){DrawLine();}private void Form1_Paint(object sender, PaintEventArgs e){count++;//重绘时计数,测试窗体重绘多少次label1.Text = count.ToString();DrawLine();}public void DrawLine(){Graphics g = this.CreateGraphics();//创建对象。new Graphics()错误Pen p = new Pen(Brushes.Red, 2);//画笔Point p1 = new Point(30, 50);//两点Point p2 = new Point(200, 150);g.DrawLine(p, p1, p2);//由笔,两点,对象来绘制直线。}
2、画矩形
Point 点,由X,Y组成表明坐标位置. Point(x,y)
Size 有序对。一般是长与宽 Size(width,length)
Rectangle 矩形位置与大小,Rectangle(Point,Size)
private void button2_Click(object sender, EventArgs e){DrawRectangle();}private void DrawRectangle(){Graphics g = this.CreateGraphics();Pen p = new Pen(Brushes.Blue, 3);Rectangle rec = new Rectangle(new Point(30, 30), new Size(150, 100));g.DrawRectangle(p, rec);}
3、扇形
其中的矩形,表示里面椭圆的形状,关系到扇形的两个径长的不同
角度两个:
第一个角度,X方向(以Rect起点位置从左向右水平)顺时针旋转的角度。
第二个角度,以第一个角度顺时针再转的角度。
private void button3_Click(object sender, EventArgs e){DrawPie();}private void DrawPie(){Graphics g = this.CreateGraphics();Pen p = new Pen(Brushes.Black, 1);Rectangle rect = new Rectangle(new Point(60, 60), new Size(50, 100));g.DrawPie(p, rect, 30, 90);}
4、绘制文本
Font 字体,(字体名,字体大小,字体风格(加粗斜体))
private void button4_Click(object sender, EventArgs e){DrawStr("长河落日圆");}private void DrawStr(string str){Graphics g = this.CreateGraphics();g.DrawString(str, new Font("宋体", 20, FontStyle.Bold), Brushes.Red, new Point(50, 80));}
5、综合运用:绘制验证码
思路:在pictureBox中的图片(当作纸,画板)上进行绘制。绘制数字与线条及点。
数字位置与大小随机,线条与点起到干扰识别的作用。
概念:
Bitmap 位图,可作为pictureBox里Image的图片,因为Bitmap继承于Image.
Graphics 指定的绘制纸就是上面的Bitmap.
简单的说:把字串,字串,点绘制到位图对象上,最后把位图加载到picturebox上。
Bitmap对象.SetPixel(Point p,Color color) 画颜色点
界面:
private void pictureBox1_Click(object sender, EventArgs e){Random r = new Random();string s = "";for (int i = 0; i < 5; i++)//产生5位验证码{s += r.Next(0, 10);}Bitmap bmp = new Bitmap(150, 100);//图片Graphics g = Graphics.FromImage(bmp);//指定在图片上创建对象g.Clear(Color.LightGreen);//在图片上画上淡绿色string[] fonts = { "微软雅黑", "黑体", "宋体", "仿宋", "楷体", "隶书" };Color[] colors = { Color.Red, Color.Blue, Color.Brown, Color.Black, Color.HotPink, Color.Gray };for (int i = 0; i < 5; i++) //在120,25上绘制验证码{Point p = new Point(i * 24 + r.Next(0, 4), r.Next(0, 5));//100/5=20,Font f = new Font(fonts[r.Next(0, 6)], 20, FontStyle.Bold);Brush b = new SolidBrush(colors[r.Next(0, 6)]);g.DrawString(s[i].ToString(), f, b, p);}for (int i = 0; i < 30; i++)//画线{Point p1 = new Point(r.Next(0, 120), r.Next(0, 30));Point p2 = new Point(r.Next(0, 120), r.Next(0, 30));g.DrawLine(new Pen(new SolidBrush(colors[r.Next(0, 6)])), p1, p2);}for (int i = 0; i < 300; i++)//画点{Point p3 = new Point(r.Next(0, 120), r.Next(0, 30));bmp.SetPixel(p3.X, p3.Y, colors[r.Next(0, 6)]);}pictureBox1.Image = bmp;//装载图片bmp.Save(@"E:\1.png");//绘图保存}