电气C实训指导书讲课讲稿.docx

上传人:b****6 文档编号:4402026 上传时间:2022-12-01 格式:DOCX 页数:22 大小:33.83KB
下载 相关 举报
电气C实训指导书讲课讲稿.docx_第1页
第1页 / 共22页
电气C实训指导书讲课讲稿.docx_第2页
第2页 / 共22页
电气C实训指导书讲课讲稿.docx_第3页
第3页 / 共22页
电气C实训指导书讲课讲稿.docx_第4页
第4页 / 共22页
电气C实训指导书讲课讲稿.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

电气C实训指导书讲课讲稿.docx

《电气C实训指导书讲课讲稿.docx》由会员分享,可在线阅读,更多相关《电气C实训指导书讲课讲稿.docx(22页珍藏版)》请在冰豆网上搜索。

电气C实训指导书讲课讲稿.docx

电气C实训指导书讲课讲稿

 

《C语言程序设计》

实训指导书

电气

指导老师:

 

2O11.12.15

C程序设计实训指导书

(适用于电气专业)

《C程序设计》实训是C程序设计课程的一个重要环节,而且也是整个教学过程中理论联系实际不可缺少的教学环节。

为加强学生对于知识掌握的广泛性、应用性和动手能力,以及对各有关先修课程的知识进行较为全面而综合的设计练习,必须搞好C程序设计实训。

一、实训目标

强化C语言的各种知识,通过一系列实验,使学生获得C语言的相关知识及一定的实际操作技能和用C编程的实践经验,进一步提高学生分析问题、解决问题的能力,以巩固和加深所学的理论知识。

为学生从事本行业相关工作打下比较坚实的基础。

使学生获得一定的实际操作技能和程序开发经验,进一步提高学生分析问题、解决问题的能力,增强实践技能,并培养学生勇于动手、勤于动手、热爱本专业的思想。

二、实训要求

C实验应在计算机机房进行,通过合理选择实验题目,使学生应达到以下要求:

本课题设计的基本要求:

必须提交系统分析报告,包括系统的功能分析、系统的功能模块设计

程序设计的报告:

包括程序的运行环境、开发环境、程序的详细设计(包括模块之间的关系,模块的功能、主要功能实现的程序段)。

时间够用情况可以尝试。

系统的源程序,应带有详细的备注。

时间够用情况可以尝试。

要求学生在实训期间,做好实训日记、以及实训所得资料、内容的整理工作。

实训结束时,写出实训报告并有实训作品。

实训报告内容详略得当,要有程序及程序使用说明。

实训要在机房中计算机上完成整个程序的调试,通过实训,对C课程的掌握上应使学生应达到以下要求:

1、熟悉C的开发环境。

2、掌握C中的数据类型、变量、常量、表达式和运算符的用法。

3、掌握C中顺序结构、选择结构、循环结构程序的编写,语句的实现。

使学生养成良好的编程习惯。

培养分析问题,解决问题的能力。

4、掌握C程序结构的概念与使用方法。

5、掌握数组类型的使用方法。

6、理解并掌握函数的概念和用法。

7、掌握C编程的技巧。

8、树立实事求是、认真工作的思想,培养严密的逻辑思维能力。

三、实训内容

本次实训要求必须完成两类实训任务:

(1)学生对指定的12个实验项目进行验证与设计;

(2)学生从所给的6道实用题目中任意选择5个,自行进行编程实现。

[1]指定的实验项目验证与设计(对以下指定的12个实验项目进行验证)

1、数据类型、运算符和表达式

一、实验目的

1.熟练表达式的表示方法

2.了解表达式的运行结果

二、实验内容和步骤

用printf函数来输入表达式运行结果

观察以下表达式的结果

=x

y>x

x!

=y

x==z-2

x=x-2

x>=z

x<=z

以上表达式的值

(2)当x=0,y=-1,z=1时当x当x=0,y=-1,z=1时

x&&y

x||y

y&&x

y||z

以上表达式的值

三、问题讨论

1.“=”和“==”有什么区别?

2.“&”和“&&”、“|”和“||”有什么区别?

2、数据类型

一、目的和要求

了解C语言中数据类型的意义。

二、实验内容和步骤

1、下面的程序试图计算由键盘输入的任意两个整数的平均值:

#include

main()

{

intx,y,a;

scanf(“%x,%y,&x,&y);

a=(x+y)/2;

printf(“Theaverageis:

”a);

}

调试无语法错误后,分别使用下列测试用例对上述程序进行测试:

(1)2,6

(2)1,3

(3)-2,-6

(4)-1,-3

(5)-2,6

(6)-1,3

(7)1,0

(8)1,6

(9)32800,33000

(10)-32800,33000

1、分析上述哪几组测试用例较好?

通过测试,你发现程序有什么错误了吗?

若有错误,请指出错误原因。

2、   操作符sizeof用以测试一个数据或类型所占用的存储空间的字节数。

请编写一个程序,测试各基本数据类型所占用的存储空间大小。

三、分析与讨论

如何正确地选用数据类型?

(提示:

给合前面做过的两个实验及书本进行讨论总结)

3、运行符与表达式

一、目的和要求

1、理解常用运行符的意义。

2、掌握C语言表达式的运行规则。

3、本实验可在学习了教材第2.3节后进行。

二、实验内容和步骤

1、编写一个C语言程序,测试下列各表达式

i,j

i+1,j+1

i++,j++

++i,++j

i+++++j

++i+++++j++

要求在各表达式中i和j都分别有相同的初值。

在实验中注意下列问题:

(1)  哪些表达式是错误的?

为什么?

(2)  理解+,++,++i,i++的意义和优先级别。

2、编写一个程序,测试常用的十个运算符的优先顺序。

四、分析与讨论

分析总结运算符的优先级。

4、输入与输出

一、目的和要求

1、掌握C语言程序输入、输出的方法和格式。

2、本实验可在学习教材第二章后进行。

二、实验内容与步骤

1、输入并编辑下面的程序

main()

