第一篇:計(jì)算器編程設(shè)計(jì)心得體會(huì)
計(jì)算器編程設(shè)計(jì)心得體會(huì)
——
本次有關(guān)計(jì)算器程序的編寫,個(gè)人感覺還是有一定難度的。在考察運(yùn)算符的重載時(shí),其他的運(yùn)算符還好,但是在定義“()”運(yùn)算符時(shí)在邏輯上考慮的比較復(fù)雜,因?yàn)槔ㄌ?hào)運(yùn)算符內(nèi)的計(jì)算優(yōu)先進(jìn)行,所以要考慮的有括號(hào)內(nèi)的各種“+”、“-”、“*”、“/”的組合使用,還有括號(hào)里含括號(hào)的情況。括號(hào)都是成對(duì)存在的,首先要在運(yùn)算式中找到最里面的一對(duì)括號(hào)(即:此括號(hào)內(nèi)不再含有其他的括號(hào))。之前的想法是用指針按次找到第一個(gè)右括號(hào),然后再找出右括號(hào)左邊的第一個(gè)左括號(hào),計(jì)算出這兩個(gè)半括號(hào)之間的公式,用t表示并替代。同理,再尋找出替換后的最里面的一對(duì)括號(hào),計(jì)算出這兩個(gè)半括號(hào)之間的公式,用t表示并替代。以此類推,使用for循環(huán)語句,直到找不到括號(hào)為止,return t;其他的方面,遇到的難點(diǎn)有:不知道怎么判斷輸入的數(shù)學(xué)公式不符合規(guī)定,除了分母不能為零比較好考慮,其他的形式總覺得會(huì)有疏漏。例如在判斷“/”的右操作數(shù)不為零時(shí)則繼續(xù)進(jìn)行,反之則跳出,并給get賦值為1。只有當(dāng)get為0時(shí),才能正常輸出。當(dāng) set為1時(shí)輸出 “n您輸入的不匹配,有錯(cuò)誤發(fā)生。Result lost!” ;如果set為2,則輸出 “n您輸入了非法字符 , 請(qǐng)重新輸入,謝謝合作!”;如果set值為3則輸出“nStack is full, Lost result!”若是set 等于4則輸出“nERROR!Divide by 0!”。但是在判斷2、3、4情況時(shí)感覺不是很好描述編寫。
第二篇:C#基礎(chǔ)編程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
C# 基礎(chǔ)編程 設(shè)計(jì)實(shí)驗(yàn)報(bào)告
一、實(shí)驗(yàn)?zāi)康?/span>
1、熟悉 Visual Studio.NET 開發(fā)環(huán)境。
2、掌握 C#應(yīng)用程序的基本操作過程。
3、掌握 C#的數(shù)據(jù)類型,運(yùn)算符以及表達(dá)式的使用。
4、掌握分支和循環(huán)語句的使用方法。
5、掌握一維數(shù)組,二維數(shù)組及數(shù)組型數(shù)組的使用。
二、實(shí)驗(yàn)要求
(1)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄(2)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。
三、實(shí)驗(yàn)設(shè)備、環(huán)境
安裝有 Visual Studio.NET 軟件。
四、實(shí)驗(yàn)步驟
1、分析題意。
2、根據(jù)題目要求,新建項(xiàng)目。
3、編寫并輸入相關(guān)的程序代碼。
5、運(yùn)行與調(diào)試項(xiàng)目。
6、保存項(xiàng)目。
五、實(shí)驗(yàn)內(nèi)容
1、編寫一個(gè)簡(jiǎn)單的控制臺(tái)應(yīng)用程序,打印一行文字(如你的姓名)。
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、編寫一個(gè)簡(jiǎn)單的 Windows 應(yīng)用程序,在窗體 Load 事件中書寫代碼,標(biāo)簽中顯示你的姓名。
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、編寫一個(gè)一個(gè)程序,用來判斷輸入的是大寫字母,小寫字母,數(shù)字還是其他的字符。
using System;using System.Collections.Generic;using System.Text;
namespace one.third {
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“請(qǐng)輸入一個(gè)字符:”);
char c = Convert.ToChar(Console.ReadLine());
if((c>=“a”&&c<=“z”)||(c>=“A”&&c<=“Z”))
Console.WriteLine(“這是一個(gè)字母”);
if(char.IsDigit(c))
Console.WriteLine(“這是一個(gè)數(shù)字”);
}
}
} 4、分別用 while,do-while,for 循環(huán)求 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 的自然數(shù)之和為:” + 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 的自然數(shù)的和為:” + 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 的自然數(shù)的和為:” + sum);
}
} } 5、定義一個(gè)一維數(shù)組,用隨機(jī)數(shù)為此賦值,用 foreach 循環(huán)輸
出其中的內(nèi)容。
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、實(shí)現(xiàn)二維數(shù)組的輸入和輸出。
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、實(shí)現(xiàn)數(shù)組型數(shù)組的輸入和輸出。
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]);
}
}
}
} } 六、實(shí)驗(yàn)體會(huì)(遇到問題及解決辦法,編程后的心得體會(huì))
剛開始編程的時(shí)候覺得無從下手,盡管我們已經(jīng)學(xué)了好幾種高級(jí)編程語言,但每個(gè)都有其獨(dú)特的地方,稍不留神就會(huì)混淆。
通過這次實(shí)驗(yàn),我體會(huì)到課后復(fù)習(xí)鞏固的重要性。在編程的時(shí)候,很多內(nèi)容都不記得,需要去翻書。不得不說,實(shí)驗(yàn)是鞏固課程的好方法!本次實(shí)驗(yàn),我熟悉 Visual Studio.NET 開發(fā)環(huán)境;掌握了 C#應(yīng)用程序的基本操作過程;掌握了 C#的數(shù)據(jù)類型,運(yùn)算符以及表達(dá)式的使用;掌握了分支和循環(huán)語句的使用方法以及一維數(shù)組,二維數(shù)組及數(shù)組型數(shù)組的使用。
實(shí)驗(yàn)項(xiàng)目名稱:
類與對(duì)象
實(shí)驗(yàn)學(xué)時(shí):
同組學(xué)生姓名:
實(shí)驗(yàn)地點(diǎn):
1318
實(shí)驗(yàn)日期:
月 26 日-11 月 9 日 實(shí)驗(yàn)成績(jī):
批改教師:
批改時(shí)間:
實(shí)驗(yàn) 2
類與對(duì)象
一、實(shí)驗(yàn)?zāi)康?、要?/p>
(1)掌握類的定義和使用;(2)掌握類的數(shù)據(jù)成員,屬性的定義和使用;(3)掌握方法的定義,調(diào)用和重載以及方法參數(shù)的傳遞;(4)掌握構(gòu)造函數(shù)的定義和使用。
二、實(shí)驗(yàn)要求
(1)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄;(2)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。
三、實(shí)驗(yàn)設(shè)備、環(huán)境
安裝有 Visual Studio.NET 軟件。
四、實(shí)驗(yàn)步驟
1、分析題意; 2、根據(jù)題目要求,新建項(xiàng)目; 3、編寫并輸入相關(guān)的程序代碼; 5、運(yùn)行與調(diào)試項(xiàng)目; 6、保存項(xiàng)目。
五、實(shí)驗(yàn)內(nèi)容
1、定義一個(gè)方法,實(shí)現(xiàn)兩個(gè)數(shù)的交換(分別把參數(shù)按值傳遞和按引用傳遞)。
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、定義一個(gè)方法,實(shí)現(xiàn)數(shù)組的排序。
using System;using System.Collections.Generic;using System.Text;
namespace second.two {
class Program
{
public class sort
{
public void change(int[] a)
{
Console.WriteLine(“排序前,數(shù)組順序?yàn)椋骸?;
show(a);
int i, j, m;
for(i = 0;i < 10;i++)
{
m = a[i];
j = i-1;//a[j]為數(shù)組前一個(gè)值
while(j >= 0 && m > a[j])//判斷 i 下標(biāo)的數(shù)是否大于 j 下標(biāo)的數(shù)
{
a[j + 1] = a[j];//如果 i 下標(biāo)大于j 把 j 往后移一個(gè)位
j--;
}
a[j+1] = m;//當(dāng)不大于 j 的時(shí)候就把 M的值放到 i 下標(biāo)下面 j+1 是為了下標(biāo)減到最前時(shí)考慮-1 + 1 還是下標(biāo)的最前面
}
Console.WriteLine(“排序后,數(shù)組順序?yàn)椋骸?;
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、定義一個(gè)學(xué)生類,把學(xué)生類當(dāng)作對(duì)象來傳遞。
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、定義一個(gè)方法,求兩個(gè)數(shù)的和和差,通過參數(shù)把這兩個(gè)值帶回。
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、用構(gòu)造函數(shù)重載,實(shí)現(xiàn)矩形的面積,圓的面積,梯形的面積; 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(“求矩形面積,長(zhǎng)為 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、設(shè)計(jì)一個(gè) windows 應(yīng)用程序,在該程序中定義一個(gè)學(xué)生類和班級(jí)類,以處理每個(gè)學(xué)生的學(xué)號(hào),姓名,語文,數(shù)學(xué)和英語成績(jī),要求:
1)能查詢每個(gè)學(xué)生的總成績(jī)。
2)能顯示全班前三名的名單。
3)能顯示單科成績(jī)最高分和不及格的學(xué)生名單。
4)能統(tǒng)計(jì)全班學(xué)生的平均成績(jī)。
5)能顯示各科成績(jī)不同分?jǐn)?shù)段的學(xué)生人數(shù)的百分比。
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;
}
//給所有成績(jī)排序,用后面實(shí)現(xiàn)前三名的排名
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;
}
}
}
//顯示單科成績(jī)的最高分
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 += “ 單 科 數(shù) 學(xué) 最 高 :
” + stu[HighScore(0)].name + “n”;
Maxer += “ 單 科 語 文 最 高 :
” +
stu[HighScore(1)].name + “n”;
Maxer += “ 單 科 英 語 最 高 :
” + stu[HighScore(2)].name + “n”;
Loser += “單科數(shù)學(xué)掛科名單:” +BuhgName(0)+ “n”;
Loser += “單科語文掛科名單:” + BuhgName(1)+ “n”;
Loser += “單科英語掛科名單:” + BuhgName(2)+ “n”;
return Maxer + “n” + Loser;
}
//全班的平均成績(jī)
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 “班級(jí)總分平均分:”+avg;
}
//各科成績(jī)不同分?jǐn)?shù)段的學(xué)生百分比
//英語成績(jī)各分?jǐn)?shù)段百分比
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 “ 語 文 成 績(jī) 百 分 比 :”+“n”+“90~100:”+per1+“
80~90:”+per2+“
80~70:”+per3+“
70~60:”+per4+“
以下的:”+per5;
}
//數(shù)學(xué)成績(jī)各分?jǐn)?shù)段百分比
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(“數(shù)學(xué)成績(jī)百分比:” + “n” + “90~100:” + per1 + “
80~90:” + per2 + “
80~70:” + per3 + “
70~60:” + per4 + “
以下的:” + per5);
}
//英語成績(jī)各分?jǐn)?shù)段百分比
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(“數(shù)學(xué)成績(jī)百分比:” + “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 + “的總成績(jī):” + sl.stu[pos].sumScore;
}
else { MessageBox.Show(“不存在這個(gè)人!”);}
}
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”;
}
} }
六、實(shí)驗(yàn)體會(huì)(遇到問題及解決辦法,編程后的心得體會(huì))
通過本次實(shí)驗(yàn),我掌握了類的定義與使用;掌握了類的數(shù)據(jù)成員,屬性的定義和使用;掌握了方法的定義,調(diào)用和重載以及方法參數(shù)的傳遞以及構(gòu)造函數(shù)的定義和使用。值得注意的是:本次實(shí)驗(yàn)中 return的使用以及所在的位置,類型轉(zhuǎn)換時(shí)也經(jīng)常用到
實(shí)驗(yàn)項(xiàng)目名稱:
繼承與多態(tài)
實(shí)驗(yàn)學(xué)時(shí):
同組學(xué)生姓名:
實(shí)驗(yàn)地點(diǎn):
1318
實(shí)驗(yàn)日期:月 16 日-11 月 30 日 實(shí)驗(yàn)成績(jī):
批改教師:
批改時(shí)間:
實(shí)驗(yàn) 3
繼承與多態(tài)
一、實(shí)驗(yàn)?zāi)康?、要?/span>
(1)掌握類的繼承性與多態(tài)性;(2)掌握虛方法的定義以及如何使用虛方法實(shí)現(xiàn)多態(tài);(3)掌握抽象類的定義以及如何使用抽象方法實(shí)現(xiàn)多態(tài); 二、實(shí)驗(yàn)要求
(1)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄;(2)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。
三、實(shí)驗(yàn)設(shè)備、環(huán)境
安裝有 Visual Studio.NET 軟件。
四、實(shí)驗(yàn)步驟
1、分析題意; 2、根據(jù)題目要求,新建項(xiàng)目; 3、編寫并輸入相關(guān)的程序代碼; 5、運(yùn)行與調(diào)試項(xiàng)目; 6、保存項(xiàng)目。
五、實(shí)驗(yàn)內(nèi)容
1、設(shè)計(jì)一個(gè) Windows 應(yīng)用程序,在該程序中首先構(gòu)造一個(gè)學(xué)生基本類,再分別構(gòu)造小學(xué)生、中學(xué)生、大學(xué)生派生類,當(dāng)輸入相關(guān)數(shù)據(jù),單擊不用的按鈕時(shí),將分別創(chuàng)建不同的學(xué)生類對(duì)象,并輸出當(dāng)前學(xué)生的總?cè)藬?shù),該學(xué)生的姓名,學(xué)生類型,平均成績(jī)。
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 窗體內(nèi)的代碼:
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 += “ 總 人 數(shù) :” +Convert.ToString(Student.number)+ “,” + “姓名:” + p.Name + “,” + “小學(xué)生” + “,” + “平均成績(jī)?yōu)椋骸?+ 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 += “ 總 人 數(shù) :” + Convert.ToString(Student.number)+ “,” + “姓名:” + m.Name +
“,” + “中學(xué)生” + “,” + “平均成績(jī)?yōu)椋骸?+ 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 += “ 總 人 數(shù) :” + Convert.ToString(Student.number)+ “,” + “姓名:” + c.Name + “,” + “大學(xué)生” + “,” + “平均成績(jī)?yōu)椋骸?+ c.Average()+ “n”;
}
} } 2、設(shè)計(jì)一個(gè) Windows 應(yīng)用程序,在該程序中定義平面圖形抽象類和派生類圓,矩形和三角形。
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、定義一個(gè) Person 類,包含姓名字段和一個(gè)方法,早上 8:30學(xué)生開始上課,教師開始講課。分別用 new 關(guān)鍵字,虛方法,抽象類實(shí)現(xiàn)多態(tài)性。
New 關(guān)鍵字:
using System;using System.Collections.Generic;using System.Text;
namespace third.three {
class Program
{
static void Main(string[] args)
{
Student s=new Student(“學(xué)生”);
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(“張三”,“學(xué)生”);
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(“張三”, “學(xué)生”);
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);
}
}
}
六、實(shí)驗(yàn)體會(huì)(遇到問題及解決辦法,編程后的心得體會(huì))
通過本次實(shí)驗(yàn),我理解了類的繼承性與多態(tài)性;掌握了虛方法的定義以及如何用虛方法來實(shí)現(xiàn)多態(tài);掌握了抽象類的定義以及如何用抽象方法來實(shí)現(xiàn)多態(tài)。
這次實(shí)驗(yàn)與前兩次不同,采用 Windows 應(yīng)用程序,既涉及到代碼段也涉及到界面的設(shè)計(jì)。所以,勉強(qiáng)通過實(shí)驗(yàn)。
實(shí)驗(yàn)項(xiàng)目名稱:
接口、文件和流
實(shí)驗(yàn)學(xué)時(shí):
同組學(xué)生姓名:
實(shí)驗(yàn)地點(diǎn):
A205
實(shí)驗(yàn)日期:月 7 日-12 月 21 日 實(shí)驗(yàn)成績(jī):
批改教師:
批改時(shí)間:
實(shí)驗(yàn) 4
接口、文件和流
一、實(shí)驗(yàn)?zāi)康?/span>
(1)掌握接口的定義及使用方法;(2)掌握流,序列化和反序列化的概念和使用方法;(3)掌握流文件的讀寫操作類及其使用方法;(4)掌握 OpenFileDialog,SaveFileDialog 等控件的使用。
二、實(shí)驗(yàn)要求
(1)編寫程序要規(guī)范、正確,上機(jī)調(diào)試過程和結(jié)果要有記錄;(2)做完實(shí)驗(yàn)后給出本實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告。
三、實(shí)驗(yàn)設(shè)備、環(huán)境
安裝有 Visual Studio.NET 軟件。
四、實(shí)驗(yàn)步驟
1、分析題意; 2、根據(jù)題目要求,新建項(xiàng)目; 3、編寫并輸入相關(guān)的程序代碼; 5、運(yùn)行與調(diào)試項(xiàng)目; 6、保存項(xiàng)目。
五、實(shí)驗(yàn)內(nèi)容
1、定義一個(gè) Person 類,包含姓名字段和一個(gè)方法,早上 8:30學(xué)生開始上課,教師開始講課。用接口來實(shí)現(xiàn)。
using System;using System.Collections.Generic;
using System.Text;namespace Test4_1 {
class Program
{
static void Main(string[] args)
{
Student s = new Student(“張三”,“學(xué)生”);
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);
}
}
...
第三篇:專用計(jì)算器剖析
工程與管理經(jīng)濟(jì)學(xué)
Kleinfeld Ira
1.專用計(jì)算器
至 1970 年以來,一些制造商(德州儀器、惠普)就已經(jīng)開始研發(fā)計(jì)算器,舉個(gè)例子:德州儀器模型 BA-II 就可以直接計(jì)算時(shí)間價(jià)值指數(shù):(F/P,i%,n),(F/A,i%,n)等等,和一些方程式。這些機(jī)器加速了時(shí)間價(jià)值的計(jì)算同時(shí)減少計(jì)算所需的按鍵數(shù)量指數(shù)。
在第二個(gè)章節(jié)中,TI 這個(gè)機(jī)器用一個(gè)關(guān)鍵的字母定義每一個(gè)對(duì)應(yīng)的變量,符號(hào)的對(duì)應(yīng)關(guān)系如下:
F
FV(未來價(jià)值)
P
PV(現(xiàn)值)A
PMT(支付款)I%
i%(利潤(rùn)率)N
N
(時(shí)間)
該程序就是輸入一個(gè)構(gòu)成已給定信息變量的值,隨后就是說明這個(gè)字母說表示的含義(舉個(gè)例子來說,你在鍵盤中輸入 100,隨后輸入 PV,就說明它代表的是現(xiàn)在的價(jià)值),在所有的數(shù)據(jù)輸入完成以后,就會(huì)如上圖所示,然后按下“2nd”(大寫字母鍵),隨后就會(huì)出現(xiàn)你所要求的另外一個(gè)值。然后這個(gè)機(jī)器就會(huì)計(jì)算和顯示你所需求的數(shù)目。舉個(gè)例子來說:我們來計(jì)算未來價(jià)值的方案中,首先輸入 10,按下 i%鍵,然后輸入 2000,按下 PV 鍵,隨后輸入 4,按下 N鍵,最后按下第二個(gè)和 FV 鍵,然后一個(gè)熟悉的結(jié)果:3147.04 就會(huì)顯示出來。
這些計(jì)算器相對(duì)于以前來說在計(jì)算時(shí)間價(jià)值有很高的速度,但他們并沒有帶來承擔(dān)的現(xiàn)代大功率計(jì)算復(fù)雜和重復(fù)的時(shí)間價(jià)值分析模型。這本書的目的就是指出現(xiàn)代計(jì)算器可以完成時(shí)間價(jià)值分析的一個(gè)方向。下面是一些關(guān)于現(xiàn)代計(jì)算器所具備的基本特征的列表和解釋,單獨(dú)與一個(gè)示例程序流程圖和代碼的形式表現(xiàn),在本章中所討論的程序列表在附錄 C 中,附錄 D 中,計(jì)算器對(duì)時(shí)間價(jià)值的一些問題應(yīng)用的范圍將被擴(kuò)大,其中包含了一些納稅和敏感性分析。他們也可形成系列的個(gè)人計(jì)算機(jī)和蘋果 2 以磁盤的形式發(fā)布。
2.電腦
在這個(gè)章節(jié)中,用指令碼編寫的電腦程序?qū)?huì)有效的解決所有關(guān)于前面章節(jié)大比例的時(shí)間價(jià)值的問題.包括了一些大量的關(guān)于個(gè)人時(shí)間價(jià)值的相對(duì)解決方案的比較。
有經(jīng)驗(yàn)的時(shí)間價(jià)值分析師會(huì)發(fā)現(xiàn)程序非常容易使用,因?yàn)樗菚娴幕?dòng),然而,新手可能需要更多的時(shí)間學(xué)習(xí)使用它,接下來簡(jiǎn)單的解釋一下每一個(gè)步驟,相反,對(duì)于結(jié)構(gòu)方案的概述,他將會(huì)成為那些將軟件用于這一目的理想用戶的例證。我們會(huì)將這些特征一一解釋并且列在圖表中(圖 5-1 表示程序流程圖)在接下來的一章,會(huì)展示一塊比較詳細(xì)的邏輯程序。
2.1 計(jì)算時(shí)間價(jià)值量
一個(gè)最低限度的程序應(yīng)該能夠計(jì)算并適用當(dāng)前,未來,或周期值,以及內(nèi)部或外部的回報(bào)率,這樣的軟件是很容易準(zhǔn)備和在計(jì)算機(jī)中心圖書館存在。此外,對(duì)于相同的一組數(shù)據(jù)(流),它應(yīng)該能夠計(jì)算不同的值,如現(xiàn)值和等額年金。
流程圖的試驗(yàn)表明,A1 區(qū)塊包含時(shí)間價(jià)值方程 2-1 至 2-6 以一個(gè)程序中的計(jì)
算基本函數(shù)形式。在 B1 區(qū)塊中,用戶選擇一個(gè)被特殊的程序所計(jì)算的時(shí)間價(jià)值方案。D3 塊,D4 塊,C5 塊和 G5 塊包含了一個(gè)關(guān)于時(shí)間價(jià)值計(jì)算的邏輯,注意,這個(gè)程序允許用戶回到B1塊是為了計(jì)算一個(gè)對(duì)于相同現(xiàn)金流量數(shù)據(jù)的不同的時(shí)間價(jià)值方案。
2.2 合并因素
這種能力是指該程序接受“元素”的數(shù)據(jù)流動(dòng)并自動(dòng)將它們合并,用于時(shí)間價(jià)值分析的目的,考慮例子 4-1,它包含了一些關(guān)于投資成本,年收入,勞動(dòng)力,能源,維修,稅成本,保險(xiǎn),和雜項(xiàng)費(fèi)用的數(shù)據(jù),乍看之下,結(jié)合任何時(shí)期數(shù)據(jù)流的能力看似是無關(guān)緊要的優(yōu)勢(shì)。事實(shí)上,表 4-1 的數(shù)據(jù)顯示年總成本(勞動(dòng)力,電力,維護(hù),和稅收)作為一個(gè)簡(jiǎn)單的總結(jié)。然而,該模型復(fù)雜的應(yīng)用往往需要不同的預(yù)計(jì)增長(zhǎng)率隨時(shí)間的單獨(dú)的“元素”的價(jià)值觀。例如,它可以預(yù)期,人工費(fèi)用將保持不變,而維護(hù)的速度可能會(huì)增加 4%?;蚍治鰩熆赡芟MM(jìn)行敏感度和不同的能源成本的分析,為了看時(shí)間的價(jià)值隨著這樣的假設(shè)變化而變化?;叵胍幌逻@樣一個(gè)分析在第一章已經(jīng)討論。顯然,這兩種實(shí)際的需求對(duì)待處理這些基本元素說明了愿望,而依靠電腦來“合并”每個(gè)時(shí)期的數(shù)據(jù)流在繼續(xù)之前的時(shí)間價(jià)值計(jì)算。
大多數(shù)可用的軟件不運(yùn)行合并功能。相反,在用電腦分析時(shí)間價(jià)值之前分析師需要手動(dòng)輸入一些數(shù)據(jù)。通常這種準(zhǔn)備工作相對(duì)于電腦自行分析時(shí)間價(jià)值的時(shí)間要久許多。
下面的插圖將作為一個(gè)澄清。考慮到三個(gè)“元素”的流動(dòng)表現(xiàn)為現(xiàn)金流量圖5-1a:
分析師需要將 D5-1a 的數(shù)據(jù)手動(dòng)合并,從而獲得圖表 D5-1b。一個(gè)好的程序,如在本章所提供的數(shù)據(jù),分析師將執(zhí)行這個(gè)函數(shù)。
程序流程圖中,塊 C1 通過 E1 描述數(shù)據(jù)收集過程,所謂的因素就是從用戶交互,然后對(duì)每一個(gè)“元素”的流動(dòng)。這一因素可能采取以下三種形式之一:?jiǎn)我坏臅r(shí)間段數(shù)量,統(tǒng)一系列(年金),第三種計(jì)劃允許其他比單一的時(shí)間段數(shù)量呈現(xiàn)梯度或者遞增系列,均勻或百分比,塊 H1 通過 K1 執(zhí)行合并功能,所以也認(rèn)為是單一的計(jì)算凈現(xiàn)金流量。
2.3 處理梯度算法和百分比
通常對(duì)于一個(gè)數(shù)據(jù)流根據(jù)一個(gè)一致的模式增加或減少是必須處理的。兩個(gè)這樣的情況下,均勻(算術(shù))和百分梯度。算術(shù)梯度就是數(shù)據(jù)流在每個(gè)時(shí)期相同的絕對(duì)數(shù)量增加或減少,兩個(gè)例子給出了現(xiàn)金流圖 5-2。
在第一種情況下的均勻梯度是+ 3,在第二種情況下,它是-1。
百分之一梯度就是數(shù)據(jù)流在每個(gè)時(shí)期以同樣比例增加或減少的金額,兩個(gè)例子中的現(xiàn)金流量圖 5-3 所示。
在第一種情況下,后期 1 +20%增加的百分比,其次是-20%。這樣的梯度對(duì)某些元素流的預(yù)測(cè)是非常有用。在軟件計(jì)算時(shí)間價(jià)值的能力時(shí)候是他們理想的伴侶,但是,簡(jiǎn)單的代數(shù)方程不存在這個(gè)情況,他們?yōu)榫鶆蛱荻取R虼?分析師希望處理比例梯度必須沉悶地做“手工”。用計(jì)算機(jī)軟件為一個(gè)特定的梯度值梯度系列,或統(tǒng)一的制服梯度增加。然后周期值可以存儲(chǔ)合并,像其他因素一樣。
2.4 促進(jìn)敏感性分析
敏感性分析是另一個(gè)重要的能力,在現(xiàn)有的時(shí)間價(jià)值分析軟件中經(jīng)常被忽略。有經(jīng)濟(jì)用途的建模過程需要大量的涉及相關(guān)變量的值。它的適用性和預(yù)測(cè)值的模型部分取決于在何種程度上這些變成是正確的以后。雖然敏感性分析沒有更好的幫助預(yù)測(cè)未來,但是它有助于規(guī)范涉及預(yù)測(cè)過程中的風(fēng)險(xiǎn)。換句話說,如果
模型允許因?yàn)橐粋€(gè)變量的問題而重復(fù)計(jì)算,說勞動(dòng)成本,改變?nèi)我环较虻默F(xiàn)實(shí)限制然后成為最佳預(yù)計(jì),這不是改變模型的實(shí)質(zhì)性建議,但是這種分析在很大程度上增加為決策模型達(dá)到預(yù)期結(jié)果的信心。
顯然,相反的效果還持有。然而,敏感性分析有助于在這樣的情況下:決策過程,因?yàn)樽畛醯男判牟蛔悖龠M(jìn)更多的調(diào)查有關(guān)的問題中的變量。這是可能的,這種加倍的努力后,估計(jì)變量更精確,得到更多的一些結(jié)論。在最壞的情況下,決策者更好地洞察那些持有最大的危險(xiǎn)因素對(duì)他們的建議的結(jié)果。
在第一章實(shí)例 1-2 表明,敏感性分析可以計(jì)算要求。計(jì)算機(jī)軟件的設(shè)計(jì)應(yīng)以改善這一困難。靈敏度分析程序中提供以下方式(見圖 5-1):塊 K3 通過 G1 顯示在用戶改變一個(gè)因子的邏輯,刪除舊的因素的影響,取而代之的是新的,然后重新計(jì)算流動(dòng)(融合)。最后,進(jìn)行數(shù)值計(jì)算后的因子的變化已占到并存儲(chǔ)以供將來使用價(jià)值(檢驗(yàn),數(shù)據(jù)文件的建立,和/或圖形)。
這樣的邏輯程序的一個(gè)額外的好處是,它容易允許改變那些可能是由于用戶輸入錯(cuò)誤地這些因素的數(shù)據(jù)。這是尤其需要進(jìn)行互動(dòng)式程序的。因此,已經(jīng)收集了所有的因素的數(shù)據(jù),他們用符合他們的輸入格式“呼應(yīng)”或顯示。在這一點(diǎn)上,用戶有機(jī)會(huì)改變或增加因素,從塊 X 的流程圖中得出。
2.5 促進(jìn)替代方案的比較
上面描述的相同的程序邏輯進(jìn)行敏感性分析也可以用來促進(jìn)盈利,從而比較兩個(gè)或兩個(gè)以上的選擇方案,對(duì)于第一選擇的分析,拿 A 來說,收益已經(jīng)被描述。例如,對(duì)于 A 來說,人們可能會(huì)開始計(jì)算的現(xiàn)值,再重復(fù)執(zhí)行的程序,通過利率和折現(xiàn)率的到兩個(gè)價(jià)值。此時(shí)兩個(gè)值將被存儲(chǔ),一個(gè)用于的現(xiàn)值,其它一個(gè)為其等效價(jià)值.分析一個(gè)或多個(gè)額外的選擇,拿 B 來說,程序允許變更因素構(gòu)成的 A,一次,直到所有關(guān)于 A 的輸入數(shù)據(jù)被 B 所取代,然后程序?qū)⒂?jì)算之前指定的用戶時(shí)間價(jià)值度量 B,當(dāng)然,對(duì)于 B 用戶可能尋找計(jì)算不同時(shí)間價(jià)值方案,就像以前計(jì)算 A 一樣,以供將來使用或顯示.3.程序使用/項(xiàng)目總結(jié)
這一章所總結(jié)的關(guān)于程序的運(yùn)用將在圖表 5-1 中描述,此外,它將介紹一些關(guān)于它的邏輯。
用戶必須選擇因變量的類型來計(jì)算,輸入因變量:
1:內(nèi)部收益率 2;現(xiàn)值或?qū)碇?3:周期性的價(jià)值 4:外部收益率 用戶然后輸入數(shù)據(jù)的第一因素,給它分配一個(gè)名稱并且說明其類型,對(duì)應(yīng)如以下:
對(duì)于因素 1 輸入因子類型 1-單期數(shù)量 2-統(tǒng)一系列 3-均勻梯度系列
此外,因素的一些特征,例如他的價(jià)值和時(shí)期出現(xiàn)的頻率,將會(huì)被用戶所操控,這些方式通過現(xiàn)金流圖 D5-4 到 D5-9 進(jìn)行說明.單一的時(shí)間段,用戶的需要: 1,價(jià)值或數(shù)量 價(jià)值或數(shù)量發(fā)生的時(shí)期 價(jià)值=+1000,在時(shí)期 0 價(jià)值=-500,在時(shí)期 3 統(tǒng)一系列,需要用戶:
1,每一個(gè)時(shí)期的數(shù)量和價(jià)值,2,開始時(shí)期,這段時(shí)間的增量,在這一系列中價(jià)值出現(xiàn)的數(shù)量,數(shù)量=+1000,在第 2 時(shí)期開始,一共出現(xiàn)了三次增量。
梯度系列中,用戶必須提供:
1,系列中初始價(jià)值量 2,開始時(shí)期 3,這段時(shí)間增量 4,數(shù)字出現(xiàn)頻率
5,增加或減少節(jié)奏(梯度或百分比)
增加或減少的價(jià)值 初始價(jià)值=500,開始時(shí)期是 1,在 2,3 時(shí)期出現(xiàn)變化,每次遞減 50 初始價(jià)值=-500,開始時(shí)期是 1,1-5 時(shí)期連續(xù)出現(xiàn),以梯度 10%比例改變。
如果有更多的因素輸入(示例中是 15 個(gè)因素為標(biāo)準(zhǔn))用戶將會(huì)返回步驟 2,如果沒有的話,將會(huì)去往步奏 4 A,這個(gè)程序需要計(jì)算在步奏 2 中每一個(gè)因素的時(shí)期流動(dòng)。
B,然后計(jì)算每個(gè)階段時(shí)期的數(shù)量總的流動(dòng)(示例程序中是 52 個(gè)為標(biāo)準(zhǔn)尺寸)
C,然后得出輸入的規(guī)律(在繼續(xù)之前,允許更改一些由于鍵盤錯(cuò)誤和變化的因素)
D,如果用戶想要增加或者減少一個(gè)數(shù)據(jù),程序控制將會(huì)轉(zhuǎn)移一部分?jǐn)?shù)據(jù),如果不允許的話,在進(jìn)入下一步之前,數(shù)據(jù)流會(huì)將每一個(gè)時(shí)期的數(shù)據(jù)顯示出來。
步驟 1 中,選擇周期性流動(dòng)計(jì)算的因變量,并顯示結(jié)果 在這個(gè)步奏中,用戶增加或減少一個(gè)因素(不論是敏感性分析或者替代性選擇)這個(gè)程序需要:
A,列出增加或減少因素條目 B,通過舊的元素來替換 C,綜合這些元素得到一個(gè)新的元素(這個(gè)和步驟 2 是相同的)
D,批準(zhǔn)這些對(duì)應(yīng)的元素
E,刪除影響總周期流的舊的因素 F,計(jì)算數(shù)據(jù)流從而得到一個(gè)新的數(shù)據(jù)流 G,最后,如果沒有希望改變的了,在水平線上,計(jì)算并且列出新的數(shù)據(jù)流。
7,在這里,測(cè)量相同的一組因素,用戶可以選擇計(jì)算不同時(shí)間價(jià)值方法,舉個(gè)例子來說,計(jì)算現(xiàn)值,他可能會(huì)想要計(jì)算周期(年)的價(jià)值,他計(jì)劃允許返回步驟 1(如果允許的話,數(shù)據(jù)將不會(huì)被返回),如果不需要更多的計(jì)算,程序?qū)?huì)顯示“和/或”發(fā)送到一個(gè)文件中,以供將來使用。
計(jì)算機(jī)的邏輯-程序,子例程:在圖表 5-1 中,詳細(xì)的介紹了一些關(guān)鍵表格的數(shù)據(jù)流的邏輯,因此,一般的讀者,或只是希望使用這個(gè)程序的人不熟悉其邏輯的細(xì)節(jié),更加可能忽略,讀者希望程序適應(yīng)一個(gè)特定的需求,就會(huì)發(fā)現(xiàn)閱讀的必要性。
每個(gè)部分的表格,對(duì)應(yīng)于一塊主程序,在大多數(shù)情況下,用一種流程圖來表示邏輯,在每一個(gè)實(shí)例中,列表包括在內(nèi),定義這邪惡以前沒有在過程中出現(xiàn)的變量,此外,全部編碼的程序在附錄 C 中,讀者應(yīng)該注意到,開始有一個(gè)索引為 1 是循環(huán)覆蓋不同的時(shí)期,而不是 0,因此,當(dāng)輸入周期數(shù)據(jù)(允許開始 0),這些數(shù)據(jù)將在+1 后被輸入,然后顯示之前執(zhí)行反向轉(zhuǎn)換輸出的數(shù)據(jù)。
函數(shù)定義 :在方程 2-1 至 2-6 中,對(duì)于離散復(fù)合函數(shù),在程序中被定義為后續(xù)使用的功能。只是為了避免了指定每次要求詳細(xì)計(jì)算。(如果用戶要求繼續(xù)計(jì)算,他需要改變這些功能的定義,或者,如果這個(gè)選擇是他希望的,他將把這些放進(jìn)一個(gè)帶有開關(guān)指示燈執(zhí)行程序的地方)
變量 D3:利息或者折現(xiàn)率 N:時(shí)期的數(shù)量 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
收集變量數(shù)據(jù) 收集變量數(shù)據(jù)
數(shù)據(jù)是否存在?
定義一個(gè)函數(shù)
S=0;Y2=0 B A 得到 J=1,15 子程序:收集因子 J 的數(shù)據(jù)
E1
否
是
H1
J1
K1
X
是 是否有更多的數(shù)據(jù)
數(shù)據(jù)=J 數(shù)據(jù)=15
J2=1,子程序:找到 J2的時(shí)期數(shù)據(jù)流動(dòng)
子程序:
計(jì)算數(shù)據(jù)流
子程序:再次數(shù)據(jù)輸入 數(shù)據(jù)是否改變? C
否
是
否
是
否
印刷每一期的數(shù)據(jù)流 A
Y2=Y2+1 D=4?(外部收益率)
子程序:外部收益
D=1?(內(nèi)部收益率)子程序:內(nèi)部收益率 子程序:計(jì)算所有數(shù)據(jù)凈現(xiàn)值 D=2?(現(xiàn) 值或 者 將 來價(jià)值)
否
K3
否
是
B2
否
否
是
否
否
凈現(xiàn)值轉(zhuǎn)換為定期的價(jià)值 計(jì)算現(xiàn)值或者將來的值 Y(Y2)=Y1(存儲(chǔ)這個(gè)結(jié)果)D
計(jì)算數(shù)據(jù)流
Y2=10增加或減少一個(gè)元 =0? 重做相同的數(shù)據(jù)
輸入# C 卸下因素 J的舊數(shù)據(jù) 在因素J中收集新的數(shù)據(jù) 子程序:重B
Y2=1?
輸出報(bào)告 結(jié)束
書名:Engineering and managerial economics /Ira H.Kleinfeld.作者:Kleinfeld Ira..出版社:New York :Holt, Rinehart, and Winston,c1986.起始頁碼:83,結(jié)束頁碼:94
第四篇:計(jì)算器實(shí)驗(yàn)心得
院
系:計(jì) 算 機(jī) 學(xué) 院
實(shí)驗(yàn)課程:計(jì)算機(jī)基礎(chǔ)實(shí)驗(yàn) 實(shí)驗(yàn)項(xiàng)目:計(jì)算器 指導(dǎo)老師:宋桂琴
開課時(shí)間:2010 ~ 2011第 2學(xué)期
專 業(yè):軟件工程(數(shù)字媒體)班 級(jí):10本8班 學(xué) 生:史文林 學(xué) 號(hào):20102003056
華南師范大學(xué)教務(wù)處
在這個(gè)實(shí)驗(yàn)中,我首先按照《程序設(shè)計(jì)實(shí)驗(yàn)課程指導(dǎo)》中的步驟做,然后再在 “calculatorDlg.cpp”文件中增加不同的算法功能,在實(shí)驗(yàn)過程中出現(xiàn)了一些問題,但都通過自己檢查或者其他同學(xué)的幫助解決了,以下就是我實(shí)驗(yàn)過程中碰到的問題:
(1)在按照指導(dǎo)書中的步驟做完后,再在“ calculatorDlg.cpp”文件中增加了“atan”“exp”“sqrt”“l(fā)og”這四個(gè)功能,一開始以為增加了功能就完事 華 南 師 范 大 學(xué) 實(shí) 驗(yàn) 報(bào) 告
學(xué)生姓名
史文林
學(xué)
號(hào)
20102003056
專
業(yè)
軟件工程(數(shù)字媒體)
年級(jí)、班級(jí)
10本8班
課程名稱
計(jì)算機(jī)基礎(chǔ)實(shí)驗(yàn)
實(shí)驗(yàn)項(xiàng)目
計(jì)算器
實(shí)驗(yàn)時(shí)間
2011 年 月日
實(shí)驗(yàn)指導(dǎo)老師
宋桂琴
實(shí)驗(yàn)評(píng)分
了,就點(diǎn)擊“build”健,但結(jié)果顯示程序存在多個(gè)錯(cuò)誤,然后才知道沒有在“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);} 華 南 師 范 大 學(xué) 實(shí) 驗(yàn) 報(bào) 告
學(xué)生姓名
史文林
學(xué)
號(hào)
20102003056
專
業(yè)
軟件工程(數(shù)字媒體)
年級(jí)、班級(jí)
10本8班
課程名稱
計(jì)算機(jī)基礎(chǔ)實(shí)驗(yàn)
實(shí)驗(yàn)項(xiàng)目
計(jì)算器
實(shí)驗(yàn)時(shí)間
2011 年 月日
實(shí)驗(yàn)指導(dǎo)老師
宋桂琴
實(shí)驗(yàn)評(píng)分
(2)在增加完算法功能之后,點(diǎn)擊“build”健,仍然顯示出存在多個(gè)錯(cuò)誤,一直找不到原因,后來問了同學(xué)之后才知道在沒有在“calculatorDlg.h”寫出應(yīng)用程序框架:
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)在改正以上錯(cuò)誤之后,點(diǎn)擊“build”后結(jié)果顯示0錯(cuò)誤,便開始運(yùn)行程序,但是不知道為什么,運(yùn)行程序之后點(diǎn)擊計(jì)算器上的按鍵時(shí)計(jì)算器不能運(yùn)行,后華 南 師 范 大 學(xué) 實(shí) 驗(yàn) 報(bào) 告
學(xué)生姓名
史文林
學(xué)
號(hào)
20102003056
專
業(yè)
軟件工程(數(shù)字媒體)
年級(jí)、班級(jí)
10本8班
課程名稱
計(jì)算機(jī)基礎(chǔ)實(shí)驗(yàn)
實(shí)驗(yàn)項(xiàng)目
計(jì)算器
實(shí)驗(yàn)時(shí)間
2011 年 月日
實(shí)驗(yàn)指導(dǎo)老師
宋桂琴
實(shí)驗(yàn)評(píng)分
來經(jīng)過檢查才發(fā)現(xiàn)沒有在“calculatorDlg.cpp”中寫出映射ID及函數(shù):
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)
在經(jīng)過上面幾次更正后,計(jì)算器終于可以運(yùn)行了,但是有一個(gè)問題就是每次運(yùn)行點(diǎn)擊數(shù)字健時(shí),在結(jié)果框里首先顯示出“1.#INF”,然后再按其他健時(shí)才能正常運(yùn)算。問了幾個(gè)同學(xué),他們也出現(xiàn)了同樣的問題,就是不知道如何去解決。
華 南 師 范 大 學(xué) 實(shí) 驗(yàn) 報(bào) 告
學(xué)生姓名
史文林
學(xué)
號(hào)
20102003056
專
業(yè)
軟件工程(數(shù)字媒體)
年級(jí)、班級(jí)
10本8班
課程名稱
計(jì)算機(jī)基礎(chǔ)實(shí)驗(yàn)
實(shí)驗(yàn)項(xiàng)目
計(jì)算器
實(shí)驗(yàn)時(shí)間
2011 年 月日
實(shí)驗(yàn)指導(dǎo)老師
宋桂琴
實(shí)驗(yàn)評(píng)分
第五篇:《制作簡(jiǎn)單的計(jì)算器》學(xué)案
制作簡(jiǎn)單的計(jì)算器
學(xué)習(xí)要點(diǎn): 數(shù)據(jù)類型
數(shù)據(jù)類型的轉(zhuǎn)換 +-*/符號(hào) 判斷 組合框 四舍五入 注釋
一、任務(wù)分析
簡(jiǎn)單計(jì)算器:輸入數(shù)值進(jìn)行加減乘除計(jì)算,繪制流程圖,確定所需組件。(1)三個(gè)編輯框(輸入或顯示的數(shù)值和結(jié)果)(2)一個(gè)組合框(放置運(yùn)算符號(hào))(3)一個(gè)標(biāo)簽(放置等號(hào))
(4)1個(gè)按鈕(被單擊時(shí)激發(fā)代碼)
2、界面設(shè)計(jì)(可參考上圖)
3、認(rèn)識(shí)語句(1)到文本():數(shù)值轉(zhuǎn)化為文本(2)到數(shù)值():到數(shù)值(通用型 待轉(zhuǎn)換的文本或數(shù)值)
(3)判斷()調(diào)用格式: 〈無返回值〉 判斷(邏輯型 條件)本命令根據(jù)提供的邏輯參數(shù)的值,來決定是否改變程序的執(zhí)行位置,如果提供的邏輯參數(shù)值為真,程序繼續(xù)順序向下執(zhí)行,否則跳轉(zhuǎn)到下一分支處去繼續(xù)判斷。(4)組合框():語句使用可參考E語言知識(shí)庫
4、練習(xí)用E語言解決(1)利用組件組建窗體
(2)右擊組合框,設(shè)置“列表項(xiàng)目”,在列表項(xiàng)管理對(duì)話框中選擇“向后插入空項(xiàng)目”分別輸入“+-*/”符號(hào)。點(diǎn)擊確定(3)點(diǎn)擊組合框?qū)傩?,在【類型】中選擇“不可編輯下拉式”;在【現(xiàn)行選中項(xiàng)】中選擇“0”。(目的避免在組合框中寫入不必要的東西)
(4)點(diǎn)擊【計(jì)算】按鈕編寫程序編輯框3.內(nèi)容 = 到文本(到數(shù)值(編輯框1.內(nèi)容)+ 到數(shù)值(編輯框2.內(nèi)容))(5)利用判斷解決加減乘除的運(yùn)算
(6)注意除號(hào)的寫法:如果輸入“/”,符號(hào)自動(dòng)變成“÷”,進(jìn)行除法運(yùn)算;如果輸入“”,符號(hào)自動(dòng)加粗“ \”,表示進(jìn)行整除運(yùn)算(**求出兩個(gè)數(shù)值的商,并返回其整數(shù)部分,運(yùn)算符號(hào)為“”。)
E語言代碼改成如下:
(7)四舍五入:調(diào)用格式: 〈雙精度小數(shù)型〉 四舍五入(雙精度小數(shù)型 欲被四舍五入的數(shù)值,[整數(shù)型 被舍入的位置])-系統(tǒng)核心支持庫->算術(shù)運(yùn)算
英文名稱:round 返回按照指定的方式進(jìn)行四舍五入運(yùn)算的結(jié)果數(shù)值。本命令為初級(jí)命令。參數(shù)<1>的名稱為“欲被四舍五入的數(shù)值”,類型為“雙精度小數(shù)型(double)”。參數(shù)<2>的名稱為“被舍入的位置”,類型為“整數(shù)型(int)”,可以被省略。如果大于0,表示小數(shù)點(diǎn)右邊應(yīng)保留的位數(shù);如果等于0,表示舍入到整數(shù);如果小于0,表示小數(shù)點(diǎn)左邊舍入到的位置。例如:四舍五入(1056.65, 1)返回 1056.7; 四舍五入(1056.65, 0)返回 1057; 四舍五入(1056.65,-1)返回 1060。如果省略本參數(shù),則默認(rèn)為0。將除法的E語言代碼改成如下: