第一篇:计算器编程设计心得体会
计算器编程设计心得体会
——
本次有关计算器程序的编写,个人感觉还是有一定难度的。在考察运算符的重载时,其他的运算符还好,但是在定义“()”运算符时在逻辑上考虑的比较复杂,因为括号运算符内的计算优先进行,所以要考虑的有括号内的各种“+”、“-”、“*”、“/”的组合使用,还有括号里含括号的情况。括号都是成对存在的,首先要在运算式中找到最里面的一对括号(即:此括号内不再含有其他的括号)。之前的想法是用指针按次找到第一个右括号,然后再找出右括号左边的第一个左括号,计算出这两个半括号之间的公式,用t表示并替代。同理,再寻找出替换后的最里面的一对括号,计算出这两个半括号之间的公式,用t表示并替代。以此类推,使用for循环语句,直到找不到括号为止,return t;其他的方面,遇到的难点有:不知道怎么判断输入的数学公式不符合规定,除了分母不能为零比较好考虑,其他的形式总觉得会有疏漏。例如在判断“/”的右操作数不为零时则继续进行,反之则跳出,并给get赋值为1。只有当get为0时,才能正常输出。当 set为1时输出 “n您输入的不匹配,有错误发生。Result lost!” ;如果set为2,则输出 “n您输入了非法字符 , 请重新输入,谢谢合作!”;如果set值为3则输出“nStack is full, Lost result!”若是set 等于4则输出“nERROR!Divide by 0!”。但是在判断2、3、4情况时感觉不是很好描述编写。
第二篇:C#基础编程设计实验报告
C# 基础编程 设计实验报告
一、实验目的
1、熟悉 Visual Studio.NET 开发环境。
2、掌握 C#应用程序的基本操作过程。
3、掌握 C#的数据类型,运算符以及表达式的使用。
4、掌握分支和循环语句的使用方法。
5、掌握一维数组,二维数组及数组型数组的使用。
二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录(2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有 Visual Studio.NET 软件。
四、实验步骤
1、分析题意。
2、根据题目要求,新建项目。
3、编写并输入相关的程序代码。
5、运行与调试项目。
6、保存项目。
五、实验内容
1、编写一个简单的控制台应用程序,打印一行文字(如你的姓名)。
using System;using System.Collections.Generic;
using System.Linq;using System.Text;
namespace one.first {
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(“我叫王蕾!”);
}
} } 2、编写一个简单的 Windows 应用程序,在窗体 Load 事件中书写代码,标签中显示你的姓名。
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;
using System.Windows.Forms;
namespace one.second {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.Text = “Windows 程序”;
Label lblShow = new Label();
lblShow.Location = new Point(20, 30);
lblShow.AutoSize = true;
lblShow.Text = “王蕾!”;
this.Controls.Add(lblShow);
}
}
} 3、编写一个一个程序,用来判断输入的是大写字母,小写字母,数字还是其他的字符。
using System;using System.Collections.Generic;using System.Text;
namespace one.third {
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“请输入一个字符:”);
char c = Convert.ToChar(Console.ReadLine());
if((c>=“a”&&c<=“z”)||(c>=“A”&&c<=“Z”))
Console.WriteLine(“这是一个字母”);
if(char.IsDigit(c))
Console.WriteLine(“这是一个数字”);
}
}
} 4、分别用 while,do-while,for 循环求 1 到 100 的和。
using System;using System.Collections.Generic;using System.Text;
namespace one.forth.one {
class Program
{
static void Main(string[] args)
{
int i = 1, sum = 0;
while(i <= 100)
{
sum = sum + i;
i++;
}
Console.WriteLine(“1 到 100 的自然数之和为:” + sum);
}
}
} using System;using System.Collections.Generic;using System.Text;
namespace one.forth.two {
class Program
{
static void Main(string[] args)
{
int i = 1, sum = 0;
do
{
sum = sum + i;
i++;
}
while(i <= 100);
Console.WriteLine(“1 到 100 的自然数的和为:” + sum);
}
}
} using System;using System.Collections.Generic;using System.Text;
namespace one.forth.three {
class Program
{
static void Main(string[] args)
{
int i , sum = 0;
for(i = 1;i <= 100;i++)
{
sum = sum + i;
}
Console.WriteLine(“1 到 100 的自然数的和为:” + sum);
}
} } 5、定义一个一维数组,用随机数为此赋值,用 foreach 循环输
出其中的内容。
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace first.five {
class Program
{
static void Main(string[] args)
{
int[] a = {0,1,2,3,4};
foreach(int i in a)
{
Console.WriteLine(a[i]);
}
}
} } 6、实现二维数组的输入和输出。
using System;
using System.Collections.Generic;using System.Linq;using System.Text;
namespace first.six {
class Program
{
static void Main(string[] args)
{
int[,] a = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
{
for(int i = 0;i < 2;i++)
{
for(int j = 0;j < 3;j++)
{ Console.WriteLine(a[i, j]);}
}
}
}
} }
7、实现数组型数组的输入和输出。
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace first.seven {
class Program
{
static void Main(string[] args)
{
int[][] a = new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5, 6 } };
for(int i = 0;i < a.Length;i++)
{
for(int j = 0;j < a[i].Length;j++)
{
Console.WriteLine(a[i][j]);
}
}
}
} } 六、实验体会(遇到问题及解决办法,编程后的心得体会)
刚开始编程的时候觉得无从下手,尽管我们已经学了好几种高级编程语言,但每个都有其独特的地方,稍不留神就会混淆。
通过这次实验,我体会到课后复习巩固的重要性。在编程的时候,很多内容都不记得,需要去翻书。不得不说,实验是巩固课程的好方法!本次实验,我熟悉 Visual Studio.NET 开发环境;掌握了 C#应用程序的基本操作过程;掌握了 C#的数据类型,运算符以及表达式的使用;掌握了分支和循环语句的使用方法以及一维数组,二维数组及数组型数组的使用。
实验项目名称:
类与对象
实验学时:
同组学生姓名:
实验地点:
1318
实验日期:
月 26 日-11 月 9 日 实验成绩:
批改教师:
批改时间:
实验 2
类与对象
一、实验目的、要求
(1)掌握类的定义和使用;(2)掌握类的数据成员,属性的定义和使用;(3)掌握方法的定义,调用和重载以及方法参数的传递;(4)掌握构造函数的定义和使用。
二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录;(2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有 Visual Studio.NET 软件。
四、实验步骤
1、分析题意; 2、根据题目要求,新建项目; 3、编写并输入相关的程序代码; 5、运行与调试项目; 6、保存项目。
五、实验内容
1、定义一个方法,实现两个数的交换(分别把参数按值传递和按引用传递)。
using System;
using System.Collections.Generic;using System.Text;
namespace second.one {
class Program
{
static void Main(string[] args)
{
Swaper s = new Swaper();
Console.WriteLine(“输入 x 的值:”);
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“输入 y 的值:”);
int b=Convert.ToInt32(Console.ReadLine());
Console.WriteLine(s.Swap(a, b));
Console.WriteLine(s.Swap(ref a,ref b));
}
class Swaper
{
public string Swap(int x, int y)
{
int temp;
temp = x;
x = y;
y = temp;
return string.Format(“按值传参交换之后:x={0},y={1}”,x,y);
}
public string Swap(ref int x, ref int y)
{
int temp;
temp = x;
x = y;
y = temp;
return string.Format(“按引用传参交换之后:x={0},y={1}”, x, y);
}
}
} }2、定义一个方法,实现数组的排序。
using System;using System.Collections.Generic;using System.Text;
namespace second.two {
class Program
{
public class sort
{
public void change(int[] a)
{
Console.WriteLine(“排序前,数组顺序为:”);
show(a);
int i, j, m;
for(i = 0;i < 10;i++)
{
m = a[i];
j = i-1;//a[j]为数组前一个值
while(j >= 0 && m > a[j])//判断 i 下标的数是否大于 j 下标的数
{
a[j + 1] = a[j];//如果 i 下标大于j 把 j 往后移一个位
j--;
}
a[j+1] = m;//当不大于 j 的时候就把 M的值放到 i 下标下面 j+1 是为了下标减到最前时考虑-1 + 1 还是下标的最前面
}
Console.WriteLine(“排序后,数组顺序为:”);
show(a);
}
void show(int[] a)
{
int i;
for(i = 0;i < 10;i++)
{
Console.Write(“{0} ”, a[i]);
}
Console.WriteLine();
}
}
static void Main(string[] args)
{
int[] a ={ 4, 7, 1, 2, 5, 8, 9, 10, 3, 6 };
sort s=new sort();
s.change(a);
}
} } 3、定义一个学生类,把学生类当作对象来传递。
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace second.three {
class Program
{
public class student
{
public void st()
{
int a = 999;
}
}
public class st
{
public void aa(student s)
{
Console.WriteLine(s);
}
}
static void Main(string[] args)
{
student s=new student();
st s1 = new st();
s1.aa(s);
}
} } 4、定义一个方法,求两个数的和和差,通过参数把这两个值带回。
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace
second.four
{
class Program
{
public class sum
{
public void ab(out int m, out
int n,int a, int b)
{
m = a + b;
n = a-b;
}
}
static void Main(string[] args)
{
sum s = new sum();
int a = 10;
int b = 3;
int m, n;
s.ab(out m, out n, a, b);
Console.WriteLine(“{0}+{1}={2};{0}-
{1}={3}”,a,b,m,n);
}
} } 5、用构造函数重载,实现矩形的面积,圆的面积,梯形的面积; using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace secong.five {
class Program
{
public class square
{
public double area;
public square(){ }
public square(double a)
{
area = a * a * 3.14;
}
public square(double a, double b)
{
area = a * b;
}
public square(double a, double b, double h)
{
area =(a + b)/ 2 * h;
}
}
static void Main(string[] args)
{
double a, b, h,area;
a = 2;b = 5;h = 3;
square s = new square(a,b);
Console.WriteLine(“求矩形面积,长为 a={0},宽为 b={1},面积 area={2}”,a,b,s.area);
square i = new square(a);
Console.WriteLine(“求圆形面积,半径 a={0},面积 area={1}”, a, i.area);
square j = new square(a, b, h);
Console.WriteLine(“求梯形面积,上底为a={0},下底为 b={1},高为 h={2}面积 area={3}”, a, b,h, j.area);
}
} } 6、设计一个 windows 应用程序,在该程序中定义一个学生类和班级类,以处理每个学生的学号,姓名,语文,数学和英语成绩,要求:
1)能查询每个学生的总成绩。
2)能显示全班前三名的名单。
3)能显示单科成绩最高分和不及格的学生名单。
4)能统计全班学生的平均成绩。
5)能显示各科成绩不同分数段的学生人数的百分比。
Student 类:
using System;using System.Collections.Generic;using System.Text;namespace Test2_6 {
public class Student
{
public string stuNo;
public string name;
public double chinese;
public double math;
public double english;
public double sumScore
{
get { return chinese + math + english;}
}
} } StudentList 类:
using System;using System.Collections.Generic;using System.Text;namespace Test2_6 {
public class StudentList:Student
{
int snums;
public Student[] stu=new Student[50];
public StudentList()
{
snums = 0;
}
public void addstu(Student s)
{
stu[snums] = s;
snums++;
}
public int searchstu(string name)
{
int i;
for(i = 0;i < snums;i++)
{
if(stu[i].name == name)break;
}
if(i == snums)return-1;
else return i;
}
//给所有成绩排序,用后面实现前三名的排名
public void ProThree()
{
for(int i = 0;i < snums;i++)
{
int k = i;
for(int j = i + 1;j < snums;j++)
if(stu[j].sumScore > stu[k].sumScore)k = j;
if(k!= i)
{
Student temp;
temp = stu[k];
stu[k] = stu[i];
stu[i] = temp;
}
}
}
//显示单科成绩的最高分
public int HighScore(int k)
{
int p = 0;
if(k == 0)
{
for(int i = 1;i < snums;i++)
if(stu[i].math > stu[p].math)p = i;
}
else if(k == 1)
{
for(int i = 1;i < snums;i++)
if(stu[i].chinese > stu[p].chinese)p = i;
}
else
{
for(int i = 1;i < snums;i++)
if(stu[i].chinese > stu[p].chinese)p = i;
}
return p;
}
//显示不及格名单
public string
BuhgName(int k)
{
string name=“ ”;
if(k == 0)
{
for(int i = 0;i < snums;i++)
if(stu[i].math < 60)name +=stu[i].name+“n”;
}
else if(k == 1)
{
for(int i = 0;i < snums;i++)
if(stu[i].chinese < 60)name += stu[i].name + “n”;
}
else
{
for(int i = 0;i < snums;i++)
if(stu[i].english < 60)name += stu[i].name + “n”;
}
return name;
}
public string getHL()
{
string Maxer = “ ”, Loser = “ ”;
Maxer += “ 单 科 数 学 最 高 :
” + stu[HighScore(0)].name + “n”;
Maxer += “ 单 科 语 文 最 高 :
” +
stu[HighScore(1)].name + “n”;
Maxer += “ 单 科 英 语 最 高 :
” + stu[HighScore(2)].name + “n”;
Loser += “单科数学挂科名单:” +BuhgName(0)+ “n”;
Loser += “单科语文挂科名单:” + BuhgName(1)+ “n”;
Loser += “单科英语挂科名单:” + BuhgName(2)+ “n”;
return Maxer + “n” + Loser;
}
//全班的平均成绩
public string SumScore()
{
double sum = 0;
double avg=0;
for(int i = 0;i < snums;i++)
{
sum = sum + stu[i].sumScore;
}
avg = sum / snums;
return “班级总分平均分:”+avg;
}
//各科成绩不同分数段的学生百分比
//英语成绩各分数段百分比
public string PerC()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for(int i = 0;i < snums;i++)
{
if((stu[i].chinese > 90)&&(stu[i].chinese <= 100))
{
sumC1++;
}
else if((80 <= stu[i].chinese)&&(stu[i].chinese < 90))
{
sumC2++;
}
else if((70<=stu[i].chinese)&&(stu[i].chinese < 80))
{
sumC3++;
}
else if((60<=stu[i].chinese)&&(stu[i].chinese < 70))
{
sumC4++;
}
else
{sumC5++;}
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return “ 语 文 成 绩 百 分 比 :”+“n”+“90~100:”+per1+“
80~90:”+per2+“
80~70:”+per3+“
70~60:”+per4+“
以下的:”+per5;
}
//数学成绩各分数段百分比
public string PerM()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for(int i = 0;i < snums;i++)
{
if((stu[i].math> 90)&&(stu[i].math <= 100))
{
sumC1++;
}
else if((80 <= stu[i].math)&&(stu[i].math < 90))
{
sumC2++;
}
else if((70 <= stu[i].math)&&(stu[i].math < 80))
{
sumC3++;
}
else if((60 <= stu[i].math)&&(stu[i].math < 70))
{
sumC4++;
}
else
{ sumC5++;}
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return string.Format(“数学成绩百分比:” + “n” + “90~100:” + per1 + “
80~90:” + per2 + “
80~70:” + per3 + “
70~60:” + per4 + “
以下的:” + per5);
}
//英语成绩各分数段百分比
public string PerE()
{
double per1, per2, per3, per4, per5;
double sumC1 = 0, sumC2 = 0, sumC3 = 0, sumC4 = 0, sumC5 = 0;
for(int i = 0;i < snums;i++)
{
if((stu[i].english > 90)&&(stu[i].english <= 100))
{
sumC1++;
}
else if((80 <= stu[i].english)&&(stu[i].english < 90))
{
sumC2++;
}
else if((70 <= stu[i].english)&&(stu[i].english < 80))
{
sumC3++;
}
else if((60 <= stu[i].english)&&(stu[i].english < 70))
{
sumC4++;
}
else
{ sumC5++;}
}
per1 = sumC1 / snums;
per2 = sumC2 / snums;
per3 = sumC3 / snums;
per4 = sumC4 / snums;
per5 = sumC5 / snums;
return string.Format(“数学成绩百分比:” + “n” + “90~100:” + per1 + “
80~90:” + per2 + “
80~70:” + per3 + “
70~60:” + per4 + “
以下的:” + per5);
}
} } From 窗体代码:
using System;using System.Collections.Generic;
using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace Test2_6 {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public StudentList sl = new StudentList();
private void btnAdd_Click(object sender, EventArgs e)
{
Student s = new Student();
s.stuNo = txtStuNo.Text;
s.name = txtName.Text;
s.chinese = Convert.ToDouble(txtChina.Text);
s.math = Convert.ToDouble(txtMath.Text);
s.english = Convert.ToDouble(txtEng.Text);
sl.addstu(s);
MessageBox.Show(“添加成功”);
}
private void btnSearch_Click(object sender, EventArgs e)
{
int pos = sl.searchstu(this.textBox1.Text);
if(pos!=-1)
{
label7.Text = this.textBox1.Text + “的总成绩:” + sl.stu[pos].sumScore;
}
else { MessageBox.Show(“不存在这个人!”);}
}
private void btnFinish_Click(object sender, EventArgs e)
{
label7.Text = “前 3 名:”+“n”;
for(int i = 0;i < 3;i++)
{
sl.ProThree();
label7.Text+= sl.stu[i].name+“n”;
}
label7.Text += sl.getHL()+“n”;
label7.Text += Convert.ToString(sl.SumScore())+“n”;
label7.Text += sl.PerC()+“n”;
label7.Text += sl.PerM()+“n”;
label7.Text += sl.PerE()+“n”;
}
} }
六、实验体会(遇到问题及解决办法,编程后的心得体会)
通过本次实验,我掌握了类的定义与使用;掌握了类的数据成员,属性的定义和使用;掌握了方法的定义,调用和重载以及方法参数的传递以及构造函数的定义和使用。值得注意的是:本次实验中 return的使用以及所在的位置,类型转换时也经常用到
实验项目名称:
继承与多态
实验学时:
同组学生姓名:
实验地点:
1318
实验日期:月 16 日-11 月 30 日 实验成绩:
批改教师:
批改时间:
实验 3
继承与多态
一、实验目的、要求
(1)掌握类的继承性与多态性;(2)掌握虚方法的定义以及如何使用虚方法实现多态;(3)掌握抽象类的定义以及如何使用抽象方法实现多态; 二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录;(2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有 Visual Studio.NET 软件。
四、实验步骤
1、分析题意; 2、根据题目要求,新建项目; 3、编写并输入相关的程序代码; 5、运行与调试项目; 6、保存项目。
五、实验内容
1、设计一个 Windows 应用程序,在该程序中首先构造一个学生基本类,再分别构造小学生、中学生、大学生派生类,当输入相关数据,单击不用的按钮时,将分别创建不同的学生类对象,并输出当前学生的总人数,该学生的姓名,学生类型,平均成绩。
Student 类:
using System;using System.Collections.Generic;using System.Text;namespace Test3_1 {
public abstract class Student
{
protected string name;
protected int age;
public static int number;
public Student(string name, int age)
{
this.name = name;
this.age = age;
number++;
}
public string Name
{
get { return name;}
}
public abstract double Average();
}
public class Pupil : Student
{
protected double chinese;
protected double math;
public Pupil(string name, int age, double chinese, double math)
: base(name, age)
{
this.chinese = chinese;
this.math = math;
}
public override double Average()
{
return(chinese + math)/ 2;
}
}
public class Middle : Student
{
protected double chinese;
protected double math;
protected double english;
public Middle(string name, int age, double
chinese, double math, double english)
: base(name, age)
{
this.chinese = chinese;
this.math = math;
this.english = english;
}
public override double Average()
{
return(chinese + math + english)/ 3;
}
}
public class College : Student
{
protected double required;
protected double elective;
public College(string name, int age, double required, double elective)
: base(name, age)
{
this.required = required;
this.elective = elective;
}
public override double Average()
{
return(required + elective)/ 2;
}
} } Form 窗体内的代码:
using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace Test3_1 {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnSmall_Click(object sender, EventArgs e)
{
Pupil p = new Pupil(txtName.Text,Convert.ToInt32(txtAge.Text),Convert.ToDouble(txtChinese.Text),Convert.ToDouble(txtMath.Text));
lblShow.Text += “ 总 人 数 :” +Convert.ToString(Student.number)+ “,” + “姓名:” + p.Name + “,” + “小学生” + “,” + “平均成绩为:” + p.Average()+“n”;
}
private void btnMiddle_Click(object sender, EventArgs e)
{
Middle m = new Middle(txtName.Text, Convert.ToInt32(txtAge.Text), Convert.ToDouble(txtChinese.Text), Convert.ToDouble(txtMath.Text),Convert.ToDouble(TxtEnglish.Text));
lblShow.Text += “ 总 人 数 :” + Convert.ToString(Student.number)+ “,” + “姓名:” + m.Name +
“,” + “中学生” + “,” + “平均成绩为:” + m.Average()+ “n”;
}
private void btnBig_Click(object sender, EventArgs e)
{
College c = new College(txtName.Text, Convert.ToInt32(txtAge.Text), Convert.ToDouble(txtChinese.Text), Convert.ToDouble(txtMath.Text));
lblShow.Text += “ 总 人 数 :” + Convert.ToString(Student.number)+ “,” + “姓名:” + c.Name + “,” + “大学生” + “,” + “平均成绩为:” + c.Average()+ “n”;
}
} } 2、设计一个 Windows 应用程序,在该程序中定义平面图形抽象类和派生类圆,矩形和三角形。
Figure 类代码:
using System;using System.Collections.Generic;using System.Text;namespace Test3_2
{
public abstract class Figure
{
public abstract double Area();
}
public class Circle:Figure
{
double radius;
public Circle(double r)
{
radius = r;
}
public override double Area()
{
return radius * radius * 3.14;
}
}
public class JUxing:Figure
{
double chang;
double kuan;
public JUxing(double c, double k)
{
this.chang = c;
this.kuan = k;
}
public override double Area()
{
return chang * kuan;
}
}
public class San:Figure
{
double bian;
double heigth;
public San(double b, double h)
{
this.bian = b;
this.heigth = h;
}
public override double Area()
{
return bian * heigth / 2;
}
} } Form 窗体代码:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace Test3_2 {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnCircle_Click(object sender, EventArgs e)
{
Circle c=new
Circle(Convert.ToInt32(TxtChang.Text));
lblShow.Text = “圆的面积为:” + c.Area();
}
private void btnJu_Click(object sender, EventArgs e)
{
JUxing j = new JUxing(Convert.ToInt32(TxtChang.Text),Convert.ToInt32(TxtHigh.Text));
lblShow.Text = “矩形的面积为:” + j.Area();
}
private void btnSan_Click(object sender, EventArgs e)
{
San s = new San(Convert.ToInt32(TxtChang.Text), Convert.ToInt32(TxtHigh.Text));
lblShow.Text = “三角形的面积为:” + s.Area();
}
} }
3、定义一个 Person 类,包含姓名字段和一个方法,早上 8:30学生开始上课,教师开始讲课。分别用 new 关键字,虚方法,抽象类实现多态性。
New 关键字:
using System;using System.Collections.Generic;using System.Text;
namespace third.three {
class Program
{
static void Main(string[] args)
{
Student s=new Student(“学生”);
Teacher t=new Teacher(“教师”);
Console.WriteLine(s.name+s.work());
Console.WriteLine(t.name+t.work());
Console.ReadLine();
}
}
public class Person
{
public string name;
public interface method
{ string work();}
}
public class Student:Person
{
public Student(string name)
{ this.name = name;}
public string work()
{ return “早上 8:30 开始上课”;}
}
public class Teacher:Person
{
public Teacher(string name)
{ this.name = name;}
public string work()
{ return “开始讲课”;}
} } 虚方法:
using System;
using System.Collections.Generic;using System.Text;
namespace third.three.two {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“张三”,“学生”);
PersonWork(s);
Teacher t=new Teacher(“李斯”,“教师”);
PersonWork(t);
}
private static void PersonWork(Person Person)
{ Console.WriteLine(Person.Work());}
}
public class Person
{
public string name;
public Person(string name)
{ this.name = name;}
public virtual string Work()
{ return string.Format(“Person{0}:早上 8:30 开始”,name);}
}
public class Student : Person
{
private string type;
public Student(string name, string type)
: base(name)
{ this.type = type;}
public override string Work()
{
return string.Format(“Person{0}:早上 8:30 开始上课”, name);
}
}
public class Teacher : Person
{
private string type;
public Teacher(string name, string type)
: base(name)
{ this.type = type;}
public override string Work()
{
return string.Format(“Person{0}:开始讲课”, name);
}
} }
抽象类:
using System;using System.Collections.Generic;using System.Text;
namespace third.three.three {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“张三”, “学生”);
PersonWork(s);
Teacher t = new Teacher(“李斯”, “教师”);
PersonWork(t);
}
private static void PersonWork(Person person)
{
Console.WriteLine(person.Work());
}
}
public abstract class Person
{
public string name;
public Person(string name)
{ this.name = name;}
public abstract string Work();
}
public class Student : Person
{
private string type;
public Student(string name, string type)
: base(name)
{
this.type = type;
}
public override string Work()
{
return string.Format(“Person{0}:早上 8:30 开始上课”, name);
}
}
public class Teacher : Person
{
private string type;
public Teacher(string name, string type)
: base(name)
{
this.type = type;
}
public override string Work()
{
return string.Format(“Person{0}:开始讲课”, name);
}
}
}
六、实验体会(遇到问题及解决办法,编程后的心得体会)
通过本次实验,我理解了类的继承性与多态性;掌握了虚方法的定义以及如何用虚方法来实现多态;掌握了抽象类的定义以及如何用抽象方法来实现多态。
这次实验与前两次不同,采用 Windows 应用程序,既涉及到代码段也涉及到界面的设计。所以,勉强通过实验。
实验项目名称:
接口、文件和流
实验学时:
同组学生姓名:
实验地点:
A205
实验日期:月 7 日-12 月 21 日 实验成绩:
批改教师:
批改时间:
实验 4
接口、文件和流
一、实验目的
(1)掌握接口的定义及使用方法;(2)掌握流,序列化和反序列化的概念和使用方法;(3)掌握流文件的读写操作类及其使用方法;(4)掌握 OpenFileDialog,SaveFileDialog 等控件的使用。
二、实验要求
(1)编写程序要规范、正确,上机调试过程和结果要有记录;(2)做完实验后给出本实验的实验报告。
三、实验设备、环境
安装有 Visual Studio.NET 软件。
四、实验步骤
1、分析题意; 2、根据题目要求,新建项目; 3、编写并输入相关的程序代码; 5、运行与调试项目; 6、保存项目。
五、实验内容
1、定义一个 Person 类,包含姓名字段和一个方法,早上 8:30学生开始上课,教师开始讲课。用接口来实现。
using System;using System.Collections.Generic;
using System.Text;namespace Test4_1 {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“张三”,“学生”);
Console.WriteLine(s.Work());
Teacher t = new Teacher(“李四”,“老师”);
Console.WriteLine(t.Work());
}
public abstract class Person
{
public string name;
public Person(string name)
{
this.name = name;
}
}
interface IPerson
{
string type { get;}
string Work();
}
public class Student :Person, IPerson
{
public string type
{
get { return string.Format(“老师”);}
}
public Student(string name, string type)
: base(name)
{
this.name=name;
}
public string Work()
{
return string.Format(“Person{0}:早上 8:30 开始上课”, name);
}
}
...
第三篇:专用计算器剖析
工程与管理经济学
Kleinfeld Ira
1.专用计算器
至 1970 年以来,一些制造商(德州仪器、惠普)就已经开始研发计算器,举个例子:德州仪器模型 BA-II 就可以直接计算时间价值指数:(F/P,i%,n),(F/A,i%,n)等等,和一些方程式。这些机器加速了时间价值的计算同时减少计算所需的按键数量指数。
在第二个章节中,TI 这个机器用一个关键的字母定义每一个对应的变量,符号的对应关系如下:
F
FV(未来价值)
P
PV(现值)A
PMT(支付款)I%
i%(利润率)N
N
(时间)
该程序就是输入一个构成已给定信息变量的值,随后就是说明这个字母说表示的含义(举个例子来说,你在键盘中输入 100,随后输入 PV,就说明它代表的是现在的价值),在所有的数据输入完成以后,就会如上图所示,然后按下“2nd”(大写字母键),随后就会出现你所要求的另外一个值。然后这个机器就会计算和显示你所需求的数目。举个例子来说:我们来计算未来价值的方案中,首先输入 10,按下 i%键,然后输入 2000,按下 PV 键,随后输入 4,按下 N键,最后按下第二个和 FV 键,然后一个熟悉的结果:3147.04 就会显示出来。
这些计算器相对于以前来说在计算时间价值有很高的速度,但他们并没有带来承担的现代大功率计算复杂和重复的时间价值分析模型。这本书的目的就是指出现代计算器可以完成时间价值分析的一个方向。下面是一些关于现代计算器所具备的基本特征的列表和解释,单独与一个示例程序流程图和代码的形式表现,在本章中所讨论的程序列表在附录 C 中,附录 D 中,计算器对时间价值的一些问题应用的范围将被扩大,其中包含了一些纳税和敏感性分析。他们也可形成系列的个人计算机和苹果 2 以磁盘的形式发布。
2.电脑
在这个章节中,用指令码编写的电脑程序将会有效的解决所有关于前面章节大比例的时间价值的问题.包括了一些大量的关于个人时间价值的相对解决方案的比较。
有经验的时间价值分析师会发现程序非常容易使用,因为它是书面的互动,然而,新手可能需要更多的时间学习使用它,接下来简单的解释一下每一个步骤,相反,对于结构方案的概述,他将会成为那些将软件用于这一目的理想用户的例证。我们会将这些特征一一解释并且列在图表中(图 5-1 表示程序流程图)在接下来的一章,会展示一块比较详细的逻辑程序。
2.1 计算时间价值量
一个最低限度的程序应该能够计算并适用当前,未来,或周期值,以及内部或外部的回报率,这样的软件是很容易准备和在计算机中心图书馆存在。此外,对于相同的一组数据(流),它应该能够计算不同的值,如现值和等额年金。
流程图的试验表明,A1 区块包含时间价值方程 2-1 至 2-6 以一个程序中的计
算基本函数形式。在 B1 区块中,用户选择一个被特殊的程序所计算的时间价值方案。D3 块,D4 块,C5 块和 G5 块包含了一个关于时间价值计算的逻辑,注意,这个程序允许用户回到B1块是为了计算一个对于相同现金流量数据的不同的时间价值方案。
2.2 合并因素
这种能力是指该程序接受“元素”的数据流动并自动将它们合并,用于时间价值分析的目的,考虑例子 4-1,它包含了一些关于投资成本,年收入,劳动力,能源,维修,税成本,保险,和杂项费用的数据,乍看之下,结合任何时期数据流的能力看似是无关紧要的优势。事实上,表 4-1 的数据显示年总成本(劳动力,电力,维护,和税收)作为一个简单的总结。然而,该模型复杂的应用往往需要不同的预计增长率随时间的单独的“元素”的价值观。例如,它可以预期,人工费用将保持不变,而维护的速度可能会增加 4%。或分析师可能希望进行敏感度和不同的能源成本的分析,为了看时间的价值随着这样的假设变化而变化。回想一下这样一个分析在第一章已经讨论。显然,这两种实际的需求对待处理这些基本元素说明了愿望,而依靠电脑来“合并”每个时期的数据流在继续之前的时间价值计算。
大多数可用的软件不运行合并功能。相反,在用电脑分析时间价值之前分析师需要手动输入一些数据。通常这种准备工作相对于电脑自行分析时间价值的时间要久许多。
下面的插图将作为一个澄清。考虑到三个“元素”的流动表现为现金流量图5-1a:
分析师需要将 D5-1a 的数据手动合并,从而获得图表 D5-1b。一个好的程序,如在本章所提供的数据,分析师将执行这个函数。
程序流程图中,块 C1 通过 E1 描述数据收集过程,所谓的因素就是从用户交互,然后对每一个“元素”的流动。这一因素可能采取以下三种形式之一:单一的时间段数量,统一系列(年金),第三种计划允许其他比单一的时间段数量呈现梯度或者递增系列,均匀或百分比,块 H1 通过 K1 执行合并功能,所以也认为是单一的计算净现金流量。
2.3 处理梯度算法和百分比
通常对于一个数据流根据一个一致的模式增加或减少是必须处理的。两个这样的情况下,均匀(算术)和百分梯度。算术梯度就是数据流在每个时期相同的绝对数量增加或减少,两个例子给出了现金流图 5-2。
在第一种情况下的均匀梯度是+ 3,在第二种情况下,它是-1。
百分之一梯度就是数据流在每个时期以同样比例增加或减少的金额,两个例子中的现金流量图 5-3 所示。
在第一种情况下,后期 1 +20%增加的百分比,其次是-20%。这样的梯度对某些元素流的预测是非常有用。在软件计算时间价值的能力时候是他们理想的伴侣,但是,简单的代数方程不存在这个情况,他们为均匀梯度。因此,分析师希望处理比例梯度必须沉闷地做“手工”。用计算机软件为一个特定的梯度值梯度系列,或统一的制服梯度增加。然后周期值可以存储合并,像其他因素一样。
2.4 促进敏感性分析
敏感性分析是另一个重要的能力,在现有的时间价值分析软件中经常被忽略。有经济用途的建模过程需要大量的涉及相关变量的值。它的适用性和预测值的模型部分取决于在何种程度上这些变成是正确的以后。虽然敏感性分析没有更好的帮助预测未来,但是它有助于规范涉及预测过程中的风险。换句话说,如果
模型允许因为一个变量的问题而重复计算,说劳动成本,改变任一方向的现实限制然后成为最佳预计,这不是改变模型的实质性建议,但是这种分析在很大程度上增加为决策模型达到预期结果的信心。
显然,相反的效果还持有。然而,敏感性分析有助于在这样的情况下:决策过程,因为最初的信心不足,促进更多的调查有关的问题中的变量。这是可能的,这种加倍的努力后,估计变量更精确,得到更多的一些结论。在最坏的情况下,决策者更好地洞察那些持有最大的危险因素对他们的建议的结果。
在第一章实例 1-2 表明,敏感性分析可以计算要求。计算机软件的设计应以改善这一困难。灵敏度分析程序中提供以下方式(见图 5-1):块 K3 通过 G1 显示在用户改变一个因子的逻辑,删除旧的因素的影响,取而代之的是新的,然后重新计算流动(融合)。最后,进行数值计算后的因子的变化已占到并存储以供将来使用价值(检验,数据文件的建立,和/或图形)。
这样的逻辑程序的一个额外的好处是,它容易允许改变那些可能是由于用户输入错误地这些因素的数据。这是尤其需要进行互动式程序的。因此,已经收集了所有的因素的数据,他们用符合他们的输入格式“呼应”或显示。在这一点上,用户有机会改变或增加因素,从块 X 的流程图中得出。
2.5 促进替代方案的比较
上面描述的相同的程序逻辑进行敏感性分析也可以用来促进盈利,从而比较两个或两个以上的选择方案,对于第一选择的分析,拿 A 来说,收益已经被描述。例如,对于 A 来说,人们可能会开始计算的现值,再重复执行的程序,通过利率和折现率的到两个价值。此时两个值将被存储,一个用于的现值,其它一个为其等效价值.分析一个或多个额外的选择,拿 B 来说,程序允许变更因素构成的 A,一次,直到所有关于 A 的输入数据被 B 所取代,然后程序将计算之前指定的用户时间价值度量 B,当然,对于 B 用户可能寻找计算不同时间价值方案,就像以前计算 A 一样,以供将来使用或显示.3.程序使用/项目总结
这一章所总结的关于程序的运用将在图表 5-1 中描述,此外,它将介绍一些关于它的逻辑。
用户必须选择因变量的类型来计算,输入因变量:
1:内部收益率 2;现值或将来值 3:周期性的价值 4:外部收益率 用户然后输入数据的第一因素,给它分配一个名称并且说明其类型,对应如以下:
对于因素 1 输入因子类型 1-单期数量 2-统一系列 3-均匀梯度系列
此外,因素的一些特征,例如他的价值和时期出现的频率,将会被用户所操控,这些方式通过现金流图 D5-4 到 D5-9 进行说明.单一的时间段,用户的需要: 1,价值或数量 价值或数量发生的时期 价值=+1000,在时期 0 价值=-500,在时期 3 统一系列,需要用户:
1,每一个时期的数量和价值,2,开始时期,这段时间的增量,在这一系列中价值出现的数量,数量=+1000,在第 2 时期开始,一共出现了三次增量。
梯度系列中,用户必须提供:
1,系列中初始价值量 2,开始时期 3,这段时间增量 4,数字出现频率
5,增加或减少节奏(梯度或百分比)
增加或减少的价值 初始价值=500,开始时期是 1,在 2,3 时期出现变化,每次递减 50 初始价值=-500,开始时期是 1,1-5 时期连续出现,以梯度 10%比例改变。
如果有更多的因素输入(示例中是 15 个因素为标准)用户将会返回步骤 2,如果没有的话,将会去往步奏 4 A,这个程序需要计算在步奏 2 中每一个因素的时期流动。
B,然后计算每个阶段时期的数量总的流动(示例程序中是 52 个为标准尺寸)
C,然后得出输入的规律(在继续之前,允许更改一些由于键盘错误和变化的因素)
D,如果用户想要增加或者减少一个数据,程序控制将会转移一部分数据,如果不允许的话,在进入下一步之前,数据流会将每一个时期的数据显示出来。
步骤 1 中,选择周期性流动计算的因变量,并显示结果 在这个步奏中,用户增加或减少一个因素(不论是敏感性分析或者替代性选择)这个程序需要:
A,列出增加或减少因素条目 B,通过旧的元素来替换 C,综合这些元素得到一个新的元素(这个和步骤 2 是相同的)
D,批准这些对应的元素
E,删除影响总周期流的旧的因素 F,计算数据流从而得到一个新的数据流 G,最后,如果没有希望改变的了,在水平线上,计算并且列出新的数据流。
7,在这里,测量相同的一组因素,用户可以选择计算不同时间价值方法,举个例子来说,计算现值,他可能会想要计算周期(年)的价值,他计划允许返回步骤 1(如果允许的话,数据将不会被返回),如果不需要更多的计算,程序将会显示“和/或”发送到一个文件中,以供将来使用。
计算机的逻辑-程序,子例程:在图表 5-1 中,详细的介绍了一些关键表格的数据流的逻辑,因此,一般的读者,或只是希望使用这个程序的人不熟悉其逻辑的细节,更加可能忽略,读者希望程序适应一个特定的需求,就会发现阅读的必要性。
每个部分的表格,对应于一块主程序,在大多数情况下,用一种流程图来表示逻辑,在每一个实例中,列表包括在内,定义这邪恶以前没有在过程中出现的变量,此外,全部编码的程序在附录 C 中,读者应该注意到,开始有一个索引为 1 是循环覆盖不同的时期,而不是 0,因此,当输入周期数据(允许开始 0),这些数据将在+1 后被输入,然后显示之前执行反向转换输出的数据。
函数定义 :在方程 2-1 至 2-6 中,对于离散复合函数,在程序中被定义为后续使用的功能。只是为了避免了指定每次要求详细计算。(如果用户要求继续计算,他需要改变这些功能的定义,或者,如果这个选择是他希望的,他将把这些放进一个带有开关指示灯执行程序的地方)
变量 D3:利息或者折现率 N:时期的数量 A(N)=(1+D3)(代表 F/P)B(N)=1/(1+D3)(代表 P/F)C(N)=[(1+D3)
-1](代表 A/F)D(N)=D3/[(1+D3)
-1](代表 A/F)E(N)=[(1+D3)
-1]/[D3(1+D3)
](代表 A/P)F(N)=[D3(1+D3)]/[(1+D3)
-1](代表 P/A)
N N N NN N N N
存在不存在 C1
D1
收集变量数据 收集变量数据
数据是否存在?
定义一个函数
S=0;Y2=0 B A 得到 J=1,15 子程序:收集因子 J 的数据
E1
否
是
H1
J1
K1
X
是 是否有更多的数据
数据=J 数据=15
J2=1,子程序:找到 J2的时期数据流动
子程序:
计算数据流
子程序:再次数据输入 数据是否改变? C
否
是
否
是
否
印刷每一期的数据流 A
Y2=Y2+1 D=4?(外部收益率)
子程序:外部收益
D=1?(内部收益率)子程序:内部收益率 子程序:计算所有数据净现值 D=2?(现 值或 者 将 来价值)
否
K3
否
是
B2
否
否
是
否
否
净现值转换为定期的价值 计算现值或者将来的值 Y(Y2)=Y1(存储这个结果)D
计算数据流
Y2=10增加或减少一个元 =0? 重做相同的数据
输入# C 卸下因素 J的旧数据 在因素J中收集新的数据 子程序:重B
Y2=1?
输出报告 结束
书名:Engineering and managerial economics /Ira H.Kleinfeld.作者:Kleinfeld Ira..出版社:New York :Holt, Rinehart, and Winston,c1986.起始页码:83,结束页码:94
第四篇:计算器实验心得
院
系:计 算 机 学 院
实验课程:计算机基础实验 实验项目:计算器 指导老师:宋桂琴
开课时间:2010 ~ 2011第 2学期
专 业:软件工程(数字媒体)班 级:10本8班 学 生:史文林 学 号:20102003056
华南师范大学教务处
在这个实验中,我首先按照《程序设计实验课程指导》中的步骤做,然后再在 “calculatorDlg.cpp”文件中增加不同的算法功能,在实验过程中出现了一些问题,但都通过自己检查或者其他同学的帮助解决了,以下就是我实验过程中碰到的问题:
(1)在按照指导书中的步骤做完后,再在“ calculatorDlg.cpp”文件中增加了“atan”“exp”“sqrt”“log”这四个功能,一开始以为增加了功能就完事 华 南 师 范 大 学 实 验 报 告
学生姓名
史文林
学
号
20102003056
专
业
软件工程(数字媒体)
年级、班级
10本8班
课程名称
计算机基础实验
实验项目
计算器
实验时间
2011 年 月日
实验指导老师
宋桂琴
实验评分
了,就点击“build”健,但结果显示程序存在多个错误,然后才知道没有在“calculatorDlg.h”文件中写“include
void CCalculatorDlg::OnRadio5(){ // TODO: Add your control notification handler code here m_edit1=atan(result);UpdateData(FALSE);}
void CCalculatorDlg::OnRadio6(){ // TODO: Add your control notification handler code here m_edit1=exp(result);UpdateData(FALSE);}
void CCalculatorDlg::OnRadio7(){ // TODO: Add your control notification handler code here m_edit1=sqrt(result);UpdateData(FALSE);}
void CCalculatorDlg::OnRadio8(){ // TODO: Add your control notification handler code here m_edit1=log(result);UpdateData(FALSE);} 华 南 师 范 大 学 实 验 报 告
学生姓名
史文林
学
号
20102003056
专
业
软件工程(数字媒体)
年级、班级
10本8班
课程名称
计算机基础实验
实验项目
计算器
实验时间
2011 年 月日
实验指导老师
宋桂琴
实验评分
(2)在增加完算法功能之后,点击“build”健,仍然显示出存在多个错误,一直找不到原因,后来问了同学之后才知道在没有在“calculatorDlg.h”写出应用程序框架:
afx_msg void OnButton1();afx_msg void OnButton2();afx_msg void OnButton3();afx_msg void OnButton4();afx_msg void OnButton5();afx_msg void OnButton6();afx_msg void OnButton7();afx_msg void OnButton8();afx_msg void OnButton9();afx_msg void OnBUTTONplus();afx_msg void OnBUTTONminus();afx_msg void OnBUTTONmulti();afx_msg void OnBUTTONzero();afx_msg void OnBUTTONequal();afx_msg void OnBUTTONclean();afx_msg void OnBUTTONdiv();afx_msg void OnRadio1();afx_msg void OnRadio2();afx_msg void OnRadio3();afx_msg void OnRadio4();afx_msg void OnRadio5();afx_msg void OnRadio6();afx_msg void OnRadio7();afx_msg void OnRadio8();afx_msg void OnChangeEdit1();
(3)在改正以上错误之后,点击“build”后结果显示0错误,便开始运行程序,但是不知道为什么,运行程序之后点击计算器上的按键时计算器不能运行,后华 南 师 范 大 学 实 验 报 告
学生姓名
史文林
学
号
20102003056
专
业
软件工程(数字媒体)
年级、班级
10本8班
课程名称
计算机基础实验
实验项目
计算器
实验时间
2011 年 月日
实验指导老师
宋桂琴
实验评分
来经过检查才发现没有在“calculatorDlg.cpp”中写出映射ID及函数:
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)ON_BN_CLICKED(IDC_BUTTON3, OnButton3)ON_BN_CLICKED(IDC_BUTTON4, OnButton4)ON_BN_CLICKED(IDC_BUTTON5, OnButton5)ON_BN_CLICKED(IDC_BUTTON6, OnButton6)ON_BN_CLICKED(IDC_BUTTON7, OnButton7)ON_BN_CLICKED(IDC_BUTTON8, OnButton8)ON_BN_CLICKED(IDC_BUTTON9, OnButton9)ON_BN_CLICKED(IDC_BUTTON_plus, OnBUTTONplus)ON_BN_CLICKED(IDC_BUTTON_minus, OnBUTTONminus)ON_BN_CLICKED(IDC_BUTTON_multi, OnBUTTONmulti)ON_BN_CLICKED(IDC_BUTTON_zero, OnBUTTONzero)ON_BN_CLICKED(IDC_BUTTON_equal, OnBUTTONequal)ON_BN_CLICKED(IDC_BUTTON_clean, OnBUTTONclean)ON_BN_CLICKED(IDC_BUTTON_div, OnBUTTONdiv)ON_BN_CLICKED(IDC_RADIO1, OnRadio1)ON_BN_CLICKED(IDC_RADIO2, OnRadio2)ON_BN_CLICKED(IDC_RADIO3, OnRadio3)ON_BN_CLICKED(IDC_RADIO4, OnRadio4)ON_BN_CLICKED(IDC_RADIO5, OnRadio5)ON_BN_CLICKED(IDC_RADIO6, OnRadio6)ON_BN_CLICKED(IDC_RADIO7, OnRadio7)ON_BN_CLICKED(IDC_RADIO8, OnRadio8)
在经过上面几次更正后,计算器终于可以运行了,但是有一个问题就是每次运行点击数字健时,在结果框里首先显示出“1.#INF”,然后再按其他健时才能正常运算。问了几个同学,他们也出现了同样的问题,就是不知道如何去解决。
华 南 师 范 大 学 实 验 报 告
学生姓名
史文林
学
号
20102003056
专
业
软件工程(数字媒体)
年级、班级
10本8班
课程名称
计算机基础实验
实验项目
计算器
实验时间
2011 年 月日
实验指导老师
宋桂琴
实验评分
第五篇:《制作简单的计算器》学案
制作简单的计算器
学习要点: 数据类型
数据类型的转换 +-*/符号 判断 组合框 四舍五入 注释
一、任务分析
简单计算器:输入数值进行加减乘除计算,绘制流程图,确定所需组件。(1)三个编辑框(输入或显示的数值和结果)(2)一个组合框(放置运算符号)(3)一个标签(放置等号)
(4)1个按钮(被单击时激发代码)
2、界面设计(可参考上图)
3、认识语句(1)到文本():数值转化为文本(2)到数值():到数值(通用型 待转换的文本或数值)
(3)判断()调用格式: 〈无返回值〉 判断(逻辑型 条件)本命令根据提供的逻辑参数的值,来决定是否改变程序的执行位置,如果提供的逻辑参数值为真,程序继续顺序向下执行,否则跳转到下一分支处去继续判断。(4)组合框():语句使用可参考E语言知识库
4、练习用E语言解决(1)利用组件组建窗体
(2)右击组合框,设置“列表项目”,在列表项管理对话框中选择“向后插入空项目”分别输入“+-*/”符号。点击确定(3)点击组合框属性,在【类型】中选择“不可编辑下拉式”;在【现行选中项】中选择“0”。(目的避免在组合框中写入不必要的东西)
(4)点击【计算】按钮编写程序编辑框3.内容 = 到文本(到数值(编辑框1.内容)+ 到数值(编辑框2.内容))(5)利用判断解决加减乘除的运算
(6)注意除号的写法:如果输入“/”,符号自动变成“÷”,进行除法运算;如果输入“”,符号自动加粗“ \”,表示进行整除运算(**求出两个数值的商,并返回其整数部分,运算符号为“”。)
E语言代码改成如下:
(7)四舍五入:调用格式: 〈双精度小数型〉 四舍五入(双精度小数型 欲被四舍五入的数值,[整数型 被舍入的位置])-系统核心支持库->算术运算
英文名称:round 返回按照指定的方式进行四舍五入运算的结果数值。本命令为初级命令。参数<1>的名称为“欲被四舍五入的数值”,类型为“双精度小数型(double)”。参数<2>的名称为“被舍入的位置”,类型为“整数型(int)”,可以被省略。如果大于0,表示小数点右边应保留的位数;如果等于0,表示舍入到整数;如果小于0,表示小数点左边舍入到的位置。例如:四舍五入(1056.65, 1)返回 1056.7; 四舍五入(1056.65, 0)返回 1057; 四舍五入(1056.65,-1)返回 1060。如果省略本参数,则默认为0。将除法的E语言代码改成如下: