完整的delphi程序设计教程课后习题答案

时间:2019-05-13 01:09:16下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《完整的delphi程序设计教程课后习题答案》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《完整的delphi程序设计教程课后习题答案》。

第一篇:完整的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

//按键后接收输入的选项 begin

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语言程序设计教程课后习题答案

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;/*注意分析此处算法*/

第三篇: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=65 & s[i]<=90)n1++;if(s[i]>=97 & s[i]<=122)n2++;if(s[i]>=48 & s[i]<=57)n3++;} n4=s.Length-n1-n2-n3;Console.WriteLine(“大写字母个数:{0};小写字母个数:{1};数字个数:{2};其余字符个数:{3}”,n1,n2,n3,n4);}(6)

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节的学生信息管理程序,编写通讯录管理程序,细节略。

第四篇:量子力学教程课后习题答案

量子力学习题及解答

第一章

量子理论基础

1.1

由黑体辐射公式导出维恩位移定律:能量密度极大值所对应的波长与温度T成反比,即

T=b(常量);

并近似计算b的数值,准确到二位有效数字。

根据普朗克的黑体辐射公式,(1)

以及,(2),(3)

这里的的物理意义是黑体内波长介于λ与λ+dλ之间的辐射能量密度。

本题关注的是λ取何值时,取得极大值,因此,就得要求

对λ的一阶导数为零,由此可求得相应的λ的值,记作。但要注意的是,还需要验证对λ的二阶导数在处的取值是否小于零,如果小于零,那么前面求得的就是要求的,具体如下:

如果令x=,则上述方程为

这是一个超越方程。首先,易知此方程有解:x=0,但经过验证,此解是平庸的;另外的一个解可以通过逐步近似法或者数值计算法获得:x=4.97,经过验证,此解正是所要求的,这样则有

把x以及三个物理常量代入到上式便知

这便是维恩位移定律。据此,我们知识物体温度升高的话,辐射的能量分布的峰值向较短波长方面移动,这样便会根据热物体(如遥远星体)的发光颜色来判定温度的高低。

1.2

在0K附近,钠的价电子能量约为3eV,求其德布罗意波长。

根据德布罗意波粒二象性的关系,可知

E=h,如果所考虑的粒子是非相对论性的电子(),那么

如果我们考察的是相对性的光子,那么

E=pc

注意到本题所考虑的钠的价电子的动能仅为3eV,远远小于电子的质量与光速平方的乘积,即,因此利用非相对论性的电子的能量——动量关系式,这样,便有

在这里,利用了

以及

最后,对

作一点讨论,从上式可以看出,当粒子的质量越大时,这个粒子的波长就越短,因而这个粒子的波动性较弱,而粒子性较强;同样的,当粒子的动能越大时,这个粒子的波长就越短,因而这个粒子的波动性较弱,而粒子性较强,由于宏观世界的物体质量普遍很大,因而波动性极弱,显现出来的都是粒子性,这种波粒二象性,从某种子意义来说,只有在微观世界才能显现。

1.3

氦原子的动能是(k为玻耳兹曼常数),求T=1K时,氦原子的德布罗意波长。

根据,知本题的氦原子的动能为

显然远远小于这样,便有

这里,利用了

最后,再对德布罗意波长与温度的关系作一点讨论,由某种粒子构成的温度为T的体系,其中粒子的平均动能的数量级为kT,这样,其相庆的德布罗意波长就为

据此可知,当体系的温度越低,相应的德布罗意波长就越长,这时这种粒子的波动性就越明显,特别是当波长长到比粒子间的平均距离还长时,粒子间的相干性就尤为明显,因此这时就能用经典的描述粒子统计分布的玻耳兹曼分布,而必须用量子的描述粒子的统计分布——玻色分布或费米公布。

1.4

利用玻尔——索末菲的量子化条件,求:

(1)一维谐振子的能量;

(2)在均匀磁场中作圆周运动的电子轨道的可能半径。

已知外磁场H=10T,玻尔磁子,试计算运能的量子化间隔△E,并与T=4K及T=100K的热运动能量相比较。

玻尔——索末菲的量子化条件为

其中q是微观粒子的一个广义坐标,p是与之相对应的广义动量,回路积分是沿运动轨道积一圈,n是正整数。

(1)设一维谐振子的劲度常数为k,谐振子质量为μ,于是有

这样,便有

这里的正负号分别表示谐振子沿着正方向运动和沿着负方向运动,一正一负正好表示一个来回,运动了一圈。此外,根据

可解出

这表示谐振子的正负方向的最大位移。这样,根据玻尔——索末菲的量子化条件,有

为了积分上述方程的左边,作以下变量代换;

这样,便有

这时,令上式左边的积分为A,此外再构造一个积分

这样,便有

(1)

这里

=2θ,这样,就有

(2)

根据式(1)和(2),便有

这样,便有

其中

最后,对此解作一点讨论。首先,注意到谐振子的能量被量子化了;其次,这量子化的能量是等间隔分布的。

(2)当电子在均匀磁场中作圆周运动时,有

这时,玻尔——索末菲的量子化条件就为

又因为动能耐,所以,有

其中,是玻尔磁子,这样,发现量子化的能量也是等间隔的,而且

具体到本题,有

根据动能与温度的关系式

以及

可知,当温度T=4K时,当温度T=100K时,显然,两种情况下的热运动所对应的能量要大于前面的量子化的能量的间隔。

1.5

两个光子在一定条件下可以转化为正负电子对,如果两光子的能量相等,问要实现实种转化,光子的波长最大是多少?

关于两个光子转化为正负电子对的动力学过程,如两个光子以怎样的概率转化为正负电子对的问题,严格来说,需要用到相对性量子场论的知识去计算,修正当涉及到这个过程的运动学方面,如能量守恒,动量守恒等,我们不需要用那么高深的知识去计算,具休到本题,两个光子能量相等,因此当对心碰撞时,转化为正风电子对反需的能量最小,因而所对应的波长也就最长,而且,有

此外,还有

于是,有

尽管这是光子转化为电子的最大波长,但从数值上看,也是相当小的,我们知道,电子是自然界中最轻的有质量的粒子,如果是光子转化为像正反质子对之类的更大质量的粒子,那么所对应的光子的最大波长将会更小,这从某种意义上告诉我们,当涉及到粒子的衰变,产生,转化等问题,一般所需的能量是很大的。能量越大,粒子间的转化等现象就越丰富,这样,也许就能发现新粒子,这便是世界上在造越来越高能的加速器的原因:期待发现新现象,新粒子,新物理。

第二章波

函数和薛定谔方程

2.1证明在定态中,几率流与时间无关。

证:对于定态,可令

可见无关。

2.2

由下列定态波函数计算几率流密度:

从所得结果说明表示向外传播的球面波,表示向内(即向原点)

传播的球面波。

解:

在球坐标中

同向。表示向外传播的球面波。

可见,反向。表示向内(即向原点)

传播的球面波。

补充:设,粒子的位置几率分布如何?这个波函数能否归一化?

∴波函数不能按方式归一化。

其相对位置几率分布函数为

表示粒子在空间各处出现的几率相同。

2.3

一粒子在一维势场

中运动,求粒子的能级和对应的波函数。

解:无关,是定态问题。其定态S—方程

在各区域的具体形式为

Ⅰ:①

Ⅱ:②

Ⅲ:③

由于(1)、(3)方程中,由于,要等式成立,必须

即粒子不能运动到势阱以外的地方去。

方程(2)可变为

令,得

其解为

根据波函数的标准条件确定系数A,B,由连续性条件,得

由归一化条件

可见E是量子化的。

对应于的归一化的定态波函数为

#

2.4.证明(2.6-14)式中的归一化常数是

证:

(2.6-14)

由归一化,得

∴归一化常数

#

2.5

求一维谐振子处在激发态时几率最大的位置。

解:

令,得

由的表达式可知,时。显然不是最大几率的位置。

可见是所求几率最大的位置。

#

2.6

在一维势场中运动的粒子,势能对原点对称:,证明粒子的定态波函数具有确定的宇称。

证:在一维势场中运动的粒子的定态S-方程为

将式中的代换,得

利用,得

比较①、③式可知,都是描写在同一势场作用下的粒子状态的波函数。由于它们描写的是同一个状态,因此之间只能相差一个常数。方程①、③可相互进行空间反演

而得其对方,由①经反演,可得③,④

由③再经反演,可得①,反演步骤与上完全相同,即是完全等价的。

④乘

⑤,得

可见,当时,具有偶宇称,当时,具有奇宇称,当势场满足时,粒子的定态波函数具有确定的宇称。#

2.7

一粒子在一维势阱中

运动,求束缚态()的能级所满足的方程。

解法一:粒子所满足的S-方程为

按势能的形式分区域的具体形式为

Ⅰ:

Ⅱ:

Ⅲ:

整理后,得

Ⅰ:

Ⅱ:.⑤

Ⅲ:

Ⅰ:

Ⅱ:.⑧

Ⅲ:

各方程的解为

由波函数的有限性,有

因此

由波函数的连续性,有

整理(10)、(11)、(12)、(13)式,并合并成方程组,得

解此方程即可得出B、C、D、F,进而得出波函数的具体形式,要方程组有非零解,必须

为所求束缚态能级所满足的方程。#

解法二:接(13)式

#

解法三:

(11)-(13)

(10)+(12)

(11)+(13)

(12)-(10)

(b)

k

a

ctgk

k)

()

()

()

(1

=

Þ

+

合并:

利用

#

解法四:(最简方法-平移坐标轴法)

Ⅰ:

(χ≤0)

Ⅱ:

(0<χ<2)

Ⅲ:

(χ≥2)

束缚态<<

因此

由波函数的连续性,有

(7)代入(6)

利用(4)、(5),得

#

2.8分子间的范德瓦耳斯力所产生的势能可以近似表示为

求束缚态的能级所满足的方程。

解:势能曲线如图示,分成四个区域求解。

定态S-方程为

对各区域的具体形式为

Ⅰ:

Ⅱ:

Ⅲ:

Ⅳ:

对于区域Ⅰ,粒子不可能到达此区域,故

.①

对于束缚态来说,有

各方程的解分别为

由波函数的有限性,得

由波函数及其一阶导数的连续,得

由⑦、⑧,得

(11)

⑨、⑩得

(12)

令,则①式变为

联立(12)、(13)得,要此方程组有非零解,必须

把代入即得

此即为所要求的束缚态能级所满足的方程。

#

附:从方程⑩之后也可以直接用行列式求解。见附页。

此即为所求方程。

#

补充练习题一

1、设,求A

=?

解:由归一化条件,有

利用

#

2、求基态微观线性谐振子在经典界限外被发现的几率。

解:基态能量为

设基态的经典界限的位置为,则有

在界限外发现振子的几率为)

(2

0

0

0

x

a

x

a

x

e

dx

e

dx

e

a

a

a

p

a

y

p

a

p

a

w

¥

¥

=

+

=

ò

ò

式中为正态分布函数

当。查表得

∴在经典极限外发现振子的几率为0.16。

#

3、试证明是线性谐振子的波函数,并求此波函数对应的能量。

证:线性谐振子的S-方程为

把代入上式,有

把代入①式左边,得

当时,左边

=

右边。

n

=

3,是线性谐振子的波函数,其对应的能量为。

第三章

量子力学中的力学量

3.1

一维谐振子处在基态,求:

(1)势能的平均值;

(2)动能的平均值;

(3)动量的几率分布函数。

解:(1)

(2)

(3)

动量几率分布函数为

#

3.2.氢原子处在基态,求:

(1)r的平均值;

(2)势能的平均值;

(3)最可几半径;

(4)动能的平均值;

(5)动量的几率分布函数。

解:(1)

(3)电子出现在r+dr球壳内出现的几率为

当为几率最小位置

是最可几半径。

(4)

(5)

动量几率分布函数

#

3.3

证明氢原子中电子运动所产生的电流密度在球极坐标中的分量是

证:电子的电流密度为

在球极坐标中为

中的和部分是实数。

可见,#

3.4

由上题可知,氢原子中的电流可以看作是由许多圆周电流组成的。

(1)求一圆周电流的磁矩。

(2)证明氢原子磁矩为

原子磁矩与角动量之比为

这个比值称为回转磁比率。

解:(1)

一圆周电流的磁矩为

(为圆周电流,为圆周所围面积)

(2)氢原子的磁矩为

在单位制中

原子磁矩与角动量之比为

#

3.5

一刚性转子转动惯量为I,它的能量的经典表示式是,L为角动量,求与此对应的量子体系在下列情况下的定态能量及波函数:

(1)

转子绕一固定轴转动:

(2)

转子绕一固定点转动:

解:(1)设该固定轴沿Z轴方向,则有

哈米顿算符

其本征方程为

(无关,属定态问题)

令,则

取其解为

(可正可负可为零)

由波函数的单值性,应有

∴m=

0,±1,±2,…

转子的定态能量为

(m=

0,±1,±2,…)

可见能量只能取一系列分立值,构成分立谱。

定态波函数为

A为归一化常数,由归一化条件

转子的归一化波函数为

综上所述,除m=0外,能级是二重简并的。

(2)取固定点为坐标原点,则转子的哈米顿算符为

无关,属定态问题,其本征方程为

(式中设为的本征函数,为其本征值)

令,则有

此即为角动量的本征方程,其本征值为

其波函数为球谐函数

转子的定态能量为

可见,能量是分立的,且是重简并的。

#

3.6

设t=0时,粒子的状态为

求此时粒子的平均动量和平均动能。

解:

可见,动量的可能值为

动能的可能值为

对应的几率应为

上述的A为归一化常数,可由归一化条件,得

动量的平均值为

#

3.7

一维运动粒子的状态是

其中,求:

(1)粒子动量的几率分布函数;

(2)粒子的平均动量。

解:(1)先求归一化常数,由

动量几率分布函数为

(2)

#

3.8.在一维无限深势阱中运动的粒子,势阱的宽度为,如果粒子的状态由波函数

描写,A为归一化常数,求粒子的几率分布和能量的平均值。

解:由波函数的形式可知一维无限深势阱的分布如图示。粒子能量的本征函数和本征值为

动量的几率分布函数为

先把归一化,由归一化条件,∴

3.9.设氢原子处于状态

求氢原子能量、角动量平方及角动量Z分量的可能值,这些可能值出现的几率和这些力学量的平均值。

解:在此能量中,氢原子能量有确定值

角动量平方有确定值为

角动量Z分量的可能值为

其相应的几率分别为,其平均值为

3.10一粒子在硬壁球形空腔中运动,势能为

求粒子的能级和定态函数。

解:据题意,在的区域,所以粒子不可能运动到这一区域,即在这区域粒子的波函数

()

由于在的区域内。只求角动量为零的情况,即,这时在各个方向发现粒子的几率是相同的。即粒子的几率分布与角度无关,是各向同性的,因此,粒子的波函数只与有关,而与无关。设为,则粒子的能量的本征方程为

令,得

其通解为

波函数的有限性条件知,有限,则

A

=

0

由波函数的连续性条件,有

其中B为归一化,由归一化条件得

归一化的波函数

#

3.11.求第3.6题中粒子位置和动量的测不准关系

解:

3.12

粒子处于状态

式中为常量。当粒子的动量平均值,并计算测不准关系

解:①先把归一化,由归一化条件,得

/

是归一化的②

动量平均值为

(奇被积函数)

#

3.13利用测不准关系估计氢原子的基态能量。

解:设氢原子基态的最概然半径为R,则原子半径的不确定范围可近似取为

由测不准关系

对于氢原子,基态波函数为偶宇称,而动量算符为奇宇称,所以

又有

所以

可近似取

能量平均值为

作为数量级估算可近似取

则有

基态能量应取的极小值,由

代入,得到基态能量为

补充练习题二

1.试以基态氢原子为例证明:的本征函数,而是的本征函数。

可见,可见,是的本征函数。

2.证明:的氢原子中的电子,在的方向上被发现的几率最大。

解:

∴的电子,其

当时

为最大值。即在方向发现电子的几率最大。

在其它方向发现电子的几率密度均在~之间。

3.试证明:处于1s,2p和3d态的氢原子的电子在离原子核的距离分别为的球壳内被发现的几率最大(为第一玻尔轨道半径)。

证:①对1s态,令

易见,当不是最大值。

为最大值,所以处于1s态的电子在处被发现的几率最大。

②对2p态的电子

易见,当为最小值。

为几率最大位置,即在的球壳内发现球态的电子的几率最大。

③对于3d态的电子

易见,当为几率最小位置。

为几率最大位置,即在的球壳内发现球态的电子的几率最大。

4.当无磁场时,在金属中的电子的势能可近似视为

其中,求电子在均匀场外电场作用下穿过金属表面的透射系数。

解:设电场强度为,方向沿χ轴负向,则总势能为,势能曲线如图所示。则透射系数为

式中为电子能量。,由下式确定

令,则有

∴透射系数

5.指出下列算符哪个是线性的,说明其理由。

①;

②;

解:①是线性算符

②不是线性算符

③是线性算符

6.指出下列算符哪个是厄米算符,说明其理由。

7、下列函数哪些是算符的本征函数,其本征值是什么?

①,②,③,④,⑤

解:①

不是的本征函数。

不是的本征函数,其对应的本征值为1。

可见,是的本征函数,其对应的本征值为-1。

是的本征函数,其对应的本征值为-1。

是的本征函数,其对应的本征值为-1。

8、试求算符的本征函数。

解:的本征方程为

(的本征值)

9、如果把坐标原点取在一维无限深势阱的中心,求阱中粒子的波函数和能级的表达式。

解:

方程(分区域):

Ⅰ:

Ⅲ:

Ⅱ:

标准条件:

取,即

粒子的波函数为

粒子的能级为

由归一化条件,得

粒子的归一化波函数为

10、证明:处于1s、2p和3d态的氢原子中的电子,当它处于距原子核的距离分别为的球壳处的几率最(为第一玻尔轨道半径)。

证:

令,则得

∴为几率最小处。

∴为几率最大处。

令,则得

为最大几率位置。

时,∴为几率最小位置。

令,得

同理可知

为几率最小处。

为几率最大处。

11、求一维谐振子处在第一激发态时几率最大的位置。

解:

令,得,∴

为几率最小处。,∴

为几率最大处。

6.设氢原子处在的态(为第一玻尔轨道半径),求

①的平均值;

②势能的平均值。

解:①

12、粒子在势能为的场中运动。证明对于能量的状态,其能量由下式决定:

(其中)

证:方程

Ⅰ:

Ⅱ:

Ⅲ:

则得

Ⅰ:

Ⅱ:

Ⅲ:

其通解为

利用标准条件,由有限性知

由连续性知

由①、②,得

由③、④,得

把⑤、⑥代入,得

整理,得

由,得

###

13、设波函数,求

解:

14、说明:如果算符和都是厄米的,那么

(+)也是厄米的证:

+也是厄米的。

15、问下列算符是否是厄米算符:

解:①

因为

不是厄米算符。

是厄米算符。

##

16、如果算符满足关系式,求证

证:

17、求

解:

=

018、解:

=

0

第四章

态和力学量的表象

4.1.求在动量表象中角动量的矩阵元和的矩阵元。

解:

#

4.2

求能量表象中,一维无限深势阱的坐标与动量的矩阵元。

解:基矢:

能量:

对角元:

当时,#

4.3

求在动量表象中线性谐振子的能量本征函数。

解:定态薛定谔方程为

两边乘以,得

跟课本P.39(2.7-4)式比较可知,线性谐振子的能量本征值和本征函数为

式中为归一化因子,即

#

4.4.求线性谐振子哈密顿量在动量表象中的矩阵元。

解:

#

4.5

设已知在的共同表象中,算符的矩阵分别为

求它们的本征值和归一化的本征函数。最后将矩阵对角化。

解:的久期方程为

∴的本征值为的本征方程

其中设为的本征函数共同表象中的矩阵

当时,有

由归一化条件

对应于的本征值0。

当时,有

由归一化条件

∴归一化的对应于的本征值

当时,有

由归一化条件

∴归一化的对应于的本征值

由以上结果可知,从的共同表象变到表象的变换矩阵为

∴对角化的矩阵为

按照与上同样的方法可得的本征值为的归一化的本征函数为

从的共同表象变到表象的变换矩阵为

利用S可使对角化

#

4.6求连续性方程的矩阵表示

解:连续性方程为

写成矩阵形式为

第五章

微扰理论

5.1

如果类氢原子的核不是点电荷,而是半径为、电荷均匀分布的小球,计算这种效应对类氢原子基态能量的一级修正。

解:这种分布只对的区域有影响,对的区域无影响。据题意知

其中是不考虑这种效应的势能分布,即

为考虑这种效应后的势能分布,在区域,在区域,可由下式得出,由于很小,所以,可视为一种微扰,由它引起的一级修正为(基态)

∴,故。

#

5.2

转动惯量为I、电偶极矩为的空间转子处在均匀电场在中,如果电场较小,用微扰法求转子基态能量的二级修正。

解:取的正方向为Z轴正方向建立坐标系,则转子的哈米顿算符为

取,则

由于电场较小,又把视为微扰,用微扰法求得此问题。的本征值为

本征函数为的基态能量为,为非简并情况。根据定态非简并微扰论可知

#

5.3

设一体系未受微扰作用时有两个能级:,现在受到微扰的作用,微扰矩阵元为;都是实数。用微扰公式求能量至二级修正值。

解:由微扰公式得

能量的二级修正值为

#

5.4设在时,氢原子处于基态,以后受到单色光的照射而电离。设单色光的电场可以近似地表示为,及均为零;电离电子的波函数近似地以平面波表示。求这单色光的最小频率和在时刻跃迁到电离态的几率。

解:①当电离后的电子动能为零时,这时对应的单色光的频率最小,其值为

②时,氢原子处于基态,其波函数为

在时刻,微扰

其中

在时刻跃迁到电离态的几率为

对于吸收跃迁情况,上式起主要作用的第二项,故不考虑第一项,O

θ

α

x

y

z()

其中

取电子电离后的动量方向为Z方向,取、所在平面为面,则有

#

5.5基态氢原子处于平行板电场中,若电场是均匀的且随时间按指数下降,即

求经过长时间后氢原子处在2p态的几率。

解:对于2p态,可取三值,其相应的状态为

氢原子处在2p态的几率也就是从跃迁到的几率之和。

(取方向为Z轴方向)

=

0

=

0

由上述结果可知,∴

当时,其中

#

5.6计算氢原子由第一激发态到基态的自发发射几率。

解:

由选择定则,知是禁戒的故只需计算的几率

2p有三个状态,即

(1)先计算z的矩阵元

(2)计算x的矩阵元

(3)计算的矩阵元

(4)计算

#

5.7

计算氢原子由2p态跃迁到1s态时所发出的光谱线强度。

解:

若,则

#

5.8求线性谐振子偶极跃迁的选择定则

解:

时,即选择定则为

#

补充练习三

1、一维无限深势阱中的粒子受到微扰

作用,试求基态能级的一级修正。

解:基态波函数(零级近似)为

∴能量一级修正为

2、具有电荷为的离子,在其平衡位置附近作一维简谐振动,在光的照射下发生跃迁。设入射光的能量为。其波长较长,求:

原来处于基态的离子,单位时间内跃迁到第一激发态的几率。

②讨论跃迁的选择定则。

(提示:利用积分关系

答:①

②仅当,所以谐振子的偶极跃迁的选择定则是)

解:①

(对于一维线性谐振子~)

其中

一维线性谐振子的波函数为

跃迁几率,当时的跃迁为禁戒跃迁。

可见,所讨论的选择定则为。

#

3、电荷e的谐振子,在时处于基态,时处于弱电场之中(为常数),试求谐振子处于第一激发态的几率。

解:取电场方向为轴正方向,则有

当经过很长时间以后,即当时。

实际上在以后即可用上述结果。

#

第七章

自旋与全同粒子

7.1.证明:

证:由对易关系

反对易关系,得

上式两边乘,得

7.2

求在自旋态中,和的测不准关系:

解:在表象中、、的矩阵表示分别为

在态中

讨论:由、的对易关系

[,]

要求

在态中,∴

可见①式符合上式的要求。

7.3.求的本征值和所属的本征函数。

解:的久期方程为

∴的本征值为。

设对应于本征值的本征函数为

由本征方程,得

由归一化条件,得

对应于本征值的本征函数为

设对应于本征值的本征函数为

由本征方程

由归一化条件,得

对应于本征值的本征函数为

同理可求得的本征值为。其相应的本征函数分别为

7.4

求自旋角动量方向的投影

本征值和所属的本征函数。

在这些本征态中,测量有哪些可能值?这些可能值各以多大的几率出现?的平均值是多少?

解:在表象,的矩阵元为

其相应的久期方程为

所以的本征值为。

设对应于的本征函数的矩阵表示为,则

由归一化条件,得

可见,的可能值为

相应的几率为

同理可求得

对应于的本征函数为

在此态中,的可能值为

相应的几率为

7.5设氢的状态是

①求轨道角动量z分量和自旋角动量z分量的平均值;

②求总磁矩的z分量的平均值(用玻尔磁矩子表示)。

解:ψ可改写成从ψ的表达式中可看出的可能值为

0

相应的几率为的可能值为

相应的几率为

7.6

一体系由三个全同的玻色子组成,玻色子之间无相互作用。玻色子只有两个可能的单粒子态。问体系可能的状态有几个?它们的波函数怎样用单粒子波函数构成?

解:体系可能的状态有4个。设两个单粒子态为,则体系可能的状态为

7.7

证明和组成的正交归一系。

解:

=0

同理可证其它的正交归一关系。

7.8

设两电子在弹性辏力场中运动,每个电子的势能是。如果电子之间的库仑能和相比可以忽略,求当一个电子处在基态,另一电子处于沿x方向运动的第一激发态时,两电子组成体系的波函数。

解:电子波函数的空间部分满足定态S-方程

考虑到,令

其中,对于基态,对于沿χ方向的第一激发态,两电子的空间波函数能够组成一个对称波函数和一个反对称波函数,其形式为

而两电子的自旋波函数可组成三个对称态和一个反对称态,即

综合两方面,两电子组成体系的波函数应是反对称波函数,即

独态:

三重态:

主要参考书:

[1]

周世勋,《量子力学教程》,高教出版社,1979

[2]

张宏宝编

量子力学教程学习辅导书,高等教育出版社2004.2

第五篇:C语言程序设计教程 课后习题参考答案

《C语言程序设计教程》

课后习题参考答案

习题1 1.(1)编译、链接

.exe(2)函数

主函数(或main函数)(3)编辑

编译

链接 2.(1)-(5):DDBBC(6)-(10):ABBBC 3.(1)答:C语言简洁、紧凑,使用方便、灵活;C语言是高级语言,同时具备了低级语言的特征;C语言是结构化程序设计语言,具有结构化的程序控制语句;C语言有各种各样的数据类型;C语言可移植性好;生成目标代码质量高,程序执行效率高。

(2)编辑、编译、链接、执行

(3)一个C程序由一或多个函数组成,一函数若干条语句构成,每条语句的末尾必须以分号结束。

(4)标识符,关键字,运算符,分隔符,常量,注释符等 4.从键盘输入一个双精度小数,打印出它的余弦值。#include #include main(){ double x;scanf(“%lf”, &x);printf(“%lfn”, cos(x));}

第2章 1.(1)BDE、ACFG(2)D(3)C(4)C

2.(1)错(2)错(3)错(4)对(5)错 3.(1)a=3,b=-27(2)a=11,b=6,c=6(3)3(4)1 0 1 0 1 1 0(5)-9 9 8(6)1)20 2)8 3)70 4)0 5)0 6)0 4.(1)

#include main(){ double r, h ,v;r = 2.5;h = 3.5;v = 3.14*r*r*h;printf(“v=%lfn”, v);}(2)#include main(){ char ch;ch = getchar();printf(“%cn”, ch + 32);}(3)#include main(){ printf(“

*n”);printf(“

***n”);printf(“ *****n”);printf(“*******n”);}(4)#include main(){ double x;scanf(“%lf”, &x);printf(“%d , %lfn”,(int)x, x –(int)x);}(5)#include main(){ double a=3, b=5;double result =(-2 * a +(4*a – b)/(2*a + b))/((a32);}

第4章 1.(1)-(5):CAACA 2.(1)BBB(2)AAABBBCCC(3)end(4)d=20(5)s=2,t=3(6)first

third(7)y=0 y=5 y=10 y=5 3.(1)y=‟A‟ && ch<=‟Z‟

ch>=‟a‟&&ch<=‟z‟

ch = ch-32(3)x>2&&x<=10

x>-1&&x<=2(4)t=x;x=y;y=t;4.(1)#include main(){ int x, y , z, t;scanf(“%d%d%d”, &x, &y, &z);

if(x>y){ t=x;x=y;y=t;} if(x > z){ t = x;x = z;z= t;} if(y > z){ t = y;y= z;z = t;} printf(“%d %d %dn”, x, y ,z);}(2)#include main(){ int score;scanf(“%d”, &score);

