实践课程设计范文

2022-05-31

第一篇:实践课程设计范文

课程设计实践心得

一、课程设计的目的

掌握电力系统潮流计算的基本原理。 掌握并熟练运用MATLAB仿真软件。

采用MATLAB仿真软件,做出系统接线图的潮流计算仿真结果。

二、课程设计要求

1、在读懂程序的基础上画出潮流计算基本流程图

2、通过输入数据,进行潮流计算输出结果

3、对不同的负荷变化,分析潮流分布,写出分析说明。

4、对不同的负荷变化,进行潮流的调节控制,并说明调节控制的方法,并列表表示调节控制的参数变化。

5、打印利用MATLAB进行潮流分析绘制的系统图,以及潮流分布图。

三、课程设计基本内容

1. 对给定的网络查找潮流计算所需的各元件等值参数,画出等值电路图。

2. 输入各支路数据,各节点数据利用给定的程序进行在变电所在某一负荷情况下的潮流计算,并对计算结果进行分析。

3. 跟随变电所负荷按一定比例发生变化,进行潮流计算分析。 1) 4个变电所的负荷同时以2%的比例增大; 2) 4个变电所的负荷同时以2%的比例下降;

3) 1和4号变电所的负荷同时以2%的比例下降,而2和3号变电所的负荷同时以2%的比例上升;

4. 在不同的负荷情况下,分析潮流计算的结果,如果各母线电压不满足要求,进行电压的调整。(变电所低压母线电压10KV要求调整范围在9.5-10.5之间;电压35KV要求调整范围在35-36之间)。

5. 轮流断开环网一回线,分析潮流的分布。

6. 利用MATLAB软件,进行绘制系统图进行上述各种情况潮流的分析,并进行结果的比较。

7. 最终形成课程设计成品说明书。

四、问题分析

1、节点设置及分类

2设为节点1,10,根据系统图可知此系统为两端供电网路,将母线1,将变电所

1、

2、

3、4的高低压侧分别设为节点

2、

3、

4、

5、

6、

7、

8、9。并且,将节点1设为平衡节点,将节点10设为PV节点,其余节点设为PQ节点。

2、参数求取

设定基准值SB100MVA,UB220KV,所以ZB资料,计算发电厂、变压器及线路的参数。

(1)运用下列公式计算变压器参数:

SBUB2484根据题目原始

PUU%URX100S 1000S22kNKNT2TNNZ(2)计算线路参数

RTXTTZTZZTB

ZRjX(rjx)L

(3)变电所负荷分别为:

变电所1

SL=50+j30.987

变电所2

SL=40+j27.79 变电所3

SL=50+j30.987

变电所4

SL=60+j37.18

3、计算变压器分接头变比

变压器有5个抽头,电压调节范围为UN2*2.5%,UN对应的分接头开始时设变压器高压侧接主接头,降压变压器5个分接头时的非标准变比k*以备调压时选用

对变电所低压母线为35KV时,非标准变比与10KV时相同。

4、计算方法

利用牛顿拉夫逊法进行求解,用MATLAB软件编程,可以求解系统潮流分 布根据题目的不同要求对参数进行调整,通过调节变压器变比和发电厂的电压,求解出合理的潮流分布,最后用PSAT进行潮流分析,将两者进行比较。

5、牛顿—拉夫逊法

(1)牛顿—拉夫逊法概要

首先对一般的牛顿—拉夫逊法作简单的说明。已知一个变量X函数为:

到此方程时,由适当的近似值X(n1)(0)220(15%)100.95511220 220(12.5%)10k*20.93211220 22010k*30.90911220 220(12.5%)10k*40.88611220 220(15%)10k*50.86411220 k*1f(X)0

出发,根据:

(n)X反复进行计算,当X的牛顿—拉夫逊法。

(n)Xf(X(n))(n1,2,......)f(X(n))

满足适当的收敛条件就是上面方程的根。这样的方法就是所谓

(n)这一方法还可以做下面的解释,设第n次迭代得到的解语真值之差,即X时,则:

把f(X(n))在X(n)的误差为附近对用泰勒级数展开

)f(X(n)f(X(n))0

)f(X(n)f(X(n))22!f(X(n))......0

上式省略去2以后部分

f(X(n))f(X(n))0

(n)X的误差可以近似由上式计算出来。

f(X(n)) (n)f(X)比较两式,可以看出牛顿—拉夫逊法的休整量和X用同样的方法考虑,给出n个变量的n个方程:

(n)的误差的一次项相等。

f1(X1,X2,,Xn)0f(X,X,,X)0212n fn(X1,X2,,Xn)0对其近似解X得修正量X可以通过解下边的方程来确定:

11f1f1f1,,Xn)f1(X1,X2xxx12nf(X,X,,X)X1f2n212f2f2X2x1x2 xnXfnfnfnnfn(X1,X2,,X)nxnx1x2fn,X2,,Xn的值。式中等号右边的矩阵都是对于X1这一矩阵称为雅可比(JACOBI)

xn,X2,,Xn后,得到如下关系 矩阵。按上述得到的修正向量X1XnXn Xn,X2,,Xn更接近真实值。这一步在收敛到希望的值以前重复进行,一般要反这比X1复计算满足

maxX1n1X1n1,X2n1X2n1,,Xnn1Xnn1

为预先规定的小正数,Xnn1是第n次迭代Xn(2)牛顿法的框图及求解过程

用牛顿法计算潮流时,有以下的步骤: ①给这各节点电压初始值e(0),f(0);

的近似值。

②将以上电压初始值代入公式,求修正方程的常数项向量P(0),Q(0),(V2)(0); ③将电压初始值在带入上述公式,求出修正方程中系数矩阵的各元素。 ④解修正方程式e(0),f(0);

f(0)f(0);

⑥将e(1),f(1)在带入方程式,求出P(1),Q(1),(V2)(1); ⑤修正各节点电压e(1)e(0)e(0),f⑦检验是否收敛,即maxPi(1)(k),Qi(k)

如果收敛,迭代到此结束,进一步计算各线路潮流和平衡节点功率,并打印输出结果。如果不收敛,转回②进行下次迭代计算,直到收敛为止。

五、问题求解

电压是衡量电力系统电能质量的标准之一。电压过高或过低,都将对人身及其用电设备产生重大的影响。保证用户的电压接近额定值是电力系统调度的基本任务之一。当系统的电压偏离允许值时,电力系统必须应用电压调节技术调节系统电压的大小,使其维持在允许值范围内。本文经过手算形成了等值电路图,并编写好了程序得出节点电压标幺值,使其满足所要求的调整范围。

我们首先对给定的程序输入部分作了简要的分析,程序开始需要我们确定输入节点数、支路数、平衡母线号、支路参数矩阵、节点参数矩阵。

(1)为了保证整个系统潮流计算的完整性,我们把凡具有母线及发电机处均选作节点,这样,可以确定有10个节点,节点号见等值电路图。

(2)确定完节点及编号后,各条支路也相应确定了,网络中总计有13条支路,我们对各支路参数进行了计算。根据所给实际电路图和题中的已知条件,有以下公式计算各输电线路的阻抗和对地支路电容的标幺值和变压器的阻抗标幺值。选择电压基准值为UB=220KV和功率基准值SB=100MVA,所以ZB

六、误差分析

UB=484。 SB以系统在正常运行的情况下为例。利用PSAT软件,比对MATLAB中的B

1、B2矩阵,得到各个节点的电压状况。将PSAT软件运行的结果对MATLAB运行的结果进行校验。同时利用该软件对图形颜色的变化的描绘和数据对结果进行呈现。得到PSAT软件运行的结果各节点的电压标幺值,并与MATLAB程序运行得到的结果进行比较。

七、心得体会及总结

此次课程设计使我在潮流计算、MATLAB的使用方面均有所提高,但也暴露出了一些问题;理论知识的储备还是不足,对MATLAB的性能和特点还不能有一个全面的把握,对MATLAB中PSAT工具箱使用不够熟悉,相信通过以后的学习能弥补这些不足,从而达到一个新的层次。潮流计算是电力系统的最基本、最常用的分析计算。用以研究系统规划和运行中提出的各种问题。对规划中的电力系统,通过潮流计算可以检验所提出的电力系统规划方案能否满足各种运行方式的要求;对运行中的电力系统,通过潮流计算可以预知各种负荷变化和网络结构的改变会不会危及系统的安全,系统中所有母线的电压是否在允许的范围以内,系统中各种元件(线路、变压器等)是否会出现过负荷,以及可能出现过负荷时应事先采取哪些预防措施等。实际的情况远比我们计算的情况复杂,这让我深刻了解了潮流计算的重要性。精准的潮流计算不仅可以使电网处于稳定且平衡的状态,这对电网的安全运行起到关键性的作用,还可以实现运行的经济性。所以我认为学好电力系统的关键在于学好潮流计算,电力系统的安全运行不是儿戏,一个很小的失误就可能造成整个电网的崩溃,这给国家和社会带来的危害和损失之大是可想而知的。学好电力系统这门课、学好潮流计算是我们电专业学生的当务之急。没有坚实的基础就不可能建造出高楼大厦,所以,要想在以后的工作岗位上有所成就,就必须打好基础,努力提高自己的专业素养。

通过此次课程设使得我更加扎实的掌握了有关潮流计算和MATLAB方面相关的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正不断领悟和不断获取。最终的检测调试环节本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了。在设计中遇到了很多问题,最后在老师的指导下。终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决。只有这样,才能成功的做成想做的事,才能在今后的道路上披荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦。也永远不可能得到社会及他人对你的认可。

课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课;一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计。我掌握了MATLAB中各种元器件的识别和使用,熟悉了和了解了潮流计算的基本原理。以及如何提高实验的求解精度和收敛性能。掌握了MATLAB软件的方法和技术。

我认为,在这学期的实验中,不仅培养了独立思考、动手操作的能力。在各种其它能力上也都有了提高。更重要的是,在实验课上,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践、再学习、再实践。这对于我们的将来也有很大的帮助。以后不管有多苦,我想我们都能变苦为乐。找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟,会面对需要面对的事情。

回顾起此课程设计,至今我仍感慨颇多。从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识。而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的。只有把所学的理论知识与实践相结合起来从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。

实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。果然是团结就是力量。只有互相之间默契融洽的配合才能换来最终完美的结果。此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询。只要认真钻研、动脑思考、动手实践,就没有弄不懂的知识,收获颇丰。 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,MATLB已经成为当前电力系统重要的仿真软件之一。因此作为二十一世纪的电气专业的大学来说掌握MATLB的开发技术是十分重要的。回顾起此次课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的东西。同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论。

与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处。对以前所学过的知识理解得不够深刻,掌握得不够牢固。比如说MATLAB中原理图的搭建以及潮流计算的基本原理掌握得不好。通过这次课程设计之后,一定把以前所学过的知识重新温故。

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题。最后在陈老师的辛勤指导下,终于游逆而解。同时,在陈老师的身上我学得到很多实用的知识。

整个设计通过了软件调试和图形搭建以及程序设计。我想这对于自己以后的学习和工作都会有很大的帮助。在这次设计中遇到了很多实际性的问题,在实际设计中才发现书本上理论性的东西与在实际运用中的还是有一定的出入的。所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。对于教材管理系统,其程序是比较简单的,主要是解决程序设计中的问题。而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在MATLAB图形的搭建和参数的设置。其中很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。其次,这次课程设计让我充分认识到团队合作的重要性,只有分工协作才能保证整个项目的有条不紊。另外在课程设计的过程中,当我们碰到不明白的问题时,陈老师总是耐心的讲解,给我们的设计以极大的帮助,使我们获益匪浅。因此非常感谢老师的教导。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名电气工程专业的学生,这次课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课程懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解。但是通过这次的课程设计的沟通和各个小组同学探讨,渐渐对这门课程逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。

第二篇:《机械优化设计》课程实践

合肥工业大学 研究报告

班级:机设10-5 学号:20100523 姓名:吴亮宏 授课老师:王卫荣 日期:

2012年5月7日

一维搜索程序作业(0.618法 )

a=2,b=6,d=0.00001 y=(x-4)*(x-4)-7 #include #include void main() { float a,b,c=0.618,aa[3],y[3],d; scanf("%f,%f,%f",&a,&b,&d); aa[1]=b-c*(b-a); aa[2]=a+c*(b-a);

y[1]=(aa[1]-4)*(aa[1]-4)-7;

y[2]=(aa[2]-4)*(aa[2]-4)-7;

do{ if(y[1]>y[2])

{ a=aa[1];aa[1]=aa[2];y[1]=y[2]; aa[2]=a+c*(b-a);

y[2]=(aa[2]-4)*(aa[2]-4)-7;

}

else

{ b=aa[2];aa[2]=aa[1];y[2]=y[1]; aa[1]=b-c*(b-a);

y[1]=(aa[2]-4)*(aa[2]-4)-7;

}

}while(fabs((b-a)/b)>d); aa[0]=(a+b)/2;

y[0]=(aa[2]-4)*(aa[2]-4)-7; printf("a*=%f ",aa[0]); printf("y=%f ",y[0]);

}

2、单位矩阵程序作业

#include void main () { inti,j,p ,n; printf("please input a number");

} scanf("%d",&n); for(i=0;i

{

if(i==j) p=1; else p=0; printf("%2d",p); if(j==n-1) printf(" ");

}

3曲柄摇杆机构优化设计(约束随机法)

课本P241例8-5 1程序文本

procedure ffx; //目标函数 var

p0,q0,T,PI,QE,D,AL,BT,QI:real;

K:integer; test:string; begin with form1.hfgd do

begin

NFX:=NFX+1;

p0:=arccos((sqr(1.0+X[1])-sqr(X[2])+25.0)/(10.0*(1.0+X[1])));

//φ0

q0:=arccos((sqr(1.0+X[1])-sqr(X[2])-25.0)/(10.0*X[2]));

//ψ0

T:=90.0/30.0*(3.1415926/180.0); //90度分30等分

FX:=0.0;

For K:=0 To 30 do;

//30次循环计算 begin

PI:=p0+K*T; //φ曲柄转角

QE:=Q0+2.0*sqr(PI-p0)*2/(3.0*3.1415926); //理想输出角

D:=SQRT(26.0-10.0*COS(pI));

//辅助线长度

AL:=ArcCos((D*D+X[2]*X[2]-X[1]*X[1])/(2.0*D*X[2])); //α角

BT:=arccos((D*D+24.0)/(10.0*D)); //β角 IF ((PI>=0.0) AND (PI<3.1415926)) //ψ(i)实际输出角 THEN

QI:=3.1415926-AL-BT ELSE

QI:=3.1415926-AL+BT; IF((K<>0) OR (K<>30)) THEN

FX:=FX+sqr(QI-QE)*T //理想输出角与实际输出角曲线包围面积 ELSE FX:=FX+sqr(QI-QE)*T/2.0; end; end; end; procedure ggx; //约束函数 begin with form1.hfgd do

begin GX[1]:=-X[1]; GX[2]:=-X[2]; GX[3]:=-(X[1]+X[2])+6.0; //3,4,5为曲柄存在条件 GX[4]:=-(X[2]+4.0)+X[1]; GX[5]:=-(X[1]+4.0)+X[2]; GX[6]:=-(1.4142*X[1]*X[2]-X[1]*X[1]-X[2]*X[2])-16.0; //6,7为传动角条件

GX[7]:=-(X[1]*X[1]+X[2]*X[2]+1.4142*X[1]*X[2])+36.0; end; end; 2输入截图

3结果

4工程实例

:制造一体积为200 m3长度不小于5m,不带上盖的箱盒,试确定箱盒的长x1,宽x2,高x3,使箱盒用料最省。 (1)、设计变量的选择与目标函数的建立 设计变量为箱盒的长x1,宽x2,高x3 本设计要求箱盒用料最省,故以箱盒的表面积为目标函数 F(x)=x1x2+2(x2x3+x1x3) (2)、约束条件

根据体积要求---- x1x2x3=200 根据体积要求---- x1>5 x2>0

x3>0 g1(x)=- x1-5≤0 g2(x)=- x2≤0 g3(x)=- x3≤0 g4(x)=x1x2x3-200.001 g4(x)=199.999-x1x2x3

(3)、选择方法 约束随机法 (4)、文本程序

procedure ffx; //目标函数 begin with form1.hfgd do

begin fx:= x[1]*x[2]+2*(x[2]*x[3]+x[1]*x[3]); end; end; procedure ggx; //约束函数 begin with form1.hfgd do

begin gx[1]:=-x[1]+5; gx[2]:=-x[2]; gx[3]:=-x[3]; gx[4]:=x[1]*x[2]*x[3]-200.0001; gx[5]:=199.9999-x[1]*x[2]*x[3]; end; end;

{procedurehhx; begin with form1.hfgd do

begin hx[1]:=x[1]*x[2]*x[3]-200; end; end;

} End .输入截图 结果截图

5心得体会

这次对机械优化的学习,学生感受颇多。

通过上机实验,我深深的感觉到机械优化设计是一门实践性很强的课程,它考验了我们的各种能力和素质。首先我们要有一定的编程能力,这样才能把我们所要表达的以程序的形式表达出来。例如以c语言来编写单位矩阵;其次就是对机械优化设计的一些算法如惩罚函数法的了解,这样才能选择合适的算法去解决问题,得出最优解;另外这也是对我们的灵活运用优化设计方法解决工程设计问题的能力的考验。

在刚刚开始学习这门课程时,感觉这门课的数学味道好浓,感觉就是在讲数学课。因为没什么阅历,这不清楚这门课程的应用性。慢慢讲道后面,特别是听过一些例题后,对于其在工程实际中的应用才有些感受。传统的机械设计方法比较粗放,依赖于设计者的经验,往往考虑到安全性等一些原因,而不得不牺牲一些性能和经济性,这对设计产品是不利的。而优化设计将程序化的思想引入了设计工程,借助于计算机的计算,不断优化设计结果,不仅设计结果更优,效率也更高。优化设计是工程设计的发展方向,传统的依赖设计者经验的设计方法已不能适应社会发展了。努力学习这门课,对于我们以后的发展非常有用。

这是我第一次使用delphi语言来编写程序。由于自己在电脑方面的知识匮乏,所以用起来相当吃力。在调试程序的过程中,不断尝试,再用惩罚函数法处理小盒问题时,出现了四个错误,但就是不知道怎么改,于是就慢慢试,最后发现是自己的输入表达出了问题。

通过这次计算机实验,突然感觉其实程序是个挺好玩的东西。以前感觉语言啊,程序啊都是是一种很模糊的概念在我的脑海中,看到他们头皮都发麻。所以昨晚刚刚开始时感觉什么都不懂,无从下手,都不知道怎么打开程序。程序真是一种神奇的东西吧,我想这也是我第一次体会到用程序的乐趣吧。当你用排除一个个错误后,最终程序顺利运行,得出了结果。那在喜不自禁的感觉真是让人很舒服。我喜欢这种小小的成就感。

在这门课的学习中,我被老师深厚的学术功力和风趣的教学方法所折服。本来觉得这门课挺枯燥的,可是在您的课堂上,却欢声不断,这确实是老师的个人魅力。感学老师这些天来对我们的无私教诲,不仅教我们课本上的知识,还和我们交流您出国访问的心得,这扩大了我的视野。还记得您在访问日本的报告中还做了一首小诗,虽然不记得诗句,可还是被老师的人文素养所打动。在我们这些年轻人当中,已经很是见有人会作诗啦。作为一名工科学生,提高自己的人文素质也是同样重要的。 这就是我在做完试验后的一些小小感想。 谢谢王老师!

吴亮宏

20100523

2013

5 7

第三篇:综合实践活动课程设计(原创)

综合实践活动课程主题设计

活动主题:

重拾民俗民风,弘扬传统文化

综合实践活动课程设计

活 动 主 题

重拾民俗民风,弘扬传统文化

一、课 题 产 生 的 背 景:

首先,现在的城市满街都是麦当劳、肯德基,我们大多数同学也是热衷于这些看似快捷方便的快餐。而伴随着快餐而起的的是当代社会相当流行的快餐文化,它包括网络文化、盲目旅游、带料的影视文化等等。这种快餐文化反映出的是国民在快捷的社会生活中的盲目和浮躁。他们没有时间也不愿意占用自己的某个时间来沉静地思考,他们愿意接受的只是视觉等感觉上的冲击。与此同时,我们的民俗文化则成了快餐文化的牺牲品:除了卖粽子的人外,有多少人知道粽子应该如何包?有多少同学能讲出寒食节的来历?又有多少小学生懂得过年时自己放鞭炮看烟火的意义何在?

其次,我们的文化传统在我们的漠视的同时却渐渐吸引了众多来自于世界羡艳的目光——日本继承了中国传统文化中的“成人礼”并沿用至今,韩国响应端午节弄出了端午祭,吉尔吉斯斯坦与中国大争诗仙李白的国籍。这种种各各真的代表的只是一个礼仪一个节日一个出名的人物吗?诚然不是,在这些东西的背后蕴藏的是一个国家的文化底蕴,一个民族的深厚的历史积淀和传统文化。

基于以上两点我们不得不重视起我们的民俗文化,值得欣慰的是,我国陆续在世界各国建立起了孔夫子学院。尽管如此,儿童仍是我们的未来,只有在他们的心底种下一颗重视民俗的种子才能让我们的文化得到传承。于是,我们带着这个宗旨来展开关于民俗民风的主题活动。

二、课 题 目 标:

1. 熟悉中国各地大多数的民俗,了解世界其他民族的一些民俗文化

2. 通过调查、分析、学习实践能获得某些关于民俗文化的技能。

3. 培养学生重视民俗文化,保护民俗文化的感情,并对身边的父母邻居产生影响。

4. 对如何保护民俗,保护中国传统文化提出自己的意见。

5. 培养学生在发现、探究、自主合作的学习实践中,增长知识,培养兴趣,逐步养成善于研究、勤于分析动手、勇于创新的良好习惯。

三、课 题 活 动 的 对 象:

小学六年级某一班级学生

四、活 动 时 间:半学期

五、活 动 内 容:

本主题活动共设计了《谁是民俗“百晓生”?》、《人人都有民俗情》,《大家动手现民风》、《保护民俗民风,弘扬传统文化》这四个阶段。。

《保护民俗民风,弘扬传统文化》是让学生通过这次的调查采访和动手实践等理解民俗民风背后的文化,不仅使学生自己能尊重民俗民风,也能辐射到身边的家长好友。

六、活 动 过 程 设 计:

活动一:课时(2)节

活动主题:谁是民俗“百晓生”

活动形式:自我收集信息,小组比赛

活动内容:是学生运用查阅资料、走访、问卷等研究方法搜集出世界各国的民俗民风,使学生对这个概念有初步的了解进而引起学生的兴趣。

活动目标:1.培养学生调查、咨询、自我探究的能力。

2.通过对民俗的收集提高学生对主题的理解。

3.激发学生的兴趣。

活动过程:1.在教师的帮助下学生进行分组,并选出组长,负责组织工作。

2.老师组织各个小组的同学一起观看幻灯片,位同学讲述民俗民风的

定义。

3.老师布置任务,让各组同学同个调查、查阅、问卷等手段来收集民

俗民风。

4.以比赛的形式,各小组派代表来比比哪个小组收集到民风民俗的最

活动二:课时半个月

活动主题:人人都有民俗情

活动形式:进入社会,自我探究与调查

活动内容:1.是让学生谈谈在日常生活中,如端午节、清明节等日子中所体会到

的民俗民风并能说出一两个自己与民俗民风间的故事,也可以通过

与老人交谈、查阅资料来比较古今的民俗民风的异同。

2.是让学生调查当今社会不注重民俗的种种现象。

活动目标:1.让学生对主题进行思考,对自己的生活进行反思和总结,

2. 通过思考和倾听,理解民俗民风背后的含义

3.走进生活和社会细心观察,同差社会点滴,提高学生的各方面素质活动过程:1.各小组的同学相互交流,确立理出自己小组的活动主题,可以是自

己对的民俗民风的感受或者是经历过的和民俗有关的小故事,也可

以是历代的民度对比等等。

2.每个小组的同学根据自己的主题进行讨论,可以做问卷,访谈等。

3. 组织学生到博物馆参观并为学生讲解相关的民俗文化。

活动三:课时一个月

活动主题:大家动手现民风

活动形式:回归课堂,展开“主题PARTY”,总结主题

活动内容:是让学生通过自己的形式来演绎民俗民风,可以动手制作、团体表演

也可演奏、绘画等等。

活动目标:1.让学生再现民情民风,更深刻地理解文化内涵

2.用自己的形式表现主题,手、脑、口三者相结合,从多个角度锻炼

学生,培养学生动手动脑的能力。

3.通过调查访问后将自己的感想表达出来,真正将民俗文化内化于心

活动过程:1.给一周时间大家准备排练

2.老师组织,选定教室,和同学一起进行相关的教室布置。

3.展开“主题PARTY”,同学们尽情表演

4.表演结束后,为如何重让视民俗民风和传统文化引起世人的注意讨

论出几条具有建设性的意见。

5.由各小组为委派代表总结此次活动,并提出相关意见。

6.教师总结这场主题活动。

7.委派专员做记录。

8.布置任务:叫每个小组的调查报告和对此次活动的总结。

七、学 生 活 动 中 可 能 遇 到 的 困 难:

1. 不能很清晰的明白民俗的概念。

2. 不知道如何收集有用信息。

3. 不会分析处理信息。

八、活 动 总 结:

本次活动主要围绕“重拾民俗民风,弘扬传统文化” 这一主题,以讨论—调查—再讨论的形式,以学生为主体,教师为指导的宗旨展开的。

本主题活动共设计了《谁是民俗“百晓生”?》、《人人都有民俗情》,《大家动手现民风》三个阶段,分别为确定主题,收集信息,分析处理信息,成果展示和最后的汇报总结。共历时半个学期。

活动过程中,同学们被分为了几个小组,并选出组长,负责组织工作。首先,我们的老师为大家介绍我们的主题,让同学们在收集信息的过程中认识主题并激发学生的一定的兴趣,初定是两节课的时间。然后,有为期两周的,是同学们收集信息进入社会的时间,同学可根据自己的经历或访谈或查阅道德别人的经历来为大家讲述的民俗民风的故事,并谈谈自己的感受,最后通过为期半个月的观察找出社会上不注重民俗民愤和传统文化的实例。再请老师带领学生进入图书馆,进一步了解节日与文化的关系。接着,通过一次“主题PARTY”,给同学们机会自行对得到的信息进行分析处理,以各种文艺形式表现出来,如:包粽子,剪纸,

写对联,民族乐器演奏,多人小话剧再现民情民风,一笔绘民俗等等。表演结束后,有同学将内化于心的民俗文化总结一下,并讨论出如何如何让大家重视民俗的建议。最后、由组长总结此次活动,老师加以点评。

这样一次历时半个学期的综合实践活动,为了培养同学们对生活的观察能力,自己动手能力,收集并处理信息的能力。教师作为指导,只对同学们进行必要的引导活动,一切都交给同学们自己完成。

活动过程中,最困难的一个环节,正是让学生将民俗内化与自己的精神世界。而这个时候,学生是需要老师的引导的。

这样一次综合实践活动,希望能真正的起到作用,达到当初制定的目的,令同学们明白中国民俗民风的博大精深,让学生能发自内心地喜爱民俗,热爱中国的文化。

第四篇:服装色彩设计课程的教学实践

【摘

要】服装色彩设计课程在现实中存在着偏艺术、轻设计,教师专业化有待提升以及教材的实用性和针对性有待加强等问题,对此,我们既要丰富教学内容,提升学生的色彩设计搭配能力和市场把握能力,又要引入多种教学方式,提升课程教学效果,还要建立完整的课程体系,实现理论和实践教学的结合,通过提升服装色彩设计课程教学的质量来培养出更高水平的服装设计人才,满足服装行业发展的需要。 【关键词】服装

色彩设计课程

教学实践 【中图分类号】G642

【文献标识码】A

【文章编号】1674-4810(2015)15-0075-02

随着科技和经济的发展,我们的生活出现了翻天覆地的变化。我们生活的环境可以用丰富多彩来形容,人们对周围美的视觉感知在很大程度上是通过色彩来实现的,通过色彩人们感知到生活中的美。人们的生活水平日益提升,对美的追求也越来越强烈。服装成为人们追求美的一个重要方式,而服装的美的体现方式之一就是色彩。在社会关注度和需求不断上升的同时,一个庞大的国内服装消费市场正在形成,做好服装色彩设计,满足人们的需求显得尤为重要。

此外,我国在世界服装市场的地位日益提升,是世界服装加工大国,很多服装品牌都在我国开设工厂、设立分公司。但与此同时,印度和土耳其等国家异军突起,开始与中国在服装加工市场竞争,这给中国服装行业的发展带来了不小的冲击。为保持自己的地位,我国必须要谋求服装行业的发展之路,从过去单纯的加工转向设计,其中自然包括服装色彩设计,这对服装设计专业的课程设计提出了更多更高的要求,也给服装设计专业的发展带来了新的机遇。本文着眼于服装色彩设计课程的教学现状,提出课程改革的一些建议,旨在提高服装色彩设计课程的教学效果,培养出更好的服装色彩设计方面的人才。

一 服装色彩设计课程教学现状

1.我国的服装色彩设计课程教学内容偏重于艺术,忽略了设计

艺术反应的是创造者的主观想法和个人情感;而设计更注重实际,其目的是在一定程度上满足社会和他人的实际需要。目前,我国的服装设计专业很大一部分依附于美术等艺术专业,在教学过程中侧重于艺术理论知识的传授。而服装色彩设计课程在教学过程中需要面向服装消费者,充分考虑消费者的需求,在课程学习过程中应当更加关注色彩心理学、色彩营销学等内容,让学生能够更加懂得如何用色彩来满足消费者对服装的需求,增加该门课程的实用性。

2.服装色彩设计课程任课老师的专业化有待提升

在20世纪八十年代以后,我国的很多服装设计专业都是在艺术专业的基础上衍生出来的,甚至有的现今仍依附于艺术专业。在课程教授过程中,往往会利用艺术专业现有的师资,在教学过程中偏重于艺术教学而忽略了实践技巧的传授。艺术专业的教师在艺术方面有扎实的功底,但对服装市场的实际状况缺乏了解,过于强调艺术性,不注重面向市场的实用性教学,学生对服装市场和服装色彩趋势缺乏了解和把握。此外,有些学习盲目追从时装行业发展的热潮,不顾实际师资理论研究的限制而盲目开设服装色彩设计课程,课程质量难以保证。

3.教材的实用性和针对性有待加强

一门课程的开设需要相应的教材来提供学习指导,服装色彩设计专业也不例外。服装色彩设计课程的教材虽然不断更新,但仍不尽如人意。绝大多数教材的主要内容仍然侧重于色彩基础理论,与色彩心理和服装市场的结合不紧密。并且服装市场的喜好变化快,而教材的更新速度难以跟上这种变化,教材的与时俱进程度仍有待提升。

二 改进服装色彩设计课程的途径分析

1.丰富教学内容,提升学生的色彩设计搭配能力和市场把握能力

首先在教学中要注重色彩基础理论的教授。我国引

入的包豪斯色彩教育体系的《色彩构成》在国内美术教学中的应用已经很成熟,这对于服装色彩设计有很大的启发性,服装色彩课程教学可以借鉴该体系,完善课程内容,构建完整的服装色彩设计框架。例如,在色彩设计过程中,要运用到色彩调和原理、自然和人文色彩的搭配、常用时尚色的把握以及色彩形象的认知。只有掌握这些色彩设计基本原理,才能为以后的服装色彩设计打下坚实的基础。其次,服装色彩设计是涉及多种学科的边缘课程。服装色彩设计课程开设的最终目的是为了让学生通过对服装色彩的把握设计出满足消费者需要的服装,因此,该门课程还需要引导学生掌握市场和消费者的心理。在服装色彩设计课程基础理论知识教授的同时,穿插进色彩美学、色彩心理学等方面的内容,让学生能够把色彩设计和实际的色彩市场需求结合起来,紧密地联系市场。例如,可以结合具体的教学内容引导学生完成相关课题的设计工作,让学生将理论知识与实际结合起来,懂得如何运用色彩来捕捉、把握市场需求,在过程中培养自己的色彩美感和市场嗅觉,能够本能地对服装市场的色彩需求做出反应。

2.引入多种教学方式,提升课程教学效果

服装色彩设计课程不能拘泥于传统的说教式教学,而应当以开放性为原则,通过多种教学方式的引入,引导学生在掌握色彩理论知识的基础之上将其运用到服装色彩设计中,提升教学效果。在实际中运用启发式教学和实验教学。引导式教学可以通过启发式提问,调动学生的思考,激发其积极性、主动性和想象力;实验教学可以通过实验的方式引导学生运用色彩理论知识,在视觉训练过程中丰富他们的色彩感受能力,使其今后能够在服装设计方面更加熟练地运用色彩、搭配色彩。除了启发式教学和实验教学之外,还可以引入西方在该课程上的先进教学方式。例如,法国色彩教学家菲力普?郎克罗所提出的郎克罗式教学法。通过郎克罗式教学法的运用,学生能够在自然和人文中去感悟色彩,提高对色彩领悟的灵气,这种对自然和人文环境的接触很有可能为学生未来的服装色彩设计提供灵感的源泉。

3.设置完整的课程体系

服装色彩设计课程需要一系列的基础课程作为铺垫,因此,必须注重一些基础课程的铺垫,做好基础课程与服装色彩设计课程的衔接工作。在学习服装色彩设计课程之前,需要掌握相关的平面设计基础,对平面造型有一个基础的了解。只有在了解了平面造型的一般知识之后,才能具备基础的平面美感和平面布局意识,进而进行服装色彩设计。此外,在进行服装色彩设计课程学习之前,还需要具备一定的色彩知识。只有通过色彩的合理搭配和色彩的明暗对比,才能够体现色彩的美感,并且色彩还需要与色彩所承载的物体相匹配,使形和色能够完全地匹配起来,更好地将色彩美和物体美结合起来。服装色彩设计课程也需要根据服装的材质、样式来搭配色彩,因此必须学好色彩的基础理论知识。过去,在开设服装色彩设计课程之前不注重色彩基础知识的铺垫,往往在服装色彩设计方面拿捏得不准,色彩和服装不能很好地融合在一起,无法完全展现服装的美感。通过完整的课程体系的设计,可以使服装色彩设计课程能够在具备充足前提知识的基础之上进行,起到事半功倍的效果。

4.注重理论和实践的结合

服装色彩设计课程是一门针对实际操作的课程,如果仅仅停留在理论教授阶段,无异于闭门造车,对学生以后实践操作的帮助较小。理论知识还具有空洞抽象的特点,单纯地理论教授会让学生难以对色彩设计产生直观的感受,更无法准确地把握服装的色彩设计和搭配。因此,在服装色彩设计课程教学实践中必须将理论和实践结合起来。可以通过两种方式实现理论和实践的结合:一是在课堂教学过程中插入相关服装色彩设计的案例,在理论知识和实践操作中建立起过渡和联系,并且这种实例的引入还可以活跃课堂气氛,激发学生的学习兴趣和动力,更好地掌握色彩设计的有关知识;二是鼓励学生在课外进行实践操作,将作业设置成实践操作的形式,让学生能够将所学的知识运用到课外作业的完成中,这样既能巩固所学知识,还能够培养学生的实际操作能力。在实际操作中,学生还能够不断地去发现问题和不足,有针对性地去弥补,为以后能够更好地投身于服装色彩设计工作做准备。服装色彩设计课程通过理论教学和实践操作的结合,使学生在学习服装色彩设计时能够通过实践操作把握色彩搭配的感觉。只有实践和理论结合,才能更好地掌握知识,开拓学生的视野,并且在实践过程中能够充分激发学生的创造力和想象力,提升课程的教学效果。

三 结束语

色彩设计对于服装设计而言不可或缺。为了培养出更高水平的服装设计人才,必须注重其色彩设计能力的培养。服装色彩设计课程需要借鉴国外的优秀经验,紧密地把握市场潮流,将理论和实践结合起来,为我国服装设计人才的培养以及服装行业的发展贡献力量。

参考文献 [1]〔日〕文化服装学院编.文化服装讲座(新版)服装设计篇(冯旭敏、马存义编译)[M].北京:中国轻工业出版社,2007 [2]吴振韩.艺术设计专业色彩设计课程教学方法研究[J].包装世界,2010(1)

〔责任编辑:林劲〕

第五篇:C语言课程设计实践报告

北京理工大学珠海学院 C语言程序设计实践报告

2014—2015学年第1学期

学 院: 计算机学院 专业班级: 软件工程5班 学 号: 130202051006 学生姓名: 陈洪阳 指导教师: 戴俊雅

成 绩:

时 间:

2015年 1月5日

实践1.猜数游戏 题目概述:

编程先由计算机“想”一个1~100 之间的数请人猜,如果人猜对了,在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10 次,如果猜了10 次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

程序设计概要与分析:

在源程序的开头中包含stdlib和time库函数,这样我们就可以调用srand()和rand()函数,其中调用srand()提供一个种子,它是一个unsigned int类型,取值范围是0~65535,然后调用rand(),根据提供给srand()的种子值返回一个随机数,我们用rand()%100就把随机决定的数值范围确定在1~100之间,然后定义一个num,记录这个随机产生的随机数,定义input,来储存用户输入的猜数值,用times来记录猜的次数,用do while循环来执行用户猜的次数有10次,用if else条件语句来判断用户是否猜中,或猜得太大、太小,用一个while循环来做总嵌套,设置n的值一开始不为零,while循环的条件是当n的值不等于0,最后用户就可以修改n的值来决定是否退出。

程序代码:

#include #include #include

int main() {

int n=1; while(n!=0) {

srand((unsigned)time(NULL)); int num,input; int times=0; num=(rand()%100)+1; printf("在1~100间猜一个数 "); scanf("%d",&input); do{

if(input==num){

} else if(input>num){

} else if(input

}

}

} printf("你猜的数太小了,请再猜一个 "); scanf("%d",&input); times++; }while(times<9); if(times>=9)printf("你已经猜了10次都猜不中,你输了 "); printf("继续下一轮新的猜数请按1,退出请按0 "); scanf("%d",&n); return 0; 运行结果示例:

选择继续下一轮新的猜数,猜了10次都没猜中

心得体会:

要懂得如何生成一个随机数,并且要确定它的范围在1~100之间,同时我们还要用do while循环体把猜数的次数控制在10次,每当我们输入猜想的数时就要做出判断,看看是否猜中,或者猜得太大或太小,输出提示信息。也懂得了通过修改while判断循环里面的条件,使得循环体里面的程序受我们修改的条件控制,可以继续循环执行或者不再继续执行。

实践2.成绩排名次 题目概述:

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30 人参加考 试,学号可以用输入的序号代替。考试后要求: (1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分; (4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。

程序设计与概要:

定义存储学生信息的结构体,包括学生编号,姓名,各科成绩,总分,平均分还有名次。该结构体命名为student,然后定义结构体数组student s[],首先输入准备录入学生信息的人数,用amount来记录人数,用一个for循环,从0~amount-1,依次输入每个学生的各种信息,如学号,姓名,数学、英语和物理成绩。用grade[]数组来存这三科的成绩,如grade[0]存储数学成绩,grade[1]存储英语成绩。输入之后,再用一个for循环把每个同学的总分求出来,总分再除去3求出该名同学的平均分。按总分成绩由高到低排出名次,用两个for循环嵌套,第一个循环从0~amount,表示从第一个同学开始拿出来比较,第二个循环从1~amount,表示除了之前取出的同学以外的每一个同学,如果前一位同学的总分小于后一个同学的话,就交换两人的信息,第二个循环比较之后,便会把总分最高的同学的信息储存在第一个,然后我们设置排名rank的值为1,rank++,进行筛选第二名的,之后对应地把rank的值设给学生的总分排名

打印学生信息,输出表格的基本框架后,用一个for循环,依次输出每个学生的信息,最后还有根据学号查询学生信息,用户输入要查询的学生学号,在for循环里面依次比较,如果找到学号与用户输入相同的,便输出该名学生的信息。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;

void input(student s[]); void title();

void list(student s[]); int main() { input(s); int i=0; for(i=0;i

//要求1 计算总分 平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3; } //要求2 按总成绩排序

int rank=1; student t; for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++; } //要求3 打印名次表

title(); list(s); //要求4 查询

int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i

if(number==s[i].num)

{

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system("pause"); return 0; }

void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 "); for(int i=0;i

printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);

scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } }

void title() {

printf(" 学生成绩表 ");

printf("----------------------------- ");

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("----------------------------- "); }

void list(student s[]) { //n表示人数

int i;//rank=1; for(i=0;i

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf("----------------------------- "); } }

运行结果示例:

确定录入人数之后,依次输入每个学生的信息

打印出名次表:

输入学生的学号,查询学生信息:

心得体会:

懂得了用结构体将不同的数据类型结合在一起,然后定义结构体数组,使得每个数组中的成员都具有不同的数据类型变量。而且同属于一个数据类型,也可以定义数组来表示相同的类型但是有多个不同值,比如成绩这个变量。也懂得了用for循环语句求总分,用for循环语句将数组从头到尾输出。

实践3.单科成绩统计 题目概述:

学生成绩统计(一维数组)从键盘输入一个班(全班最多不超过 30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实

现下列功能:(1)统计不及格人数并打印不及格学生名单;

(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下: 分段 人数 图形 <60 3(10%)*** 60‐69 8(…) ******** 70‐79 7(…) ******* 80‐89 8(…) ******** >=90 4(…) ****

程序设计与概要:

定义一个结构体stu,里面有学生的姓名和成绩,然后定义一个s[]数组存放每个学生的姓名和成绩,输入函数中用一个for循环来依次输入每个学生的姓名,还有输入成绩,用if条件语句判断输入的成绩是否为负数,如果是就退出整个输入函数,同时,我们还用if条件语句来判断输入的成绩处于哪个分数阶段,定义n

1、n

2、等整形变量来存储各个分数段的总人数,变量num来存放输入的学生共有多少人,变量sum是将每个学生的成绩都加在一起,最后用sum/num就等于全班该门成绩的平均分,我们用一个for循环语句,判断每个学生的成绩是否小于60分,如果是就输出他的姓名,这样就可以打印出不及格学生的名单了。同样的,用一个for循环语句,判断每个学生的成绩是否大于等于平均分,如果是就变量count+1,用来记录成绩大于或等于平均分的学生人数,同时可将成绩大于平均分的同学姓名输出,这样就打印出了成绩在大于等于平均分的学生名单了。最后是输出分数段,用前面记录各个分数段人数的n值除以总人数再乘以100%就得出比例,每一个分数段都用一句for循环语句,根据n值的大小输入对应数目的*。

程序代码:

#include #include #define M 30 struct stu { char name[20]; int score; }; stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0; int count=0; void input(stu s[]); void getnotpass(stu s[]);

void getavg(stu s[]); void percent(stu s[]); int main() { /*stu s[M]; int i=0,num=0; int n1=0,n2=0,n3=0,n4=0,n5=0; float sum=0,ave=0;*/ input(s); getnotpass(s); getavg(s); percent(s); return 0; } void input(stu s[]) { for(i=0;i

printf("请输入第%d个学生的姓名和成绩 ",i+1);

scanf("%s%d",&s[i].name,&s[i].score);

if(s[i].score<0)

break;

if(s[i].score>=0&&s[i].score<60)

n1++;

if(s[i].score>=60&&s[i].score<70)

n2++;

if(s[i].score>=70&&s[i].score<80)

n3++;

if(s[i].score>=80&&s[i].score<90)

n4++;

if(s[i].score>90)

n5++;

num++;

sum+=s[i].score; } printf("学生信息录入完毕 "); } void getnotpass(stu s[]) { printf("不及格人数为:%d ",n1); printf("不及格人员名单如下: "); for(i=0;i

if(s[i].score>=0&&s[i].score<60)

printf("%s ",s[i].name); } printf(" "); ave=sum/num; } void getavg(stu s[]) { for(i=0;i

if(s[i].score>=ave)count++; } printf("成绩在全班平均分及平均分之上的学生人数为:%d ",count); printf("成绩在全班平均分及平均分之上的学生名单如下: "); for(i=0;i

if(s[i].score>=ave)

printf("%s ",s[i].name); } printf(" "); } void percent(stu s[]) { printf("各分数段的学生人数及所占的百分比如下: "); printf("分段 人数 图形 "); printf("<60 %d(%.0f%%) ",n1,(float)n1/(float)num*100); for(i=0;i=90 %d(%.0f%%) ",n5,(float)n5/(float)num*100); for(i=0;i

运行结果示例:

依次输入每个学生的姓名和成绩,当输入成绩为负时,便退出整个输入:

统计不及格人数还有打印不及格学生名单:

统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单:

以直方图方式统计各分数段的学生人数及所占的百分比:

心得体会:

懂得了在for循环体内用if条件判断语句判断输入的值为负值时退出循环体。用变量计数器把符合要求的计数起来,最后可以得出符合要求的值共有多少个,也懂得了用for循环从所有值里进行筛选符合条件的值出来,更懂得了在求百分比时候要强制类型转换,把int类型的计算结果给转换为float单精度类型。

实践4.函数与文件训练 题目概述:

将实践练习2 中的第2题利用函数的思想进行修改,并将学生的成绩等信息输出到文件中。要求函数参数中

包含结构体数组或指针。输出到ASCII 文件的信息包括每个学生的学号、三门成绩和名次,每人一行。

程序设计与概要:由于我的实践2中就已经用了函数,所以我只需要把学生的成绩等信息输出到文件中。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

程序代码:

#include #include #include #define M 30 struct student { unsigned int num; char name[10]; int grade[3]; int sum; float ave; int rank; }; student s[M]; int amount;

void input(student s[]); void title(); void list(student s[]); int save();//输出到文件中 int main() { input(s); int i=0; for(i=0;i

//要求1 计算总分 平均分

s[i].sum=s[i].grade[0]+s[i].grade[1]+s[i].grade[2];

s[i].ave=(float)s[i].sum/3; }

//要求2 按总成绩排序

int rank=1; student t; for(i=0;i

for(int j=i+1;j

{

if(s[i].sum

{

{t=s[i];

s[i]=s[j];

s[j]=t;

}

}

}

s[i].rank=rank;

rank++; } save(); //要求3 打印名次表

title(); list(s); //要求4 查询

int number; printf("请输入你要查询学生的学号: "); scanf("%d",&number); for(int i=0;i

if(number==s[i].num)

{

printf("学号 姓名 数学 英语 C语言 总分 平均分 排名 ");

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

} } system("pause"); return 0; } void input(student s[]) { printf("输入班上参加期末考试的人数(不大于30人)"); scanf("%d",&amount); printf("请依次输入他们的学号,姓名,数学成绩,英语成绩和物理成绩 ");

for(int i=0;i

printf("第%d位同学的学号,姓名,数学成绩,英语成绩和物理成绩 ",i+1);

scanf("%u%s%d%d%d",&s[i].num,s[i].name,&s[i].grade[0],&s[i].grade[1],&s[i].grade[2]); } } int save() {

FILE *fp; fp=fopen("f:student.txt","w"); if(!fp) {

printf("can not open file! ");

exit(1); } char c[]="学号 数学 物理 英语 排名 "; fputs(c,fp); for(int i=0;i

fprintf(fp,"%u %d %d %d %d ",s[i].num,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].rank); } fclose(fp); } void title() {

printf(" 学生成绩表 ");

printf("----------------------------- ");

printf("学号 姓名 数学 英语 物理 总分 平均分 排名 ");

printf("----------------------------- "); }

void list(student s[]) { int i; for(i=0;i

printf("%u %s %d %d %d %d %5.2f %d ",s[i].num,s[i].name,s[i].grade[0],s[i].grade[1],s[i].grade[2],s[i].sum,s[i].ave,s[i].rank);

printf("----------------------------- "); } }

运行结果示例:

首先输入准备录入的学生人数,然后依次输入每个学生的信息:

打印出按总成绩排序后的学生信息表,以及根据学号查询:

在f盘中找到文件并打开:

心得体会:

懂得了用如何运用文件,把向程序中输入的数据全部输出到文件中去。用FILE *fp,fp就代表我们要对其操作的文件,用open函数,根据文件的所在位置还有文件名,打开文件,并对应要求进行只写的操作,如源代码中fp=fopen("f: st udent.txt","w"),w代表写入操作,char一个c[]数组,存放对应项的名称,用fputs函数把数组里面的字符串写入到文件里面去,用一个for循环,循环调用fprintf函数,把每个学生的学号,各科成绩和排名都写入到文件当中去,最后关闭文件即可。

实践5. 实践4(1)(2) 题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

1. 定义至少包含以上学生信息和学院代码的结构体类型和指针(或数组)变量。 2. 函数实现从文件中输入信息到定义的数据中。

程序设计与概要:

定义一个结构体,名为student,里面的内容有学生的学号,姓名,性别,还有那个学院,以及10门成绩,构造结构体数组,student stu[100],用于存储100名学生的信息。定义读取文件中内容的函数,FILE *fp代表文件,调用fopen函数,通过文件所在位置以及文件名打开特定的文件,r表示只对文件进行读取,接着调用fscanf函数,把第一个位置的数据赋给学生的学号,用while循环体,循环的条件是调用feof判断文件是否读取结束,如果没有则返回0,用!feof()来让没读取结束的文件继续读取,接着再把同一行后面的数据分别赋给学生的姓名,性别代码和所属学院代码,再用一个for循环,把同一行后面10个数据分别赋给学生的10门成绩。一行读取完毕后,意味着已经读取完一个学生的所有个人信息,定义一个I值来存储已经读取学生的人数,每读完一人就i+1,再读取下一行的第一个数据赋给下一个学生作为他的学号。通过while循环把文件中的全部信息读取出来赋给所有学生,函数最后返回的是读取学生的人数i。定义结构体名为sxy,用于存储性别代码和代码对应的性别,可以在后面输出的时候,把对应的性别代码转变为用中文表示性别。定义一个结构体名为scode,用于存储学院代码和代码对应的学院名称,可以在最后输出的时候,把学院代码对应的学院名称输出。再定义一个输出函数,通过for循环,从0~i-1,把i个学生的全部信息输出,所以我们在主函数里面先调用读取文件中内容的函数之后再调用输出函数即可。

程序代码:

#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); struct student { int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; float ave;

}; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k; n=readData("f:StudentInfo.txt",stu); m=readDataxy("f:SexInfo.txt",s1); k=readDataco("f:CodeInfo.txt",s2); if(n==-1||n==0)

return 0; if(m==-1||m==0)

return 0; if(k==-1||k==0)

return 0; printStudent(stu,s1,s2,n,m,k);

system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; fp=fopen(filename,"r"); if(!fp) {

printf("error1");

return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);

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

fscanf(fp,"%d",&stu[i].scores[j]);

++i;

fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error2");

return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s1[i].sex);

++i;

fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error3");

return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s2[i].dept);

