C#简介:
C#是一种现代的、面向对象的高级编程语言,由微软公司开发,它是.NET框架的一部分。C#结合了C语言的语法风格和Java的面向对象特性,旨在提供一种简单、现代、通用的编程方式。以下是从多个维度对C#进行具体介绍:
1. 发展历程:C#作为一种编程语言,自2000年由微软发布以来,经历了多个版本的迭代更新。每一次更新都带来了新的特性和改进,例如泛型、匿名方法、LINQ等。这些更新使得C#能够适应不断变化的技术需求和市场趋势。
2. 设计目标:C#的设计目标是将Visual Basic的快速开发能力和C++的强大功能结合起来,同时提供类似于Java的垃圾回收机制来管理内存。它支持面向对象的编程,包括继承、封装和多态等基本特性。
3. 语言特点:C#是一种类型安全的语言,这意味着它能够在编译时检查类型错误,从而减少运行时错误的可能性。它还提供了自动的内存管理,通过垃圾回收机制来自动回收不再使用的对象所占用的内存空间。
4. 应用场景:C#被广泛应用于Windows应用程序的开发,以及Web服务和Web应用程序的开发。随着.NET Core的推出,C#也成为了跨平台应用程序开发的热门选择。
5. 学习曲线:对于有其他编程语言基础的学习者来说,C#相对容易上手。它的语法清晰,结构良好,拥有丰富的文档资源和社区支持。然而,要想精通C#并有效利用其高级特性,仍然需要系统学习和实践。
6. 与其他语言的比较:C#与Java在很多方面相似,包括面向对象的编程范式和自动内存管理。但是,C#与C++相比,提供了更多的安全性和垃圾回收机制,但牺牲了一定的性能和底层控制能力。
7. 未来发展:随着.NET 6的推出和即将到来的.NET 7,C#持续在性能优化、云服务集成和跨平台支持方面进行创新。微软也在积极推动开源,使得C#和.NET框架更加开放和包容。总的来说,C#是一个功能强大且灵活的编程语言,适用于从小型个人项目到大型企业级应用的开发。它凭借强大的语言特性、广泛的应用场景以及良好的发展前景,成为了当今最流行的编程语言之一。
一、新建项目
建Windows窗体应用(C#)
二、配置新项目
保存至自己新建的文件夹,命名为计算机模板
三、打开设计框架
建设基础计算器框架
四、添加计算器器件
显示框、0-9数字、+ - * ()等一系列内容
例如以下图片
五、更改数据
通过属性text填写数据内容
六、源代码
注意:代码主题无需手敲,按下对应数据框即弹出
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 计算器
{
public partial class Form2 : Form
{
#region 方法二:对表达式分析
string Precede(string p, string q)
{
switch (p)
{
case "+":
case "-":
return ("*/(".IndexOf(q) != -1) ? "<" : ">";
case "*":
case "/":
return (q == "(") ? "<" : ">";
case "(":
return (q == ")") ? "=" : "<";
case ")":
return (q == "(") ? "?" : ">";
case "#":
return (q == "#") ? "=" : "<";
}
return "?";
}
Double Operate(Double a, char o, Double b)
{
switch (o)
{
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
}
return 0;
}
public Object Eval_2(string Expression)
{
Stack nArr = new Stack(), oArr = new Stack();
int j = 0;
Double a = 0, b = 0;
string w = "";
char o;
MatchCollection arr = Regex.Matches(Expression.Replace(" ", "") + "#", @"(((?
<=(^|\())-)?\d+(\.\d+)?|\D)");
oArr.Push('#');
w = Convert.ToString(arr[j++]);
while (!(w == "#" && Convert.ToString(oArr.Peek()) == "#"))
{
if ("+-*/()#".IndexOf(w) != -1)
{
switch (Precede(oArr.Peek().ToString(), w))
{
case "<":
oArr.Push(w);
w = Convert.ToString(arr[j++]);
break;
case "=":
oArr.Pop();
w = Convert.ToString(arr[j++]);
break;
case ">":
o = Convert.ToChar(oArr.Pop());
b = Convert.ToDouble(nArr.Pop());
a = Convert.ToDouble(nArr.Pop());
nArr.Push(Operate(a, o, b));
break;
default:
return "Error";
}
}
else
{
nArr.Push(w);
w = Convert.ToString(arr[j++]);
}
}
return nArr.Pop();
}
#endregion
public Form2()
{
InitializeComponent();
}
private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
{
}
private void button11_Click(object sender, EventArgs e)
{
this.textBox1.Text += "1";
}
private void button14_Click(object sender, EventArgs e)
{
this.textBox1.Text += "+";
}
private void button16_Click(object sender, EventArgs e)
{
this.textBox1.Text += "0";
}
private void button18_Click(object sender, EventArgs e)
{
this.textBox1.Text += ".";
}
private void button12_Click(object sender, EventArgs e)
{
this.textBox1.Text += "2";
}
private void button13_Click(object sender, EventArgs e)
{
this.textBox1.Text += "3";
}
private void button6_Click(object sender, EventArgs e)
{
this.textBox1.Text += "4";
}
private void button7_Click(object sender, EventArgs e)
{
this.textBox1.Text += "5";
}
private void button8_Click(object sender, EventArgs e)
{
this.textBox1.Text += "6";
}
private void button1_Click(object sender, EventArgs e)
{
this.textBox1.Text += "7";
}
private void button2_Click(object sender, EventArgs e)
{
this.textBox1.Text += "8";
}
private void button3_Click(object sender, EventArgs e)
{
this.textBox1.Text += "9";
}
private void button4_Click(object sender, EventArgs e)
{
this.textBox1.Text += "*";
}
private void button9_Click(object sender, EventArgs e)
{
this.textBox1.Text += "/";
}
private void button19_Click(object sender, EventArgs e)
{
this.textBox1.Text += "-";
}
private void button20_Click(object sender, EventArgs e)
{
string str = this.textBox1.Text;
double result = (double)Eval_2(str);
this.textBox1.Text = result.ToString();
}
private void button5_Click(object sender, EventArgs e)
{
string strNumber = this.textBox1.Text;
this.textBox1.Text = "";
}
private void button10_Click(object sender, EventArgs e)
{
this.textBox1.Text += "(";
}
private void button15_Click(object sender, EventArgs e)
{
this.textBox1.Text += ")";
}
}
}
七、启动运行结果
编译成功且项目美观(文字颜色可在属性自调)
八、进行简单计算
可操作普通计数计算,进行简单的加减乘除以及括号运算
运行结果正确,代码编写无误,可以正常进行运算
九、代码模板
可根据需要进行查看
using System;
namespace SimpleCalculator
{
class Program
{
static void Main(string[] args)
{
double num1, num2, result;
char operation;
Console.WriteLine("请输入第一个数字:");
num1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("请输入操作符(+、-、*、/):");
operation = Convert.ToChar(Console.ReadLine());
Console.WriteLine("请输入第二个数字:");
num2 = Convert.ToDouble(Console.ReadLine());
switch (operation)
{
case '+':
result = num1 + num2;
Console.WriteLine("结果是: " + result);
break;
case '-':
result = num1 - num2;
Console.WriteLine("结果是: " + result);
break;
case '*':
result = num1 * num2;
Console.WriteLine("结果是: " + result);
break;
case '/':
if (num2 != 0)
{
result = num1 / num2;
Console.WriteLine("结果是: " + result);
}
else
{
Console.WriteLine("除数不能为0");
}
break;
default:
Console.WriteLine("无效的操作符");
break;
}
Console.ReadKey();
}
}
}
控件的属性及含义:
十、总结
1. 确定需求:明确计算器需要支持哪些功能,例如基本的加、减、乘、除运算,以及可能的错误处理和输入验证。
2. 设计界面:即使是控制台应用程序,也需要考虑用户交互的流畅性和清晰性。设计简洁的提示语和用户操作指引。
3. 编写代码:使用C#或其他编程语言编写计算器的逻辑。确保代码结构清晰,易于理解和维护。
4. 实现运算逻辑:根据用户输入的操作符执行相应的数学运算。注意处理特殊情况,如除数为零。
5. 处理用户输入:接收并验证用户输入的数字和操作符,确保它们是有效的。
6. 输出结果:将计算结果显示给用户,格式要清晰易读。
7. 错误处理:对可能出现的错误情况进行处理,例如非法的操作符、除数为零等。
8. 测试:在多种情况下测试计算器,确保其在不同输入下都能正常工作。
9. 优化和重构:根据测试结果和用户反馈,对代码进行优化和重构,提高计算器的健壮性和用户体验。
10. 文档和说明:为用户提供计算器的使用说明,如果有必要,为代码编写文档,方便他人理解和使用你的代码。
通过以上步骤,你可以制作出一个简易但功能完整的计算器。随着编程技能的提高,你还可以考虑为其添加更多高级功能,如支持括号、科学计算等。