if(score < 0 || score > 100)

printf(“成绩不合理n”);

else if(score>=90)

printf(“优秀n”);

else if(score>=80)

printf(“良好n”);

else if(score >= 70)

printf(“中等n”);

else if(score >= 60)

printf(“及格n”);

else

printf(“不及格n”);}(3)#include main(){ int n;int g,s,b,q;//各位上的数值

scanf(“%d”, &n);

g = n%10;//个位

s = n/10%10;//十位

b = n/100%10;//百位

q = n/1000%10;//千位

if(n < 10)//一位数

{

printf(“%dn”, 1);//位数

printf(“%dn”, g);//各位上的数值

} else if(n < 100)//两位数

{

printf(“%dn”, 2);//位数

printf(“%d %dn”, g,s);} else if(n < 1000)//三位数

{

printf(“%dn”, 3);//位数

printf(“%d %d %dn”, g, s, b);

} else if(n < 10000)//四位数

{

printf(“%dn”, 4);//位数

printf(“%d %d %d %dn”, g, s, b, q);

} }(4)#include main(){ int n;scanf(“%d”, &n);

if(n % 3==0 && n%5==0 && n%7==0)

printf(“能同时被3、5、7整除n”);

else if(n%3==0 && n%5==0)

printf(“能被3和5整除n”);

else if(n%3==0 && n%7==0)

printf(“能被3和7整除n”);

else if(n%5==0 && n%7==0)

printf(“能被5和7整除n”);

else if(n%3==0 || n%5==0 || n%7==0){

if(n%3==0)

printf(“能被3整除n”);

else if(n%5==0)

printf(“能被5整除n”);

else

printf(“能被7整除n”);

} else

printf(“不能被3、5、7中任一个数整除n”);}(5)#include main(){ int

carType;//车型。1代表夏利;2代表富康;3代表桑塔纳

double xiali = 2.1;//每公里价格 double fukang = 2.4;double sangtana = 2.7;double distance;//距离

double totalMoney;//总的收费

printf(“请输入您乘坐的车型:1代表夏利;2代表富康;3代表桑塔纳:”);scanf(“%d”, &carType);printf(“请输入您乘车的总路程:”);scanf(“%lf”, &distance);if(carType == 1)//夏利

{

if(distance < 3)

totalMoney = 7.0;

else

totalMoney = 7 + xiali *(distance – 3);} else if(carType == 2)//富康

{

if(distance < 3)

totalMoney = 8.0;

else

totalMoney = 8 + fukang *(distance – 3);} else if(carType == 3)//富康

{

if(distance < 3)

totalMoney = 9.0;

else

totalMoney = 9 + sangtana *(distance – 3);}

printf(“(四舍五入)您的车费为:%.0lfn”, totalMoney);}(6)#include main(){ double a, b, c;scanf(“%lf%lf%lf”, &a, &b, &c);

if(a+b>c && b+c>a && c+a>b){

if(a==b && b==c)

printf(“等边三角形n”);

else if(a==b || b== c || c==a)

printf(“等腰三角形n”);

else

printf(“一般三角形n”);

} else

printf(“不能构成三角形n”);}

第5章

1.(1)C(2)C(3)K=36(4)C(5)B 2.(1)3次

(2)x>=1 && x<=10 || x>=200&&x<210(3)e == 0(4)6次(5)10 3.(1)20,10(2)16,0(3)7BAB4BAB1BC(4)ABABABC(5)****** ****** ******