++i;

fscanf(fp,"%d",&s2[i].id); }

return i; } void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

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

printf("%4d",stu[i].scores[j]);

printf(" "); } }

运行结果示例:

心得体会:

懂得了从文件中输入信息到定义的数据中。就是要先构造与文件信息中相对应的结构体数组,然后用打开文件,需要知道文件的具体位置还有文件名,”r”就是表示只采取读取操作,用while循环,循环条件的判断标准就是用feof来判断文件是否读取到文件尾部,用fscanf把每个数据赋给对应的变量。其中最难解决的就是一开始学生文件里面的信息,学生性别用代号表示,学生所在学院也用代码显示,这样一来我们把文件中的信息赋给定义好的结构体

数组之后,用for循环把结构体数组一个一个输出后,显示的是性别代码和学院代码,我们要把代码都改为相对应的值,所以我们同样定义性别的结构体数组,学院的结构体数据,之后用for循环把性别数组里面的代号和学生数组中的性别代码想比较,用strcpy函数,相同的就把代码对应的性别赋给学生数组里面定义好的性别字符数组。同理的,学院代码相对同的就把代码对应的学院名称赋给学生数组里面定义好的学院字符数组。

实践6.实践4(3)(4)(5) 题目概述:

每位学生信息包括:学号、姓名、性别、学院、10 门成绩。共有不超过100 位同学的信息存放在ASCII 文件StudentInfo.txt 中;不超过10 个学院的信息存放在CodeInfo.txt 中,性别代码存放在SexInfo.txt 中,均为代码和其对应的名称。要求:

3. 函数实现排序(1):学生平均成绩的降序排序,并输出所有信息到显示屏。 4. 函数实现排序(2):学生姓名的升序排序,并输出所有信息到显示器。

5. 函数实现查询(1):根据学号查询学生信息,并输出该生信息,并输出所有信息到显示器。

程序设计与概要:

同上个实践一样构造结构体名为student,用来存储学生的信息,如学生姓名,性别代号,学号,学院代号和成绩等。构造结构体名为sxy用来存储性别代号和性别名称,构造结构体名为scode用来存储学院代号和学院名称。用三个不同的函数来实现读取三个不同文件中的内容,把文件里面的内容放到以上构造的三个结构体里面去,定义输出函数,用for循环把每个学生的性别代号同sxy结构体数组中的代号对应,把代号对应的性别名称赋给每个学生的性别sex属性值中,把每个学生的学院代号同scode结构体数组中的代号对应,把代号对应的学院名称赋给每个学生的学院sdept属性值中,最后再用一个for循环把从第一个学生到最后一个学生的全部信息输出。实现要求3中的根据学生平均成绩的降序排序,要求在从文件中读取成绩之后要计算出总分然后再除以10门成绩得出平均分,然后定义一个函数,用双重for循环,把第一个学生同其他学生比较平均分,如果比下一个同学的平均分低就交换两个的位置,否则就继续与下一个同学比较,直到第一层的for循环结束退出为止。再用for循环把排序后的学生信息从第一位到最后一位输出即可。实现要求4中的根据学生姓名的升序排序,要求也是用双重for循环,用函数strcmp比较两个学生的姓名,把第一个学生的姓名同下一个同学比较,如何比下一个同学大,就交两个学生的位置,否则就继续与下一个同学比较,直到第二层的for循环结束,意味一个同学的位置确定,继续第一层for循环的下一个同学,直到第一个层的for循环结束,就意味所有同学比较完毕,再用for循环语句把从第一个位置的同学到最后一个位置的同学,把他们的信息输出。实现要求5的查询要求,需要我们从键盘上输入要查询的学生的学号,然后用for循环从我们的学生结构体数组中遍历一遍,如果有找到学号同输入的学号相同的学生,便把他的所有信息输出,否则则输出不存在该名学生。

程序代码:

#include #include #include int readData(char *filename,struct student *stu); int readDataxy(char *filename,struct sxy *s1); int readDataco(char *filename,struct scode *s2); void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k); void search(struct student *stu,int n); void sortbyname(struct student *stu,int n); void sortbyave(struct student *stu,int n); struct student

{ int id; char name[10]; int sexno; char sex[4]; int deptno; char dept[20]; int scores[10]; double ave; }; struct sxy { int id; char sex[4]; }; struct scode { int id; char dept[20]; }; int main() { struct student stu[100]; struct sxy s1[2]; struct scode s2[10]; int n,m,k,b; while(1) {

system("cls");

printf("1.显示学生信息 ");

printf("2.姓名升序排序 ");

printf("3.平均成绩降序 ");

printf("4.学号查询学生信息 ");

printf("0.退出 ");

printf(" 输入需要查询的序号:");

scanf_s("%d",&b);

switch(b)

{

case 1:

n=readData("f:StudentInfo.txt",stu);

m=readDataxy("f:SexInfo.txt",s1);

k=readDataco("f:CodeInfo.txt",s2);

if(n==-1||n==0)

return 0;

if(m==-1||m==0)

return 0;

if(k==-1||k==0)

return 0;

printStudent(stu,s1,s2,n,m,k);

break;

case 2:

sortbyname(stu,n);

break;

case 3:

printf("按平均成绩降序排序如下:");

sortbyave(stu,n);

printStudent(stu,s1,s2,n,m,k);

break;

case 4:

search(stu,n);

break;

case 0:

return 0;

} system("pause"); } system("pause"); return 0; } int readData(char *filename,struct student *stu) { FILE *fp; int i=0,j; double sum; fp=fopen(filename,"r"); if(!fp) {

printf("error");

return -1; } fscanf(fp,"%d",&stu[i].id); while(!feof(fp))//feof返回0 表示文件还没结束 返回1表示结束

{

fscanf(fp,"%s%d%d",stu[i].name,&stu[i].sexno,&stu[i].deptno);

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

{

fscanf(fp,"%d",&stu[i].scores[j]);

sum=stu[i].scores[j];

}

stu[i].ave=sum/10;

++i;

fscanf(fp,"%d",&stu[i].id); } return i; } int readDataxy(char *filename,struct sxy *s1) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error2");

