第一篇:C#应用程序设计教程 第二版+课后习题答案
第一章
1.判断题
(1)×(2)√(3)√(4)×(5)×
(6)√ 2.选择题
(1)C(2)B(3)B(4)C(5)D
(6)C 3.编程题
using System;using System.Collections.Generic;using System.Linq;using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args){ Console.WriteLine(“Hello C#”);} } }
第二章
1.判断下列符号哪些是合法的C#变量名称
北京 abc _xyz x_y 2.根据要求写出C#表达式(1)N%3==0 & N%5==0(2)(char)new Random().Next(67,74)(3)Math.Pow(x,3)*y/(x+y)(4)Math.Sqrt(b*b-4*a*c)3.判断题
(1)×(2)√(3)√(4)√(5)√
(6)×(7)√(8)√(9)√(10)×(11)√(12)× 4.选择题
(1)B(2)C(3)B(4)B
(5)C
(6)B(7)D(8)B(9)C(10)A 5.分析并写出下列程序运行结果(1)a=21,b=9,c=16
y=4(2)b=41(3)s=6(4)a[0]=28
a[1]=15
a[2]=39
a[3]=48
a[4]=39 6.程序填空
(1)① 3 ② a[i] ③ a[i] ④ a[5-i] ⑤ a[5-i](2)① i % 5 == 0 | i % 7 == 0 ② s+ i 7.编程题(1)static void Main(string[] args){ int s,i,j;for(i = 2;i < 1000;i++){ s = 0;for(j = 1;j < i;j++){ if(i % j == 0)s += j;} if(i == s)Console.WriteLine(“{0}”,i);} }(2)static void Main(string[] args){ int[,] a = {{2,5,18,4 },{3,4,9,2},{4,1,16,8},{5,2,14,6}};int i,j,k,max,maxj;for(i = 0;i < 4;i++){ max = a[i,0];maxj = 0;for(j = 1;j < 4;j++){ if(max < a[i,j]){max = a[i,j];maxj = j;} } for(k = 0;k < 4;k++){ if(a[k, maxj] < max)break;} if(k == 4)Console.WriteLine(“鞍点:第{0}行,第{1}列”,i+1,maxj+1);} }(3)
static void Main(string[] args){ int a = 20, b = 16,i=20;do { if(i % a == 0 & i % b == 0)break;i++;} while(true);Console.WriteLine(“最小公倍数:{0}”,i);i = 16;do { if(a % i == 0 & b % i == 0)break;i--;} while(true);Console.WriteLine(“最大公约数:{0}”,i);}(4)
static void Main(string[] args){ int i, j,k;float s = 1.0f;for(i = 2;i < 11;i++){ k=1;for(j = 2;j <= i;j++)k += j;s += 1.0f / k;} Console.WriteLine(“s={0}”,s);}(5)
static void Main(string[] args){ String s = “a,b2>4[AG6p(”;int i, n1=0,n2=0,n3=0,n4=0;for(i=0;i
static void Main(string[] args){ int i,s = 1;for(i = 0;i < 5;i++){ s = 2 *(s + 1);} Console.WriteLine(“小猴子第一天摘了{0}个桃子”,s);}
说明:由最后一天往前推算。后一天吃了前一天桃子数量的一半多1个,剩余桃子数量是前一天桃子数量的一半减1,则,前一天的桃子数量是后一天的桃子数量加1的2倍。
第三章
1.判断题
(1)√(2)×(3)√
(4)√(5)√(6)×(7)√(8)×(9)×
(10)√
(11)√(12)√(13)√(14)×(15)√(16)√(17)×(18)√(19)√(20)×(21)×(22)√(23)√(24)√(25)×(26)×(27)× 2.选择题
(1)C(2)B(3)C(4)D
(5)C
(6)B(7)D(8)C(9)A(10)A(11)B(12)A(13)D(14)B
(15)C
3.分析下列程序的运行结果(1)s=32,s1=32,s2=34
x=11,y=21(2)x1=3,x2=4
y1=1,y2=4 4.编程题(1)
class Student { public string studentid;public string studentname;private string birthplace;private DateTime birthdate;public Student(string id, string name){ studentid = id;studentname = name;} public string StudentId { get { return studentid;} set { studentid = value;} } public string StudentName { get { return studentname;} set { studentname = value;} } public string BirthPlace { get { return birthplace;} set { birthplace = value;} } public DateTime BirthDate { get { return birthdate;} set { birthdate = value;} } public int Age { get { return DateTime.Now.Year1, p1.yp1.x)*(p2.xp1.y)*(p2.yv2;if(radioButton3.Checked ==true)v = v1 * v2;if(radioButton4.Checked ==true){ if(v2!= 0)v = v1 / v2;} textBox3.Text = v.ToString();} 3.利用4.6节知识,参考图4-29设计具有菜单、工具栏和状态栏的Windows窗口应用程序。
第五章
1.判断题
(1)√(2)×(3)√(4)√(5)×
(6)√(7)×
2.选择题
(1)A(2)无答案,应该是TextReader(3)A(4)C
(5)A(6)C 3.编程题
创建Windows窗口用于程序,在窗口上放置一个Button控件,名称为button1,编写其Click事件处理方法:
private void button1_Click(object sender, EventArgs e){ int i, j;int[,] a=new int[3,3];int[,] b = new int[3, 3];int[,] c = new int[3, 3];string s1;string[] ss;FileStream fs = new FileStream(@“d:data1.txt”,FileMode.Open);StreamReader sr=new StreamReader(fs,Encoding.Default);StreamWriter sw;BinaryWriter bw;for(i = 0;i < 3;i++){ s1 = sr.ReadLine();ss = s1.Split(' ');for(j = 0;j < 3;j++){ a[i, j] = int.Parse(ss[j]);} } for(i = 0;i < 3;i++){ s1 = sr.ReadLine();ss = s1.Split(' ');for(j = 0;j < 3;j++){ b[i, j] = int.Parse(ss[j]);} } sr.Close();fs.Close();for(i = 0;i < 3;i++)for(j = 0;j < 3;j++)c[i, j] = a[i, j] + b[i, j];SaveFileDialog sfd = new SaveFileDialog();sfd.Filter = “文本文件(*.txt)|*.txt”;if(sfd.ShowDialog()== DialogResult.OK){ fs = new FileStream(sfd.FileName, FileMode.OpenOrCreate);sw = new StreamWriter(fs,Encoding.Default);for(i = 0;i < 3;i++){ for(j = 0;j < 3;j++){ sw.Write(c[i, j]);sw.Write(“ ”);} sw.Write(“n”);} sw.Close();fs.Close();} sfd.Filter = “二进制文件(*.bin)|*.bin”;if(sfd.ShowDialog()== DialogResult.OK){ fs = new FileStream(sfd.FileName, FileMode.OpenOrCreate);bw = new BinaryWriter(fs);for(i = 0;i < 3;i++)for(j = 0;j < 3;j++)bw.Write(c[i, j]);bw.Close();fs.Close();} } 说明:data1.txt文件中共9行整数,每行3个整数,每个数据之间以一个空格隔开。
第六章
1.判断题
(1)√(2)×(3)×(4)×(5)√
(6)√(7)√(8)×(9)×(10)√
2.选择题
(1)C(2)D(3)C(4)A
(5)B(6)C(7)B(8)D 3.编程题
创建Windows窗口应用程序,在窗口上放置一个toolStrip控件,并在其中添加两个组合框,名称分别为toolStripComboBox1和toolStripComboBox2,给toolStripComboBox1添加选项:短划线、点划线、双点划线、虚线、实线,给toolStripComboBox2添加选项:1、2、3、4。给窗口添加如下私有字段:
private Graphics g1;private DashStyle dashstyle=DashStyle.Solid;private float penwidth=1;private Pen pen1;private bool beDraw = false;private Point p1, p2;编写comboBox1和comboBox2的SelectedIndexChanged事件处理方法:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e){ dashstyle =(DashStyle)comboBox1.SelectedIndex;}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e){ penwidth =float.Parse(comboBox2.Text);} 编写Form3的Load、MouseDown、MouseMove和MouseUp以及工具栏上两个组合框的SelectedIndexChanged事件处理方法:
private void Form3_Load(object sender, EventArgs e){ toolStripComboBox1.SelectedIndex = toolStripComboBox1.Items.Count-1;toolStripComboBox2.SelectedIndex = 0;} private void Form3_MouseDown(object sender, MouseEventArgs e){ pen1 = new Pen(Color.Red, penwidth);pen1.DashStyle = dashstyle;beDraw = true;p1 = e.Location;g1 = this.CreateGraphics();} private void Form3_MouseMove(object sender, MouseEventArgs e){ if(beDraw == true){ p2 = e.Location;g1.DrawLine(pen1, p1, p2);p1 = p2;} } private void Form3_MouseUp(object sender, MouseEventArgs e){ beDraw = false;} private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e){ dashstyle =(DashStyle)toolStripComboBox1.SelectedIndex;} private void toolStripComboBox2_SelectedIndexChanged(object sender, EventArgs e){ penwidth = float.Parse(toolStripComboBox2.Text);}
第七章
1.判断题
(1)√(2)×(3)×(4)×(5)√
(6)×(7)√(8)×(9)√(10)×(11)√(12)×(13)√(14)√(15)√(16)√
2.选择题
(1)A(2)D(3)C(4)A
(5)D(6)B(7)C(8)D(9)B(10)C(11)C 12)C 13)A 14)B 15)D 16)D 3.编程题
(1)创建Windows窗口应用程序,在窗口上放置两个Button控件,名称分别为button1和button2,再放置一个ComboBox控件和DataGridView控件,名称分别为comboBox1和dataGridView1。
编写button1的Click事件处理方法:
private void button1_Click(object sender, EventArgs e){ OleDbConnection con = new OleDbConnection();OleDbCommand com = new OleDbCommand();con.ConnectionString =@“Provider=microsoft.jet.oledb.4.0;data source=d:aaa.mdb”;con.Open();com.CommandType = CommandType.Text;com.CommandText = “select * from Score where score>80”;com.Connection = con;OleDbDataReader dr = com.ExecuteReader();comboBox1.Items.Clear();while(dr.Read()== true){ if(dr.IsDBNull(dr.GetOrdinal(“StudentID”))== false)
comboBox1.Items.Add(dr[“StudentID”]);} } 说明:为了使用ADO.NET的OLEDB访问方式,需要添加下列引用:
using System.Data.OleDb;(2)界面与(1)相同。
编写button2的Click事件处理方法:
private void button2_Click(object sender, EventArgs e){ OleDbConnection con = new OleDbConnection();OleDbCommand com = new OleDbCommand();con.ConnectionString = @“Provider=microsoft.jet.oledb.4.0;data source=d:aaa.mdb”;con.Open();OleDbDataAdapter da = new OleDbDataAdapter(“select Class as 班级,avg(Score)as平均成绩 from Score group by Class”, con);DataSet ds = new DataSet();da.Fill(ds, “平均成绩表”);dataGridView1.DataSource =ds.Tables[“平均成绩表”];}(3)参考7.7节的学生信息管理程序,编写通讯录管理程序,细节略。
第二篇:C语言程序设计教程课后习题答案
C语言程序设计教程课后习题答案
第一章 C语言程序设计概述 -习题答案 算法的描述有哪些基本方法?
答
1、自然语言
2、专用工具C语言程序的基本结构是怎样的?举一个例子说明。
答
1、C语言程序由函数构成;
2、“/*”与“*/”之间的内容构成C语言程序的注释部分;
3、用预处理命令#include、#define可以包含有关文件或预定义信息;
4、大小写字母在C语言中是有区别的;
5、除main()函数和标准库函数外,用户也可以自己编写函数,应用程序一般由多个函数组成,这些函数指定实际所需要做的工作。C语言有什么特点?
答
1、具有结构语言的特点,程序之间很容易实现段的共享;
2、主要结构成分为函数,函数可以在程序中被定义完成独立的任务,独立地编译代码,以实现程序的模块化;
3、运算符丰富,包含的范围很广;
4、数据类型丰富;
5、允许直接访问物理地址,即可直接对硬件进行损伤,实现汇编语言的大部分功能;
6、限制不太严格,程序设计自由度大,这样使C语言能够减少对程序员的束缚;
7、生成的目标代码质量,程序执行效率高,同时C语言编写的程序的可移植性好。★指出合法与不合法的标识符命名。
答
AB12--√ leed_3--a*b2--× 8stu--× D.K.Jon--× EF3_3--√ PAS--√ if--× XYZ43K2--√ AVE#XY--× _762--√ #_DT5--× C.D--×说明下列Turbo C热键的功能。
答
F2:源文件存盘 F10:调用主菜单 F4:程序运行到光标所在行(用于调试程序)Ctrl+F9:编译并链接成可执行文件 Alt+F5:将窗口切换到 DOS 下,查看程序运行结果。说明下列Turbo C方式下输入并运行下列程序,记录下运行结果。
①main()
{printf(“********************n”);printf(“ welcome you n”);printf(“ very good n);printf(”********************n“);} ②main()
{ int a,b,c,t;printf(”please input three numbers;“);scanf(”%d,%d,%d“,&a,&b,&c);/*教材S是错误的*/ t=max(max(a,b),c);printf(”max number is:%dn“,t);} int max(int x, int y){ int z;if(x>y)z=x;else z=y;return(z);} 答
运行结果:
******************** welcome you very good ******************** 运行结果:
please input three numbers;3,1,4 /*左侧下划线内容为键盘输入*/ max number is:4 7 一个C程序是由若干个函数构成的,其中有且只能有一个___函数。
答
main()8 在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的___命令或按___键转到用户屏幕查看程序运行结果。
答
1、User screen
2、Alt+F5 9 ★C语言对标识符与关键字有些什么规定?
答
1、标识符用来表示函数、类型及变量的名称,它是由字母、下划线和数字组成,但必须用字母或下划线开头。
2、关键字是一种语言中规定具有特定含义的标识符,其不能作为变量或函数名来使用,用户只能根据系统的规定使用它们。C源程序输入后是如何进行保存的?
答
是以C为扩展名保存的纯文本文件。
第二章 C语言程序的基本数据类型与表达式 -习题答案 ★指出下列常数中哪些是符合C语法规定的。
答
''--× '101'--× ”“--× e3--× 019--√ 0x1e--√ ”abn“--√ 1.e5--×(2+3)e(4-2)--× 5.2e2.5--×请找出下列程序中的错误,改正后写出程序运行结果。
①void main(){int x,y=z=5,aver;x=7 AVER=(x+y+z)/3 printf(”AVER=%dn“,aver);} ②void main()
{ char c1='a';c2='b';c3='c';int a=3.5,b='A' printf(”a=%db='“endn”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);} 答
main(){int x,y=5,z=5,aver;x=7;aver=(x+y+z)/3;printf(“AVER=%dn”,aver);}
运行结果:AVER=5 ②main()
{ char c1='a', c2='b', c3='c';int a=3,b='A';printf(“a=%d,b='%c'”end“n”,a,b);printf(“a%cb%cbc%ctabcn”,c1,c2,c3);}
运行结果:a=3,b='A'“end”
aabcc abc 3 写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的空格填上赋值后的数据(实数保留到小数点后两位)。int 99
-1 char 'h'
unsigned int
float
55.78
long int
答 int 99 104 66 55 68-1 char 'c' 'h' 'B' '7' 'D'
unsigned int 99 104 66 55 68 65535
float 99.00 104.00 66.00 55.78 68.00-1.00
long int 99 104 66 55 68-1
★写出程序运行结果。
①void main(){int i,j;i=8,j=10;printf(“%d,%d,%d,%dn”,i,j,++i,j++);} ②main()
{ int a=1,b=2,c=30;;printf(“%d,%d,%d,%dn”,a=b=c,a=b==c,a==(b=c),a==(b==c));} 注意:a=b=c,a=b==c之间应为逗号,教材有误 答
运行结果: 9,11,9,10 运行结果: 30,1,0,0
③void main()
{int a=10,b=20,c=30,d;d=++a<=10||b-->=20||c++;printf(“%d,%d,%d,%dn”,a,b,c,d);}
答
运行结果: 11,19,30,1
★写出下面表达式的值(设a=10,b=4,c=5,d=1,x=2.5,y=3.5)。⑴a%=(b%=3)
⑵n++,a+=a-=a*=a ⑶(float)(a+c)/2+(int)x%(int)y ⑷a*=b+c ⑸++a-c+b++ ⑹++a-c+++b ⑺a
⑼a+b,18+(b=4)*3,(a/b,a%b)
⑽x+a%3*(int)(x+y)%2/4+sizeof(int)⑾a
答
⑴0 ⑵0 ⑶9.500000 ⑷90 ⑸10 ⑹10 ⑺'A' ⑻2 ⑼4.5 ⑽1 ⑾0 ⑿20 ⒀0 下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)?
①m=(a=4,4*5)与m=a=4,4*5 ②(float)(a/b)与(float)a/b ③(int)a+b与(int)(a+b)④m%=2+a*3与m=m%2+a*3 ⑤m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b 答
①前面是赋值表达式,而后面的是一个逗号表达式,所以一定不同;
②前面的表达式中a/b结果为一整数,结果已经取整,精度可能受到影响,之后强制float后才为浮点型,后面的是先将a转换为float后再与b相除,其值保证了精度,所以不同。
③因为a、b均为整数,其前后两个表达式的计算结果是一致的。
④前一表达式是一算术表达式,而后者为一赋值表达式,此为一点不同;另外,前一表达式的m只被赋过一次值,后一表达式中的m曾两次被赋值,第一次赋值时与第一表达式中的值一致,第二次赋值后即不再相同。⑤前后表达式的计算结果应该是一致的:a=2, b=3, m=6 7 条件表达式x>0?x:-x的功能是什么?
答
如果x的值是一正数,则表达式的值为x值;如果x的值是一非正数,则表达式的值为-x。其实该表达式的值即为x的绝对值,C语言中提供了一个函数fabs(x)即可完成此功能,该函数包含在math.h头文件中。用一个条件表达式描述从a、b、c中找出最大都赋给max.答
max=a>(b>c?b:c)?a:(b>c?b:c);9 ★若x为int型变量,则执行以下语句后x的值为()。x=6;x+=x-=x*x;A.36 B.-60 C.60 D.-24 答 B.10 ★若有以下类型说明语句: char w;int x;float y;double z;则表达式w*x+z-y的结果为()类型。A.float B.char C.int D.double 答 D.第三章 顺序结构程序设计 -习题答案 变量k为float类型,调用函数scanf(“%d”,&k),不能使变量k得到正确数值的原因是___。
答
格式修饰符与变量类型不一致。因为%d输入的数据类型应该为十进制整数,而&k为占用4个字节的float类型变量的地址。★a=1234,b=12,c=34,则执行“printf(“|%3d%3d%-3d|n”,a,b,c);”后的输出是___。
答
|1234 1234 |
分析如下:
①%3d为右对齐输出变量,且指定输出变量的值宽度为3个字符位,如果变量实际位数小于3,则左端补空格,如果变量实际位数大于3,则按实际长度输出,不受限制。
②%-3d为左对齐输出变量,在输出变量时,如是变量实际位数小于3,则在右端补空格,否则按实际输出。★设有“int a=255,b=8;”,则“printf(“%x,%on”,a,b);”输出是___。答 ff,10 ①如果“printf(“%X,%on”,a,b);”则输出为FF,10。说明在输出十六进制字母时,其大小写受格式修饰符的限制,如果是“%x”则输出小写,如果是“%X”则输出大写。
②如果希望在输出十六进制时输出前导符0x或0X,则以上输出语句应改“printf(“%#x,%on”,a,b);”为或“printf(“%#X,%on”,a,b);”。本条解释不必须掌握。★以下程序输出的结果是___。main(){ int a1=1,a2=0,a3=2;printf(“%d,%d,%dn”,a1,a1+a2+a3,a3-a1);} 答 1,3,1 5 printf函数中用到格式符%5s,其中5表示输出字符占用5列。如果字符串长度大于5,则按___输出;如果字符串长度小于5,则按___输出。
答
①实际 ②左端补空格 6 ★已定义变量如下: int a1,a2;char c1,c2;若要求输入a1、a2、c1和c2的值,正确的输入函数调用语句是___。
答
scanf(“%d,%d,%c,%c”,&a1,&a2,&c1,&c2);7 输入两个整型变量a、b的值,输出下列算式以及运算结果___。a+b、a-b、a*b、a/b、(float)a/b、a%b 每个算式占一行。如a=10,b=5,a+b输出为:10+5=15 答
设int a=10,b=5;以下为输出语句及结果: ①printf(“%d+%d=%dn”,a,b,a+b);10+5=15 ②printf(“%d-%d=%dn”,a,b,a-b);10-5=5 ③printf(“%d*%d=%dn”,a,b,a*b);10*5=50 ④printf(“%d/%d=%dn”,a,b,a/b);10/5=2 ⑤printf(“%(float)d/%d=%fn”,a,b,(float)a/b);(float)10/5=2.000000 ⑥printf(“%d%%%d=%dn”,a,b,a%b);10%5=0 8 ★输入一个非负数,计算以这个数为半径的圆周长和面积。答
#define PI 3.1415926 main(){ float r,l,area;printf(“Input a positive:”);scanf(“%f”,&r);l=2*PI*r;area=PI*r*r;printf(“l=%ftarea=%fn”,l,area);} 9 输入任意一个3位数,将其各位数字反序输出(例如输入123,输出321)。
答
main(){ int x,y;printf(“Input a number(100-999):”);scanf(“%d”,&x);y=100*(x%10)+10*(x/10%10)+x/100;/*注意分析此处算法*/
第三篇:完整的delphi程序设计教程课后习题答案
1.239页1题小时钟 procedure TForm1.Timer1Timer(Sender: TObject);var xt,yt:integer;h,m,s,ms:word;begin decodetime(time,h,m,s,ms);xt:=paintbox1.clientwidth div 2;yt:=paintbox1.clientheight div 2;paintbox1.refresh;paintbox1.canvas.moveto(xt,yt);paintbox1.canvas.pen.width:=3;paintbox1.canvas.lineto(xt+round(sin((60*h+m)/(12*60)*2*pi)*100), yt-round(cos((60*h+m)/(12*60)*2*pi)*100));paintbox1.canvas.moveto(xt,yt);paintbox1.canvas.pen.width:=2;paintbox1.canvas.lineto(xt+round(sin(m/60*2*pi)*140), yt-round(cos(m/60*2*pi)*140));paintbox1.canvas.moveto(xt,yt);paintbox1.canvas.pen.width:=1;paintbox1.canvas.lineto(xt+round(sin(s/60*2*pi)*180), yt-round(cos(s/60*2*pi)*180));end;end.2.239页3题求两点间的距离 procedure TForm1.Button1Click(Sender: TObject);begin paintbox1.Refresh;formpaint(sender);end;procedure TForm1.FormPaint(Sender: TObject);var xt,yt:integer;ax,ay,bx,by:integer;begin xt:=paintbox1.ClientWidth div 2;yt:=paintbox1.Clientheight div 2;paintbox1.canvas.MoveTo(xt,0);paintbox1.canvas.lineTo(xt,2*yt);paintbox1.canvas.MoveTo(0,yt);paintbox1.canvas.lineTo(2*xt,yt);ax:=strtoint(edit1.text);ay:=strtoint(edit2.text);bx:=strtoint(edit3.text);by:=strtoint(edit4.text);
edit5.Text:=floattostr(sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by)));
paintbox1.canvas.MoveTo(xt+ax*10,yt-ay*10);
paintbox1.canvas.lineTo(xt+bx*10,yt-by*10);end;end.3.226页5题输入学生成绩 var
Form1: TForm1;type
studentrecord=record xh,xm:string[6];xb:boolean;yy,sx,dz:integer;end;
implementation {$R *.dfm} procedure
TForm1.Button1Click(Sender: TObject);
var t:studentrecord;
f,f1:file of studentrecord;p1,p2:boolean;begin
assignfile(f,'c:my documentsstu.dat');reset(f);
assignfile(f1,'c:my documentsstu1.dat');rewrite(f1);
while not eof(f)do begin read(f,t);
p1:=(t.sx>=85)and(t.yy>=85)and(t.dz>=85);
p2:=t.sx+t.yy+t.dz>=270;if p1 or p2 then write(f1,t);end;
closefile(f);closefile(f1);end;
procedure
TForm1.FormCreate(Sender: TObject);
var t:studentrecord;f:file of studentrecord;xingbie:string;begin
assignfile(f,'c:my documentsstu.dat');reset(f);
while not eof(f)do begin read(f,t);if t.xb then xingbie:='男' else
xingbie:='女';
listbox1.Items.Add(t.xh+' '+t.xm+' '+xingbie+' '+inttostr(t.sx)+
' '+inttostr(t.yy)+' '+inttostr(t.dz));end;
closefile(f);end;
procedure
TForm1.Button2Click(Sender: TObject);begin close;end;end.4.226页8题保存获得奖学金者 var
Form1: TForm1;type
studentrecord=record xh,xm:string[6];xb:boolean;yy,sx,dz:integer;end;
implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);var t:studentrecord;f,f1:file of studentrecord;p1,p2:boolean;begin assignfile(f,'c:my documentsstu.dat');reset(f);assignfile(f1,'c:my documentsstu1.dat');rewrite(f1);while not eof(f)do begin read(f,t);p1:=(t.sx>=85)and(t.yy>=85)and(t.dz>=85);p2:=t.sx+t.yy+t.dz>=270;if p1 or p2 then write(f1,t);end;closefile(f);closefile(f1);end;procedure TForm1.FormCreate(Sender: TObject);var t:studentrecord;f:file of studentrecord;xingbie:string;begin assignfile(f,'c:my documentsstu1.dat');reset(f);while not eof(f)do begin read(f,t);if t.xb then xingbie:='男' else xingbie:='女';listbox1.Items.Add(t.xh+' '+t.xm+' '+xingbie+' '+inttostr(t.sx)+ ' '+inttostr(t.yy)+' '+inttostr(t.dz));end;closefile(f);end;procedure TForm1.Button2Click(Sender: TObject);begin close;end;end.5.166页22题素数 procedure
TForm1.Button1Click(Sender: TObject);type
sushuset=set of byte;var
sushu:sushuset;i,j,n,m,k:longword;s,s0:string;begin
n:=strtoint(edit1.text);m:=strtoint(edit2.text);if n mod 2=0 then n:=n+1;k:=m-n;
if k>255 then
showmessage('范围太大,请重新输入区间端点!')else begin
sushu:=[0..k];for i:=2 to n-1 do for j:=n to m do
if j mod i =0 then sushu:=sushu-[j-n];for i:=n to m div 2 do for j:= i+1 to m do
if j mod i =0 then sushu:=sushu-[j-n];s:='';s0:='';
for i:=n to m do if i-n in sushu then begin
if length(s0+' '+inttostr(i))>60 then begin
s:=s+s0+chr(13);s0:='' end;
s0:=s0+' '+inttostr(i);end;s:=s+s0;label1.caption:=s;
groupbox1.Top:=(panel1.Top-groupbox1.height)div 2;end;end;
procedure
TForm1.FormCreate(Sender: TObject);begin
groupbox1.Top:=(panel1.Top-groupbox1.height)div 2;end;
procedure
TForm1.Edit1KeyPress(Sender: TObject;var Key: Char);var j:set of char;begin
j:=['0'..'9',#8];
if not(key in j)then key:=#0;end;end.6.148页12题整除的数 implementation {$R *.dfm}
function d7(x:integer):boolean;begin
if x mod 7=0 then d7:=true else d7:=false;end;
function d17(x:integer):boolean;begin
if x mod 17=0 then d17:=true else d17:=false;end;
procedure
TForm1.FormActivate(Sender: TObject);var
n:integer;begin
for n:=1000 to 4000 do if d7(n)and d17(n)then memo1.Lines.Add(inttostr(n));end;end.7.148页17题求斐波那契数列问题 implementation {$R *.dfm} function fib(n:integer):int64;begin case n of 1,2:fib:=1;else fib:=fib(n-1)+fib(n-2);end;end;procedure TForm1.Button1Click(Sender: TObject);var k:integer;begin memo1.lines.clear;for k:=1 to strtoint(edit1.text)do memo1.lines.add(format('%2d %3d',[k,fib(k)]));end;end.8.120页10题,判断是否是闰年 procedure TForm1.Button1Click(Sender: TObject);var y,m:integer;begin y:=strtoint(edit1.text);m:=strtoint(edit2.text);label3.Caption:='';if((y mod 4 = 0)and(y mod 100 <> 0))or(y mod 400=0)then label3.Caption:=edit1.text+'年是闰年,' else label3.Caption:=edit1.text+'年不是闰年,';case m of 3,4,5:Label3.Caption:=Label3.Caption+edit2.Text+'月份是春天,';6,7,8:Label3.Caption:=Label3.Caption+edit2.Text+'月份是夏天,';9,10,11:Label3.Caption:=Label3.Caption+edit2.Text+'月份是秋天,';else Label3.Caption:=Label3.Caption+edit2.Text+'月份是冬天,';end;
case m of
1,3,5,7,8,10,12:Label3.Caption:=Label3.Caption+'共有31天,';
4,6,9,11:Label3.Caption:=Label3.Caption+'共有30天,';else
if((y mod 4 = 0)and(y mod 100 <> 0)or(y mod 400=0))then Label3.Caption:=Label3.Caption+'共有29天,' else
Label3.Caption:=Label3.Caption+'共有28天,';end;end;end.9.120页11题求和的 procedure
TForm1.Button1Click(Sender: TObject);var
n,k,j:integer;s:int64;begin
n:=strtoint(edit1.text);j:=0;s:=0;
for k:=1 to n do begin j:=j+k;s:=s+j;end;
panel2.Caption:=format('s = %d',[s]);edit1.setfocus;end;
procedure
TForm1.Edit1KeyPress(Sender: TObject;var Key: Char);var b:boolean;begin
b:=(key<>#8)and(key<#48)or(key>#57);
if b then key:=#0;end;end.10.120页12题男人,女人,小孩各有多少人 procedure
TForm1.Button1Click(Sender: TObject);var
x,y,z:integer;p:string;begin
memo1.clear;for x:=0 to 16 do for y:=0 to 24 do begin
z:=30-x-y;
if 3*x+2*y+z/1=50 then begin
p:=format('%3d %3d %3d',[x,y,z]);
memo1.lines.add(p);end;end;end;end.11.98页2题求长方体的表面积 procedure
TForm1.Button1Click(Sender: TObject);var
s,l,k,h:double;begin
l:=strtofloat(edit1.text);k:=strtofloat(edit2.text);h:=strtofloat(edit3.text);s:=2*l*k+2*k*h+2*l*h;label1.Caption:=floattostr(s);end;end.12.98页5题计算圆的面积和周长 procedure
TForm1.Edit1KeyPress(Sender: TObject;var Key: Char);var r:real;b:boolean;begin b:=(key<>#8)and(key<>'.')and(key<>#13)and(key<#48)or(key>#57);if b then key:=#0;if key =#13 then begin if edit1.text='' then edit1.text:='0';r:=strtofloat(edit1.text);if radiobutton1.Checked then label1.Caption:=format('圆的面积为: %f',[pi*r*r]);if radiobutton2.Checked then label1.Caption:=format('圆的周长为: %f',[2*pi*r]);if radiobutton3.Checked then label1.Caption:=format('圆的面积为: %f'+chr(13)+ '周长为: %f',[pi*r*r,2*pi*r]);edit1.SelectAll;end;end;procedure TForm1.RadioButton1Click(Sender: TObject);var sender0:tobject;key:char;begin sender0:=edit1;key:=#13;form1.edit1keypress(sender0,key);end;procedure TForm1.RadioButton2Click(Sender: TObject);var sender0:tobject;key:char;begin sender0:=edit1;key:=#13;form1.edit1keypress(sender0,key);end;procedure TForm1.RadioButton3Click(Sender: TObject);var sender0:tobject;key:char;begin
sender0:=edit1;key:=#13;
form1.edit1keypress(sender0,key);end;end.13.98页6题统计奇数和偶数的个数
procedure
TForm1.Button1Click(Sender: TObject);var
k,j,n:word;begin k:=0;
n:=combobox1.items.count;for j:=1to n do
if strtoint(combobox1.items[j-1])mod 2 = 0 then k:=k+1;
label1.caption:=format('共有: '+#13+'%d个偶数,'+#13+'%d个奇数。',[k,n-k]);end;
procedure
TForm1.Button2Click(Sender: TObject);begin
combobox1.items.clear;end;
procedure
TForm1.ComboBox1KeyPress(Sender: TObject;var Key: Char);begin if(key =#13)and(combobox1.text<>'')then
//按
combobox1.items.insert(0,combobox1.text);
//按
combobox1.selstart:=0;combobox1.text:='';end;
if key = #27 then
if combobox1.itemindex<>-1 then
combobox1.items.Delete(combobox1.itemindex);end;end.14.98页8题设置倒计时的时间,并进行倒计时 procedure
TForm1.Timer1Timer(Sender: TObject);var
m,n,s,h:integer;begin
timer1.Tag:=timer1.Tag-1;m:=timer1.Tag;if m<0 then begin
timer1.enabled:=false;
showmessage('预定的时间到了!');edit1.Text:='0';end else begin s:=m;
n:=s div 60;s:=s mod 60;h:=n div 60;n:=n mod 60;
maskedit1.text:=format('%d:%d:%d',[h,n,s]);
if n <> strtoint(edit1.text)then edit1.Text:=inttostr(n);end;end;
procedure
TForm1.Button1Click(Sender: TObject);begin
timer1.enabled:=True;
timer1.Tag:=strtoint(edit1.Text)*60;end;end.
第四篇:C#程序设计教程期末复习题及答案
习题 1
一、选择题
1.在C#中 B 都是对象。
A 任何类型 B 任何事物 C 任何代码 D 任何技术 2.对象包含数据和 A 的方法。
A 在该数据上工作 B 调用 C 函数调用 D 传递参数 3.一个类是 D 的蓝本。
A 数据集合 B 函数集合 C 方法集合 D 给定功能集合 4..NET构架包含公用语言运行时期和 B。5..NET的核心是 A。
A CLR B Windows2000 C DNA D 分解平台 6.C#程序以 B 扩展名保存编写的程序。A.CS B.PS C.CSS D.SC 7.System是 B 的命名空间。
A 存储系统类 B 控制台类 C I/O操作 D 新项目 8.namespace用于声明 B。
A 新项目 B 一个命名空间 C 类与方法 D 指令 9.每个C#程序必须有一个 D 方法。A 类方法 B 构造方法 C Main D 重载方法
二、问答题
1.面向对象编程的三大原则是什么? 答:封装、继承和多态性。2.封装是什么?
答:封装是用于隐藏对象实际的制作细节。3.继承是什么?
答:继承是在建立新的特定对象时,可以使用现有对象的功能性。4.多态性是什么?
答:多态性是程序代码能够依据实际对象所需而进行不同的行为。5..NET的核心构件包括哪些? 答:(1).NET构造块服务或有计划的访问某些服务。
(2)将在新的Internet设备上运行的.NET设备软件。(3).NET用户经验。6.CLR的作用是什么?
答:CLR是.NET的核心,它是一个运行时期环境,在该环境中,以不同语言编写的应用程序均能始终运行。
三、编程题
使用.NET代码编辑器编写一个C#应用程序,以在屏幕打印出:
C# is the Component-oriented language in C and C++ family of language.要求:
(1)使用using System命名空间,即定位System命名空间的Console类。(2)不使用using System命名空间,即System命名空间的Console类。(3)使用using指令的别名,即使用using创建using的别名。答案:(1)
//Example1.cs Using System;Class Example1 { Public static void Main(){ Console.Write(“C# is the Component-oriented language ”);Console.WriteLine(“in C and C++ family of language.”);} }(2)
//Example2.cs Class Example1 { Public static void Main(){ System.Console.Write(“C# is component-oriented language”);System.Console.WriteLine(“in C and C++ family language.”);
} }(3)Example3.cs Using output=System.Console;Class Example1
Public static void Main(){ Output.Write(“C# is component-oriented language”);}
习题2
一、选择题
1.C#的数据类型有 A 和 C 两种。
A 值类型 B 调用类型 C 引用类型 D 关系类型 2.C#的值类型包括 A、B 和 D 三种。A 枚举 B 基本类型 C 整形 D 结构 E浮点型 F 字符型
3.C#的引用类型包括 A、B、C、F、G 和 H 六种。
A string B object C 类 D float E char F 数组G 代表 H 4.装箱是把值类型转换到 B 类型。
A 数组 B 引用 C char D string 5.拆箱是引用类型返回到 C 类型。
A string B char C 值 D 数组 6. A 类型是所有类型的根。
接口 A System.Object B object C string D System.Int32 7.从派生类到基类对象的转换是 B 类型转换。A 显示 B 隐式 C 自动 D 专向 8.从基类到派生类对象的转换是 D 类型转换。A 隐式 B 自动 C专向 D 显示 9.强制转换对象可以使用 B 关键字实现。A is B as C this D object 10.命名空间用于定义 A 的作用域。
A 应用程序 B 有关类型 C 多重源代码 D 层次结构 11.using关键字用于 B 命名空间中的Console对象。A Console B System C Object D Int32
二、填空题
1.下列程序的运行结果是 99.44。//Exam1.cs using System;class Using { public static void Main(){ int i=918;float f=10.25f;short sh=10;double d=11.19;Console.WriteLine(i+f+sh+d);} } 2.下列程序的运行结果是 25.5。//Exam2.cs using System;class Using { public static void Main(){ int i=5;float f=5.1f;Console.WriteLine(i*f);} }
二、编程题
1. 已知a=1,b=2,c=3,x=2,计算y=ax+bx+c之值。2. 已知圆的半径Radius=2.5,计算圆的面积。(PI=3.14159)要求:
(1)使用基本方法;(2)使用装箱与拆箱;
(3)输出以double,float,int,decimal,short表示;(4)使用object类与类型转换;(5)使用派生类与as。答案: 1. 方案一: //YValue.cs using System;class Using { public static void Main(){ int a=1,b=2,c=3,x=2,y;y=(a*x+b)*x+c;Console.WriteLine(“y={0}”,y);} } 方案二:
//YValue1.cs using System;class Using { public static void Main(){ int a=1,b=2,c=3,x=2;Console.WriteLine(“y={0}”,(a*x+b)*x+c);} } 2.
(1)使用基本方法 方案一:
//CircleAreaApp.cs using System;class CircleAreaApp { public static void Main(){ double Radius=2.5,Area;Area=3.14159*Radius*Radius;Console.WriteLine(“Area={0}”,Area);} } 方案二:
//CircleAreaApp1.cs using System;class CircleAreaApp { public static void Main(){ double Radius=2.5;Console.WriteLine(“Area={0}”,3.14159*Radius*Radius);} }(2)使用装箱与拆箱 //CircleAreaApp2.cs using System;class CircleAreaApp { public static void Main(){ double Radius=2.5;double Area=3.14159*Radius*Radius;Console.WriteLine(“Area={0}”,Area);object obj=Area;Console.WriteLine(“Area={0}”,(double)obj);} }(3)输出以double,float,int,decimal,short表示 //CircleAreaApp3.cs using System;class CircleAreaApp { public static void Main(){ double Radius=2.5;double Area=3.14159*Radius*Radius;Console.WriteLine(“Area={0}”,Area);Console.WriteLine(“Area={0}”,(float)Area);Console.WriteLine(“Area={0}”,(int)Area);Console.WriteLine(“Area={0}”,(decimal)Area);Console.WriteLine(“Area={0}”,(short)Area);} }(4)使用object类与类型转换 //CircleAreaApp4.cs using System;class Circle { public double Radius=2.5;} class CircleAreaAPP { public static void Main(){ Circle cir=new Circle();double Area=3.14159*cir.Radius*cir.Radius;Console.WriteLine(“Area={0}”,Area);Console.WriteLine(“Area={0}”,(float)Area);object obj=(float)Area;Console.WriteLine(“Area={0}”,(float)obj);} }(5)使用派生类与as //CircleAreaApp5.cs using System;class Circle {} class CircleAreaAPP:Circle { public static void Main(){ double Radius=2.5;double Area=3.14159*Radius*Radius;Console.WriteLine(“Area={0}”,Area);Console.WriteLine(“Area={0}”,(float)Area);object obj=(float)Area;Console.WriteLine(“Area={0}”,(float)obj);Circle cir=new Circle();Console.WriteLine(“cir={0}”,cir==null?“null”:cir.ToString());CircleAreaAPP cirA=new CircleAreaAPP();cirA=cir as CircleAreaAPP;Console.WriteLine(“cirA={0}”,cirA==null?“null”:cirA.ToString());} }
习题3
一、选择题
1.字符串的输入使用 B 方法。
A)Cosole.Read()B)Cosole.ReadLine()C)Cosole.Write()D)Cosole.In.read()2.用于格式化输出十进制数的符号是 C。
A)C B)E C)D D)G E)N F)X 3.用于格式化输出浮点数的符号是 D。A)C B)D C)G D)F E)N F)X 4.用于格式完整日期/时间模式(长时间)的符号是 A。A)D B)F C)G D)M E)R F)S 5.用于格式完整日期/时间模式(短时间)的符号是 C。A)D B)f C)g D)d E)F F)G
二、编程题
1.从键盘输入一个小写字母,然后输出所输入的小写字母后其对应单代码值。2.从键盘输入两个浮点数,然后输出这两个数相加的结果(要求小数后取4位)。3.从键盘输入年、月、日的数值,然后用完整的日期事件格式化输出。答案: 1.
//CharValue.cs using System;public class CharValue { public static void Main(){ Console.Write(“Enter an char:”);char ch = char.Parse(Console.ReadLine());//or char ch=(char)Console.Readline();Console.WriteLine(ch);Console.WriteLine((int)ch);} }
2.//TwoFloatAddition.cs using System;public class TwoFloatAddition { public static void Main(){ Console.Write(“Enter a float:”);float f1= float.Parse(Console.ReadLine());Console.Write(“Enter a float:”);float f2 = float.Parse(Console.ReadLine());Console.WriteLine(“Result of addition for two float is: {0:F4}”,f1+f2);} }
3.//DateTimeFormat.cs using System;using System.Globalization;public class DateTimeFormat { public static void Main(String[] args){ Console.Write(“Enter year month day: ”);string s = Console.ReadLine();DateTime s1 = DateTime.Parse(s);Console.WriteLine(“d {0:d}”,s1);Console.WriteLine(“D {0:D}”, s1);Console.WriteLine(“f {0:f}”, s1);Console.WriteLine(“F {0:F}”, s1);Console.WriteLine(“g {0:g}”, s1);Console.WriteLine(“G {0:G}”, s1);Console.WriteLine(“m {0:m}”, s1);Console.WriteLine(“M {0:M}”, s1);Console.WriteLine(“r {0:r}”, s1);Console.WriteLine(“R {0:R}”, s1);Console.WriteLine(“s {0:s}”, s1);} }
习题4 1.以下运算符的运算符优先级,D 最高,E 最低。A)+ B)<< C)| D)()E)|| F)++ 2.以下运算符中,A 是三目运算符。
A)?: B)--C)= D)<= 3.在堆栈上创建对象和调用构造函数时,通常使用 B 关键字。A)typeof B)new C)as D)is 4. A 用于获取系统的System.Type类型。
A)typeof B)new C)sizeof D)is
二、写出下列程序执行结果。1.运行结果。//Increment1.cs using System;public class Increment1 { public static void Main(){ int i1=1993,i2=11,i3=19;Console.WriteLine(“i1={0},i2={1},i2={2}”,i1,i2,i3);i1=i3;Console.WriteLine(“i1={0},i2={1},i2={2}”,i1,i2,i3);i3+=i2;Console.WriteLine(“i1={0},i2={1},i2={2}”,i1,i2,i3);i1=i2+i3;Console.WriteLine(“i1={0},i2={1},i2={2}”,i1,i2,i3);i1++;++i2;i3=i1++ + ++i2;Console.WriteLine(“i1={0},i2={1},i2={2}”,i1,i2,i3);} }
2.运行结果:。//Increment2.cs using System;public class Increment2 { public static void Main(){ int a,b;a = b = 1;b = a / ++b;Console.WriteLine(“a={0} b={1}”,a,b);b = a++-i1);Console.WriteLine(---i1);Console.WriteLine(i2---i3);Console.WriteLine(i4---i5);Console.WriteLine(-i6---i7);Console.WriteLine(i8++/ ++i9*--i10);Console.WriteLine(++i11/i12++ *--i13);Console.Read();} }
三、编程题
1.输入两个整数,输出它们(实数除)的商,并输出商的第2位小数位(例如:5/18.0=1.875, 1.875的第二位小数是7)。
2.输入圆球的半径,计算圆球的表面积(4πr)和体积(4πr/3),其中π=3.14159。3.输入秒数,把它转换为用小时、分、秒表示。例如,输入7278秒,则输出2小时1分18秒。4.计算x=ab+5ln(1+c)要求:
(1)输出结果以科学表示法、定点表示法(小数点后保留两位)和普通表示法表示。(2)输出结果以整数表示并指明当前工作的日期和时间。
5.计算答案: 1.
//RealDivide.cs using System;public class RealDivide
3223 { public static void Main(){ Console.WriteLine(“Enter two integers:”);string[] s = Console.ReadLine().Split();;int a = int.Parse(s[0]);int b = int.Parse(s[1]);float f = 1.0f * a / b;int c=(int)(f*100)%10;Console.WriteLine(“Result of real divide is : {0}”,f);Console.WriteLine(“Second place of decimals is : {0}”,c);} }
2.//SphereA.cs using System;public class Sphere { public static void Main(){ Console.Write(“Enter the radius of sphere: ”);string s = Console.ReadLine();double radius = double.Parse(s);double surfaceArea = 4 * Math.PI * radius * radius;double Volume = 4 * Math.PI * radius * radius * radius / 3;Console.WriteLine(“SurfaceArea={0}”,surfaceArea);Console.WriteLine(“Volume={0}”,Volume);} }
3.//HourMinuteSecond.cs using System;public class HourMinuteSecond { public static void Main(){ int hour, minute, second;Console.Write(“Enter numbers of second:”);string s = Console.ReadLine();second = int.Parse(s);hour = second / 3600;second %= 3600;minute = second / 60;second = second % 60;Console.WriteLine(“{0} hour {1} minute {2} second”,hour,minute,second);} }
4. //ValueX.cs using System;using System.Globalization;public class ValueX { public static void Main(){ double a, b, c, x;Console.Write(“Enter three numbers: ”);string[] s = Console.ReadLine().Split();a = double.Parse(s[0]);b = double.Parse(s[1]);c = double.Parse(s[2]);x = a * Math.Pow(b, 3)+ 5 * Math.Log(1 + c * c);Console.WriteLine(“x={0:E}ttx={1:F2}ttx={2:G}”, x, x, x);Console.WriteLine(“x={0:D}”,(int)x);DateTime NowTime = DateTime.Now;Console.WriteLine(“{0:D}”, NowTime);} }
5.//MathTestA.cs using System;public class MathTestA { public static void Main(){ double alpha, beta, y;Console.Write(“Enter value of alpha: ”);string s = Console.ReadLine();alpha = double.Parse(s);Console.Write(“Enter value of beta: ”);s = Console.ReadLine();beta = double.Parse(s);y = Math.Pow(Math.Abs(Math.Log(Math.Sqrt(1 + alpha * alpha))a)*(sc)));Console.WriteLine(“Area of triangle is :{0:F2}n”, Area);} else { Console.WriteLine(“can't construct triangle!n”);} Console.ReadLine();}
} 运行结果:
2.//Prime.cs
class Prime { public static void Main(){ int a, n, m = 0, i, j;bool flag;for(i = 2;i <= 50;i++){ flag = true;j = 2;a =(int)Math.Sqrt((double)i);while(flag && j <= a){ if(i % j == 0)flag = false;j++;} if(flag){ Console.Write(“{0:D2} ”, i);m++;if(m % 4 == 0)Console.WriteLine();} } Console.WriteLine();Console.ReadKey();} } 运行结果:
3.//CountDigit.cs class CountDigit { public static void Main(){ int num = 0;char ch;Console.Write(“Enter chars:”);while(true){ if((ch =(char)Console.Read())== 'b')if((ch =(char)Console.Read())== 'y')if((ch =(char)Console.Read())== 'e')break;if(ch >= '0' && ch <= '9')num++;} Console.WriteLine(“Numbers of digit is:{0}n”, num);Console.Read();Console.ReadKey();} } 运行结果:
4.//ForSinCosTan.cs class ForSinCosTan { public static void Main(){ float sinx, cosx, tanx;double x;Console.WriteLine(“xtsinxtcosxttanx”);for(int i = 2;i <= 10;i += 2){ x = i * Math.PI / 180;sinx =(float)Math.Sin(x);cosx =(float)Math.Cos(x);tanx =(float)Math.Tan(x);Console.WriteLine(“{0}tt{1:F6}tt{2:F6}tt{3:F6}”, i, sinx, cosx, tanx);} Console.Read();Console.ReadKey();} } 运行结果:
5.//Factorial.cs
class Factorial { static int n, Fact;public static void Main(){ n = 0;Fact = 1;Console.WriteLine(“Use while loop:”);while(++n <= 5){ Fact *= n;Console.WriteLine(“ {0}!= {1}”, n, Fact);} Console.WriteLine(“Use do-while loop:”);n = 1;Fact = 1;do { Fact *= n;Console.WriteLine(“ {0}!= {1}”, n, Fact);} while(++n <= 5);Console.WriteLine(“Use for loop: ”);Fact = 1;for(n = 1;n <= 5;n++){ Fact *= n;Console.WriteLine(“ {0}!= {1}”, n, Fact);} Console.ReadKey();} } 运行界面:
习题6
一、填空题
1.C#类的成员包括 域、方法、属性、常量、索引、事件与运算符
2.用于指定类的成员是否可访问的修饰符有public、protected、private及internal。3.类最常用的方法是Main 4.构造方法实例化对象的形式是 类名 对象=new 类名(构造方法参数)5.从另一个类,继承一个类的语法是 class 派生类:基类 6.sealed类用于 确保一个类永不作为基类
二、编程题
1输入一个数值作为正方形的边长,计算正方形的面积,并输出到屏幕上。要求:
(1)定义一个类,在类中定义无参的构造方法和主方法。(2)定义一个类,在类中定义带参的构造方法和主方法。
2、重复输入数据,计算分段函数
|x|r0y=
22|x|rrx要求:
(1)定义两个类,在一个类中定义无参的构造方法,在另一个类中定义主方法。(1)定义两个类,在一个类中定义带参的构造方法,在另一个类中定义主方法。
3.从键盘读入边数(side),然后按输入的边数画出一组由排列紧凑的星号组成的正方形。例如,side为4则画出: * * * * * * * * * * * * 要求:
(1)定义一个类,在类中定义无参的构造方法。
(2)定义有两个类,在一个类中定义带参的构造方法,在另一个类中定义主方法。4.打印一个ASCⅡ码表。
要求定义两个类,在一个类中定义无参的构造方法,在另一个类中定义主方法。5.重复输入数据计算正方形、长方形与任意三角形面积(要求使用单一继承)。
答案 1.(1)答案
namespace ConsoleApplication1 { class Square { Square(){ Console.Write(“Enter length of side for square:”);double len = double.Parse(Console.ReadLine());Console.WriteLine(“Area={0}”, len * len);} public static void Main(){ for(;;){ Square obj = new Square();Console.Write(“Do you want to continue?(y/n)”);string s = Console.ReadLine();if(s.Equals(“n”))break;}
} } }
运行结果:
(2)答案 namespace ConsoleApplication1 { class Square { public static readonly int N = 3;public Square(double len){ Console.WriteLine(“Area={0}”, len * len);} public static void Main(){ for(int i=1;i<=N;i++){ Console.Write(“Enter length of side for square: ”);string s=Console.ReadLine();double length=double.Parse(s);Square obj=new Square(length);} Console.ReadKey();} } } 运行结果:
2.题(1)答案
namespace ConsoleApplication3 { class Function { public Function(){ Console.Write(“Enter value of x and r;”);string[] s = Console.ReadLine().Split();double x = double.Parse(s[0]);double r = double.Parse(s[1]);double y = Math.Abs(x)>= r ? 0 : Math.Sqrt(r * ry;} } static void Main(string[] args){ int x = 30, y = 50, a, b;fun(x, y out a ,out b)Console.WriteLine(“a=”+a +“b=”+b);} } A)50,30 B)30,50 C)80,—20 D)80,20
二、填空题
下面程序的执行结果是()//FunApp2.cs Using System;class FunApp2 { int x = 888, y = 777, z = 666;public FunApp2(){ x++;y++;z++;} public FunApp2(int a, int b, int c){ x = a;y = b;z = c;} } public class FunApp { static void Main();FunApp2 obj1=new FunApp2();Console.Write Line(obj1.x);Console.Write Line(obj1.y);Console.Write Line(obj1.z);FunApp2 obj2=new FunApp2();Console.Write Line(obj2.x);Console.Write Line(obj2.y);Console.Write Line(obj2.z);} }
二、编程题
1,重复输入任意数据,计算y=
0
r2x2
|x|r
|x|r要求:
(1)使用值参数方法:(2)使用ref参数方法;(3)使用out参数方法;(4)使用ref与out参数方法;(5)使用重载方法;(6)使用重载构造方法;(7)使用可变参数方法;(8)使用静态方法。
(1)答案: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1 { //YestA
class YTest { public void yMethod(double x, double r){ Console.WriteLine(“y={0}”, Math.Abs(x)> r ? 0 : Math.Sqrt(r * rx * x);} } class YTest {
第五篇:《C语言程序设计教程(第二版)》习题答案
第1章 程序设计基础知识
一、单项选择题(第23页)1-4.CBBC 5-8.DACA
二、填空题(第24页)
1.判断条件 2.面向过程编程 3.结构化 4.程序 5.面向对象的程序设计语言 7.有穷性 8.直到型循环 9.算法 10.可读性 11.模块化 12.对问题的分析和模块的划分
三、应用题(第24页)2.源程序:
main()
{int i,j,k;/* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */ printf(“cock hen chickn”);for(i=1;i<=20;i++)for(j=1;j<=33;j++)for(k=1;k<=33;k++)
if(i+j+k*3==100&&i*5+j*3+k==100)printf(“ %d %d %dn”,i,j,k*3);} 执行结果:
cock hen chick 4 18 78 8 11 81 12 4 84
3.现计算斐波那契数列的前20项。
递推法 源程序:
main()
{long a,b;int i;a=b=1;
for(i=1;i<=10;i++)/*要计算前30项,把10改为15。*/ {printf(“%8ld%8ld”,a,b);a=a+b;b=b+a;}}
递归法 源程序:
main(){int i;
for(i=0;i<=19;i++)printf(“%8d”,fib(i));} fib(int i)
{return(i<=1?1:fib(i-1)+fib(i-2));}
执行结果:
1 2 3 5 8 13 21 34 55
233 377 610 987 1597 2584 4181 6765 4.源程序:
#include “math.h”;main()
{double x,x0,deltax;x=1.5;
do {x0=pow(x+1,1./3);deltax=fabs(x0-x);x=x0;
}while(deltax>1e-12);printf(“%.10fn”,x);} 执行结果:
1.3247179572
5.源程序略。(分子、分母均构成斐波那契数列)结果是32.66026079864 6.源程序:
main()
{int a,b,c,m;
printf(“Please input a,b and c:”);scanf(“%d %d %d”,&a,&b,&c);if(a
printf(“%d %d %dn”,a,b,c);} 执行结果:
Please input a,b and c:123 456 789 789 456 123 7.源程序:
main(){int a;
scanf(“%d”,&a);
printf(a%21==0?“Yes”:“No”);} 执行结果:
Yes 第2章 C语言概述
一、单项选择题(第34页)1-4.BDCB 5-8.AABC
二、填空题(第35页)
1.主 2.C编译系统 3.函数 函数 4.输入输出 5.头 6..OBJ 7.库函数 8.文本
三、应用题(第36页)
5.sizeof是关键字,stru、_aoto、file、m_i_n、hello、ABC、SIN90、x1234、until、cos2x、s_3是标识符。
8.源程序: main(){int a,b,c;
scanf(“%d %d”,&a,&b);c=a;a=b;b=c;
printf(“%d %d”,a,b);} 执行结果:34 34 12 第3章 数据类型与运算规则
一、单项选择题(第75页)
1-5.DBACC 6-10.DBDBC 11-15.ADCCC 16-20.CBCCD 21-25.ADDBC 26-27.AB
二、填空题(第77页)
1.补码 2.±(10^-308~10^308)3.int(整数)4.单目 自右相左 5.函数调用 6.a或b 7.1 8.65,89
三、应用题(第78页)1.10 9
2.执行结果: 0 0 12 1 第4章 顺序结构程序设计
一、单项选择题(第90页)1-5.DCDAD 6-10.BACBB
二、填空题(第91页)
1.一 ;2.5.169000 3.(1)-2002500(2)I=-200,j=2500(3)i=-200 j=2500 4.a=98,b=765.000000,c=4321.000000 5.略 6.0,0,3 7.3 8.scanf(“%lf%lf%lf”,&a,&b,&c);9.13 13.000000,13.000000 10.a=a^c;c=c^a;a=a^c;(这种算法不破坏b的值,也不用定义中间变量。)
三、编程题(第92页)
1.仿照教材第27页例2-1。
2.源程序:
main(){int h,m;
scanf(“%d:%d”,&h,&m);printf(“%dn”,h*60+m);} 执行结果:
9:23 563
3.源程序:
main()
{int a[]={-10,0,15,34},i;for(i=0;i<=3;i++)
printf(“%d370C=%g370Ft”,a[i],a[i]*1.8+32);} 执行结果:
-10℃=14°F 0℃=32°F 15℃=59°F 34℃=93.2°F 4.源程序:
main()
{double pi=3.14***9,r=5;
printf(“r=%lg A=%.10lf S=%.10lfn”,r,2*pi*r,pi*pi*r);} 执行结果:
r=5 A=31.4159265359 S=49.3480220054 5.源程序:
#include “math.h”;main()
{double a,b,c;
scanf(“%lf%lf%lf”,&a,&b,&c);if(a+b>c&&a+c>b&&b+c>a){double s=(a+b+c)/2;
printf(“SS=%.10lfn”,sqrt(s*(s-a)*(s-b)*(s-c)));} else printf(“Data error!”);} 执行结果:5 6
SS=9.9215674165 6.源程序:
main()
{int a=3,b=4,c=5;float d=1.2,e=2.23,f=-43.56;
printf(“a=%3d,b=%-4d,c=**%dnd=%gne=%6.2fnf=%-10.4f**n”,a,b,c,d,e,f);} 7.源程序:
main()
{int a,b,c,m;
scanf(“%d %d %d”,&a,&b,&c);m=a;a=b;b=c;c=m;
printf(“%d %d %dn”,a,b,c);} 执行结果:6 7 6 7 5 8.源程序:
main(){int a,b,c;
scanf(“%d %d %d”,&a,&b,&c);
printf(“average of %d,%d and %d is %.2fn”,a,b,c,(a+b+c)/3.);执行结果: 7 9
average of 6,7 and 9 is 7.33 9.不能。修改后的源程序如下:
main()
{int a,b,c,x,y;
scanf(“%d %d %d”,&a,&b,&c);x=a*b;y=x*c;
printf(“a=%d,b=%d,c=%dn”,a,b,c);printf(“x=%d,y=%dn”,x,y);} 第5章 选择结构程序设计
一、单项选择题(第113页)1-4.DCBB 5-8.DABD
二、填空题(第115页)1.非0 0 2.k==0
3.if(abs(x)>4)printf(“%d”,x);else printf(“error!”);
4.if((x>=1&&x<=10||x>=200&&x<=210)&&x&1)printf(“%d”,x);5.k=1(原题最后一行漏了个d,如果认为原题正确,则输出k=%。)6.8!Right!11 7.$$$a=0 8.a=2,b=
1三、编程题(第116页)1.有错。正确的程序如下:
main(){int a,b,c;
scanf(“%d,%d,%d”,&a,&b,&c);
printf(“min=%dn”,a>b?b>c?c:b:a>c?c:a);} 2.源程序:
main()
{unsigned long a;scanf(“%ld”,&a);
for(;a;printf(“%d”,a%10),a/=10);} 执行结果:
12345 54321
3.(1)源程序: main(){int x,y;
scanf(“%d”,&x);if(x>-5&&x<0)y=x;if(x>=0&&x<5)y=x-1;if(x>=5&&x<10)y=x+1;printf(“%dn”,y);}(2)源程序:
main(){int x,y;
scanf(“%d”,&x);
if(x<10)if(x>-5)if(x>=0)if(x>=5)y=x+1;else y=x-1;else y=x;printf(“%dn”,y);}(3)源程序:
main(){int x,y;
scanf(“%d”,&x);
if(x<10)if(x>=5)y=x+1;else if(x>=0)y=x-1;else if(x>-5)y=x;printf(“%dn”,y);}(4)源程序:
main(){int x,y;
scanf(“%d”,&x);switch(x/5)
{case-1:if(x!=-5)y=x;break;case 0:y=x-1;break;case 1:y=x+1;} printf(“%dn”,y);}
4.本题为了避免考虑每月的天数及闰年等问题,故采用面向对象的程序设计。
现给出Delphi源程序和C++ Builder源程序。
Delphi源程序:
procedure TForm1.Button1Click(Sender: TObject);begin
edit3.Text:=format('%.0f天',[strtodate(edit2.text)-strtodate(edit1.text)]);end;
procedure TForm1.FormCreate(Sender: TObject);begin
Edit2.Text:=datetostr(now);button1click(form1)end;
C++ Builder源程序: void __fastcall TForm1::Button1Click(TObject *Sender){
Edit3->Text=IntToStr(StrToDate(Edit2->Text)-StrToDate(Edit1->Text))+“天”;}
void __fastcall TForm1::FormCreate(TObject *Sender){
Edit2->Text=DateToStr(Now());Button1Click(Form1);}
执行结果:(运行于Windows下)http://img378.photo.163.com/nxgt/41463572/1219713927.jpg
5.源程序:
main()
{unsigned a,b,c;
printf(“请输入三个整数:”);
scanf(“%d %d %d”,&a,&b,&c);
if(a&&b&&c&&a==b&&a==c)printf(“构成等边三角形n”);else if(a+b>c&&a+c>b&&b+c>a)
if(a==b||a==c||b==c)printf(“构成等腰三角形n”);else printf(“构成一般三角形n”);else printf(“不能构成三角形n”);} 执行结果:
请输入三个整数:5 6 5 构成等腰三角形
6.源程序:
main(){int x,y;
scanf(“%d”,&x);if(x<20)y=1;else switch(x/60)
{case 0:y=x/10;break;default:y=6;}
printf(“x=%d,y=%dn”,x,y);} 7.源程序:
main()
{unsigned m;float n;scanf(“%d”,&m);if(m<100)n=0;
else if(m>600)n=0.06;else n=(m/100+0.5)/100;
printf(“%d %.2f %.2fn”,m,m*(1-n),m*n);} 执行结果:
450 450 429.75 20.25
8.2171天(起始日期和终止日期均算在内)
本题可利用第4小题编好的程序进行计算。把起始日期和终止日期分别打入“生日”和“今日”栏内,单击“实足年龄”按钮,将所得到的天数再加上1天即可。
9.源程序:
#include “math.h”;main()
{unsigned long i;scanf(“%ld”,&i);
printf(“%ld %dn”,i%10,(int)log10(i)+1);} 执行结果:
99887 7 5
10.源程序:
main()
{unsigned long i;unsigned j[10],m=0;scanf(“%ld”,&i);
for(;i;){j[m++]=(i+2)%10;i/=10;} for(;m;m--)i=i*10+j[m-1];printf(“%ldn”,i);} 执行结果:
6987 8109
(注:要加密的数值不能是0或以0开头。如果要以0开头需用字符串而不能是整数。)第6章 循环结构程序设计
一、单项选择题(第142页)1-4.BCCB 5-8.CBCA
二、填空题(第143页)
1.原题可能有误。如无误,是死循环 2.原题有误。如果把b=1后面的逗号改为分号,则结果是8。3.20 4.11 5.2.400000 6.*#*#*#$ 7.8 5 2 8.①d=1.0 ②++k ③k<=n 9.①x>=0 ②x 三、编程题(第145页)1.源程序: main() {int i=1,sum=i; while(i<101){sum+=i=-i-2;sum+=i=-i+2;} printf(“%dn”,sum);} 执行结果: 51 2.源程序: main() {double p=0,n=0,f;int i;for(i=1;i<=10;i++){scanf(“%lf”,&f); if(f>0)p+=f;else n+=f;} printf(“%lf %lf %lfn”,p,n,p+n);} 3.源程序: main() {unsigned a;scanf(“%ld”,&a); for(;a;printf(“%d,”,a%10),a/=10);printf(“b n”);} 执行结果: 23456 6,5,4,3,2 4.源程序: main() {unsigned long a,b,c,i;scanf(“%ld%ld”,&a,&b);c=a%1000; for(i=1;i 57 009 5.略 6.原题提供的计算e的公式有误(前面漏了一项1)。正确的公式是e= 1 + 1 + 1/2!+ 1/3!+ … + 1/n!+ …(1)源程序: main() {double e=1,f=1;int n; for(n=1;n<=20;n++){f/=n;e+=f;} printf(“e=%.14lfn”,e);} 执行结果: e=2.7***05(2)源程序: main() {double e=1,f=1;int n; for(n=1;f>1e-4;n++){f/=n;e+=f;} printf(“e=%.4fn”,e);} 执行结果: e=2.7183 7.源程序: main() {unsigned long a=0,b=1,c=0;int i,d;scanf(“%d”,&d); for(i=1;i<=(d+2)/3;i++) printf(“%10ld%10ld%10ld”,a,b,(a+=b+c,b+=c+a,c+=a+b));} 本题还可以用递归算法(效率很低),源程序如下: unsigned long fun(int i) {return i<=3?i:fun(i-1)+fun(i-2)+fun(i-3);} main() {int i,d;scanf(“%d”,&d);for(i=1;i<=d;i++) printf(“%10ld”,fun(i));} 执行结果: 68 230 423 778 1431 2632 4841 8.源程序: main(){int i; for(i=1010;i<=9876;i+=2) if(i/100%11&&i%100%11&&i/10%100%11&&i/1000!=i%10&&i/1000!=i/10%10&&i/100%10!=i%10)printf(“ %d”,i);} 执行结果: 1024 1026 1028 1032 1034 1036 …… …… 9874 9876 9.源程序: main(){int i,j,k; printf(“apple watermelon pearn”);for(i=1;i<=100;i++)for(j=1;j<=10;j++) if((k=100-i-j)*2==400-i*4-j*40)printf(“%4d%7d%9dn”,i,j,k);} 执行结果: apple watermelon pear 5 5 90 24 4 72 43 3 54 62 2 36 81 1 18 10.源程序: #include “stdio.h”; #define N 4 /* N为阶数,可以改为其他正整数 */ main(){int m=N*2,i,j; for(i=1;i putchar(N-abs(i-N)<=abs(j++-N)?' ':'*'));} 如果把N值改为5,则执行结果如下: * *** ***** ******* ********* ******* ***** *** * 作者:宁西贯通 2006-5-7 23:41 回复此发言 ------------------说明 注意:上面最后一题的输出结果应该是由星号组成的一个菱形,第7章 数 组 一、单项选择题(第192页)1-4.BBCC 5-8.AABA 二、填空题(第194页) 1.1 2 4 8 16 32 64 128 256 512 2.①a[age]++ ②i=18;i<26 3.①break ②i==8 4.①a[i]>b[j] ②i<3 ③j<5 5.①b[j]=a[j][0] ②b[j] 三、编程题(第196页)1.源程序: main() {int a[4][4],i,j,s=0;for(i=0;i<4;i++)for(j=0;j<4;j++)scanf(“%d”,&a[i][j]);for(i=0;i<4;i++)for(j=0;j<4;j++) if(i==j||i+j==3)s+=a[i][j]; printf(“%dn”,s);} /* 注:5×5矩阵不能照此计算!*/ 执行结果: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 68 2.源程序: main() {int i,a[36];a[0]=2; for(i=1;i<=29;i++)a[i]=a[i-1]+2;for(;i<=35;i++)a[i]=a[(i-30)*5+2];for(i=0;i<=35;i++)printf(“%dt”,a[i]);} 执行结果: 4 6 8 10 12 14 16 18 20 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 6 16 26 36 46 56 3.源程序: #include “stdlib.h” #include “time.h” main() {int a[30],i,m=0;randomize();