C程序设计实验指导书2.docx
- 文档编号:11368657
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:23
- 大小:26.30KB
C程序设计实验指导书2.docx
《C程序设计实验指导书2.docx》由会员分享,可在线阅读,更多相关《C程序设计实验指导书2.docx(23页珍藏版)》请在冰点文库上搜索。
C程序设计实验指导书2
《C语言程序设计》实验指导
第一部分上机实验的指导思想和要求
1.上机实验的目的
学习C语言程序设计课程不能满足于“懂了”,满足于能看懂书上的程序,而应当熟练地掌握程序设计的全过程,即独立编写出源程序,独立上机调试程序,独立运行程序和分析结果。
这是一门实践性很强的课程,必须十分重视实践环节,保证有足够的上机实践时间。
上机实验的目的是:
(1)加深对讲授内容的理解,尤其是一些语法规定。
(2)熟悉C语言程序开发的环境。
(3)学会上机调试程序。
也就是善于发现程序中的错误,并且能很快地排除这些错误。
要学会根据“出错提示”,分析并找出错误。
2.上机实验前的准备工作
(1)了解所用的计算机系统(包括C编译系统)的性能和使用方法。
(2)复习和掌握与本实验有关的教学内容。
(3)准备好上机所需的程序。
(4)对运行中可能出现的问题应事先作出估计;对程序中自己有疑问的地方,应作上记号,以便在上机时给予注意。
(5)准备好调试和运行时所需的数据。
3.上机实验的步骤
(1)调出C编译系统,进人C工作环境。
(2)输人自己编好的程序
(3)检查一遍已输人的程序是否有错(包括输入时打错的和编程中的错误),及对改正。
(4)进行编译。
如果在编译和连接过程中发现错误,输出窗口会出现“出错信息”,根据提示找到出错位置和原因,加以改正,再进行编译,如此反复,直到顺利通过编译和连接。
(5)运行程序,并分析运行结果是否合理和正确。
在运行时要注意当输入不同数据时所得到的结果是否正确。
此时应运行几次,分别检查在不同情况下程序是否正确。
4.写实验报告,实验报告应包括以下内容:
(1)预习报告(实验目的,题目,程序清单(或算法流程),疑难问题等);
(2)实验数据;(3)实验过程报告;(4)实验小结。
第二部分关于程序的调试和测试
l.程序错误的类型
主要有以下几种:
(1)语法错误:
不符合C语言的语法规定。
会在编译时被发现并指出。
属于“致命错误”,不改正是不能通过编译的。
对一些在语法上有轻微毛病但不影响程序运行的问题(如定义了变量但始终未使用),编译时会发出“警告”。
虽然程序能通过编译,但不应当使程序“带病工作”,应尽可能将程序中所有“致命错误(error)”和“警告(warning)”的因素都排除。
(2)逻辑错误:
程序无语法错误,也能正常运行,但是结果不对。
例如求s=1+2+3+…+100,有人写出以下语句:
for(s=0,i=1;i<100;i++)
s=s+i;
语法没有错,但求出的结果是1+2+3+…+99之和,而不是1+2+3+……100之和。
这种错误计算机是无法检查出来的。
如果是算法有错,则应先修改算法,再改程序。
如果是算法正确而程序写得不对,则直接修改程序。
(3)运行错误:
有时程序既无语法错误,又无逻辑错误,但程序不能正常运行或结果不对。
多数情况是数据不对,包括数据本身不合适以及数据类型不匹配。
2.程序的测试
程序调试的任务是排除程序中的错误,使程序能顺利地运行并得到预期的效果。
程序的调试阶段不仅要发现和消除语法上的错误,还要发现和消除逻辑错误和运行错误。
除了可以利用编译时提示的“出错信息”来发现和改正语法错误外,还可以通过程序的测试来发现逻辑错误和运行错误。
测试的目的是检查程序有无“漏洞”。
对于一个简单的程序,要找出其运行时全部可能执行到的路径,并正确地准备数据并不困难。
但是,如果需要测试一个复杂的大程序,要找到全部可能的路径,并准备出所需的测试数据并非易事。
例如,有两个非嵌套的if语句,每个if语句有2个分支,它们所形成的路径数目为2×2=4;如果一个程序包含100个if语句,则可能的路径数目为2100=1.267651×1030。
实际上进行测试的只是其中一部分(执行几率最高的部分)。
因此,经过测试的程序一般还不能轻易宣布为“没有问题”,而只能说:
“经过测试的部分无问题”。
实验一C语言运行环境
一、目的和要求
1、熟悉使用C语言运行环境。
2、掌握C语言程序的书写格式和C语言程序的结构。
3、掌握C语言上机步骤,了解运行一个C程序的方法。
二、实验内容
调试运行以下程序(调试时找出程序错误并修改,再编译、运行)
1.编写自己的第一个程序
录入如下C源程序,文件名自定(**.c):
#include
intmain()
{
printf("ThisisaCProgram。
\n);
return0;
}
对源程序进行编译、连接并运行,观察分析运行结果。
2.编写程序,译密码,要求将“China”译成密码,密码规律是:
用原来的字母后面第4个字母代替原来的字母,因此,“China”应译为“Glmre”。
请编一程序,用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为字符C,h,i,n,a,经过运算后,输出译码后的结果。
3下面的C程序,目的是想计算由键盘输入的任意两个整数的积。
记下在调试过程中所发现的错误、系统给出的出错信息和对策。
分析讨论对策成功或失败的原因
#include“stdio.h”
intprodct(inta,intb)
{intc;
c=a*b;
returnc;
}
intmain()
{intx,y,p;
scanf(“%d,%”,&x,&y);
p=prodct(x,t);
printf(“Theproductis%d”,p);
return0;
}
4、求1+2+3+…+100的和,程序如下。
记下在调试过程中所发现的错误、系统给出的出错信息和对策。
分析讨论对策成功或失败的原因
#include“stdio.h”
intmin()
{inti,sum=0;
for(i=1;i<=100;i++)sum=sum+i;
printf("sum=%d\n",sum);
return0;
}
三、分析与讨论
1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。
分析讨论对策成功或失败的原因。
2、总结C程序的结构和书写规则。
实验二顺序程序设计
一、实验目的
1.学习C语言基本输入输出函数的使用。
2.编写顺序结构程序并运行。
二、实验内容
1、已知:
a=2,b=3,x=3.9,y=2.3(a,b整型,x,y实型),计算算术表达式(float)(a+b)/2+(int)x%(int)y的值。
试编程上机验证。
(提示编程要点:
1、先判断结果值类型,可设置一个此类型的变量用于记录表达式结果,例如变量r;2、程序先给几个条件变量赋初值,然后将表达式赋值给变量r;3、最后输出变量r的值就是表达式的值。
)
2.若a=5,b=7,c1=‘a’,x=31.19,y=-32.19,“COMPUTER”,编写程序,实现下面的输出格式和结果(空格用□表示):
a=□5,b=□□7,a-b=-2,a/b=71%
c1=’a’□or□97(ASCII)
x=31.1900,y=□-32.19,x+y=□□-1.0
c2=COMPUTER,COMP,□□□COMP
程序中要包括定义变量类型和设计输出(最后一个字符串可使用常量形式,其余要求使用变量)。
3.求两个复数的加、减、乘运算结果并输出。
要求,复数(complex)的实部(therealpart)和虚部(theimaginarypart)由键盘输入,输入数据前要有提示信息输出,将两个复数及其加、减、乘运算结果以复数的形式输出。
例:
输出:
两个复数分别是:
comp1=6.00+j4.40,comp2=5.00+j3.00
compl1+compl2=11.00+j7.40等
三、实验要求
上机前准备好上机所需的程序,上机时输入和调试自己所编写的程序。
实验三 选择结构程序设计
一、实验目的
1.正确使用关系表达式和逻辑表达式表达条件。
2.学习分支语句if和switch的使用方法。
3.学习调试程序。
二、实验内容
1、从键盘输入一个整数,编程判断其奇偶性,并输出结果。
2、某托儿所收2岁到6岁的孩子,2岁、3岁孩子进小班(Lowerclass);4岁孩子进中班(Middleclass);5岁、6岁孩子进大班(Higherclass)。
编写程序,输入孩子年龄,输出年龄及进入的班号。
如:
输入:
3,输出:
age:
3,enterLowerclass。
建议用switch语句来实现。
调试无语法错误后,使用下列测试用例进行测试:
(1)3岁;
(2)4岁;(3)5岁;(4)7岁。
3编写一个运算器程序,要求能实现两个数的加、减、乘、除四种运算,输入两个操作数和一个运算符号,输出结果,注意0不能做除数。
使用下列测试用例进行测试:
(1)加法;
(2)减法;(3)乘法;(4)0不为除数的除法;(5)0为除数的除法。
选作题:
通过键盘输入一个字符,判断该字符是数字字符、字母、空格还是其他字符。
三、实验要求
1.复习选择结构程序设计。
2.上机前准备好上机所需的程序,上机时输入和调试自己所编写的程序。
3.上机结束后,应整理出实验报告,实验报告的内容应包括:
题目、程序清单、运行结果及对运行情况的分析。
实验四 循环结构程序设计
一、实验目的
1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。
2、了解条件型循环结构的基本测试方法。
3、掌握如何正确地控制计数型循环结构的次数。
4、了解在循环结构中,提高程序效率的方法。
5、进一步学习调试程序。
二、实验内容
(1)编程求解:
鸡兔同笼,有三十五只头,九十四只足,求鸡和兔各有多少?
(提示:
用穷举法求解。
即鸡或免的个数x从0至35循环试探,如果满足共有94只足的已知条件,那么此时的x就是一个解。
问题:
循环条件可以进一步简化以提高程序效率吗?
)
(2)假设密码为12345,当用户输入的密码正确时,显示“Welcome!
”,程序结束;密码错误时,显示“Error!
Tryagain!
”,并要求用户重新输入密码。
如果输入3次后密码仍错误,显示“Sorry!
Youarenotwelcome”,并不允许再输入,程序结束。
(用户输入的密码限定为整数)
问题:
此题应选择哪些测试用例较好?
(3)已知某班有4位同学:
A、B、C、D。
其中有一位同学做了好事,但不知是谁。
当被询问时,A说:
不是我;B说:
是C;C说:
是D;D说:
他胡说。
已知其中有三个人说的是真话,一个人说的是假话。
请根据以上信息,编写程序,找出做了好事的人。
(提示:
C语言中,某个表达式为“真”即值为1,为“假”即值为0;本题中要认真考虑4位同学的话应如何用关系表达式表示?
)
选作题:
求和sum=1!
+2!
+3!
+4!
+…20!
(考虑应该用何种类型的量存放结果sum.)
三、实验要求
1.复习循环结构程序设计。
2.上机前准备好上机所需的程序,上机时输入和调试自己所编写的程序。
3.上机结束后,应整理出实验报告,实验报告的内容应包括:
题目、程序清单、运行结果及对运行情况的分析。
实验5数组
[实验目的和要求]:
了解数组与数学矩阵的关系
掌握数组的定义、引用和初始化
理解二维数组数据的存储顺序
理解并掌握冒泡排序法和选择排序法
掌握字符数组与字符串的定义和引用
了解字符串处理函数的用法
[实验预习和准备]:
填空题:
(1)若有定义inta[3][5];,则排序在数组中第9个元素是。
(2)已知intx[10]={0,2,4};,则数组x在内存中所占的字节数是(turboc)、(VC++6.0)。
(3)已知floats[10];,计算s在内存中占用多少个内存单元的表达式是。
(4)写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是。
(5)ints[4]={1,2,3,4};则s[s[0]+2*s[2]-s[3]]的值是。
(6)strlen(“student\t\101\\\n”)的值是。
排序算法:
熟悉冒泡排序法和选择排序法
比较冒泡排序法和选择排序法的差异
[实验内容和步骤]:
从键盘输入10个整数,统计其中正数、零和负数的个数并输出。
#include
1:
intmain()
2:
{inta[10],i,s1,s2,s3;
3:
s1=s2=s3=0;
4:
for(i=0;i<10;i++)
5:
scanf(“%d”,①);
6:
for(i=0;i<10;i++)
7:
if(a[i]>0)s1++;
8:
elseif(a[i]==0)s2++;
9:
else②;
10:
for(i=0;i<10;i++)
11:
printf(“%3d”,③);
12:
printf(“\n”);
13:
printf(“positive=%3d,zero=%3d,negative=%3d”,s1,s2,s3);
14:
return0;}
回答下面的问题:
完成程序中的空白处。
①②③
第10行,for循环输出时,共输出多少个数?
如果将10改为20,将会出现什么结果?
上机测试并解释原因。
程序中所定义的数组a[10]在内存中占多少个字节?
在程序中利用sizeof计算a[10]在内存中占多少个字节。
数组元素在内存中是顺序存放的?
还是随机存放的?
分析并测试下面程序的运行结果。
#include
1:
intmain()
2:
{
3:
inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
4:
for(i=1;i<3;i++)
5:
for(j=0;j<=i;j++)
6:
s+=a[i][j];
7:
printf(“%d\n”,s);
8:
return0;}
回答下面的问题:
(1)第3行,定义数组a的所有元素的初值是。
(2)第4~6行,参与s相加的元素有。
(3)程序运行的结果是。
3、不用字符串处理函数将两个字符串连接,即将字符串b连到字符串a的后面,变成字符串c.
1:
#include
2:
intmain()
3:
{chara[80],b[80],c[160];
4:
inti=0,j=0,k=0;
5:
scanf(“%s”,a);
6:
scanf(“%s”,b);
7:
while(a[i]!
=’\0’)
8:
c[k++]=a[i++];
9:
while(b[j]!
=’\0’)
10:
c[k++]=b[j++];
11:
c[k]=’\0’;
12:
printf(“%s\n%s\n%s\n”,a,b,c);
13:
return0;}
回答下面的问题:
第5行,输入一串字符放入数组a中时,为什么没有对a加&操作?
第7~8行,此句的作用是什么?
第8行,如果将两个自加运算用一般加法来等价,请写出此语句的等价表达式。
第7~8行,本循环结束时,是否将字符串a中的结束符也复制给了字符串c?
第9~10行,此语句是将字符串b复制到c数组的开始处吗?
第11行,此句的作用是什么?
是否可以省略此行?
为什么?
根据此程序思路,如果将字符串s2连接到字符串s1的后面,且不需要第三个字符串变量作中间过渡,如何实现?
编程实现并测试。
4、将一个数组从大到小排序,再把一个从键盘输入的数插入数组中,使其仍按从大到小的顺序排列。
#include
1:
intmain()
2:
{
3:
inti,j,p,q,s,n,a[11]={120,-3,0,28,64,68,87,105,162,-8};
4:
for(i=0;i<10;i++)
5:
{
6:
p=i;q=a[i];
7:
for(j=i+1;j<10;j++)
8:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 实验 指导书