C语言2实验指导书1104.docx
- 文档编号:1610794
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:37
- 大小:237.03KB
C语言2实验指导书1104.docx
《C语言2实验指导书1104.docx》由会员分享,可在线阅读,更多相关《C语言2实验指导书1104.docx(37页珍藏版)》请在冰点文库上搜索。
C语言2实验指导书1104
广西师范大学职业技术师范学院
《C语言程序设计》实验指导书
唐杰编著
广西师范大学职业技术师范学院
2010年8月
目录
第一章开发工具简介1
启动1
建立项目2
新建和编辑源文件4
编译代码5
运行结果5
第二章实验内容7
实验一开发环境与程序设计7
实验二数据类型、运算符和表达式9
实验三逻辑结构程序设计12
实验四循环控制程序设计14
实验五数组16
实验六函数18
实验七菜单实现20
实验八指针22
实验九结构体与共用体26
实验十动态内存分配28
实验十一位运算29
实验十二编译预处理与自定义类型30
实验十三文件31
参考文献:
32
附录:
C程序设计实验报告32
说明:
本实验指导书中第十——第十三个实验非计算机专业可选作。
第一章开发工具简介
Microsoft®VisualStudio™6.0是微软公司在1998年开发的一套软件开发工具,其中包括VisualBasic®、VisualC++®、VisualJ++™和其它一些开发工具,在课程中将主要使用VisualC++®6.0(简称VC6)进行实验设计,VC6是目前同类产品中最为成熟,也是使用最多的集成开发环境——IDE(IntegratedDevelopmentEnvironment),
启动
当VC6启动后,会出现如图0.1所示的主程序窗口。
图0.1主界面
在VC6的主界面中,顶部是主菜单栏和工具栏,主菜单共有9个菜单项。
VC6主界面左侧是项目工作区窗口(Workspace),用来显示工作区的信息,右侧是程序编辑窗口,用来输入和编辑源代码,下面的是输出窗口(Output),用来显示进行构建或调试等工作时的状态与数据信息,最底部是状态栏,各窗口可任意隐藏、显示。
建立项目
用VC6进行程序设计,是作为项目对待的,一个项目是一个整体,它存放建立程序所需要的全部信息,包括程序所有源文件的名称及其关系,所需库文件的清单和建立程序所用的编译器、连接器和其它工具的选项清单。
由于VC6可以建立的工作项目共有16个或更多,对于初学者来说有点复杂,要全部弄清楚需要很长的时间,因此,本书只以实验中用到的控制台应用程序为例进行介绍。
建立一个项目可以通过VC6的向导来完成,选择主菜单中“文件”>>“新建”菜单项,将会弹出如图0.1所示的对话框,在“Projects”标签页中列出了16个可以建立的项目选项,选择“工程”选项卡,选择“Win32ConsoleApplication”,然后在右上侧的“工程名称”文本框中输入项目名,“位置”中输入要保存的项目路径,点击下方的“确定”按钮即可进入下一个界面。
图0.1新建项目对话框
在下一个界面中,显示的是可以创建的控制台应用程序类型,VC6中可以创建的控制台应用程序共有4种,如图0.2所示。
课程实验只需选择默认的“一个空工程”,单击“完成”,VC6会将创建的项目信息显示出来,如图0.3所示,其中包括项目包含的文件及路径等内容。
图0.2控制台项目对话框
图0.3项目信息对话框
点击“确定”按钮,完成项目新建工作,这时VC6的主界面变成图0.4所示。
可以看到新建的项目中未包含任何文件。
图0.4项目建立完成界面
新建和编辑源文件
向所创建的项目中添加源文件,通过“文件”>>“新建”菜单选项打开新建对话框,这时弹出的对话框与图0.1一样,但是标签页变成“文件”页,如下所示。
该标签页中列出了VC6可以新建的所有文件类型,其中与实验有关的是“C/C++HeaderFile”和“C++SourceFile”两类文件,分别用来创建头文件和源文件的。
单击“C++SourceFile”选项,并勾选“A添加工程”复选框,选择项目名(默认当前项目),然后在“文件”文本框中输入源文件名,在“C目录”文本框中输入或选择文件路径,点击“确定”按钮就完成了新建文件的工作如下图所示。
然后可在工作区编辑源程序。
图0.1源代码编辑界面
编译代码
在编辑器中输入源代码并保存,然后可以通过主菜单中的“编译”项进行程序的编译、链接和运行。
也可通过工具栏(编译微型条)中工具快速完成(如左图)构建可执行文件,VC6会在主界面下方的信息输出窗口中将构建过程中的信息显示出来,如编译过程和链接过程的步骤,是否有错误等信息,如图0.1所示。
图0.1构建信息输出窗口
运行结果
如果在构建过程中有错误发生,错误信息输出窗口中显示出来,这时就需要返回到源代码中进行修改,再重新构建,直到没有错误为止。
如果项目正确的构建完成,就可以运行了。
运行的方法是通过主菜单中的“编译”下的执行选项进行,或者使用快捷键“Ctrl+F5”、微型编译微型条也能实现同样的目的。
最后,运行的结果会显示在一个控制台窗口中,如图0.1所示。
图0.1运行结果
注:
“Pressanykeytocontinue”是系统提示信息。
第二章实验内容
C语言是一门功能强大、实且用性很强,又非常灵活的程序设计语言,只有通过不断的上机练习,才能较好地理解和掌握C语言。
在实验课程中常采用的是较为常用的VisualC++®6.0(简称VC6)开发环境。
本实验指导书中共有十三个实验,每一个实验内容中都包含若干个实验项目,每一次上机所需时间设计为2个学时,共26学时。
实验应掌握正确的方法,即:
实验前先写好程序,然后再上机调试通过,并对调试结果进行分析,总结实验的收获,以进一步理解和巩固所学知识。
实验一开发环境与程序设计
一、实验目的
1.熟悉VC6的开发环境
2.掌握利用VC6进行程序编辑、构建与调试的方法
3.了解子函数的调用方法
4.熟悉C源程序的结构和特点
二、实验内容
1.VC6环境的使用
(1)掌握启动与关闭VC6的方法。
(2)熟悉VC6各菜单项的内容与各窗口的用途。
(3)建立一个项目test,其中包含一个源文件:
test.c,编译、运行并查看其结果,文件内容如表1所示:
test.c文件内容
1#include
2voidmain()
6{
7printf("大家好,欢迎使用VC开发环境\n");
8}
2.建立相应项目和源文件,并输入下表信息,执行结果,体会函数调用关系。
#include
//求两个int型数中的大者
intmax(intx,inty)
{
if(x>=y)
returnx;
else
returny;
}
voidmain()
{
inta,b,max1;
scanf("%d%d",&a,&b);
//调用max函数,通过max返回最大者
max1=max(a,b);
printf("最大者为:
%d",max1);
}
3.分别输入表1、表2所示程序源代码
(1)对源程序进行编译,观察屏幕上显示的编译信息,如有错误产生则找出原因并改正,再进行编译,直至没有错误。
(2)进行连接并运行程序,分析运行结果。
表1程序代码
#include
voidmain()
{
inta,b,sum1;
floatx,y,sum2;
a=123;
b=456;
sum1=a+b;
printf("sumis%d\n",sum1);
x=12.3;
y=12.6;
sum2=x+y;
printf(“sum2=%5d”,sum2)
}
3.以下表2代码接受从键盘上输入的int型数x,乘2后赋值给int型的p单元,若有错,请改正。
表2程序代码
#include
voidmain()
{
scanf(x);
intp=x*2;
printf(“p=”,p)
}
实验二数据类型、运算符和表达式
一、实验目的
1.掌握C语言的基本数据类型及其意义
2.熟悉变量的定义与赋值、引用方法
3.掌握C语言的算术运算符及表达式及赋值语句的应用
4.掌握输入/输出函数的使用
5.熟悉各种常用的格式转换符
6.进一步熟悉C语言程序的编辑、编译、连接和运行的过程
二、实验内容
1.分析表1~表3程序代码,若有错,则改正。
表1代码1
#include
voidmain()
{chars1=‘3',s2=‘4',s3='5';
intc1=101,c2=102;
printf("3%c\t4%c\t5%c\n",s1,s2,s3);
printf("s1=%d\ts2=%d\ts3=%d\n",s1,s2,s3);
printf("c1=%d\t~%c",c1,c1);
printf("c2=%d\t~%c",c2,c2);
}
表2代码2
#include
voidmain()
{
floatx=8.3,y=4.2,s;
inta=7;
s=x+a%5*(int)(x-y)%2/3;
printf("s=%f",s);
}
表3代码3
#include
voidmain()
{
inti,j,p,q;
i=3;j=6;
p=i++;q=--j;
printf("%d,%d,%d",i,j,p,q);
p=i--+3;q=++j-4;
printf("%d,%d,%d,%d",i,j,p,q);
}
2.请改正表4~表6程序代码的错误。
表4代码4
#include
#definePI3.14
voidmain();
{
intr=3;area ;
area=PI*r*R ;
print("%d",r,area);
}
表5代码5
#include
voidmain()
{intm;
doublex;
scanf("%1d",&m);
x=3.14*m*m
printf("f",x);
}
表6代码6
#include
voidmain()
{/*求a,b的和,要求精确到小数点后9位,并输出*/
floata=12.1,b=0.010000087,sum;
sum=a+b;
printf("sum=%d",sum);
}
3.按表7~表8所示程序代码中的注释要求将程序填写完整。
表7代码7
#include
voidmain()
{/*完成a,b两个数的交换*/
inta=9,b=5;
a+=b;
b=;
a-=;
printf("%d%d",a,b);
}
表8代码8
#include
voidmain()
{
intm,n;
floatx=3.5,y=6.2;
scanf("%d,%d",&m,&n);
/*每个数的输出宽度为6,两数之间以逗号分隔*/
printf(,m,n);
/*每个数的输出宽度为7,小数位数为2*/
printf("x=,y=",);
}
4.编写程序,用getchar函数读入两个字符c1,c2,然后分别用putchar函数和printf函数输出这两个字符及其ASCII码,并思考:
变量c1,c2应定义为字符型还是整型?
或是二者皆可?
5.已知某商品单价2元/斤,现销售5.12斤,求销售额。
要求:
已知条件用scanf完成。
实验三逻辑结构程序设计
一、实验目的
1.掌握逻辑运算符和逻辑表达式的正确使用
2.熟悉顺序结构中语句的执行过程
3.掌握if语句和switch语句
4.掌握基本的程序调试方法
三、实验内容
1.求分段函数的值,分段函数如下:
要求通过scanf语句输入x的值,printf语句输出y的值。
说明:
程序编译成功,只是说明没有语法错误,但不一定能得出正确结果,因为有可能存在逻辑错误。
通过跟踪变量、调试程序,可以找出问题所在。
通常所用的调试方法有以下3种:
(组建/开始调试)
(1)单步跟踪:
StepInto(F10)
(2)运行到光标处:
Runtocursor(Ctril+F10)
(3)设置断点:
Insert/RemoveBreakpoint(F9)
调试的一般过程:
调试,是指在程序的运行过程的某一阶段观测程序的当前状态,要使程序在执行到某一行时暂停,应首先在该行设置断点。
然后通过“组建(Build)/开始调试(StartDebug)/Go”命令菜单执行,使程序进入调试状态,此时注意观察:
组建菜单此时变为Debug菜单。
程序执行到断点处会停顿下来。
然后可采用Debug菜单中的4条命令来控制程序的运行。
StepOver:
运行当前断点指向的代码(只运行一条代码)
StepInto:
若当前断点所指代码是一个函数的调用,则进入该函数单步执行。
StepOut:
若当前执行在某函数内,使程序运行至函数返回处。
RuntoCursor:
使程序运行至光标所指的代码处。
单步运行表5所示程序代码,按要求进行变量跟踪,并写出调试结果。
表5代码5
#include
voidmain()
{
inti,j,k,ss,m=1,n=1;
scanf("%d%d",&i,&j);
/*查看变量i,j的取值,读入数据是否正确?
*/
m+=i++;
/*观察变量m,j的结果,为什么?
*/
n*=--j;
/*观察变量n,j的结果,为什么?
*/
ss=(k=m+2,n-5,k+n);
/*观察变量k的结果,为什么?
*/
printf("%d",ss);
/*查看最终结果,为什么?
*/
}
2.给出一个百分制成绩,要求输出成绩等级A、B、C、D和E。
90分以上为A,89~80为B,79~70为C,69~60为D,60分以下为E。
(1)要求分别用if语句和switch语句来实现
(2)输入数据大于100或小于0时,给出提示信息“输入数据出错!
”,并结束程序运行。
3.定义一个不多于5位的正整数,要求
(1)用scanf输入,并求出它是几位数
(2)分别输出每一位数字
(3)按逆序输出各位数字,例如原数是321,应输出123
(4)对不合法的输入给出提示信息,并结束程序
实验四循环控制程序设计
一、实验目的
1.掌握利用while语句、do…while语句和for语句实现循环控制的方法
2.掌握循环结构和选择结构的嵌套设计方法,以及多重循环的设计方法
3.了解控制语句break、continue和goto等语句的作用及使用方法
4.进一步熟悉程序的调试方法
二、实验内容
1.调试表1所示程序代码,分别输入5和6,以单步跟踪的方式运行程序。
观察循环中命令的执行及转向情况,并记录程序的运行结果。
表1代码1
#include
voidmain()
{
intn;
while
(1){
printf("请输入一个数:
");
scanf("%d",&n);
if(n%2==1){
printf("我说的是");
continue;
}
break;
}
printf("谢谢,这正是我要的数据!
");
}
2.输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。
3.表2所示程序代码的功能是:
假设树高k厘米,小蚕每天向上爬m厘米,每天晚上因睡觉向下滑n厘米,爬到顶后不再下滑(n 计算小蚕需要多少天才能爬到树顶。 (1)在花括号的说明处将程序补充完整。 (2)测试数据: 分别令k、m、n为253、71、29,输出结果应为6。 表2代码2 #include voidmain() { intk,m,n,h,day=0;//h为当天最高点 printf("请输入3个数: "); scanf("%d%d%d",&k,&m,&n); { /*在此处编写若干语句,使程序完整。 */ } printf("\n需要%d天,小蚕可以爬到树顶。 \n",day); } 4.使用循环语句编程,输出图1所示的九九乘法表。 * 1 2 3 4 5 6 7 8 9 -- -- -- -- -- -- -- -- -- -- 1 1 2 2 4 3 3 6 9 4 4 8 12 16 5 5 10 15 20 25 6 6 12 18 24 30 36 7 7 14 21 28 35 42 49 8 8 16 24 32 40 48 56 54 9 9 18 27 36 45 54 63 72 81 图1九九乘法表 5.分别用while语句、do…while语句编写程序,计算 要求: (1)用单循环编写程序 (2)使最后一项 的值小于等于给定的 即可结束运算,设 (3)除了输出e以外,同时还要输出总的项数n 实验五数组 一、实验目的 1.掌握一维数组与二维数组的定义、初始化及使用方法 2.掌握字符数组和字符串函数的使用 3.掌握与数组有关的算法 4.进一步理解模块化程序设计的方法 二、实验内容 1.表1代码所示程序的功能是: 将含n个元素的数组xx的前k个元素(k 例如: 输入: 7和1234567,再输入: 5,则输出: 6712345 请在横线处填入适当的内容,将程序补充完整。 表1代码1 #include voidmain() { intn,k,xx[20]; inti,j,t; printf("请输入元素个数: "); scanf("%d",&n); printf("请输入%d个数: ",n); for(i=0;i scanf("%d",&xx[i]); printf("\n请输入要移动的元素个数: "); scanf("%d",&k); for(i=0;i { t= ; for(j=1;j { ; } ; } printf("\n移动之后的元素序列为: \n"); for(i=0;i printf("%3d",④); printf("\n"); } 2.表2所示程序代码的功能是: 对数组a中的n种商品价格进行分段统计,商品各段价格的数目存到数组b中,其中: 价格为100元以下的个数存到b[0]中,价格在100到199元之间的个数存到b[1]中,价格在200到299元的个数存到b[2]中,价格在300到399元的个数存到b[3]中,价格在400到499元的个数存到b[4]中,价格在500以上的个数存到b[5]中。 例如: 当数组a中的数据为: 90、180、270、380、590、530、140、750、380时,调用函数后,数组b中存放的数据应是: 1、2、1、2、0、3。 表2代码2 #include voidmain() { inti,a[100]={90,180,270,380,590,530,140,750,380},b[6]; { /*在此处编写若干代码,使程序完整*/ } printf("结果是: "); for(i=0;i<6;i++) printf("%d",b[i]); printf("\n"); } 3.编写程序,输入10个整数,再把它们从小到大的顺序进行排列,最后再输入一个整数k,并将k插入到该整数数列中,插入后的数列仍然从小到大排列。 例如: 输入6,3,42,23,35.,71,98,67,56,38,最后输入待插入的数为59,则输出结果应为: 3,6,23,35,38,42,56,59,67,71,98。 实验六函数 一、实验目的 1.掌握函数的定义和调用方法 2.掌握函数形参和实参的对应关系,以及“值传递”的方式 3.理解函数的嵌套调用和递归调用的方法 4.理解变量作用域和存在期的概念 5.掌握全局变量和局部变量、动态变量、静态变量的概念和使用方法 6.学习对多文件的程序进行编译和运行的方法 二、实验内容 1.输入表1程序代码并执行,观察程序的运行结果。 表1代码1 #include inta=3,b=5; intmax(inta,intb) { intc; c=a>b? a: b; returnc; } intmain() { printf("%d\n",max(a,b)); return1; } (1)在主函数的printf语句前加入inta=8;语句后重新执行程序,观察其运行结果。 分析变量a的作用域,程序修改前后两次调用max函数时的实参a是否为同一变量? (2)将inta=3,b=5;放入同一目录中的”f.h”文件中,并在main函数文件中加入#include“f.h”,主函数改为以下代码,运行并观察其结果。 #include #include“f.h” voidmain() { externinta,b; printf("%d
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验 指导书 1104