1、邮包计费程序 【说明】: (1)假定向国外邮寄包裹计费如下计算:首先,包裹重量四舍五入到最近的15克的倍数,然后按照表2.1收费。试编写一个程序是先邮包计费,要求编写为Windows应用程序。 表2.1邮寄包裹收费表
(2)提示:输入一个包裹的重量,根据邮包重量计算相应的邮费。这里采用多分支程序设计,可使用switch语句。switch后面的表达式不应为邮包的重量,而应是邮包的重量除以15后再取整。 using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Text; namespace WindowsApplication1 { /// <summary> /// Form1 的摘要说明。 /// </summary> public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.TextBox textBox2; private System.Windows.Forms.Button button1; private int weight; private int money; /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null;public Form1() { // // Windows 窗体设计器支持所必需的 // InitializeComponent();// // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // }/// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); }#region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.textBox1 = new System.Windows.Forms.TextBox(); this.textBox2 = new System.Windows.Forms.TextBox(); this.button1 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // label1 // this.label1.Location = new System.Drawing.Point(16, 24); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(80, 16); this.label1.TabIndex = 0; this.label1.Text = "包裹重量(克)"; // // label2 // this.label2.Location = new System.Drawing.Point(8, 88); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(96, 23); this.label2.TabIndex = 1; this.label2.Text = "应收费用(元)"; // // textBox1 // this.textBox1.Location = new System.Drawing.Point(112, 24); this.textBox1.Name = "textBox1"; this.textBox1.TabIndex = 2; this.textBox1.Text = "textBox1"; // // textBox2 // this.textBox2.Location = new System.Drawing.Point(112, 88); this.textBox2.Name = "textBox2"; this.textBox2.TabIndex = 3; this.textBox2.Text = "textBox2"; // // button1 // this.button1.Location = new System.Drawing.Point(280, 96); this.button1.Name = "button1"; this.button1.TabIndex = 4; this.button1.Text = "结果"; this.button1.Click += new System.EventHandler(this.button1_Click); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(392, 273); this.Controls.Add(this.button1); this.Controls.Add(this.textBox2); this.Controls.Add(this.textBox1); this.Controls.Add(this.label2); this.Controls.Add(this.label1); this.Name = "Form1"; this.Text = "邮资计算器"; this.ResumeLayout(false);} #endregion/// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); }private void button1_Click(object sender, System.EventArgs e) { weight = (int)(Convert.ToSingle(this.textBox1.Text)/15); switch(weight) { case 0:this.textBox2.Text = "5";break; case 1:this.textBox2.Text = "9";break; case 2:this.textBox2.Text = "12";break; case 3:this.textBox2.Text = "14";break; case 4:this.textBox2.Text = "15";break; default:this.textBox2.Text =Convert.ToString((int)(Convert.ToSingle(this.textBox1.Text)-74.9)/10+15);break;} } } }2、捉拿肇事司机 【说明】: (1)一辆卡车违反交通规则,撞死行人,司机畏罪驾车逃跑。当时有三个人目击这一车祸的发生,但是都没有看清卡车的车牌号码,只记住车牌的部分特征:甲牌照号码的前两位数字相同,乙记住牌照号码的后两位数字也是相同的,丙是一位数学家,他说:“车牌号码肯定是四位数,而且恰好是一个整数的平方。”并且丙已经脱到处符合该条件的号码只可能有一个。根据这些信息来判断车牌号码并捉拿肇事司机。要求编写一个控制台应用程序。 (2)提示:假定车牌号码的前两位我们用a表示,后两位用b表示,这四位数可写成:a*1000+a*100+b*10+b。又知道这个四位数为某个数的平方,假定该数为i,则应该有如下等式成立:a*1000+a*100+b*10+b=i*i。 本题的目的是求出a,b和i。假设m为汽车车牌号码,i作为循环控制变量,则i= ;因为m为一个四位数,所以i的取值范围一定在32和99之间。利用循环语句,判断由i所得到的m(i*i)是否满足前两位相等,后两位相等。如果满足则m就是车牌号码,推出循环,否则继续循环。 (3)参考运行结果:肇事车辆车牌号码为:7744; using System; namespace zuonashiji { /// <summary> /// Class1 的摘要说明。 /// </summary> class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { int s,a1,a2,b1,b2; for(int i=32;i<=99;i++) { s = i*i; a1 = s/1000; a2 = (s-a1*1000)/100; b1 = (s-a1*1000-a2*100)/10; b2 = (s-a1*1000-a2*100-b1*10); if(a1==a2&b1==b2) { Console.WriteLine("偷车贼是{0}",s); break; } } Console.ReadLine(); } } }3、二分法查找 【提示】: (1)所谓二分法查找就是折半查找。定义一个具有是个元素的一位数组,为它赋一个有序正数序列,然后采用折半查找算法查找一个输入的数m在数组中的位置。如果找到,输出其下标;若找不到,则显示没有找到信息。 (2)折半查找法是一种在有序数列中快速查找指定数据的一种方法,具体算法如下:每次查找前确定数组中待查找的下表范围low和high(low<high),然后用m与中间位置(mid)处的元素进行比较。如果m的值大于中间位置处的元素值,则下一次查找的范围放在中间位置之后的元素中(设定low=mid+1);如果m的值小如中间位置的元素,则下一次查找的范围在中间元素之前(设定high=mid-1),如果中间位置的元素等于m,则找到。反复查找直到找到或者low<high为止。 using System; namespace erfenchazhao { /// <summary> /// Class1 的摘要说明。 /// </summary> class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { int[]s = new int[10]{10,11,12,13,14,15,16,17,18,19}; int m,low=0,high=9,mid=s.Length/2; Console.WriteLine("请输入您要查找的数,必须在10-19之间"); m = Convert.ToInt32(Console.ReadLine()); try { while(true) { if(s[mid]<m) { low = mid+1; mid = low+(high-low)/2; } else if(s[mid]>m) { high = mid-1; mid = high - (high-low)/2; } else { Console.WriteLine("找到了:在第{0}位",mid); break; }} } catch { Console.WriteLine("输入的数有误"); } Console.ReadLine(); } } } |