您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页C语言程序设计》实验指导书

C语言程序设计》实验指导书

来源:尚车旅游网


《计算机基础与程序设计》实验指导书

实验教学目标:本课程实验教学的目标在于使学生能够掌握算法的基本概念,并根据算法编制程序,掌握调试程序的基本技巧,初步了解软件开发所要经历的阶段,为学生从事计算机软件开发和数据处理工作打下坚实的基础。

实验教学要求:要求掌握数据类型的定义和使用;三种结构的程序设计;数组;函数;指针;结构体与共用体;文件操作等。

实验(一)C语言的编程环境(TURBOC 2.O)

一、目的和要求

1、 熟悉C语言运行环境。

2、 掌握C语言程序的书写格式和C语言程序的结构。

3、 掌握C语言上机步骤,了解运行一个C程序的方法。

4、 本实验可在学习完教材第一章后进行。

二、实验内容

1. 启动Turbo C

如果用户计算机系统已经安装了Turbo C编译系统,则在DOS命令状态下键入命令tc。

1

进入Turbo C集成环境后,首先在屏幕上显示Turbo C主菜单窗口,如下图所示。

可以看出,在该窗口,有8个菜单条目。每一个菜单的意义如下:

File 处理文件(包括装入、存盘、选择、建立、换名写盘),目录操作(包括列表、改变工作目录),退出系统及调用DOS 。

Edit 建立、编辑源文件。

Run 控制运行程序。如果程序已经编译连接好,且Debug/Source Debugging以及Option/Compiler/Code generation/OBJ Debug Information开关置为On,则可以用此菜单初始化调试阶段。

Compile 编译并生成目标程序与可执行文件。

Project 允许说明程序中包含哪些文件的管理条目。

Options 可以选择集成环境任选项(如存储模式、编译时的任选项、诊断及连接任选项)及定义宏;也可以记录Include Output及Library文件目录,保存编译任选项和从配置文件加载任选。

Debug 检查、改变变量的值,查找函数,程序运行时查看调用栈。选择程序编译时是否在执行行代码中插入调试信息。

Break/Watch 增加、删除、编辑监视表达式,及设置、清除、执行至断点。

2

特别要指出的是,除了Edit项外,每一个菜单又有对应的子菜单。而选择Edit项目后,只是进入编辑器。

为了从主菜单中选择所需要的功能,可以用以下两种方式之一:

(1)按F10键后,可以看到屏幕上部主菜单中有反白显示,此时,利用左、右光标移动键(←与→)选择需要的菜单,然后按回车(Enter)键。

(2)直接按Alt+主菜单条目中的首字母(分别为F,E,R,C,P,O,D,B),此时就会出现相应的子菜单。例如,按Alt+F表示选择文件子菜单(File)。

当出现子菜单时,其中某个条目是高亮度的,此时可以利用上、下光标移动键(↑与↓)来移动该高亮度线,从而选择所需要的功能。在菜单调用时,按Esc键后将直接返回到活动窗口。

2、有下面的C程序,目的是想计算由键盘输入的任意两个整数的积。

/********exl.c********/

#include (stdio.h);

main()

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

p=x+t

3

printf(“The product is :”,p)

请调试上述程序。

3、编写一程序从键盘任意输入2个整数,输入最大值。

三、实验步骤

1、静态地检查上述第2个程序,改正程序中的错误。

2、在编辑状态下照原样键入上述第2个程序。

3、编译并运行上述第2个程序,记下所给出的出错信息。

4、按照事先静态检查后所改正的情况,进行纠错。

5、再编译执行纠错后的程序。如还有错误,再编辑改正,直到不出现语法错误为止。6、下面给出6组测试用例,你认为哪几组较好?为什么?

(1)0,00

(2)0,99

(3)20,50

4

(4)33000,20

(5)-5,-2

(6)-5,2

要测试出上述程序中所有错误,你认为应当用几组测试用例?

四、分析与讨论

1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因。

2、总结C程序的结构和书写规则。

实验(二)数据类型、运算符和表达式

一、目的和要求

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

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

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

二、实验内容和步骤

5

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

#include

main()

{

int x,y,a;

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

a=(x+y)/2;

printf(“The average is :”a);

}

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

(2)1, 3

(3)-2,-6

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用以测试一个数据或类型所占用的存储空间的字节数。请编写一个程序,测试各基本数据类型所占用的存储空间大小。

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

i , j

