C程序设计实验指导书2
更新时间:2023-11-08 09:01:01 阅读量: 教育文库 文档下载
《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)实验小结。
1
第二部分 关于程序的调试和测试
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语句,则可能的路径数目为2=1.267651×10。实际上进行测试的只是其中一部分(执行几率最高的部分)。因此,经过测试的程序一般还不能轻易宣布为“没有问题”,而只能说:“经过测试的部分无问题”。
100
30
2
实验一 C语言运行环境
一、目的和要求
1、熟悉使用C语言运行环境。
2、掌握C语言程序的书写格式和C语言程序的结构。 3、掌握C语言上机步骤,了解运行一个C程序的方法。
二、实验内容
调试运行以下程序(调试时找出程序错误并修改,再编译、运行) 1.编写自己的第一个程序
录入如下C源程序,文件名自定(**.c): #include
printf(\。\\n); return 0; }
对源程序进行编译、连接并运行,观察分析运行结果。
2.编写程序,译密码,要求将“China”译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母,因此, “China”应译为 “Glmre”。请编一程序,用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为字符C,h,i,n,a,经过运算后,输出译码后的结果。
3下面的C程序,目的是想计算由键盘输入的任意两个整数的积。记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因
#include “stdio.h” int prodct(int a ,int b ) {int c ; c=a*b; return c; }
int main()
{ int x,y,p;
scanf(“%d,%”,&x,&y) ; p=prodct(x,t) ;
printf(“The product is %d”,p); return 0; }
4、求1+2+3+…+100的和,程序如下。记下在调试过程中所发现的错误、系统给出的出错信息和对策。分析讨论对策成功或失败的原因 #include “stdio.h” int min()
{ int i , sum=0;
for(i=1;i<=100;i++) sum=sum+i; printf(\
3
return 0; }
三、分析与讨论
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)的实部(the real part)和虚部(the imaginary part)由键盘输入,输入数据前要有提示信息输出,将两个复数及其加、减、乘运算结果以复数的形式输出。
例:输出:
两个复数分别是:comp1=6.00+j4.40,comp2=5.00+j3.00 compl1+compl2=11.00+j7.40 等
三、实验要求
4
上机前准备好上机所需的程序,上机时输入和调试自己所编写的程序。
实验三 选择结构程序设计
一、实验目的
1.正确使用关系表达式和逻辑表达式表达条件。 2.学习分支语句if和switch的使用方法。 3.学习调试程序。
二、实验内容
1、从键盘输入一个整数,编程判断其奇偶性,并输出结果。
2、某托儿所收2岁到6岁的孩子,2岁、3岁孩子进小班(Lower class);4岁孩子进中班(Middle class);5岁、6岁孩子进大班(Higher class)。编写程序,输入孩子年龄,输出年龄及进入的班号。
如:输入:3,输出:age:3,enter Lower class。
建议用switch语句来实现。调试无语法错误后,使用下列测试用例进行测试:(1)3岁;(2)4岁;(3)5岁;(4)7岁。
3 编写一个运算器程序,要求能实现两个数的加、减、乘、除四种运算,输入两个操作数和一个运算符号,输出结果,注意0不能做除数。
使用下列测试用例进行测试:(1)加法;(2) 减法;(3)乘法;(4)0不为除数的除法;(5)0为除数的除法。
选作题:通过键盘输入一个字符,判断该字符是数字字符、字母、空格还是其他字符。
三、实验要求
1.复习选择结构程序设计。
2.上机前准备好上机所需的程序,上机时输入和调试自己所编写的程序。
3.上机结束后,应整理出实验报告,实验报告的内容应包括:题目、程序清单、运行结果及对运行情况的分析。
5
实验四 循环结构程序设计
一、实验目的
1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。
2、了解条件型循环结构的基本测试方法。
3、掌握如何正确地控制计数型循环结构的次数。 4、了解在循环结构中,提高程序效率的方法。
5、进一步学习调试程序。 二、实验内容
(1)编程求解:鸡兔同笼,有三十五只头,九十四只足,求鸡和兔各有多少?
(提示:用穷举法求解。即鸡或免的个数x从0至35循环试探,如果满足共有94只足的已知条件,那么此时的x就是一个解。问题:循环条件可以进一步简化以提高程序效率吗?)
(2)假设密码为12345,当用户输入的密码正确时,显示“Welcome!”,程序结束;密码错误时,显示 “Error! Try again!”,并要求用户重新输入密码。如果输入3次后密码仍错误,显示 “Sorry!You are not welcome”,并不允许再输入,程序结束。(用户输入的密码限定为整数)
问题:此题应选择哪些测试用例较好?
(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.上机结束后,应整理出实验报告,实验报告的内容应包括:题目、程序清单、运行结果及对运行情况的分析。
6
实验5 数组
[实验目的和要求]:
? 了解数组与数学矩阵的关系 ? 掌握数组的定义、引用和初始化 ? 理解二维数组数据的存储顺序
? 理解并掌握冒泡排序法和选择排序法 ? 掌握字符数组与字符串的定义和引用 ? 了解字符串处理函数的用法
[实验预习和准备]: 1、 填空题:
(1)若有定义int a[3][5];,则排序在数组中第9个元素是 。
(2)已知int x[10]={0,2,4};,则数组x在内存中所占的字节数是(turbo c) 、(VC ++ 6.0) 。
(3)已知float s[10];,计算s在内存中占用多少个内存单元的表达式是 。 (4)写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语句是 。
(5)int s[4]={1,2,3,4};则s[s[0]+2*s[2]-s[3]]的值是 。 (6)strlen(“student\\t\\101\\\\\\n”)的值是 。 2、 排序算法:熟悉冒泡排序法和选择排序法 3、 比较冒泡排序法和选择排序法的差异 [实验内容和步骤]:
1、 从键盘输入10个整数,统计其中正数、零和负数的个数并输出。
#include
2:{ int a[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: else if(a[i]==0) s2++; 9: else ② ; 10: for(i=0;i<10;i++)
11: printf(“=”, ③ ); 12: printf(“\\n”);
13: printf(“positive==,zero==,negative==”,s1,s2,s3); 14:return 0;}
回答下面的问题:
(1) 完成程序中的空白处。
① ② ③
(2) 第10行,for循环输出时,共输出多少个数?如果将10改为20,将会出现什
么结果?上机测试并解释原因。
(3) 程序中所定义的数组a[10]在内存中占多少个字节?在程序中利用sizeof计算
a[10]在内存中占多少个字节。数组元素在内存中是顺序存放的?还是随机存放
7
的?
2、 分析并测试下面程序的运行结果。 #include
3: int a[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: return 0;} 回答下面的问题: (1)第3行,定义数组a的所有元素的初值是 。 (2)第4~6行,参与s相加的元素有 。 (3)程序运行的结果是 。
3、不用字符串处理函数将两个字符串连接,即将字符串b连到字符串a的后面,变成字符串c.
1: #include
3:{ char a[80],b[80],c[160]; 4: int i=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: return 0; } 回答下面的问题:
(1) 第5行,输入一串字符放入数组a中时,为什么没有对a加&操作? (2) 第7~8行,此句的作用是什么?
(3) 第8行,如果将两个自加运算用一般加法来等价,请写出此语句的等价表达式。 (4) 第7~8行,本循环结束时,是否将字符串a中的结束符也复制给了字符串c? (5) 第9~10行,此语句是将字符串b复制到c数组的开始处吗? (6) 第11行,此句的作用是什么?是否可以省略此行?为什么?
(7) 根据此程序思路,如果将字符串s2连接到字符串s1的后面,且不需要第三个字符
串变量作中间过渡,如何实现?编程实现并测试。
4、将一个数组从大到小排序,再把一个从键盘输入的数插入数组中,使其仍按从大到小的顺序排列。
#include
8
3: int i,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: if(q
9: {p=j;q=a[i];} 10: if(p!=i) 11: {
12: s=a[i]; 13: a[i]=a[p]; 14: a[p]=s; 15: }
16: printf(“%d ”,a[i]); 17: }
18: printf(“please input new data:\\n”); 19: scanf(“%d”,&n); 20: for(i=0;i<10;i++) 21: if(n>a[i]) 22: {
23: for(s=9;s>=i;s--) 24: a[s+1]=a[s]; 25: break; 26: } 27: a[i]=n;
28: for(i=0;i<10;i++)
29: printf(“%d ”,a[i]); 30: printf(“\\n”); 31: return 0;} 回答下面的问题:
(1)在上述程序代码中,找出将数组a进行排序的代码段。 (2)第20~26行的作用是什么?请加以解释。
(3)将一个新的元素插入到一个数组中间时,其后面的元素应该怎样移动?
5、编写程序,要求在无序数组中查找给定值首次出现的位置。例如,数组为:a[10]=10 1 20 39 9 4 12 43 33 4,要查找的数:4,输出:其位置:5,若在数组中没找到该数,则输出:4在该数组中不存在。
提示:从第0个元素到最后一个元素依次与被找元素比较,相等则停止查找。循环结束条件: (已经找到)||所有的数组元素都已经找遍
6、删除一个字符串中指定的字符。要求:从键盘输入一个字符串,以及对待删除的字符,
处理后输出。同一字母的大、小写按不同字符处理。如果输入的字符在字符串中不存在,则字符串照原样输出。
例如:输入字符串“I am a teacher,you are a student”,输入待删除的字符‘e’,处理后输出“I am a tachr,you ar a studnt”。
9
实验6 函数
[实验目的与要求]:
? 了解函数的类型
? 掌握C函数的定义与一般调用方法 ? 理解并掌握函数嵌套调用方法 ? 理解并掌握函数参数传递的方法 ? 理解地址传递的含义 ? 了解函数值的返回方法 ? 理解递归调用的两个阶段
[实验预习与准备]:
1、从下列10个有关函数说法中,选择5个正确答案 。 (1)建立函数有助于程序实现模块化,也可以提高程序的执行效率。 (2)在C语言中,实参和与其对应的形参共占用一个存储单元。 (3)用户若需调用标准库函数,调用前必须包含其相应的头文件。
(4)在函数内定义的变量,如无特殊说明,只在此函数内部有效。因此,不同函数中变量的名字可以相同,互不干扰。
(5)C语言中,实参是全局变量,形参是局部变量。
(6)若调用一个函数,且此函数中没有return语句,则该函数返回一个不确定的值。 (7)C语言中,实参可以是常量、变量,但不可以是表达式。
(8)C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是单向值传递。 (9)函数调用可以出现在表达式中,但不能单独作为一条语句或其他函数的实参。 (10)在C语言程序中,函数不可以嵌套定义,但函数可以嵌套调用。 2、填空题
在C语言中,若对函数类型无说明,则函数的默认类型是 。在一个源程序中,main函数的位置 。若用数组名作为函数调用的实参,传递给形参的是 。 [实验内容和步骤]:
1、分析下面程序的运行结果。 #include
3: x=456;y=567;z=678; 4:}
5:int main()
6:{int x=10 ,y=20 ,z=30 ; 7: f(x,y,z);
8: printf(\9: return 0 ;}
程序运行的结果是: 。 2、分析下面的程序并回答问题。 #include
3 : i=i*i*2 ;
10
正在阅读:
C程序设计实验指导书211-08
如何打印社保证明03-31
远程培训03-14
2016-2022年中国教育信息化行业发展现状分析及市场供需预测报告03-18
钻开油气层的钻井液03-21
1920年以前力学发展史06-11
浅淡知识型员工及其有效激励机制构建05-30
湖南省腹腔镜(普外)质量质量控制基本标准02-02
蚕宝宝作文600字07-09
浅谈档案工作的创新07-01
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 指导书
- 程序设计
- 实验
- 中小学校幼儿园规划建设管理条例
- 电子商务5
- 宋诗词义拾诂(上)
- 接桩专项施工方案-2013-12-9上传 - 图文
- 助理理财规划师 3级考试 房贷计算题
- 招标投标习题
- 2014年英语专转本考试真题试卷
- 法律案例分析
- C语言最重要的知识点复习资料(11.a版本)—昆明理工大学
- 制造标准及制造工艺概况(锅炉)
- thancy3宁夏银川一中2015届高三第一次模拟考试 语文 Word版含答案
- 中华民族传统图案文化汇集
- CAD实验报告DOC
- 小型可移动式树枝粉碎机设计 - 图文
- 2016年国家公务员考试面试热点:学生军训是否应该取消
- 机械设备电气控制课程教学(自学)基本要求 - 图文
- 二年级奥数11周比比分分
- 企业所得税法、实施条例练习题及答案
- 实验报告一 顺序表的操作
- 机关公文写作基本要求(1)