****** 4.(1)a!= b

(2)n / 10(3)scanf(“%d”, &a);

5.(3)行

int fac = 1, sum = 0;6.(1)#include main(){ char ch;int alpha=0, space=0, digit=0, other=0;while((ch=getchar())!= „n‟)

{

if(ch>=‟A‟&&ch<=‟Z‟ || ch>=‟a‟&&ch<=‟z‟)

alpha++;

else if(ch>=‟0‟ && ch<=‟9‟)

digit++;

else if(„ „ == ch)

space++;

else

other++;} printf(“%d %d %d %dn”, alpha, digit, space, other);}(2)#include main(){ int m20, m10;for(m20=1;m20<5;m20++){

for(m10 = 1;m10<10;m10++)

if(20*m20+10*m10 == 100)

printf(“%d, %dn”, m20, m10);} }(3)#include main(){ int x, y, z;for(x=0;x<10;x++)

for(y=0;y<10;y++)

for(z=0;z<10;z++)

if(x*100+y*10+z + y*100+z*10+z == 532)

printf(“%d %d %dn”, x, y, z);}(4)#include main(){ int row, spaceCount,starCount;int n;scanf(“%d”, &n);

for(row = 1;row <= n;++row){

for(spaceCount = 1;spaceCount <= n1;++starCount)

printf(“*”);//打印出某行上的所有星号

printf(“n”);//换行

} //打印下半部分

for(row=1;row

for(spaceCount = 1;spaceCount <= row;++ spaceCount)

printf(“ ”);//打印出某行上星号前的空格

for(starCount = 1;starCount <= 2*(n-row)byear;if(nmonth

age--;else if(nmonth == bmonth && nday>bday)

age--;return age;}

(4)

#include int sum(int n);main(){ int n,s;scanf(“%d”, &n);s = sum(n);printf(“s=%dn”, s);}

int sum(int n){ int s=0;while(n){

s += n % 10;

n /= 10;} return s;}

(5)

#include double sumfac(int n);main(){ int n;scanf(“%d”, &n);printf(“%.0lfn”, sumfac(n));} double sumfac(int n){ double f=1.0, s = 0.0;

int i;for(i=1;i<=n;i++){

f *= i;

s += f;} return f;}

(6)

#include int gcd(int m , int n);main(){ int m, n;scanf(“%d%d”, &m, &n);printf(“%dn”, gcd(m ,n));} int gcd(int m, int n){ int t,r;if(m < n){ t = m;m= n;n = t;}

r = m % n;while(r){

m = n;

n = r;

r = m % n;} return n;}

(7)

#include int gcd(int m , int n);int lcm(int m, int n);main(){ int m, n;scanf(“%d%d”, &m, &n);printf(“%dn”, lcm(m ,n));} int gcd(int m, int n){ int t,r;if(m < n){ t = m;m= n;n = t;}

r = m % n;while(r){

m = n;

n = r;

r = m % n;} return n;}

int lcm(int m, int n){ return m*n/gcd(m,n);}

(8)

#include double mypower(double x, int y);main(){ double x;

int y;scanf(“%lf%d”, &x, &y);printf(“%lfn”, mypower(x,y));} double mypower(double x, int y){ int i;double f=1.0;for(i=1;i<=y;i++)

f *= x;return f;}

第7章 1.(1)6(2)5(3)不能

(4)int a[3][2]={{1,2}, {3,4}, {5,6} };(5)6 9(6)abc G 2.(1)

#include

void reverse(int a[ ], int n);

int main()

{

int array[10]={0};

int i;

printf(“请输入10个整数:”);

for(i=0;i<10;i++)

scanf(“%d”, &array[i]);

reverse(array, 10);//调用函数逆序存储数组中的数据

printf(“逆序后的元素为:n”);

for(i=0;i<10;i++)

printf(“%5d”, array[i]);

printf(“n”);

return 0;

}

void reverse(int a[ ], int n)

{

int i;

int tmp;

for(i=0;i

{

tmp = a[i];a[i] = a[n-i-1];

}

}

(2)

#include #include void reverseStr(char str[ ]);main(){ char s[100];gets(s);reverseStr(s);puts(s);}

void reverseStr(char str[ ]){ int i,j;char t;i=0;j=strlen(str)-1;while(i < j){

t = str[i];

a[n-i-1] = tmp;

str[i] = str[j];

str[j] = t;

i++;

j--;} }

(3)

#include int copyTo(int s1[], int n, int s2[ ]);main(){ int s1[10], s2[10];int i,count;for(i=0;i<10;i++)

scanf(“%d”, &s1[i]);count = copyTo(s1, 10, s2);for(i=0;i

printf(“%d ”, s2[i]);printf(“n”);}

int copyTo(int s1[], int n, int s2[ ]){ int i, j=0;for(i=0;i

if(s1[i] % 2)

s2[j++] = s1[i];} return j;}

(4)

#include void copyToStr(char str1[ ], char str2[ ]);main(){ char s1[100], s2[100];gets(s1);copyToStr(s1, s2);puts(s2);} void copyToStr(char str1[ ], char str2[ ]){ int i=0,j=0;while(str1[i]!= ''){

if(str1[i]>='a'&&str1[i]<='z')

{

str2[j] = str1[i];

j++;

}

i++;} str2[j] = '';return j;}

(5)

#include void deleteAll(char str[ ], char ch);main(){ char s[100], ch;gets(s);ch = getchar();deleteAll(s, ch);puts(s);} void deleteAll(char str[ ], char ch){ int i, j;i = 0;

j = 0;while(str[i]){

if(str[i]!= ch)

{

str[j++] = str[i];

}

i++;

} str[j] = '';}

(6)

#include void replaceAll(char str[ ], int ch1, char ch2);main(){ char s[100], c1, c2;gets(s);c1 = getchar();c2 = getchar();replaceAll(s, c1, c2);puts(s);} void replaceAll(char str[ ], int ch1, char ch2){ int i;i = 0;while(str[i]){

if(str[i] == ch1)

str[i] = ch2;

i++;} }

(7)

#include

int transformToBin(int dnum, int bin[ ]);

int main()

{

int array[32]={0};//保存转换后的二进制数

int num;//待转换的整数

int cc;//最后得到的二进制总共多少位

printf(“请输入一个整数:”);

scanf(“%d”, &num);

cc = transformToBin(num, array);//调用转换函数

cc--;//往回退一个元素下标,使cc指向最后一个元素

for(;cc>=0;cc--)//输出转换后的二进制数

printf(“%d”, array[cc]);

printf(“n”);

return 0;

}

