日期:2014-05-17 浏览次数:20905 次
C#学习8:建一个WPF文件,实现表达式求值,界面比较简陋,添加了一张背景图片,添加背景图片的代码是
<Grid.Background> <ImageBrush ImageSource="/表达式求值;component/Images/1.jpg" /> </Grid.Background>
再修改background的属性即可
输入的表达式形如:((1+2)*5+1)/4=
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace 表达式求值 { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { int[,] map = new int[7, 7] { {1,1,-1,-1,-1,1,1}, // 算符间的优先关系 {1,1,-1,-1,-1,1,1}, {1,1,1,1,-1,1,1}, {1,1,1,1,-1,1,1}, {-1,-1,-1,-1,-1,0,100}, {1,1,1,1,100,1,1}, {-1,-1,-1,-1,-1,100,0} }; char[]str=new char[1005]; char[]optr = new char[1005]; double[]opnd = new double[1005]; int t1, t2, k, len; char ch, zz; int temp1, temp2; double a, b; public MainWindow() { InitializeComponent(); } public int cam(char c) { switch (c) { case '+': return 0; case '-': return 1; case '*': return 2; case '/': return 3; case '(': return 4; case ')': return 5; case '#': return 6; default: return -1; } } public double sol(double x, char c, double y) { switch (c) { case '+': return x + y; case '-': return x - y; case '*': return x * y; case '/': return x / y; default: return -1; } } public int z(char c) { if ('0' <= c && c <= '9' || c == '.') return 1; if (c == ' ') return -1; return 0; } private void button2_Click(object sender, RoutedEventArgs e) { this.Close(); } private void button1_Click(object sender, RoutedEventArgs e) { string s = resource.Text; str = s.ToCharArray(); len = s.Length; str[len - 1] = '#'; //处理等于号 t1 = t2 = k = 0; optr[t1++] = '#'; ch = str[k++]; while (ch != '#' || optr[t1 - 1] != '#') { if (z(ch) == 1) //操作数入栈 { double num1,num2,sm; int t,flagg; num1=num2=0; t=k-1; flagg=0; sm=0.1; while (z(str[t]) == 1) { if (str[t] == '.') { flagg = 1; t++; continue; } if (flagg == 0) num1 = num1 * 10 + (str[t] - '0'); else { num2 += sm * (str[t] - '0'); sm *= 0.1; } t++; } opnd[t2++]