{

inta,b;

floatc,d;

longe,f;

unsignedintu,v;

charc1,c2;

scanf(“%d,%d”,a,b);

scanf(“%f,%f”,c,d);

scanf(“%ld,%ld”,e,f);

scanf(“%o,%o”,u,v);

scanf(“%c,%c”,c1,c2);

printf(“\n”);

printf(“a=%7d,b=%7d\n”,&a,&b);

printf(“c=%10.2f,d=%10.2f\n”,&c,&d);

printf(“e=17ld,f=%17ld\n”,&e,&f);

printf(“u=%o,d=%o\n”,&u,&v);

printf(“c1=%c,d=%c\n”,&c1,&c2);

这个程序有语法错误吗?

为什么?

2、调试上述程序无语法错误后,用下面的测试数据,对程序进行测试:

a=123,b=456,c=17.6,d=71837.65,e=70000,f=2174506,u=62000,v=58765,c1=’a’,c2=’b’

分析运行结果。

特别注意输入c1,c2的值是什么?

什么原因?

3、将输入e和f的语句改为:

scanf(“%d,%d”,&e,&f);

再用上述测试数据测试并分析结果。

4、将输入u、v的语句改为:

scanf(“%d,%d”,&u,&v);

再用上述测试数据测试并分析结果。

5、将输出e ,f 的语句改为:

printf(“e=%17d,f=%17d\n”,e,f);

再用上述测试数据测试并分析结果。

6、将输出u、v的语句改为:

printf(“u=%u,v=%u\n”,u,v);

printf(“u=%d,v=%d\n”,u,v);

再用上述测试数据测试并分析结果。

7、请读者自己修改程序和改变数据输入的形式,分析各种情况下的输入与输出。

8、在scanf(“%c,%c”,&c1,&c2);语句之前加一个语句:

getchar();

9、验证转义字符\n与\r的意义有何不同。

三、分析与讨论

1、总结在printf函数中可以使用的各种格式指定符,并给出样例。

2、总结在printf函数中可以使用的各转义字符及其功能。

5、顺序程序结构程序设计

一、实验目的

1.进一步掌握C程序的编辑、编译、连接和运行的过程。

2.熟悉顺序结构的程序设计方法。

3.熟练使用C的各种表达式。

4.熟练掌握输入、输出函数的使用。

二、实验内容和步骤

1.输入x,y,编写程序求z=x+|y|的值。

实验步骤与要求:

(1)程序中用scanf函数输入x和y的值,请分析以下两个语句

scanf(“%f%f”,x,y);

scanf(“%f%f”,&x,&y);

哪一个是正确的,分别运行之,分析程序运行结果。

如果scanf函数改为scanf(“%f,%f”,&x,&y);应该怎样输入数据。

2.编写输入三角形的三边长a、b、c,求三角形面积area的程序。

实验步骤与要求:

(1)输入前要加提示语句。

(2)输出结果前要有必要的文字说明。

(3)输入一组数据3,4,5,观察运算结果。

(4)输入另外一组数据3,4,8,观察运算结果,分析这个运算结果是否有效。

三、问题讨论

上机各个环节所出现的错误及解决的办法

6、选择结构

一、实验目的

1、了解条件与程序流程的关系

2、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。

3、本实验应在学习教材第3.2节后进行。

二、实验内容和步骤

1、题目

有如下程序段:

{……

if(a>1&&b==0)x=x/a;

if(a==2||x>1)x=x+1;

}

为了更容易明白程序的逻辑结构,我们用图5.1所示流程图来加以描述。

要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。

2、实验步骤

记下分别使用下列各组数据运行时的操作流程。

(1)  a=1,b=1,x=1;

(2)  a=1,b=1,x=2;

(3)  a=3,b=0,x=1;

(4)  a=2,b=1,x=4;

(5)  a=2,b=1,x=1;

(6)  a=1,b=0,x=2;

(7)  a=2,b=1,x=1;

(8)  a=3,b=0,x=2。

三、分析讨论

(1)      用哪一组数据就可使程序中的每个处理语句都执行一次?

为了找出程序中各条处理语句中的错误,应该使用什么样的数据对程序进行测试?

请上机验证自己的结论。

(2)      用哪两组数据就可以使程序段中的每个分支都运行一次?

这种情形与上面的讨论有何不同?

如果为了找出程序中积压分支中的错误,应该使用什么样的数据对程序进行测试?

请上机验证自己的结论。

(3)      用哪两组数据就可以把判定框中的每个条件运算都进行一次?

如果为了测试出判定条件中的错误,应使用哪些数据对程序进行测试?

请上机验证自己的结论。

(4)      用哪四组数据才可以把各种条件的组合都检测一遍?

如果为了测试各种条件的组合的情形,应该使用什么样的测试数据?

请上机验证自己的结论。

(5)      用哪四组数据才可以把起始到终止的各条路径都覆盖一次?

如果为了测试出程序在不同路径下的错误,应该使用什么样的测试数据?

请上机验证自己的结论。

四、进一步的实验

1. 题目

从键盘上输入三个数,让它们代表三条线段的长度,请写一个判断这三条线段所组成的三角形属于什么类型(不等边,等腰,等边或不构成三角形)的C程序。

2. 请分别设计下列数据对自己的程序进行测试:

(1)      找出各条语句中的错误。

(2)      找出积压分支中的错误。

(3)      找出各条件中的错误。

(4)      找出各种条件组合中的错误。

(5)      找出各条路径中的错误。

7、条件型循环结构

一、目的和要求

1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。

2、了解条件型循环结构的基本测试方法。

3、本实验可在学习教材3.3节后进行。

二、实验内容与步骤

1、下面是一个计算e的近似值(使误差小于给定的δ)的程序。

main()

{doublee=1.0,x=1.0,y,detax;

inti=1;

printf(“\npleaseinputenteraerror:

”);

scanf(“%lf”,&detax);

y=1/x;

while(y>=detax)

{

x=x*I;

y=1/x;

e=e+y;

++i;

}

printf(“%12.10lf”,e);

}

2、实验步骤

(1)、阅读上面的程序,写出程序所依据的计算公式。

(2)、当输入的detax各是什么值时,能分别使程序按下面的要求运行:

.不进入循环;

.只循环一次;

.只循环两次;

.进入死循环(程序将永远循环下去)。

为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?

(3)、原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y

假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的detax来测试出while语句的循环条件写错了。

(4)、把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。

假如不知道机器内的程序实际上是怎么写的,输入什么样的detax就能测试出少了上述这条语句。

(5)、若把原程序中的++i换成i++,观察程序的运行发生了什么变化?

假如不知道这条语句到底是怎么写的,输入什么样的detax就能测试出这条语句写错了.

(6)、把原程序中的while结构改写成do—while结构,再分别按上述的

(2)、(3)两步进行实验。

三、分析讨论

总结一下测试条件循环结构的一般方法。

8、计数型循环结构

一、 目的和要求

1、 掌握如何正确地控制计数型循环结构的次数

2、 了解对计数型循环结构进行测试的基本方法

3、 了解在嵌套循环结构中,提高程序效率的方法

4、 本实验应在学习了教材第3.3.4进行

二、             实验内容与步骤

1、 实验题目

下面是一个循环结构的C程序。

main()

{

inti,j;

longsum=0;

for(i=1,i<=20,i++)

for(j=1;j<=3;j++)

sum=sum+(i+1)*(i+1)*(j+2)

printf(“sumis:

%d\n”,sum);

}

2、 实验步骤

(1)      将上述程序中的和分别做什么样修改,能使程序按如下要求运行:

.不循环;

.外循环1次,不进入内循环;

.外循环,内循环各1次;

.外循环1次,内循环2次;

.外循环2次,内循环1次;

.外循环19次,内循环3次;

.外循环20次,内循环2次;

.外循环21次,内循环3次。

(2)      试修改程序,以便能知道控制表达式

i=1;j<=20;i++

j=1;j<3;j+=

各执行了多少次?

(3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观

察对换后的外循环与内循环控制表达式执行的总次数有无变化?

(4)将(3)中程序写为

main()

{

inti,j,k;

longsum=0;

for(j=1.j<=3.j++)

{

k=j+2;

for(i=1;i<=20;i++)

sum=sum+(i+1)*(i+1)**k;

}

printf(“sumis:

%d\n”,sum);

}

观察程序的执行结果有无变化?

(5)将(3)中程序改写为

main()

{

intI,j,m,n;

longsum=0;

for(j=1;j<=3;j++)

{

m=j+2;

for(I=1;j<=20;I++)

{

n=I+1;

sum=sum+m*m*k;

}

}

printf(“sumis:

%d\n”,sum);

}

观察程序的执行结果有无变化?

(6)在(5)的程序中,若将外循环控制表达式分别做如下修改:

.j=1;j<3;j++

.j=1;j=3;j++

.j=1;j>=3;j++

.j=1;j>3;j++

.j=1;j<=3;j--

.j=1;j>3;j--

.j=1;j<3;j++

.j=0;j<=3;j+=

.j=0;j<3;j++

j=1;j<=3;j++

j=1;j<3;++j

观察程序的执行结果有无变化?

三、 分析讨论

(1)      如何测试计数型循环结构的控制表达式中的错误?

从实验中你得到了哪些提高嵌套循环程序效率的启示?

9、有关函数的程序设计

一、实验目的

1.理解和掌握多模块的程序设计与调试的方法。

2.掌握函数的定义和调用的方法。

3.学会使用递归方法进行程序设计。

二、实验内容和步骤

1.编写一个函数,判断一个数是不是素数。

在主函数中输入一个整数,输出是否是素数的信息。

实验步骤与要求:

(1)编写一个函数prime(n),返回给定整数n是否为素数。

(2)编写一个主函数,输入一个整数,调用

(1)中的函数,判断此整数是否为素数,并输出结果。

(3)对于属于多函数程序,可以采用每个函数分别进行编辑、编译的方法,然后再连接、运行。

如果编译有错时,可分别修改,这样便于调试。

实验2和实验3也可以使用这样的调试方法。

2.用梯形法求函数的定积分。

实验步骤与要求:

(1)编制一个函数sab(a,b,n),其功能是求函数f(x)在[a,b]上的定积分,其中n为区间[a,b]的等分数。

要求该函数在一个独立的文件中。

(2)编制一个主函数以及计算被积函数值的函数f(x),在主函数中调用

(1)中的函数计算并输出下列积分值。

要求主函数与函数f(x)在同一个文件中。

(3)编制另一个主函数以及计算被积函数值的函数f(x),在主函数中调用

(1)中的函数计算并输出下列积分值。

要求主函数与函数f(x)在同一个文件中。

说明:

用梯形法求定积分,梯形公式为

s=h[f(a)+f(b)]/2+hf(a+kh)其中,h=(b-a)/n

3.用递归方法编写程序,求n阶勒让德多项式的值,递归公式为

1(n=0)

pn(x)=x(n=1)

((2n-1)xpn-1(x)-(n-1)pn-2(x))/n(n>1)

实验步骤与要求:

(1)根据递归公式编制计算n阶勒让德多项式的递归函数p(n,x)。

(2)编制一个主函数,由键盘输入n,x,调用

(1)中的函数计算n阶勒让德多项式的值。

(3)输入(n,x)=(4,2)运行该程序。

然后自定义几组数据再运行该程序。

程序调试说明:

多模块的调试除了可以采用前面实验中采用的各种调试方法以外,还可以采用“回声打印”的调试方法。

当函数之间要传递的数据较多时,容易出错。

这时,在有关的输入数据之后加上输出语句,以便反映数据输入的情况。

在函数之间有数据传递后,再用输出语句把传递后的数据输出,这样可以找到数据的错误处,以便分析原因,

三、问题讨论

1.小结函数的定义及调用方法。

2.小结函数中形参和实参的结合规则。

3.编写和调试包

10、函数的定义及调用

一、 目的与要求

1、 掌握C语言函数定义及调用的规则。

2、 理解参数传递的过程。

3、 本实验可在学习了教材第4.1节后进行。

二、 实验内容与步骤

1、 上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。

main()

{

int,y;

printf(“%d\n”,sum(x+y));

intsum(a,b)

{

inta,b;

return(a+b);

}

}

2、 编写并调试一个求(n为整数)的递归函数,希望能在程序运行过程中动态地显示递归函数被调用的轨迹。

三、 分析讨论

1、 针对以上实验内容写出相应的参数传递过程并分析结果。

2、 讨论参数的传递的几种形式。

11、有关数组的程序设计

一、实验目的

掌握有关数组和字符串的程序设计方法。

二、实验内容和步骤

1已知一组数据如下:

6,3,42,23,35,71,98,67,56,38

编写程序,把它们按从小到大的次序排列起来。

程序如下:

/*EX3-1*/

#include

#defineN10

main()

{

inta[N]={6,3,42,23,35,71,98,67,56,38};

inti,j,t;

printf(“Thearraybeforesorted:

”);

for(i=0;i

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

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

{

for(j=i+1;j<10;j++)

{

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

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

}

for(i=0;i

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

returno;

}

2求矩阵:

123

A=

456

的转置矩阵,A矩阵的转置矩阵B是这样的矩阵,其元素bij=aji。

程序如下:

/*EX3-2*/

#include

main()

{

inta[2][3]={{1,2,3},{4,5,6}};

intb[3][2],i,j;

printf(“ArrayA:

\n”);

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

{

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

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

printf(“\n”);

}

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

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

b[j][i]=a[i][j];

printf(“ArrayB:

\n”);

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

{

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

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

printf(“\n”);

}

returno;

}

12、数组

一、目的和要求

1、掌握数组定义的规则。

2、掌握C语言数组的基本用法。

3、本实验可在学习教材第5.2节后进行。

二、实验内容与步骤

1、编写程序,测试下列数组的定义方式是否正确

(1)   main()

{

intn;

scanf(“%d”,&n);

inta[n];

……

}

(2)   main()

{

constintn=10;

inta[n];

}

(3)   #include

#defineM10

main()

{

inta[M];

}

(4)   main()

{

inta[2+2*4];

}

(5)   #include

#defineM2

#defineN8

main()

{inta[M+N];

}

通过这一实验,可以说明什么问题?

2、运行下面的C程序,根据运行结果,可以说明什么?

main()

{intnum[5]={1,2,3,4,5};

intii;

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

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

}

3、为一个起泡排序程序设计测试用例,并测试之。

4、1983年,在ACM图林奖颁奖大会上,杰出的计算机科学家,UNIX的鼻祖,C语言的创始人之一,图林大奖得主,KenThom

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1