int transformToBin(int dnum, int bin[ ]){

int count = 0;while(dnum)//当dnum还未转换完毕

{ bin[count++] = dnum % 2;//余数保留到数组对应元素中

dnum /= 2;//数本身除2 } return count;}

(8)

#include int transformToHex(int dnum, char hex[ ]);int main(){ char array[32];//保存转换后的进制数

int num;//待转换的整数

int cc;//最后得到的进制总共多少位

printf(“请输入一个整数:”);scanf(“%d”, &num);cc = transformToHex(num, array);//调用转换函数

cc--;//往回退一个元素下标,使cc指向最后一个元素

for(;cc>=0;cc--)//输出转换后的进制数

printf(“%c”, array[cc]);printf(“n”);return 0;}

int transformToHex(int dnum, char hex[ ]){ int count = 0;int t;while(dnum)//当dnum还未转换完毕

{

t = dnum % 16;

if(t < 10)

hex[count] = t+'0';//余数保留到数组对应元素中

else

hex[count] = t-10+'A';

count++;dnum /= 16;//数本身除16 } return count;}(9)

#include #include #include

#define M 5 //行 #define N 6 //列

void generate(int a[ ][N], int row, int col);void display(int a[][N], int row, int col);void getMaxEveryRow(int a[][N], int row, int col, int y[]);main(){ int arr[M][N], y[M]={0};int i;generate(arr, M, N);display(arr, M, N);getMaxEveryRow(arr,M,N,y);//输出最大值

for(i=0;i

printf(“%d ”, y[i]);printf(“n”);} void generate(int a[ ][N], int row, int col){ int i,j;srand(time(NULL));for(i=0;i

for(j=0;j

a[i][j] = rand()%101;} void display(int a[][N], int row, int col){ int i,j;for(i=0;i

for(j=0;j

printf(“%4d”, a[i][j]);

printf(“n”);} } void getMaxEveryRow(int a[][N], int row, int col,int y[]){ int i,j;for(i=0;i

y[i] = a[i][0];

for(j=1;j

if(y[i] < a[i][j])

y[i] = a[i][j];} }

(10)

#include #include #include

#define M 5 //行 #define N 6 //列

void generate(int a[ ][N], int row, int col);void display(int a[][N], int row, int col);void getMinEveryCol(int a[][N], int row, int col);main(){ int arr[M][N];int i;generate(arr, M, N);display(arr, M, N);getMinEveryCol(arr,M,N);//输出最小值

for(i=0;i

printf(“%d ”, arr[0][i]);printf(“n”);} void generate(int a[ ][N], int row, int col){ int i,j;srand(time(NULL));for(i=1;i

for(j=0;j

a[i][j] = rand()%101;} void display(int a[][N], int row, int col){ int i,j;for(i=1;i

for(j=0;j

printf(“%4d”, a[i][j]);

printf(“n”);} } void getMinEveryCol(int a[][N], int row, int col){ int i,j;for(i=0;i

a[0][i] = a[1][i];

for(j=2;j

if(a[0][i] > a[j][i])

a[0][i] = a[j][i];} }

第8章 1.(1)局部

(2)void(3)auto(4)auto(5)return(6)递归

(7)求 1!+2!+3!+4!+5!(8)注意全局变量和局部变量的区别

2.(1)

#include #include double xc(double x, double y);main(){ double a, b;double c;scanf(“%lf%lf”, &a, &b);

c = xc(a, b);printf(“ %lfn”, c);} double xc(double x, double y){ return sqrt(x*x+y*y);}

(2)

static extern

register

#include long seconds(int hour, int minute, int second);main(){ int h,m,s;long sec;printf(“输入时间:”);scanf(“%d%d%d”, &h, &m, &s);sec = seconds(h,m,s);printf(“离12点最近的秒数:%ldn”, sec);} long seconds(int hour, int minute, int second){ long s;if(hour < 6){

s = second+minute*60+hour*60*60;} else {

s = 60-second+(60-minute-1)*60+(12-hour-1)*60*60;} return s;}

(3)

#include int fun(int n);main(){ int n;scanf(“%d”, &n);if(fun(n))//是质数,则输出该数;不是的话,不作任何处理

printf(“%dn”, n);} int fun(int n){ int i;for(i=2;i

if(n%i == 0)

break;if(i

return 0;else

return 1;}

(4)

#include int fun(int n);main(){ int n;int count=0;for(n=2;n<1000;n++)

if(fun(n))

{

printf(“%4d”, n);

count++;

if(count % 10 == 0)

printf(“n”);

}

printf(“n”);} int fun(int n){ int i;for(i=2;i

if(n%i == 0)

break;if(i

return 0;else

return 1;}

(5)

#include int func(int n);main(){ int n;scanf(“%d”, &n);printf(“%dn”, func(n));} int func(int n){ if(1 == n)

return 3;return 2*func(n-1)-1;}

(6)

#include int gcd(int m, int n);main(){ int x,y,t;scanf(“%d%d”, &x, &y);if(x < y){

t=x;x=y;y=t;} printf(“%dn”, gcd(x,y));} int gcd(int m, int n){ if(0==n)

return m;return gcd(n, m%n);}

第9章 1.(1)xyzNKT(2)bcdefgh(3)4,4(4)qponmzyx(5)abcCD(6)0 2.(1)

#include #include void reverse(int *p, int n);main(){ int i;int a[10]={1,2,3,4,5,6,7,8,9,10};

reverse(a,10);for(i=0;i<10;i++)

printf(“%d ”, a[i]);printf(“n”);} void reverse(int *p, int n){ int *q;int t;q = p + n1;while(str < pEnd){

t = *str;

*str = *pEnd;

*pEnd = t;

str++;

pEnd--;} }(3)

#include int copyTo(int *s1, int n, int *s2);main(){ int a[10]={1,2,3,4,5,6,7,8,9, 10};int b[10], count,i;count=copyTo(a,10,b);for(i=0;i

printf(“%d ”, b[i]);printf(“n”);} int copyTo(int *s1, int n, int *s2){ int count=0;int *ps1, *ps2;ps2 = s2;for(ps1 = s1;ps1 < s1 + n;ps1++){

if(*ps1 % 2)//奇数

{

*ps2++ = *ps1;

} } return ps2-s2;}

(4)

#include void copyToStr(char *str1, char *str2);main(){ char s1[100], s2[100];gets(s1);copyToStr(s1, s2);puts(s2);} void copyToStr(char *str1, char *str2){ while(*str1){

if(*str1 >= 'a' && *str1 <= 'z')

{

*str2++=*str1;

}

str1++;} *str2 = '';}

(5)

#include void deleteAll(char *str, char ch);main(){ char s[100], c;gets(s);c = getchar();deleteAll(s, c);puts(s);} void deleteAll(char *str, char ch){ char *p;p = str;while(*str){

if(*str!= ch)

*p++ = *str;

str++;} *p = '';}

(6)

#include void replaceAll(char *str, char ch1, char ch2);main(){ char s[100], c1, c2;printf(“输入字符串:”);gets(s);printf(“输入查找字符:”);c1 = getchar();fflush(stdin);//清除键盘缓冲区

printf(“输入替换字符:”);c2 = getchar();replaceAll(s,c1, c2);puts(s);} void replaceAll(char *str, char ch1, char ch2){ while(*str){

if(*str == ch1)

{

*str = ch2;

}

str++;} }

(7)

#include int transformToBin(int dnum, int *bin);int main(){ int array[32];//保存转换后的进制数

int num;//待转换的整数

int cc;//最后得到的进制总共多少位

printf(“请输入一个整数:”);scanf(“%d”, &num);cc=transformToBin(num, array);//调用转换函数

cc--;//使cc指向最后一个元素

for(;cc>=0;cc--)//输出转换后的进制数

printf(“%d”, array[cc]);printf(“n”);return 0;}

int transformToBin(int dnum, int *bin){ int *pb;int t;pb = bin;while(dnum)//当dnum还未转换完毕

{

t = dnum % 2;

*pb = t;

pb++;

dnum /= 2;//数本身除2 } return pb-bin;}

(8)

#include #include void transformToHex(int dnum, char *hex);int main(){ char array[32];//保存转换后的进制数

int num;//待转换的整数

int cc;//最后得到的进制总共多少位

printf(“请输入一个整数:”);scanf(“%d”, &num);transformToHex(num, array);//调用转换函数

cc=strlen(array)-1;//使cc指向最后一个元素

for(;cc>=0;cc--)//输出转换后的进制数

printf(“%c”, array[cc]);printf(“n”);return 0;}

void transformToHex(int dnum, char *hex){ char *ph;int t;ph = hex;while(dnum)//当dnum还未转换完毕

{

t = dnum % 16;

if(t < 10)

*ph = t+'0';

else

*ph = t-10+'A';

ph++;dnum /= 16;//数本身除16 } *ph = '';}

(9)

#include void strToLow(char *str);main(){ char s[100];gets(s);strToLow(s);puts(s);} void strToLow(char *str){ while(*str){

if(*str>='A'&&*str<='Z')

*str = *str + 32;

str++;} }

第10章 1.(1)12(2)(++p)->num(5)B(6)B

2.(1)

struct myDate{ int year, month, day;};

(2)

struct empInfo{ char empNo[15];char empName[10];char xb;//性别

int age;struct myDate empDay;double salary;};

(3)

#include typedef struct STUDENT { char name[20];float height;

3)D 7)10,A