return -1; } fscanf(fp,"%d",&s1[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s1[i].sex);

++i;

fscanf(fp,"%d",&s1[i].id); } return i; } int readDataco(char *filename,struct scode *s2) { FILE *fp; int i=0; fp=fopen(filename,"r"); if(!fp) {

printf("error3");

return -1; } fscanf(fp,"%d",&s2[i].id); while(!feof(fp)) {

fscanf(fp,"%s",s2[i].dept);

++i;

fscanf(fp,"%d",&s2[i].id); } return i;

} void printStudent(struct student *stu,struct sxy *s1,struct scode *s2,int n,int m,int k) { int i,j; printf(" 学生信息统计 "); for(i=0;i

for(j=0;j

{

if(stu[i].sexno==s1[j].id)

{

strcpy(stu[i].sex,s1[j].sex);

}

} } for(i=0;i

for(j=0;j

{

if(stu[i].deptno==s2[j].id)

{

strcpy(stu[i].dept,s2[j].dept);

}

} } for(i=0;i

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

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

printf("%4d",stu[i].scores[j]);

printf(" "); } } void search(struct student *stu,int n) { int m,col=0; printf("请输入你要查询学生的学号: "); scanf("%d",&m); for(int i=0;i

if(stu[i].id==m)

{

col=1;

printf("%d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

printf("%4d",stu[i].scores[j]);

}

} } if(col==0) printf("不存在该名学生信息 "); } void sortbyname(struct student *stu,int n) { student temp; for(int i=0;i

for(int j=0;j

{

if(strcmp(stu[i].name,stu[j].name)>0)

{

temp=stu[i];

stu[i]=stu[j];

stu[j]=temp;

}

} } printf("按姓名的升序排序如下! "); for(int i=0;i

printf("%8d%8s%4s%12s",stu[i].id,stu[i].name,stu[i].sex,stu[i].dept);

for(int j=0;j<10;++j)

{

printf("%4d",stu[i].scores[j]);

}

printf(" "); } } void sortbyave(struct student *stu,int n) { int i,j,flag; student s; for (j=0;j

flag=0;

for (i=0;i

{

if (stu[i].ave

{

s=stu[i];

stu[i]=stu[i+1];

stu[i+1]=s;

flag=1;

}

}

if(flag==0) break; } }

运行结果示例: 开始的菜单界面:

输入1便会显示文件中所有学生的信息:

输入2便会实现学生姓名升序排序,且把排序后的学生所有信息输出:

输入3便会实现学生平均成绩降序排序,且把排序后的学生所有信息输出:

输入4便会实现根据学号查询学生信息:

心得体会:

懂得了运用双重for循环比较全体成员,如题目中所要求的姓名升序排序还有平均成绩降序,比较平均成绩可以用值的大小进行比较,但是比较姓名的大小就要用strcmp函数进行比较,如果有需要交换位置的,就定义一个同类型的中间值,作为交换的协助者,帮助完成两个值的交换,完成整个过程之后,把交换完成后的全体成员从头到尾用for循环输出即可。

参考文献:

[1] 张克军:《程序设计基础》,科学出版社。

上一篇:设计色彩小结范文下一篇:商会建设活动范文