《计算机基础与程序设计》实验指导书
实验教学目标:本课程实验教学的目标在于使学生能够掌握算法的基本概念,并根据算法编制程序,掌握调试程序的基本技巧,初步了解软件开发所要经历的阶段,为学生从事计算机软件开发和数据处理工作打下坚实的基础。
实验教学要求:要求掌握数据类型的定义和使用;三种结构的程序设计;数组;函数;指针;结构体与共用体;文件操作等。
实验(一)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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务