《C语言程序设计A》实验教案

更新时间:2023-11-19 04:38:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

盐城师范学院备课稿纸

实验1: C语言程序初步

实验名称: C语言程序初步 实验类型: 验证型

一、实验目的

了解Turbo C集成开发环境。 熟悉C程序的实现过程和方法。

掌握编辑、编译、连接、运行程序的过程和方法。 了解常见的两种语法错误(Error/Warning)。

二、实验内容

了解Turbo C集成开发环境的功能,熟悉菜单、热键基本操作 启动、退出Turbo C集成开发环境。

了解F5/F6;F10,→、←、↑、↓功能键;Alt+高亮度键的效果和作用。

激活文件菜单(File)、编译菜单(Compile)、运行菜单(Run)、监视菜单(Break/Watch),查

看菜单选项。

在Turbo C下完成“源程序清单”中规定的程序题。

三、实验要求

实验中仔细观察本实验创建的目录、文件,回答实验小结和思考中的问题。

在Turbo C下完成“源程序清单”中规定的程序题。编辑、编译、运行程序并获得程序结果;如果程序有错,记录编译、连接遇到的提示错误。仔细思考出错原因,并更正之。 编制的程序必须保存在D:\\用户目录中。注:用户目录可以用学号或姓名拼音简写。

四、实验步骤、过程

启动操作系统,查找Turbo C集成开发环境安装位置(路径)。假如为:C:\\TC,查看目录中是否有tc.exe,此程序就是Turbo C集成开发环境的执行程序。记住您的系统Turbo C2.0的安装位置。

启动、退出Turbo C集成开发环境。

启动Turbo C集成开发环境。如:双击tc.exe文件图标。

1

盐城师范学院备课稿纸

退出Turbo C集成开发环境。File-Quit 退出Turbo C集成开发环境 再次启动Turbo C环境。(同前)

Turbo C环境中,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”-“Build all”编译、连接源程序。如果有语法错误,修改源程序后再次编译、连

接程序,直到没有语法错误,系统提示成功。

2

盐城师范学院备课稿纸

编译连接成功后用Windows资源管理器查看用户目录中是否产生了目标文件*.obj,可执行文件*.exe,观察其命名规则。

“Run”-“Run”运行程序,用Alt-F5切换到用户屏幕查看运行结果。对比结果是否与预期相

同。如果发现逻辑错误-结果与预期不同,修改源程序,重复(3)-(5)保存、编译、运行程序,直到程序获得正确结果。

注意:

必须顺序完成程序编辑、编译连接、运行的各个过程。没有正确编译成功的程序是不可

能运行的!

程序开发中经常用“File”-“Save”保存源程序以免意外导致源程序丢失。

按步骤5完成第2个程序题。注意:Error-致命错的程序不能产生目标程序、执行程序,必须修改程序,并重新编译,直到成功。

按步骤5完成第3个程序题。注意:Warning-警告错的程序可以产生目标程序、执行程序,试着运行一下。看看结果!^_^,还是修改吧,警告错一般也意味着程序有毛病,尽管这种程序可以强行编译连接为可执行程序,但结果一般都有问题。

五、源程序清单、测试数据、结果。 最简单的C程序。(要求文件名:1_1.c) main() {

printf(\}

3

盐城师范学院备课稿纸

一个具有致命语法错的程序。(要求文件名:1_2.c) main() { int i=9

printf(\}

一个具有警告语法错的程序。(要求文件名:1_3.c) main() {

int i=9,j,s;

s=i+j;

printf(\}

六、实验小结

F5/F6;F10,→、←、↑、↓功能键;Alt+高亮度键的效果和作用?

答:F10,→、←、↑、↓:F10激活Turbo C主菜单,光标键选择菜单之间;回车确认。

F5:编辑窗口或消息窗口最大/恢复; F6:切换编辑窗口/消息窗口。 Alt+高亮度键,直接激活主菜单项。

与C语言程序直接相关的几种文件及扩展名分别是什么?

答:C语言源程序、目标程序、可执行程序,其后缀分别为*.c,*.obj,*.exe。 C语言程序主要的实现过程?

答:分为编辑、编译、连接、运行四个阶段。其中,开发环境中,编辑完成后,可以直接启

动运行,但分解的阶段仍然是四个,前面阶段未完成,程序仍然不能运行。 C语言程序主要的错误? 答:程序错误分为:

语法错误:编译系统可以协助查找出来的语法上的错误。语法错还包括:致命错Error/和

警告错Warning。致命错必须修改!,警告错可以不修改,但常常暗示程序存在问题。 逻辑错误:运行结果与预期不符,与程序算法逻辑相关的错误。

4

盐城师范学院备课稿纸

实验2:顺序程序设计

实验名称: 输入与输出程序设计 实验类型: 验证性

一、实验目的

掌握:使用标准输入/输出函数进行常见数据类型的数据的输入/输出方法。 初步培养编制程序框图和源程序、准备测试数据以及实际调试程序的独立编程能力。

二、实验内容

在Turbo C下完成程序题:

根据商品原价和折扣率,计算商品的实际售价(结果精确到小数点后2位)

根据圆柱体的半径和高,计算圆周长、圆面积、圆柱体表面积、圆柱体体积(结果精确到小

数点后3位)

注:变量名可以自由选择,以易于理解为原则;数据由键盘输入。

三、实验要求

实验前编制程序框图、编写源程序、准备测试数据。

实验测试数据要求从键盘输入。应尽力追求程序的完美。比如要求输入数据,应当显示提示字符串,提示用户输入;输出时要求有文字说明。

在Turbo C下完成程序的编辑、编译、运行,获得程序结果。如果结果有误,应找出原因,并设法更正之。

编制的程序必须保存在D:\\用户目录中。注:用户目录可以用学号或姓名拼音简写。

四、实验步骤、过程 启动操作系统。

启动Turbo C集成开发环境。(方法与实验1相同)

完成2个程序题。(编辑、保存、编译连接、运行程序,步骤与实验1相同) 退出Turbo C集成开发环境,关机。

五、源程序清单、测试数据、结果。

根据商品原价和折扣率,计算商品的实际售价

5

盐城师范学院备课稿纸

程序流程图:

main() {

float price,discount,fee;

printf(\ scanf(\ fee=price*(1-discount/100); printf(\}

运行:

Input Price,Discount:100 10 Fee=90.00

注:下划线表示程序运行后用户输入的数据,表示回车,以后不再解释。

2、根据圆柱体的半径和高,计算圆周长、圆面积、圆柱体表面积、圆柱体体积 程序框图(略) void main() {

float r,h,pi=3.1415926; float c0,s0,s,v; printf(\scanf(\c0=2*pi*r; s0=pi*r*r;

s=2*pi*r*h+2*pi*r*r; v=pi*r*r*h;

printf(\

}

运行:

6

盐城师范学院备课稿纸

Input r,h(m):1,2 c0=6.283(m) s0=3.142(m2) s=18.850(m2) v=6.283(m3)

六、实验出现的问题、实验结果分析(参考) C语言变量先定义后使用,变量名大小写敏感。 scanf输入数据,变量应当使用取地址运算。

scanf函数格式字符串中的普通字符要原样输入,否则会发生错误。

七、实验小结

若scanf(\如何输入两个数据?

答:scanf函数格式字符串中非格式字符要求原样输入,printf函数格式字符串中非格式字符在输出时原样输出。由于格式字符串为\,即要求两个浮点数之间由?,?分隔,所以输入数据时必须输入?,?。例如:Input Price,Discount:100,10

7

盐城师范学院备课稿纸

实验3:选择结构程序设计

实验名称: 选择结构程序设计 实验类型: 验证性

一、实验目的

掌握关系、逻辑运算符及其表达式的正确使用。 掌握if语句和switch语句的使用。 了解Turbo C程序调试的基本方法。

二、实验内容

在Turbo C下完成程序题:

有如下函数,要求输入x的值,求y的值。 |X|,X<0 Y= X2,0≤X<10 LogX,X≥10

输入1-7之间的任意数字,程序按照用户的输入输出相应的星期值。

某单位马上要加工资,增加金额取决于工龄和现工资两个因素:对于工龄大于等于20年的,

如果现工资高于2000,加200元,否则加180元;对于工龄小于20年的,如果现工资高于1500,加150元,否则加120元。工龄和现工资从键盘输入,编程求加工资后的员工工资。

三、实验要求

实验前绘制程序流程图,编制源程序、准备测试数据。 在Turbo C下完成程序的编辑、编译、运行,获得程序结果。

实验中可以采用Turbo C程序调试基本方法协助查找程序中的逻辑问题。

四、实验步骤、过程

编辑、编译、运行程序题1,分别使用数据-5,0,5,10,100做测试。 编辑、编译、运行程序题2,分别使用数据1,7,8做测试。 编辑、编译、运行程序题3,测试数据见下表:

8

盐城师范学院备课稿纸

工龄y(年) 25 22 18 16

尝试跟踪程序题1运行。用F7或F8键单步跟踪程序,用^F7检查变量值,用F4可以将程序运行到光标当前位置。

五、源程序清单、测试数据、结果。

给定y=f(x)函数,要求输入x的值,求y的值。 #include main() {

float x,y;

scanf(\

if(x<0) y=fabs(x); else if(x<10) y=x*x; else y=log10(x);

printf(\}

测试运行: -5 5.000000 0 0.000000 5 25.000000 10 1.000000 100 2.000000

2、输入1-7之间的任意数字,程序按照用户的输入输出相应的星期值。 main()

9

现工资S0(元) 2200 1900 1700 1400 盐城师范学院备课稿纸

{

int week;

printf(\ scanf(\

switch(week)

{

case 1:printf(\ break; case 2:printf(\ break; case 3:printf(\ break; case 4:printf(\ break; case 5:printf(\ break; case 6:printf(\ break; case 7:printf(\ break;

default:printf(\ } }

测试运行: Input(1-7):1 Mon.

Input(1-7):5 Fri.

Input(1-7):8 The input is wrong!

3、工资计算。 main() {

float s0,s; int y;

printf(\ scanf(\

if(y>=20)

{

if(s0>=2000)s=s0+200; else s=s0+180; } else

{

if(s0>=1500)s=s0+150;

10

盐城师范学院备课稿纸

else s=s0+120; }

printf(\}

测试运行:

Input s0,y:2200,25 s=2400.000000

Input s0,y:1900,22 s=2080.000000

Input s0,y:1700,18 s=1850.000000

Input s0,y:1400,16 s=1520.000000

六、实验出现的问题、实验结果分析(不要照抄哦,^_^)

求绝对值对于浮点数要使用函数fabs。使用abs是对整数取绝对值。 以10为底的对数,应当使用函数log10。

0≤X<10不能表示为0<=x<10,否则尽管无语法错误,但是含义不正确。

case语句与常量之间应当有空格,否则当做语句标号处理。如case1:。(使用单步跟踪发现)。

七、实验小结

程序错误分为语法错误和逻辑错误。语法错误可以由编译器协助检查,逻辑错误编译器无法检查出来。程序逻辑错误比语法错误更加隐蔽,程序跟踪可用于发现程序逻辑错误。 调用库函数应当包含对应头文件,帮助进行类型匹配检查和类型转化,保证函数调用使用正确参数。

11

盐城师范学院备课稿纸

实验4:循环结构程序设计

实验名称: 循环结构程序设计 实验类型: 验证型

一、实验目的

掌握while,do-while,for循环的语法结构与应用。 掌握while,do-while循环的区别。 掌握Turbo C单步执行调试程序的方法。

二、实验内容 完成程序题:

用三种循环结构,求1000以内奇数的和。

用while,do-while循环求i-10的连加和,i由用户输入。

有一堆零件(100-200个之间),如果以4个零件为一组进行分组,则多2个零件;如果以7个零件为一组进行分组,则多3个零件;如果以9个零件为一组进行分组,则多5个零件。编程求解这堆零件总数。

提示:用穷举法求解。即零件总数x从100-200循环试探,如果满足所有几个分组已知条件,那么此时的x就是一个解。分组后多几个零件这种条件可以用求余运算获得条件表达式。

三、实验要求

实验前编制源程序、对第2个实验内容需要准备测试数据。

在Turbo C下完成程序的编辑、编译、运行。查看、分析程序结果。

四、实验步骤、过程 编辑、编译、运行程序题1。

编辑、编译、运行程序题2,分别使用数据3,15做测试。 编辑、编译、运行程序题3。

五、源程序清单、测试数据、结果。

12

盐城师范学院备课稿纸

用三种循环结构,求1000以内奇数的和。 (1)用while结构实现 void main() {

long sum; int i,item;

sum=0,i=0,item=2*i+1; while(item<1000) {

sum=sum+item; i++;

item=2*i+1; }

printf(\}

(2)用do-while结构实现 void main() {

long sum; int i,item;

sum=0,i=0,item=2*i+1; do {

sum=sum+item; i++;

item=2*i+1;

}while(item<1000);

printf(\}

(3)用for结构实现 void main()

{

long sum; int i,item;

for(sum=0,i=0,item=2*i+1; item<1000; sum=sum+item;

printf(\}

运行结果:

1+3+5+...999=250000

i++,item=2*i+1) 13

盐城师范学院备课稿纸

2、用while,do-while循环求i-10的连加和,i由用户输入。 (1)用while循环实现 main() {

int sum=0,i;

printf(\ while(i<=10) {

sum+=i; i++; }

printf(\}

测试运行结果: Input i:7 sum=34 Input i:15 sum=0

(2)用do-while循环实现 main() {

int sum=0,i;

printf(\ do {

sum+=i;

i++;

}while(i<=10);

printf(\}

测试运行结果: Input i:7 sum=34

Input i:15 sum=15

3、穷举法搜索计算零件总数 main() {

int x,flag=0;

14

盐城师范学院备课稿纸

for(x=100; x<=200; x++)

if(x%4==2&&x%7==3&&x%9==5) {

flag=1; break; }

if(flag)printf(\ else printf(\}

运行结果: x=122

六、实验出现的问题、实验结果分析

对于累加问题,获得的累加值可能超过变量允许的范围,出现溢出错误(逻辑错误-编译时不能发现)。程序题1:原来sum定义为int,后来改为long后程序获得了正确的结果。

七、实验小结

变量类型的选择应当考虑变量的使用范围。

循环程序可以用三种结构实现,三种结构一般情况可以相互替换。

while,do-while循环的区别:while先判断循环条件,如果条件满足再执行循环体,如果条件不满足,循环体一次也不执行。do-while先执行一次循环体再判断循环条件,以决定是否再次执行循环体,即就是说循环体至少执行一次。

穷举法是利用计算机高速计算能力试探搜索求解复杂问题的一种很好的方法。

15

盐城师范学院备课稿纸

实验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输入测试数据。

在Turbo C下完成程序的编辑、编译、运行。查看、分析程序结果。

四、实验步骤、过程 编辑、编译、运行程序题1。 编辑、编译、运行程序题2。

编辑、编译、运行程序题3。测试数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

16

盐城师范学院备课稿纸

五、源程序清单、测试数据、结果。 1、求Fibonachi数列的前10项 main() {

int f[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(\ printf(\}

程序结果:

1 1 2 3 5 8 13 21 34 55

2、找出1-100之间能被7或11整除的所有整数 main() {

int n=0,a[100],i;

for(i=1; i<=100; i++) {

if(i%7==0||i==0) {

a[n]=i; n++; } }

printf(\ for(i=0; i

printf(\

if((i+1)%5==0)printf(\ }

printf(\}

程序结果: n=22

17

盐城师范学院备课稿纸

7 11 14 21 22 28 33 35 42 44 49 55 56 63 66 70 77 84 88 91 98 99

3、方阵求出(1)主对角线上元素之和;(2)辅对角线上元素之积;(3)方阵中最大的元素。

#include #define N 4 main() {

int a[N][N],s1=0,s2=1,max=0,i,j;

for(i=0; i

max=a[0][0]; for(i=0; i

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(\}

程序结果:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 s1=34,s2=3640,max=16

六、实验出现的问题、实验结果分析

数组下标范围容易搞错,容易产生越界错误。 利用 scanf()输入数据时取地址符号(&)容易忘记。

七、实验小结

典型算法需要在理解的基础上记忆。

18

盐城师范学院备课稿纸

实验8:字符数组与字符串函数

实验名称: 字符数组与字符串函数 实验类型: 验证型

一、实验目的

掌握字符数组的定义、初始、数组元素引用、输入输出。 掌握字符数组的处理 掌握常用字符串处理函数

二、实验内容

编制程序:对键盘输入的字符串进行逆序,逆序后的字符串仍然保留在原来字符数组中,最

后输出。(不得调用任何字符串处理函数,包括strlen) 例如:输入hello world 输出dlrow olleh

编写程序:对从键盘任意输入的字符串,将其中所有的大写字母改为小写字母,而所有小写

字母改为大写字母,其它字符不变。(不调用任何字符串处理函数) 例如:输入:Hello World!输出:hELLO wORLD!

编写程序:从键盘输入4个字符串(长度<20),存入二维字符数组中。然后对它们进行排

序(假设由小到大顺序),最后输出排序后的4个字符串。(允许使用字符串函数) 提示:字符串比较可以用strcmp函数实现,排序方法可以选择法或冒泡法。

三、实验要求

绘制流程图、编制源程序,测试数据。

1-2题不得使用任何字符串处理函数,3题允许使用字符串处理函数。 在Turbo C下完成程序的编辑、编译、运行。查看、分析程序结果。

四、实验步骤、过程

编辑、编译、运行程序题1,使用数据:hello world做测试。 编辑、编译、运行程序题2,使用数据:Hello World做测试。 编

3

使

SpanishChinaAmericaJapan做测试。

19

盐城师范学院备课稿纸

五、源程序清单、测试数据、结果。 1、字符串进行逆序 main() {

char str[100]; int n,i,j;

gets(str);

n=0;

while(str[n])n++;

for(i=0,j=n-1; i

char k=str[i]; str[i]=str[j]; str[j]=k; }

puts(str); }

测试运行结果: hello world dlrow olleh

2、大写变小写,小写变大写 #include main() {

char s[100]; int i;

gets(s);

for(i=0; s[i]!='\\0'; i++) {

if(s[i]>='A'&&s[i]<='Z')s[i]+=32; else if(s[i]>='a'&&s[i]<='z')s[i]-=32; }

puts(s); }

20

盐城师范学院备课稿纸

文件大小

Debug查看test.bin文件。

Debug子命令:

f-将内存区域用一个数字填充 d-查看内存

n-命名要查看的文件 l-装入要查看的文件 q-退出Debug。

36

盐城师范学院备课稿纸

思考:FF7F是什么?41又是什么?

FF7F是整数32767的补码表示(机内表示,16进制),其中低位在前,高位在后;41是字符?A?的ASCII码(机内表示,16进制)

将程序2中32767修改为10,?A?修改为?B?,思考:产生的文件test.bin的大小会改变吗?

这时test.bin文件中的内容又是什么?(可以再用Debug试一下!)

思考:如果采用文本文件,用fprintf输出两个数据,文件大小怎样确定?对于32767,10

文件大小一样吗?(改一下程序,试一下!)

五、源程序清单、测试数据、结果。 学生信息保存、读取、处理 #include

/*强制使用协处理器*/

static void forcefloat(float *p) {

float f = *p; forcefloat(&f); }

struct student { char no[20],name[20]; float score;

};

void main() { struct student *p,s; int n,i; FILE *fp;

printf(\

p=(struct student*)malloc(sizeof(struct student)*n); printf(\ for(i=0; i

}

37

盐城师范学院备课稿纸

fp=fopen(\

fwrite(p,sizeof(struct student)*n,1,fp); fclose(fp); free(p);

puts(\

puts(\ fp=fopen(\

fread(&s,sizeof(struct student),1,fp); while(!feof(fp)) { if(s.score>=80)printf(\

fread(&s,sizeof(struct student),1,fp); }

fclose(fp); }

测试运行:

n:4 input student info:num name score 101 wang 79 102 zhang 80 103 li 89 104 zhao 90 info sved... student good:

102 zhang 80.000000 103 li 89.000000 104 zhao 90.000000

写一个包含一个整数、一个字符的二进制文件\#include void main() { FILE *fp; int i=32767; char ch='A';

fp=fopen(\ fwrite(&i,sizeof(int),1,fp); fwrite(&ch,sizeof(char),1,fp); fclose(fp);

}

38

本文来源:https://www.bwwdw.com/article/29xv.html

Top