i + 1,j + 1

7

i + + ,j + +

+ + i, + + j

i + + + + + j

+ + i + + + + + j + +

要求在各表达式中i 和j都分别有相同的初值。在实验中注意下列问题:(1) 哪些表达式是错误的?为什么?

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

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

三、分析与讨论

如何正确地选用数据类型?分析总结运算符的优先级。

实验(三)顺序程序结构程序设计

一、 目的和要求

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

8

一、 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)输入前要加提示语句。

9

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

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

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

一、 四、问题讨论

一、 小结上机各个环节所出现的错误及解决的办法。

实验(四)选择结构程序设计

一、目的和要求

1. 进一步掌握关系表达式和逻辑表达式的使用。

2. 熟悉选择结构程序设计。

3. 熟练使用if语句进行程序设计。

4. 使用switch语句实现多分枝选择结构。

二、实验内容和步骤

1.用scanf函数输入一个年份year,计算这一年2月份的天数days,然后用输出函数printf输出days。

10

实验步骤与要求:

(1)有变量定义为整型。

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

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

说明:

(1)闰年的条件是:year能被4整除但不能被100整除,或者year能被400整除。

(2)如果year是闰年,则2月份的天数为29天,不是闰年则为28天。

2.编写程序,输入三角形三边 a、b、c,判断a、b、c能否构成三角形,若不能则输出相应的信息,若能则判断组成的是等腰、等边、直角还是一般三角形。

实验步骤与要求:

(1) 输入一组数据3,4,8,观察程序运行结果,并与实验二中程序2做比较

(2) 另外再输入几组数据进行测试:

3,4,5

3,3,3

11

3,3,5

(3)如果程序有误,可采用“跟踪打印”的调试方法,确定错误的出处。

3.编写程序,输入奖金数a,计算并输出税率、应缴税款和实得奖金数。

奖金 税率

a<500 0.00

500≤a<1000 0.05

1000≤a<2000 0.08

2000≤a<5000 0.10

5000≤a 0.15

实验步骤与要求:

(1) 用if语句编程,自变量和函数值均为双精度类型

(2) 用scanf函数输入奖金数a,输出结果采用以下形式:

a=具体值 rate=税率值 tax=应缴税款 profit=实得奖金数

12

(3) 分别输入a=280,512,1000,4250,5100,运行该程序

(4) 用if~else if语句和switch语句编程,其它同上。

[问题讨论]

对于多分枝选择结构何时使用if语句的嵌套,何时使用switch语句?

实验(五)循环结构程序设计

一、实验目的

1. 熟练掌握三种循环语句的应用。

2. 熟练掌握循环结构的嵌套。

3. 掌握break和continue语句的使用。

4. 练习调试与修改程序。

二、实验内容和步骤

1. 分别用while语句、do-while语句编写程序,计算e≈1+1/1!+1/2!+...+1/n!

实验步骤与要求:

13

(1) 用单重循环编写程序

(2) 使误差小于给定的ε,设ε=1E-5

(3) 除了输出e以外,同时还要输出总的项数n

2. 如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”。例如6的因子是1,2,3,且6=1+2+3,因此6是完数。编写程序找出1000之内的所有完数及这些完数的和。

实验步骤与要求:

(1) 要求使用for循环

(2) 输出形式为:完数1+完数2...=和值

算法说明:

(1) sum=0,m=2

(2) 当m<=1000时,反复执行(2.1)(2.2)(2.3)(2.4),否则转(3)

(2.1)k=m/2,n=0,j=1

(2.2)当j<=k时,反复执行(2.2.1)(2.2.2) ,否则转(2.3)

14

(2.2.1) if j是m的因子则执行n=n+j

(2.2.2) j++

(2.3) if m=n 则输出完数m, sum=sum+m

(2.4)m++

(3)输出m值

3. 输入并运行下面的程序,观察程序的运行结果。#include\"stdio.h\"

main( )

{int n;

while (1)

{printf(\"Enter a number:\");

scanf(\"%d\

if (n%2==1)

15

{printf(\"I said\");

continue;}

break;

}

printf(\"Thanks. I needed that!\");

}

4.求梅森尼数:指 为素数的数n,求0~21间的梅森尼数。

5.绝对素数:一个素数,经过任意次调换位,还是素数,例如:13(31),求2位的所有绝对素数。

6.S=sqrt(ln(1)+ln(2)+……+ln(n)) n=40,求S

三、内容讨论

1.小结三种形式的循环使用的区别。

2.小结循环嵌套的规定和应用

实验(六)函数

16

一、 目的与要求

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

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

一、 二、 实验内容与步骤

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

一、 {

一、 int,y;

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

一、 int sum(a,b)

一、 {

一、 int a,b;

一、 return(a+b);

17

一、 }

一、 }

一、 2、 编写一个函数,判断一个数是不是素数。在主函数中输入一个整数,输出是否是素数的信息。

一、 实验步骤与要求:

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

一、 (2) 编写一个主函数,输入一个整数,调用(1)中的函数,判断此整数是否为素数,并输出结果。

一、 (3) 对于属于多函数程序,可以采用每个函数分别进行编辑、编译的方法,然后再连接、运行。如果编译有错时,可分别修改,这样便于调试。实验2和实验3也可以使用这样的调试方法。

一、 3、 用梯形法求函数的定积分。

一、 实验步骤与要求:

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

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

18

并输出下列积分值。要求主函数与函数f(x)在同一个文件中。

一、 (3) 编制另一个主函数以及计算被积函数值的函数f(x),在主函数中调用(1)中的函数计算并输出下列积分值。要求主函数与函数f(x)在同一个文件中。

一、 说明:

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

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

一、 三、 分析讨论

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

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

一、 3. 编写和调试包含多模块的程序时,容易出现什么样的错误?根据自己的实践总结一下。

实验(七)指针

一、目的和要求

1.掌握指针变量的定义与引用。

19

2.熟练使用函数指针、数组指针、字符串指针编写应用程序。。

二、实验内容和步骤

1、指出下面程序错误的原因。

main( )

{

int x=10,y=5,*px,*py;

px=py;

px=&x;

py=&y;

printf(“*px=%d,*py=%d,*px,*py);

}

2、 写一函数,求一个字符串的长度。

实验步骤与要求:

20

(1) 本部分习题要求全部用指针完成;

(2) 在main函数中输入字符串,并输出其长度;

(3) 本题不能使用strlen()函数;

方法说明:

在主函数中定义一个指向字符串的指针变量pstr,并将输入的字符串的首地址赋值给pstr,然后调用求字符串长度的函数strlenth(char *p),得到字符串的长度。在函数strlenth(char *p)中,判断*p是否为’\\0’,如果不为’\\0’,则进行len++的操作,直到遇到’\\0’为止。然后返回len值。

求字符串长度的函数strlenth(char *p)算法如下:

(1).定义int len=0;

(2).当*p!=’\\0’时,重复执行(2.1)(2.2),否则算法终止。

(2.1)len=len+1

(2.2)p++

(3).return(len)

3、 编写一个函数,将数组中n个数按反序存放。

21

实验步骤与要求:

(1) 在主函数中输入10个数,并输出排好序的数。

(2) 编写函数invert()将10个数按反序存放。

4、 设一个函数,调用它时,每次实现不同的功能:(1)求两个数之和;(2)求两个数之差;(3)求两个数之积。实验步骤与要求:

(1)在主函数中输入2个数a,b,并输出a,b的和、差和乘积。

(2)分别编写函数add()、sub()、mul()计算两个数的和、差、积。

(3) 编写函数process(),分别调用函数add()、sub()、mul()。

三、分析讨论

指针的正确使用方法,数组与指针的联系。

实验(八)结构体与共同体

一、目的和要求

1、掌握结构体类型方法以及结构体变量的定义和引用。

2、掌握指向结构体变量的指针变量的应用,特别是链表的应用。

22

3、掌握运算符”.”和”->”的应用。

4、共用体的概念和应用。

二、实验内容和步骤

1、有五个学生,每个学生的数据包括学号,姓名,三门课的成绩,从键盘输入五个学生的数据,要求打印出每个学生的平均成绩,以及最高分的学生的数据(包括学号,姓名,三门课的成绩,平均分数)。

实验步骤与要求:

用一个函数输入五个学生的数据;用一个函数求总平均分;用函数找出最高分学生数据,总平均分和最高分的学生的数据都在主函数中输出。

2、三个人围成一圈,从第一个人开始顺序报号1,2,3。凡报到“3”者退出圈子,找出最后流在圈子中的人原来的序号。

3、建立一个链表,每个结点包括:学号,姓名,性别,年龄。输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。

三、分析讨论

指针和结构体的结合使用方法,怎样处理链表

23

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务