《C语言程序设计A》实验教案.docx
《《C语言程序设计A》实验教案.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计A》实验教案.docx(46页珍藏版)》请在冰点文库上搜索。
《C语言程序设计A》实验教案
实验1:
C语言程序初步
实验名称:
C语言程序初步实验类型:
验证型
一、实验目的
了解TurboC集成开发环境。
熟悉C程序的实现过程和方法。
掌握编辑、编译、连接、运行程序的过程和方法。
了解常见的两种语法错误(Error/Warning)。
二、实验内容
了解TurboC集成开发环境的功能,熟悉菜单、热键基本操作
启动、退出TurboC集成开发环境。
了解F5/F6;F10,→、←、↑、↓功能键;Alt+高亮度键的效果和作用。
激活文件菜单(File)、编译菜单(Compile)、运行菜单(Run)、监视菜单(Break/Watch),查看菜单选项。
在TurboC下完成“源程序清单”中规定的程序题。
三、实验要求
实验中仔细观察本实验创建的目录、文件,回答实验小结和思考中的问题。
在TurboC下完成“源程序清单”中规定的程序题。
编辑、编译、运行程序并获得程序结果;如果程序有错,记录编译、连接遇到的提示错误。
仔细思考出错原因,并更正之。
编制的程序必须保存在D:
\用户目录中。
注:
用户目录可以用学号或姓名拼音简写。
四、实验步骤、过程
启动操作系统,查找TurboC集成开发环境安装位置(路径)。
假如为:
C:
\TC,查看目录中是否有tc.exe,此程序就是TurboC集成开发环境的执行程序。
记住您的系统TurboC2.0的安装位置。
启动、退出TurboC集成开发环境。
启动TurboC集成开发环境。
如:
双击tc.exe文件图标。
退出TurboC集成开发环境。
File-Quit退出TurboC集成开发环境
再次启动TurboC环境。
(同前)
TurboC环境中,F5/F6;F10,→、←、↑、↓功能键;Alt+高亮度键的效果和作用。
重复按F6键,仔细观察。
当前激活窗口在编辑窗口、消息窗口之间切换。
重复按F5键,仔细观察。
当前激活窗口最大,正常状态之间切换。
先按F10,可以看到主菜单被激活,按→、←,主菜单各个项被依次激活,试着按↑、↓可以打开相应菜单。
重点浏览File(文件管理)、Run(程序运行控制)、Compile菜单(程序编译、连接)菜单。
最后按ESC键光标回到编辑窗口。
主菜单各个项,首字母为红色(高亮度)。
可以按Alt+高亮字母,直接激活相应菜单选项。
例如按Alt+F激活File菜单,比F10再按光标快捷多了!
按ESC键光标回到编辑窗口。
观察当前源程序名NONAME.C表示当前的程序还没有取名字,以后保存程序时,系统会提示输入源程序名。
按照下面步骤完成第1个程序题。
“File”-“New”创建一个新的源程序文件
输入源程序,全屏幕编辑源程序。
“File”-“Save”保存源程序(文件名应按题目要求)。
观察编辑窗口源程序名是否已经修改。
用Windows资源管理器查看用户目录中是否产生了源程序文件*.c。
“Compile”-“Buildall”编译、连接源程序。
如果有语法错误,修改源程序后再次编译、连接程序,直到没有语法错误,系统提示成功。
编译连接成功后用Windows资源管理器查看用户目录中是否产生了目标文件*.obj,可执行文件*.exe,观察其命名规则。
“Run”-“Run”运行程序,用Alt-F5切换到用户屏幕查看运行结果。
对比结果是否与预期相同。
如果发现逻辑错误-结果与预期不同,修改源程序,重复(3)-(5)保存、编译、运行程序,直到程序获得正确结果。
注意:
必须顺序完成程序编辑、编译连接、运行的各个过程。
没有正确编译成功的程序是不可能运行的!
程序开发中经常用“File”-“Save”保存源程序以免意外导致源程序丢失。
按步骤5完成第2个程序题。
注意:
Error-致命错的程序不能产生目标程序、执行程序,必须修改程序,并重新编译,直到成功。
按步骤5完成第3个程序题。
注意:
Warning-警告错的程序可以产生目标程序、执行程序,试着运行一下。
看看结果!
^_^,还是修改吧,警告错一般也意味着程序有毛病,尽管这种程序可以强行编译连接为可执行程序,但结果一般都有问题。
五、源程序清单、测试数据、结果。
最简单的C程序。
(要求文件名:
1_1.c)
main()
{
printf("Helloworld!
\n");
}
一个具有致命语法错的程序。
(要求文件名:
1_2.c)
main()
{
inti=9
printf("i=%d\n",i)
}
一个具有警告语法错的程序。
(要求文件名:
1_3.c)
main()
{
inti=9,j,s;
s=i+j;
printf("s=%d\n",s);
}
六、实验小结
F5/F6;F10,→、←、↑、↓功能键;Alt+高亮度键的效果和作用?
答:
F10,→、←、↑、↓:
F10激活TurboC主菜单,光标键选择菜单之间;回车确认。
F5:
编辑窗口或消息窗口最大/恢复;
F6:
切换编辑窗口/消息窗口。
Alt+高亮度键,直接激活主菜单项。
与C语言程序直接相关的几种文件及扩展名分别是什么?
答:
C语言源程序、目标程序、可执行程序,其后缀分别为*.c,*.obj,*.exe。
C语言程序主要的实现过程?
答:
分为编辑、编译、连接、运行四个阶段。
其中,开发环境中,编辑完成后,可以直接启动运行,但分解的阶段仍然是四个,前面阶段未完成,程序仍然不能运行。
C语言程序主要的错误?
答:
程序错误分为:
语法错误:
编译系统可以协助查找出来的语法上的错误。
语法错还包括:
致命错Error/和警告错Warning。
致命错必须修改!
,警告错可以不修改,但常常暗示程序存在问题。
逻辑错误:
运行结果与预期不符,与程序算法逻辑相关的错误。
实验2:
顺序程序设计
实验名称:
输入与输出程序设计实验类型:
验证性
一、实验目的
掌握:
使用标准输入/输出函数进行常见数据类型的数据的输入/输出方法。
初步培养编制程序框图和源程序、准备测试数据以及实际调试程序的独立编程能力。
二、实验内容
在TurboC下完成程序题:
根据商品原价和折扣率,计算商品的实际售价(结果精确到小数点后2位)
根据圆柱体的半径和高,计算圆周长、圆面积、圆柱体表面积、圆柱体体积(结果精确到小数点后3位)
注:
变量名可以自由选择,以易于理解为原则;数据由键盘输入。
三、实验要求
实验前编制程序框图、编写源程序、准备测试数据。
实验测试数据要求从键盘输入。
应尽力追求程序的完美。
比如要求输入数据,应当显示提示字符串,提示用户输入;输出时要求有文字说明。
在TurboC下完成程序的编辑、编译、运行,获得程序结果。
如果结果有误,应找出原因,并设法更正之。
编制的程序必须保存在D:
\用户目录中。
注:
用户目录可以用学号或姓名拼音简写。
四、实验步骤、过程
启动操作系统。
启动TurboC集成开发环境。
(方法与实验1相同)
完成2个程序题。
(编辑、保存、编译连接、运行程序,步骤与实验1相同)
退出TurboC集成开发环境,关机。
五、源程序清单、测试数据、结果。
根据商品原价和折扣率,计算商品的实际售价
程序流程图:
main()
{
floatprice,discount,fee;
printf("InputPrice,Discount:
");scanf("%f%f",&price,&discount);
fee=price*(1-discount/100);
printf("Fee=%.2f\n",fee);
}
运行:
InputPrice,Discount:
10010
Fee=90.00
注:
下划线表示程序运行后用户输入的数据,表示回车,以后不再解释。
2、根据圆柱体的半径和高,计算圆周长、圆面积、圆柱体表面积、圆柱体体积
程序框图(略)
voidmain()
{
floatr,h,pi=3.1415926;
floatc0,s0,s,v;
printf("Inputr,h(m):
");
scanf("%f,%f",&r,&h);
c0=2*pi*r;
s0=pi*r*r;
s=2*pi*r*h+2*pi*r*r;
v=pi*r*r*h;
printf("c0=%.3f(m)\ns0=%.3f(m2)\ns=%.3f(m2)\nv=%.3f(m3)\n",c0,s0,s,v);
}
运行:
Inputr,h(m):
1,2
c0=6.283(m)
s0=3.142(m2)
s=18.850(m2)
v=6.283(m3)
六、实验出现的问题、实验结果分析(参考)
C语言变量先定义后使用,变量名大小写敏感。
scanf输入数据,变量应当使用取地址运算。
scanf函数格式字符串中的普通字符要原样输入,否则会发生错误。
七、实验小结
若scanf("%f,%f",&price,&discount);如何输入两个数据?
答:
scanf函数格式字符串中非格式字符要求原样输入,printf函数格式字符串中非格式字符在输出时原样输出。
由于格式字符串为"%f,%f",即要求两个浮点数之间由‘,’分隔,所以输入数据时必须输入‘,’。
例如:
InputPrice,Discount:
100,10
实验3:
选择结构程序设计
实验名称:
选择结构程序设计实验类型:
验证性
一、实验目的
掌握关系、逻辑运算符及其表达式的正确使用。
掌握if语句和switch语句的使用。
了解TurboC程序调试的基本方法。
二、实验内容
在TurboC下完成程序题:
有如下函数,要求输入x的值,求y的值。
|X|,X<0
Y=X2,0≤X<10
LogX,X≥10
输入1-7之间的任意数字,程序按照用户的输入输出相应的星期值。
某单位马上要加工资,增加金额取决于工龄和现工资两个因素:
对于工龄大于等于20年的,如果现工资高于2000,加200元,否则加180元;对于工龄小于20年的,如果现工资高于1500,加150元,否则加120元。
工龄和现工资从键盘输入,编程求加工资后的员工工资。
三、实验要求
实验前绘制程序流程图,编制源程序、准备测试数据。
在TurboC下完成程序的编辑、编译、运行,获得程序结果。
实验中可以采用TurboC程序调试基本方法协助查找程序中的逻辑问题。
四、实验步骤、过程
编辑、编译、运行程序题1,分别使用数据-5,0,5,10,100做测试。
编辑、编译、运行程序题2,分别使用数据1,7,8做测试。
编辑、编译、运行程序题3,测试数据见下表:
工龄y(年)
现工资S0(元)
25
2200
22
1900
18
1700
16
1400
尝试跟踪程序题1运行。
用F7或F8键单步跟踪程序,用^F7检查变量值,用F4可以将程序运行到光标当前位置。
五、源程序清单、测试数据、结果。
给定y=f(x)函数,要求输入x的值,求y的值。
#include
main()
{
floatx,y;
scanf("%f",&x);
if(x<0)y=fabs(x);
elseif(x<10)y=x*x;
elsey=log10(x);
printf("%f\n",y);
}
测试运行:
-5
5.000000
0
0.000000
5
25.000000
10
1.000000
100
2.000000
2、输入1-7之间的任意数字,程序按照用户的输入输出相应的星期值。
main()
{
intweek;
printf("Input(1-7):
");
scanf("%d",&week);
switch(week)
{
case1:
printf("Mon.\n");break;
case2:
printf("Tue.\n");break;
case3:
printf("Wed.\n");break;
case4:
printf("Tur.\n");break;
case5:
printf("Fri.\n");break;
case6:
printf("Sat.\n");break;
case7:
printf("Sun.\n");break;
default:
printf("Theinputiswrong!
\n");
}
}
测试运行:
Input(1-7):
1
Mon.
Input(1-7):
5
Fri.
Input(1-7):
8
Theinputiswrong!
3、工资计算。
main()
{
floats0,s;
inty;
printf("Inputs0,y:
");
scanf("%f,%d",&s0,&y);
if(y>=20)
{
if(s0>=2000)s=s0+200;
elses=s0+180;
}
else
{
if(s0>=1500)s=s0+150;
elses=s0+120;
}
printf("s=%f\n",s);
}
测试运行:
Inputs0,y:
2200,25
s=2400.000000
Inputs0,y:
1900,22
s=2080.000000
Inputs0,y:
1700,18
s=1850.000000
Inputs0,y:
1400,16
s=1520.000000
六、实验出现的问题、实验结果分析(不要照抄哦,^_^)
求绝对值对于浮点数要使用函数fabs。
使用abs是对整数取绝对值。
以10为底的对数,应当使用函数log10。
0≤X<10不能表示为0<=x<10,否则尽管无语法错误,但是含义不正确。
case语句与常量之间应当有空格,否则当做语句标号处理。
如case1:
。
(使用单步跟踪发现)。
七、实验小结
程序错误分为语法错误和逻辑错误。
语法错误可以由编译器协助检查,逻辑错误编译器无法检查出来。
程序逻辑错误比语法错误更加隐蔽,程序跟踪可用于发现程序逻辑错误。
调用库函数应当包含对应头文件,帮助进行类型匹配检查和类型转化,保证函数调用使用正确参数。
实验4:
循环结构程序设计
实验名称:
循环结构程序设计实验类型:
验证型
一、实验目的
掌握while,do-while,for循环的语法结构与应用。
掌握while,do-while循环的区别。
掌握TurboC单步执行调试程序的方法。
二、实验内容
完成程序题:
用三种循环结构,求1000以内奇数的和。
用while,do-while循环求i-10的连加和,i由用户输入。
有一堆零件(100-200个之间),如果以4个零件为一组进行分组,则多2个零件;如果以7个零件为一组进行分组,则多3个零件;如果以9个零件为一组进行分组,则多5个零件。
编程求解这堆零件总数。
提示:
用穷举法求解。
即零件总数x从100-200循环试探,如果满足所有几个分组已知条件,那么此时的x就是一个解。
分组后多几个零件这种条件可以用求余运算获得条件表达式。
三、实验要求
实验前编制源程序、对第2个实验内容需要准备测试数据。
在TurboC下完成程序的编辑、编译、运行。
查看、分析程序结果。
四、实验步骤、过程
编辑、编译、运行程序题1。
编辑、编译、运行程序题2,分别使用数据3,15做测试。
编辑、编译、运行程序题3。
五、源程序清单、测试数据、结果。
用三种循环结构,求1000以内奇数的和。
(1)用while结构实现
voidmain()
{
longsum;
inti,item;
sum=0,i=0,item=2*i+1;
while(item<1000)
{
sum=sum+item;
i++;
item=2*i+1;
}
printf("1+3+5+...999=%ld\n",sum);
}
(2)用do-while结构实现
voidmain()
{
longsum;
inti,item;
sum=0,i=0,item=2*i+1;
do
{
sum=sum+item;
i++;
item=2*i+1;
}while(item<1000);
printf("1+3+5+...999=%ld\n",sum);
}
(3)用for结构实现
voidmain()
{
longsum;
inti,item;
for(sum=0,i=0,item=2*i+1;item<1000;i++,item=2*i+1)
sum=sum+item;
printf("1+3+5+...999=%ld\n",sum);
}
运行结果:
1+3+5+...999=250000
2、用while,do-while循环求i-10的连加和,i由用户输入。
(1)用while循环实现
main()
{
intsum=0,i;
printf("Inputi:
");scanf("%d",&i);
while(i<=10)
{
sum+=i;
i++;
}
printf("sum=%d\n",sum);
}
测试运行结果:
Inputi:
7
sum=34
Inputi:
15
sum=0
(2)用do-while循环实现
main()
{
intsum=0,i;
printf("Inputi:
");scanf("%d",&i);
do
{
sum+=i;
i++;
}while(i<=10);
printf("sum=%d\n",sum);
}
测试运行结果:
Inputi:
7
sum=34
Inputi:
15
sum=15
3、穷举法搜索计算零件总数
main()
{
intx,flag=0;
for(x=100;x<=200;x++)
if(x%4==2&&x%7==3&&x%9==5)
{
flag=1;
break;
}
if(flag)printf("x=%d\n",x);
elseprintf("noanswer!
\n");
}
运行结果:
x=122
六、实验出现的问题、实验结果分析
对于累加问题,获得的累加值可能超过变量允许的范围,出现溢出错误(逻辑错误-编译时不能发现)。
程序题1:
原来sum定义为int,后来改为long后程序获得了正确的结果。
七、实验小结
变量类型的选择应当考虑变量的使用范围。
循环程序可以用三种结构实现,三种结构一般情况可以相互替换。
while,do-while循环的区别:
while先判断循环条件,如果条件满足再执行循环体,如果条件不满足,循环体一次也不执行。
do-while先执行一次循环体再判断循环条件,以决定是否再次执行循环体,即就是说循环体至少执行一次。
穷举法是利用计算机高速计算能力试探搜索求解复杂问题的一种很好的方法。
实验5:
数组程序设计
实验名称:
数组程序设计实验类型:
验证型
一、实验目的
掌握一维数组和二维数组的定义、初始、数组元素引用。
掌握一维数组和二维数组的输入/输出。
掌握与数组有关的算法。
二、实验内容
编制程序,求Fibonachi数列的前10项。
提示:
Fibonachi的第1,2项分别为1,1。
其后任何一项满足ai=ai-2+ai-1。
编写找出1-100之间能被7或11整除的所有整数,存放在数组a中,并统计其个数。
要求以每行排列5个数据的形式输出a数组中的数据。
设有4╳4的方阵,其中的元素由键盘输入。
求出
(1)主对角线上元素之和;
(2)辅对角线上元素之积;(3)方阵中最大的元素。
提示:
主对角线元素行、列下标相同;辅对角线元素行、列下标之和等于方阵的最大行号(或最大列号)-下标、行列号基于0。
三、实验要求
编制源程序,对于程序3输入测试数据。
在TurboC下完成程序的编辑、编译、运行。
查看、分析程序结果。
四、实验步骤、过程
编辑、编译、运行程序题1。
编辑、编译、运行程序题2。
编辑、编译、运行程序题3。
测试数据:
1234
5678
9101112
13141516
五、源程序清单、测试数据、结果。
1、求Fibonachi数列的前10项
main()
{
intf[11]={0,1,1},n;
for(n=3;n<=10;n++)
f[n]=f[n-1]+f[n-2];
for(n=1;n<=10;n++)
printf("%d",f[n]);
printf("\n");
}
程序结果:
11235813213455
2、找出1-100之间能被7或11整除的所有整数
main()
{
intn=0,a[100],i;
for(i=1;i<=100;i++)
{
if(i%7==0||i%11==0)
{
a[n]=i;
n++;
}
}
printf("n=%d\n",n);
for(i=0;i{
printf("%d\t",a[i]);
if((i+1)%5==0)printf("\n");
}
printf("\n");
}
程序结果:
n=22
711142122
2833354244
4955566366
7077848891
9899
3、方阵求出
(1)主对角线上元素之和;
(2)辅对角线上元素之积;(3)方阵中最大的元素。
#include
#defineN4
main()
{
inta[N][N],s1=0,s2=1,max=0,i,j;
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
max=a[0][0];
for(i=0;ifor(j=0;j{
if(i==j)s1+=a[i][j];
if(i+j==N-1)s2*=a[i][j];
if(a[i][j]>max)max=a[i][j];
}
printf("s1=%d,s2=%d,max=%d\n",s1,s2,max);
}
程序结果:
1234
5678
9101112
13141516
s1=34,s2=3640,max=16
六、实验出现的问题、实验结果分析
数组下标范围容易搞错,容易产生越界错误。
利用 scanf()输入数据时取地址符号(&)容易忘记。
七、实验小结
典型算法需要在理解的基础上记忆。
实验8:
字符数组与字符串函数
实验名称:
字符数组与字符串函数实验类