问题 问答题

真空中有一半径为r的圆柱形匀强磁场区域,磁场方向垂直于纸面向里,ox为磁场边界上的切线,如图所示.从o点在纸面内向各个方向发射速率均为v0的带负电的粒子,设带电粒子间相互作用可忽略,且此种带负电的粒子在磁场中的偏转半径也是r.

(1)所有从磁场边界射出的带负电的粒子,速度方向有何特征?请通过几何关系来说明此种带负电粒子的速度方向特征.

(2)速度方向分别与ox轴正方向成60°与90°的带负电粒子,在磁场中的运动时间分别是多少?

(3)已知电子的质量为m,电量为e.今在某一平面内有M、N两点,MN=l,从M点向平面内各个方向发射速率均为v0的电子,请在图中设计一个匀强磁场分布,使得由M点发出的电子都能够汇聚到N点(要求在图中画出磁场的范围),并求出匀强磁场的磁感应强度B的最小值.

答案

(1)如图所示,入射时电子速度与x夹角为θ,无论入射的速度方向与x轴的夹角为何值,由入射点O、射出点A、磁场圆心O1和轨道圆心O2一定组成边长r的菱形,因O1O⊥OX,OO2垂直于入射速度,故∠OO2A=θ,即电子在磁场中所偏转的角度一定等于入射时电子速度与Ox轴的夹角.

当θ=60°时,t1=

π
6
=
πr
3v

当θ=90°时,t2=

π
4
=
πr
2v

(2)因∠OO2A=θ,故O1A⊥OX,而O2A与电子射出的速度方向垂直,可知电子射出方向一定与Ox轴方向平行,即所有的电子射出圆形磁场时,速度方向均与Ox轴相同.

(3)上述的粒子路径是可逆的,(2)中从圆形磁场射出的这些速度相同的电子再进入一相同的匀强磁场后,一定会聚集于同一点.磁场的分布如图所示,对于从M点向MN连线上方运动的电子,两磁场分别与MN相切,M、N为切点,且平行于两磁场边界圆心的连线O1O2

设MN间的距离为l,所加的磁场的边界所对应圆的半径r,故应有2r≤l,即2

mv
eB
≤l,所以所加磁场磁感应强度应满足B≥
2mv
el

同理,对于从M点向MN连线下方运动的电子,只要使半径相同的两圆形磁场与上方的两圆形磁场位置关于MN对称且磁场方向与之相反即可说明:只要在矩形区域M1N1N2M2内除图中4个半圆形磁场外无其他磁场,矩形M1N1N2M2区域外的磁场均可向其余区域扩展.

问答题

【程序6说明】 本程序实现两个多项式的乘积运算。多项式的每一项由类Item描述,而多项式由类List描述。类List的成员函数有: createList():创建按指数降序链接的多项式链表,以表示多项式。 reverseList():将多项式链表的表元链接顺序颠倒。 multiplyList(List L1,List L2):计算多项式L1和多项式L2的乘积多项式。 【程序6】 #include<iostream.h> class List; class |tem{ friend class List; private: double quot; int exp; |tem * next; public:|tem(double_quot,int_exp){ (1) ;} }; class List { private: |tem * list; public: List(){list=NULL;} void reverseList(); void multiplyList(List L1,List L2); void createList(); }; void List::createList() { |tem * p,* u,*pre; int exp; doubte quot; list=NULL; while(1){ cout<<"输入多项式中的一项(系数、指数):"<<endl; cin>>quot>>exp: if(exp<0)break; //指数小于零,结束输入 if(quot==0)continue; p=list; while( (2) ){ //查找插入点 pre=p;p=p->next;} if(p!=NULL&&exp==p->exp) {p->quot+=quot;continue;} u= (3) ; if(p==list) list=u; else pre->next=u; u->next=p;} } void List::reverseList() { |tem*p,*u; if(list==NULL)return; p=list->next;list->next=NULL;while(p!=NULL)}u=p->next;p->next=list;list=p;p=u;} } void List::multiplyList(List L1,List L2) {|tem*pLI,*pL2,*u; int k,maxExp; double quot; maxExp= (4) ; L2.reverseList();list=NULL; for(k=maxExp;k>=0;k--){ pL1=L1.list; while(pL1!=NULL&&pL1->exp>k)pL1=pL1->next; pL2=L2.list; while(pL2!=NULL&& (5) pL2=pL2->next; quot=0.0; while(pL1!=NULL&&pL2!=NULL){ if(pL1->exp+pL2->exp==k){ (6) ;pL1=pL1->next;pL2=pL2->next; }else if(pL1->exp+pL2->exp>k) pL1=pL1->next; else pL2=pL2->next; } if(quot!=0.0){ u=new |tem(quot,k); u->next=list;list=u;} } reverseList(:);L2.reverseList(): } void main() { ListL1,L2,L; cout<<"创建第一个多项式链表\n";L1.createList(); cout<<"创建第二个多项式链表\n";L2.createList(); L.multiplyList(L1,L2); }

多项选择题