4)p2!= NULL

(((int score;}STUD;main(){ STUD a;printf(“姓名:”);

gets(a.name);printf(“身高:”);

scanf(“%f”, &a.height);

printf(“成绩:”);

scanf(“%d”, &a.score);

//输出信息(仅为测试用)

printf(“%s %.2f %d n”, a.name, a.height, a.score);}

第11章 1.(1)打开文件:fopen

关闭文件:fclose 使用:

FILE *fp;

fp = fopen(“myfile”, “r”);

fclose(fp);

(2)”w”

(3)文本文件:内容均以字符的形式存储,占的字节数可能会大些

二进制文件:内容以二进制编码的形式存储,占的字节数可能会稍小。

(4)第一个参数:读取得到的信息存储在内存的哪个地方

第二个参数:读取的字节数

第三个参数:读取的块数

第四个参数:文件指针,表示从哪个文件中读取数据

(5)第一个参数:待写入文件的信息存储在内存的哪个地方

第二个参数:写入的字节数

第三个参数:写入的块数

第四个参数:文件指针,表示要写入到哪个文件中(6)为了安全,gets少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果非常怕怕fgets会指定大小,如果超出数组大小,会自动根据定义数组的长度截断。

2.(1)

#include #include main(){ FILE *fpr, *fpw;char ch;

fpr = fopen(“a.txt”, “r”);fpw = fopen(“b.txt”, “a”);

if(NULL==fpr){

printf(“文件打开不成功n”);

return 0;} if(NULL == fpw){

printf(“文件打开不成功n”);

return 0;}

while(!feof(fpr)){

ch = fgetc(fpr);

fprintf(fpw, “%c”, ch);}

fclose(fpr);fclose(fpw);}

(2)

#include main(){ FILE *fp1, *fp2;double pi = 3.1415926;fp1 = fopen(“a.txt”, “w”);//以文本的形式写入

fp2 = fopen(“b.txt”, “wb”);//以二进制的形式写入

if(NULL==fp1){

printf(“文件打开不成功n”);

return 0;} if(NULL == fp2){

printf(“文件打开不成功n”);

return 0;}

fprintf(fp1, “%lf”, pi);fwrite(&pi,sizeof(pi),1,fp2);

fclose(fp1);fclose(fp2);}

打开之后的效果:

(3)

#include #include main(){ FILE *fpr;fpr = fopen(“a.txt”, “r”);

if(NULL==fpr){

printf(“文件打开不成功n”);

return 0;}

while(!feof(fpr)){

putchar(fgetc(fpr));} fclose(fpr);}

(4)

#include typedef struct STUDENT { char no[15];char name[10];int score;}STUD;#define N 3 main(){ STUD s[N];int i;FILE *fp;int count;//读取文件时才使用

for(i=0;i

printf(“请输入第%d个学生信息:n” , i+1);

printf(“

学号:”);

gets(s[i].no);

printf(“

姓名:”);

gets(s[i].name);

printf(“

成绩:”);

scanf(“%d”, &s[i].score);

fflush(stdin);//清除键盘缓冲区

}

//打开文件,并写入

fp = fopen(“a.txt”, “wb”);if(NULL == fp){

printf(“文件打开不成功,不能写入n”);

return 0;} for(i=0;i

fwrite(&s[i], sizeof(s[i]), 1, fp);fclose(fp);

//以下代码从文件中读取出信息,并显示在屏幕上

fp = fopen(“a.txt”, “rb”);

} count = 0;while(!feof(fp)){ if(fread(&s[count], sizeof(s[count]), 1, fp))

count++;} fclose(fp);//输出

for(i=0;i

下载完整的delphi程序设计教程课后习题答案word格式文档
下载完整的delphi程序设计教程课后习题答案.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