高级语言程序设计C语言实验指导书.docx
《高级语言程序设计C语言实验指导书.docx》由会员分享,可在线阅读,更多相关《高级语言程序设计C语言实验指导书.docx(76页珍藏版)》请在冰豆网上搜索。
高级语言程序设计C语言实验指导书
高级语言(C语言)程序设计实验指导书
第一章 前言
一、C语言实验的目的
学习《C程序设计》课程应当熟练地掌握程序设计的全过程,即独立编写源程序、独立上机调试、独立运行程序和分析结果,不能满足于能看懂书上的程序。
上机实验的目的,绝不仅仅是为了验证所编写的程序是否正确,而是为了:
1.加深对讲授内容的理解,尤其是一些语法规定。
通过实验来掌握语法规则是行之有效的方法。
2.熟悉所用的操作系统和相应的上机环境。
3.学会上机调试程序,根据出错信息掌握修改程序的方法。
4.通过调试完善程序。
二、C语言实验前的准备工作
1.了解所用的上机环境(包括C编译系统)的性能和使用方法。
2.复习和掌握与本实验有关的教学内容。
3.准备好上机所需的程序,不要完全复制或抄写别人的程序去上机。
4.对程序中出现的问题应事先估计,对程序中自己有疑问的地方应先作上记号,以便上机时注意。
5.准备好调试程序和运行程序所需的数据。
三、C语言实验的步骤
上机实验原则上应一人一组,独立实验(如果程序太大,也可以2—3人一组)。
上机过程中出现的问题,除了是系统的问题以外,不要轻易举手问老师。
尤其对“出错信息”,应善于分析判断,找出出错的行,然后检查该行或其上一行。
上机实验一般应包括以下几个步骤:
1.双击桌面VisualC++快捷方式进入VisualC++,或通过执行“开始=>程序=>
MicrosoftVisualStudio6.0=>MicrosoftVisualC++6.0”。
2.单击“文件”菜单的“新建”命令。
3.在打开的“新建”对话框中选择“文件”标签。
4.选择C++SourceFile,选择文件保存位置,然后在文件输入栏中输入文件名。
如图所示:
5.输入源程序。
6.编译程序:
按“Ctrl+F7”或通过“编译”菜单中的“编译”命令,或使用工具栏中的相应工具进行编译 编译 连接 运行
若程序有错则找到出错行修改程序。
7.连接:
若程序没有语法错误,则可按功能键F7或执行“编译”菜单中的“构件”命令或通过工具栏中的相关工具(编译工具右边工具),进行连接生成可执行文件。
8.运行程序:
按组合键“Ctrl+F5”,或通过“编译”菜单中的执行命令,或通过工具栏中的“!
”工具运行程序。
四、写好C语言实验报告
实验报告应包括以下内容:
1.实验目的。
2.实验内容。
3.程序清单。
4.运行结果。
5.对运行结果的分析,以及本次调试程序所取得的经验。
五、C语言实验任务与时间安排
实验序号
实验内容
拟实验时间
实验
形式
1
VisualC++6.0集成环境的使用
2
验证性
2
基本数据类型与输入输出
2
验证性
3
顺序结构程序设计
2
验证性
4
选择结构程序设计
2
验证性
5
循环结构程序设计
2
验证性
6
数组
5
设计性
7
函数
5
设计性
9
指针
4
设计性
10
结构体
4
设计性
12
文件
2
验证性
第二章 实验
实验一VisualC++6.0集成环境的使用
1.1实验目的
1.掌握VC6.0集成开发环境的使用方法。
2.了解C语言程序从编辑、编译、连接到运行的全过程
3.掌握C语言程序的结构特征与书写规则
1.2实验要求
1.实验学时:
2学时。
2.使用VisualC++6.0环境编写和调试程序。
3.所有上机题应通过调试,并获得正确的结果。
4.对程序中重要的内容作必要的注释。
1.3实验准备
1.阅读VisualC++6.0集成环境的相关材料。
2.复习C语言程序基本结构与书写规则的有关内容。
1.4实验内容
1.上机调试
(1)请输入以下程序,练习在VisualC++6.0环境下程序的编辑、编译、连接和运行。
#include
voidmain()
{
printf("这是我的第一个程序\n");
}
(2)请说明以下程序的功能,然后上机验证。
#include
voidmain()
{
inta,b,c;
printf("Pleaseinputa,b:
");
scanf("%d%d",&a,&b);/*注意,输入数据时,数据间用空格分隔*/
c=a+b;
printf("%d+%d=%d\n",a,b,c);
}
(3)请说明以下程序的功能,然后上机验证。
#include
floatave(floaty1,floaty2,floaty3)
{
floaty;
y=(y1+y2+y3)/3;
returny;
}
voidmain()
{
floatx,y,z,a;
scanf("%f,%f,%f",&x,&y,&z);/*注意,输入数据时,数据间用逗号分隔*/
a=ave(x,y,z);
printf("%f\n",a);
}
2.实验思考
(1)输入并运行下面的程序。
#include
voidmain()
{
charc,h;
inti,j;
c='a';
h='b';
i=97;
j=98;
printf("%c%c%c%c\n",c,h,i,j);
printf("%d%d%d%d\n",c,h,i,j);
}
(2)运行下列程序并分析出现的信息提示。
#include
voidmain()
{
inti=23,s;
s=i+j;
printf("s=%d\n",s);
}
实验二基本数据类型与输入输出
2.1实验目的
1.掌握C语言基本数据类型以及常量的表示方法、变量的定义与使用规则。
2.掌握C语言的算束运算、逗号运算的运算规则与表达式的书写方法。
3.掌握各种输入输出函数的使用方法。
2.2实验要求
1.实验学时:
2学时。
2.使用VisualC++6.0环境编写和调试程序。
3.所有上机题应通过调试,并获得正确的结果。
4.对程序中重要的内容作必要的注释。
2.3实验准备
1.复习数据类型和运算符的有关概念。
2.复习各种类型常量的表示方法以及变量的概念与命名规则。
3.复习输入输出函数各种格式符的含义与使用规则。
2.4实验内容
1.上机调试(需作出必要的注释!
)
(1)请说明以下程序的功能,然后上机验证。
#include
voidmain()
{
printf("\t*\n");
printf("\t\b***\n");
printf("\t\b\b*****\n");
}
(2)请说明以下程序的功能,然后上机验证。
#include
voidmian()
{
intx=010,y=10,z=0x10;
charc1='M',c2='\x4d',c3='\115',c4=77,c;
printf("x=%o,y=%d,z=%x\n",x,y,z);
printf("x=%d,y=%d,z=%d\n",x,y,z);
printf("c1=%c,c2=%c,c3=%c,c4=%c\n",c1,c2,c3,c4);
printf("c1=%d,c2=%d,c3=%d,c4=%d\n",c1,c2,c3,c4);
c=c1+32;
print("c=%c,c=%d\n",c,);
}
(3)请说明以下程序的功能,然后上机验证。
#include
voidmain()
{
intm=18,n=13;
floata=27.6,b=5.8,x,;
x=m/2+n*a/b+1/4;
printf("%f\n",x);
}
(4)当输入是8.5,2.5,5,分析程序运行结果,并上机验证。
#include
voidmain()
{
floatx,y;
Intz;
scanf("%f,%f,%d,&x,&x,&z);
y=x-z%2*(int)(x+17)%4/2;
printf("x=%f,y=%f,z=%d\n",x,y,z);
}
2.填空题
(1)以下程序输入3个整数值给a,b,c,程序把b中的值给a,把c中的值给b,把a中的值给c,交换后输出a,b,c的值。
例如,输入a=10,b=20,c=30,交换后a=20,b=30,c=10。
#include
voidmain()
{
inta,b,c,____________;
printf("Entera,b,c:
");
scanf("%d%d",_________);
______________;
printf("%d,%d,%d",a,b,c);
}
(2)以下程序输入一个大写字母,要求输出对应的小写字母。
#include
voidmain()
{
charupperc,lowerc;
upperc=_____________';
lowerc=_____________;
printf("小写字母");putchar(upperc);
printf("大写字母");putchar(lowerc);putchar('/n');
}
3..思考题
(1)分析程序,写出运行结果,并上机验证
#include
voidmain()
{
charc1='a',c2='b',c3='c',c4='\101',c5=101;
printf("a%cb%c\tc%c\tabc\n",c1,c2,c3);
printf("\t\b%c%c".c4,c5);
c4=65535;
c5=-1.2345;
printf("%d%d",c4,c5);
}
(2)分析程序,写出运行结果,并上机验证
#include
voidmain()
{
inti=3,j=5,k,l,m=19,n=-56;
k=++i;
l=j++;
m=i++;
n-=--j;
printf("%d,%d,%d,%d,%d,%d,\n",ij,k,l,m,n)
}
(3)分析程序,写出运行结果,并上机验证
#include
voidmain()
{
floatr,h,pi=3.1415926;
floatc0,s0,s,v;
printf("inputr,h(m):
");
scanf("%f,%f",&r,&h);
c0=2*pi*r;
s0=c0*h+2*s0;
s=c0*h+2*s0;
v=pi*r*r*h;
printf("c0=%.2f(m)\ns0=%.2f\ns(m20\nv=%.2f(m3)\n",c0,s0,s,v);
}
实验三顺序结构程序设计
3.1实验目的
1.熟练掌握格式输入与格式输出函数与各种格式符的使用;
2.掌握各类数据输入/输出的实现方法;
3.学习完成简单的顺序结构程序设计。
3.2实验要求
1.实验学时:
2学时。
2.使用VisualC++6.0环境编写和调试程序。
3.所有上机题应通过调试,并获得正确的结果。
4.对程序中重要的内容作必要的注释。
3.3实验准备
1.复习格式输入、输出语句的使用。
2.复习各类输入、输出语句。
3.复习简单的顺序程序设计的基本方法。
3.4实验内容
1.上机调试(需作出必要的注释!
)
(1)输入三角形的三边长,求三角形面积。
为简单起见,设输入的三边长a、b、c能构成三角形。
从数学知识已知求三角形面积的公式为area=s(s-a)(s-b)(s-c),其中s=(a+b+c)/2
#include<math.h>
main()
{
floata,b,c,s,area;
scanf("%f,%f,%f",&a,&b,&c);
s=1.0/2(a+b+c);
area=sqrt(s(s-a)(s-b)(s-c));
printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);
printf("area=%7.2f\n",area);
}
(2)求ax2+bx+c=0方程的根。
a,b,c由键盘输入,设b2-4ac>0。
众所周知,一元二次方程式的根为x1=-b+b2-4ac2ax2=-b-b2-4ac2a,可以将上面的分式分为两项:
p=-b2a,q=b2-4ac2a,x1=p+q,x2=p-q
#include<math.h>
main();
{
floata,b,c,disc,x1,x2,p,q;
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
disc=b*b-4*a*c;
p=-b/(2*a);
q=sqrt(disc)/(2*a);
x1=p+q; x2=p-q;
printf("\n\nx1=%5.2f\nx2=%5.2f\n",x1,x2);
}
2.填空题
(1)已有如下定义和输入语句,若要求a,b,c1,c2的值分别为5、6、A和B,当从第一列开始输入数据时,正确的数据输入方式是______(表示回车)。
inta,b;
charc1,c2;
scanf("%d%c%d%c",&a,&c1,&b,&c2);
A)5A6BB)5A6BC)5A6BD)5A6B
(2)以下说法正确的是_______。
A)输入项可以为一个实型常量,如scanf(“%f”,3.5);
B)只有格式控制,没有输入项,也能正确输入,如scanf(“a=%d,b=%d”);
C)当输入实型数据时,格式控制部分应规定小数点后的位数,如scanf(“%4.2f”,&f);
D)当输入数据时,必须指明地址,如scanf(“%f”,&f);
E)可以采用不同的格式符,实现对一个实型数据以八进制或十六进制形式输入/输出。
F)整型数据不能使用%f或%lf格式符。
(3)若a是int型变量,则表达式(a=5*6,a*3),a+8的值是_________。
(4)若有定义:
intb=7;floata=2.5,c=4.7;则表达式a+(int)(b/3*(int)(a+c)/2)%4的值为_____。
(5)输出长整型数据使用格式符_______,输出无符号的整数用格式符_____,以指数形式输出单精实数用格式符______。
(6)下面程序运行时输入:
1011<回车>,输出__________。
#include
voidmain()
{inta,b;
scanf("%o%x",&a,&b);
printf("a=%d,b=%d\n",a,b);
}
(7)下面程序段执行时,怎样输入才能让a=10,b=20?
__________________
inta,b;
scanf("a=%d,b=%d",&a,&b);
(8)若a和b均为int变量,以下语句的功能是_____________。
a+=b;b=a-b;a-=b;
(9)在scanf函数调用中,可以在格式字符和%之间加一星号*,它的作用是________。
(10)a++、++a、a=a+1都能实现使变量a的值增1,与之等效的表达式还有__________
3.编程题
下面程序功能:
键盘输入一个三位数,输出逆序后的数。
例如,输入236,输出632。
程序中有多处错误,改正后在机器上调试通过。
#include
voidmain()
{intx,inty;
inta,b,c;
a=x/100;
b=x/10%10;
c=x%10;
printf("Pleaseinputanum:
");
scanf("%d",&x);
y=100c+10b+a;
printf("y=%d\n",y);
4.思考题
如果输入的数据可以是任意大小的数,并不限制一定是一个三位数,怎样才能将该数逆序并输出?
实验四选择结构程序设计
4.1实验目的
1.掌握C语言的关系表达式和逻辑表达式的运算规则与书写方法。
2.掌握各种类型的if语句和switch语句的使用方法。
3.熟悉选择结构程序设计的方法。
4.2实验要求
1.实验学时:
2学时。
2.使用VisualC++6.0环境编写和调试程序。
3.所有上机题应通过调试,并获得正确的结果。
4.对程序中重要的内容作必要的注释。
4.3实验准备
1.复习关系运算符与关系表达式、逻辑运算符与逻辑表达式的相关内容。
2.复习if语句和switch语句的格式与执行过程。
4.4实验内容
1.上机调试(需作出必要的注释!
)
(1)先静态分析一下程序的运行结果,然后上机验证。
#include
voidmain()
{
inta=3,b=4,c=5,x,yz;
x=c,b,a;
y=!
a+b=c);
z=c/b+((float)a/b&&(float)(a/c);
printf("\nx=%d,y=%d,z=%d",x,y,z);
x=a||b--;
y=a-3&&c--;
z=a-3&&b;
printf("\n%d,%d,%d,%d,%d,%d",a,b,c,x,y,z);
}
(2)输入三个整数x,y,z,请把这三个数由小到大输出。
(我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
)
#include
voidmain()
{
intx,y,z,t;
scanf("%d%d%d",&x,&y,&z);
if(x>y)
{t=x;x=y;y=t;}/*交换x,y的值*/
if(x>z)
{t=z;z=x;x=t;}/*交换x,z的值,此时则x获最小值*/
if(y>z)
{t=y;y=z;z=t;}/*交换z,y的值*/
printf("smalltobig:
%d%d%d\n",x,y,z);
}
2.编程题
(1)已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(单位:
元):
profit≤1000没有提成
1000<profit≤2000提成10%
2000<profit≤5000提成15%
5000<profit≤10000提成20%
10000<profit提成25%
请打印员工实际薪水。
#include
voidmain()
{
intgrade,profit;
floatsalary=500;
printf("Inputprofit:
");
scanf("%d",&profit);
grade=(profit-1)/1000;
switch(grade)
{case0:
break;
case1:
salary+=profit*0.1;break;
case2:
case3:
case4:
salary+=profit*0.15;break;
case5:
case6:
case7:
case8:
case9:
salary+=profit*0.2;break;
default:
salary+=profit*0.25;
}
printf("salary=%.0f\n",salary);
}
请按一下步骤实习思考:
(调试并注释)
分析程序中的switch结构。
重点学习case标号的设计,本例将利润与提成的关系转换成整数的方法是,由于提成的变化点都是1000的整数被(1000、2000、5000、……),同时为了解决相邻两个区间重叠问题,因此采用将利润porfit先减1(最小增量),然后再整除1000.
输入并运行程序,用不同的利润去检验运行结果,如果结果不正确,请找出原因,改正后重新运行,直到结果正确为止。
若没有break;结果如何?
3.思考题
已知银行整存整取存款不同期限的月息利率分别为:
0.63%期限1年
0.66%期限2年
月息利率=0.69%期限3年
0.75%期限5年
0.84%期限8年
要求输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。
实验五循环结构程序设计
5.1实验目的
1.掌握语句、语句和语句实现循环的使用方法。
2.掌握循环语句实现一些常用的算法。
3.熟悉程序的跟踪调试技术。
5.2实验要求
1.实验学时:
2学时。
2.使用VisualC++6.0环境编写和调试程序。
3.所有上机题应通过调试,并获得正确的结果。
4.对程序中重要的内容作必要的注释。
5.可以用断点调试法完成部分上机调试题,并观察运行过程。
5.3实验准备
1.复习while语句、do…while语句、fo语句、continue语句和beeak语句的格式与执行过程。
2.复习一些常用的算法,并总结它们的设计方法和思路。
3.阅读“程序调试与测试”的相关内容。
5.4实验内容
1.上机调试(需作出必要的注释!
)
(1)求n!
提示:
(1)注意结果的取值范围!
(2)3中循环方式由你选择!
也可以用两种方法做。
(3)程序的简单验证:
正确结果应是:
3!
=6。
5!
=120。
8!
=40320注可用单步跟踪(F10)观测循环语句的执行过程。
(4)提示案例:
(例3.7)用while语句来实现1*2*3*…*10的乘积。
#include
voidmain()
{
inti=1,mul=1;
while(i<=10)/*用while语句求1*2*3*…*10的乘积*/
{
mul=mul*i;
i++;
}
printf("\n%ld\n",mul);
}
(2)求5个数的和及平均值的程序代码如下:
#include
voidmain()
{
inta;
floatb,sum;
for(a=1,sum=0.0;a<6;a++)
{
printf(“pleaseinputNO: