零基础学会C#一——C#与.NET概述
1、目标
- 编写第一个控制台的输入与输出程序-
- 建立第一个Windows窗体应用程序
- 定义一个简单的IP地址结构体
2、控制台的输入与输出
2.1问题
在控制台上实现文本的输入与输出。
2.2 说明
按照提示输入自己的姓名,程序输出你输入的名字,并欢迎使用C#语言。主要使用Console(控制台)对象的WriteLine和Write方法实现显示;使用ReadLine方法读入字符。
2.3 分析
Main()是应用程序(可执行)的入口点,它必须包含在一个类中,且仅有一个类能使用该标志定义。
2.4 参考步骤
(1)为解决方案创建一个控制台应用程序的项目“Example_1”。
(2)将“Program.cs”类文件重命名为“Welcome.cs”。
(3)将以下代码添加到“Welcome.cs”中。
2.5 代码
using System; // using指令不再需要规定名字空间,就可以使用它们的方法和属性
using System.Collections.Generic;
using System.Text;
namespace Example_1
{
class Welcome
{
/*这种注释跨越多行*/
static void Main(string[] args)
{
//这是单行注释
Console.Write("请输入你的姓名:"); //Write与WriteLine不同的地方在于它输出时不换行
string strName = Console.ReadLine();
Console.WriteLine("{0}+,你好!\n 欢迎使用C#语言!", strName); //{0}代替WriteLine方法的参数表中紧随格式串后的第一个变量
}
}
}
2.6 防闪退
Console.ReadKey();
3、建立Windows窗体应用程序
3.1 问题
设计一个窗口,可以将用户输入的两个操作数进行加法计算,并显示计算结果。
3.2 说明
首先要新建Windows应用程序类型的项目,创建成功后,可以得到一个名为Form1的空白窗体。可以从左边工具箱中的公共控件组中选择控件往窗体上拖放。
在Windows窗体上添加两个文本输入框供用户输入操作数,再添加一个按钮来对输入的操作数进行加法计算,最后将计算结果显示在第三个输入框中。
3.3 分析
Visual Studio.Net使开发图形界面程序简单,把需要的控件从工具箱拖放到Windows窗体上即可。使用Visual Studio.Net可以减少开放人员编写的代码量,使开放人员集中精力解决业务问题。
3.4 推荐步骤
(1)建立一个Windows应用程序项目,命名为“WinForm”。
(2)往Form1窗体上拖放3个Label和TextBox控件和一个Button控件,并对它们相应的Text属性进行修改,效果如图1-2:
Visual Studio C#拖拽添加控件时工具箱挡住了Form窗体时,只需要点一下工具箱标题栏上的蓝色别针按钮,这个问题就可以解决了。蓝色别针按钮就是工具箱标题栏上的第二个按钮,也是我们用红色框框出来的那个按钮。点击蓝色别针后,工具箱就不再遮挡Form窗体了
3.5 代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WinForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
long oper1, oper2, result;
//如果操作数为空,显示警告信息
if ((textBox1.Text == "") || (textBox2.Text == ""))
{
MessageBox.Show(this,"操作数不能为空","提示信息",
MessageBoxButtons.OK,MessageBoxIcon.Information);
return;
}
try
{
//将文本框中的数据(字符串型)转换成long型数据
oper1 = Convert.ToInt64(textBox1.Text);
oper2 = Convert.ToInt64(textBox2.Text);
result = oper1 + oper2;
//将和写入结果文本框
textBox3.Text = Convert.ToString(result);
}
catch(Exception e1)
{ //捕捉异常,例如:若输入字母,在转换成long类型时会引发异常
MessageBox.Show(this,e1.Message,"警告信息", MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
}
}
}
把下方代码复制到button里即可
自动生成的信息不用管他们,运行结果如下:
4、结构体类型训练
4.1 问题
使用4个byte类型的变量来对IP地址进行存储,并将这4个变量组成定义一个结构体。
4.2 说明
struct类型是一种可包含构造函数、常数、字段、方法、属性、索引器、运算符和嵌套类型的值类型。
4.3 分析
此问题要求使用一个结构体来接受和储存IP地址中的4个十进制数。该结构体可通过以下方式声明:
I
P
s
a
m
p
l
e
S
t
r
u
c
t
;
IP \,\,sampleStruct;
IPsampleStruct;
在C#中,类与结构体在语义上是不同的,结构是值类型,不需要实例化,而类是引用类型。
4.4 推荐步骤
(1)为解决方案创建一个控制台应用程序的项目“Example_2”。
(2)将“Program.cs”类文件重命名为“SampleStruct.cs”。
(3)将以下代码添加到“SampleStruct.cs”中。
4.5 代码
下面展示一些 内联代码片
。
using System;
using System.Collections.Generic;
using System.Text;
namespace Example_2
{
//定义一个IP结构体
struct IP
{
public byte b1, b2, b3, b4;
}
class SampleStruct
{
static void Main(string[] args)
{
IP sampleStruct;
sampleStruct.b1 = 192;
sampleStruct.b2 = 168;
sampleStruct.b3 = 1;
sampleStruct.b4 = 101;
Console.Write("{0}.{1}",sampleStruct.b1,sampleStruct.b2);
Console.Write("{0}.{1}", sampleStruct.b3, sampleStruct.b4);
}
}
}
5、练习
5.1 习题一
5.1.1 题目
设计项目s1-1。功能要求:不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入q字符的时候显示刚才输入的数字中的最大值。设一个变量int max,初始值为0,用户每输入一次就把用户输入的和max比较一下,如果输入的比max大,则让max等于用户输入。
5.1.2 代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace s1_1
{
class FindMax
{
static void Main(string[] args)
{
int temp,max = 0;
string s = Console.ReadLine();
while (Console.ReadLine() != "q")
{
s = Console.ReadLine();
temp = Convert.ToInt16(s);
if (max < temp) max = temp;
}
temp = Convert.ToInt16(s);
if (max < temp) max = temp;
Console.WriteLine("最大值:{0}", max);
Console.ReadKey();
}
}
}
Console.ReadLine() 会等待直到用户按下回车,一次读入一行。
5.1.3 测试结果
5.2 习题二
5.2.1 题目
设计项目s1-2。功能要求:依次提示用户输入两个整数(假设i1、i2)。如果i1、i2都是正数,则将i1的值递增1,然后输出i1+i2的值;如果i1、i2都是负数,则将i1的值递减10,然后输出i1i2的值;如果i1、i2中任一个为0,则提示数据有错误;否则计算i1i2的绝对值。
5.2.2 代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace s1_2
{
class Calculate
{
static void Main(string[] args)
{
long op1, op2, result;
Console.Write("操作数1:"); //Write与WriteLine不同的地方在于它输出时不换行
op1 = Convert.ToInt64(Console.ReadLine());
Console.Write("操作数2:"); //Write与WriteLine不同的地方在于它输出时不换行
op2 = Convert.ToInt64(Console.ReadLine());
if(op1==0||op2==0)
{
Console.WriteLine("数据错误:操作数不能为0!");
return;
}
else
{
if (op1 > 0 && op2 > 0)
result = op1 + 1 + op2;
else
{
if (op1 < 0 && op2 < 0)
result = (op1 - 10) * op2;
else
result = -(op1 * op2);
}
}
Console.WriteLine("结算结果:{0}", result);
}
}
}
5.2.3 测试结果