C语言上机实验指导.docx
《C语言上机实验指导.docx》由会员分享,可在线阅读,更多相关《C语言上机实验指导.docx(84页珍藏版)》请在冰豆网上搜索。
C语言上机实验指导
实验一VC的使用
一、实验目的
●了解并掌握程序设计所必须的计算机基本操作技能
●了解并熟悉VC开发环境
●了解并掌握VC开发环境下的C程序的编译、连接与运行方法
●了解并掌握查找与排除程序编译错误的方法
●了解不同类型的程序错误
二、实验环境
●个人计算机一台,PIII500(或同等性能)以上CPU,128MB以上内存,500MB以上硬盘剩余空间,SVGA彩色显卡。
●WindowsXP操作系统
●MicrosoftVisualC++6.0(中文/英文)版
三、实验内容
1VisualC++开发环境介绍
VisualC++是一个功能强大的可视化软件开发工具。
自从1993年,微软公司(Microsoft)推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000、WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为平台。
VisualC++6.0不仅是一个C\C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
VisualC++为用户开发C程序提供了一个集成环境,这个集成环境包括:
源程序的输入和编辑,源程序的编译和连接,程序运行时的调试和跟踪,项目的自动管理,为程序的开发提供各种工具,并具有窗口管理和联机帮助等功能。
VisualC++6.0开发环境的界面如图1所示。
图1VC开发环境
2VC环境下的C程序开发
尽管VC的功能很强大,但二级考试只是将其作为一个可视化的C编译器来使用,因此要求考生掌握的操作很简单。
2.1启动VC
在计算机安装VC开发环境后,桌面都会出现一个VC的图标,如图2所示,双击该图标就可以启动VC。
有的计算机上显示的名称是“VisualC++6.0”或“MicrosoftVisualC++”等,但图标都是一样的。
也可以在“开始”菜单的“所有程序”子菜单中,找到相应的启动启动项。
图2VC图标
2.2创建一个C源程序文件
启动VC后,单击“菜单栏”上的“文件菜单”,弹出一个下拉菜单,单击其中的“新建”选项,如图3所示。
图3创建C源程序
单击“新建”选项后,会弹出“新建”对话框,如图4所示。
选择上方的“文件”选项卡,选中“C++SourceFile”选项。
然后再右方的“文件名(N)”一栏中为程序起个名字,可以是任意字母和数字的组合,但其中不能有空格,并且最后一定要以“.c”结尾。
然后在“位置(C)”一栏中为程序选择一个合适的位置存放,也可以单击图4中划圈的按钮,会弹出一个对话框,让用户选择存放的位置。
我们现在把这个程序命名为“example-1.c”,放在D盘下的program文件夹中。
图4“新建”对话框
2.3编写程序
在单击图4中的“确定”按钮后,VC就会在D盘program文件夹下创建一个名为“example-1.c”的C源程序,并在“程序编辑区”中打开它,用户可以在其中输入程序,如图5所示。
图5中是一个很简单的小程序,只有一条printf()函数调用语句,其功能是向屏幕上输出一行信息“Helloworld!
”。
图5编写程序
2.3C源程序的编译、连接与运行
C源程序文件是不能直接被计算机所执行的,它需要通过编译(Compile)和连接(Link)两个步骤,才能生成能被计算机直接执行的“可执行文件”。
整个过程如图6所示,请牢记这张图。
图6C程序的编译连接过程
C源程序文件是文本文件,它的后缀名为“.c”,它不能被计算机直接执行;经过编译后,生成目标文件,它是二进制文件,后缀名为“.obj”,它也不能被计算机直接执行;再经过连接(有的书籍称为链接),生成可执行文件,它是二进制文件,后缀名为“.exe”,它可以被计算机直接执行。
注意:
C程序的编译连接过程一定要熟记,包括每种文件的类型、后缀名、能否被计算机直接执行,笔试常会考查该知识点。
因此,在编写完C源程序后,首先要做的就是编译。
编译实际上就是进行语法检查,以保证C源程序完全符合C语言的语法,没有语法错误。
在VC开发环境下,编译C源程序的方法是单击“菜单栏”的“组建”选项,弹出一个下拉菜单,单击其中的“编译”选项,如图7所示。
或者也可以单击图7中划圈的按钮,那是“编译”的快捷键。
图7C程序的编译
随后,VC会弹出一个小对话框,如图8所示,不用去理会它的具体含义,直接单击“是”。
图8C程序的编译
注意:
如果在VC的使用过程中遇到类似的弹出小对话框,都不用去理会它的具体含义,直接单击“是”即可。
VC随即开始对C源程序进行语法检查,其结果在VC底部的“编译结果输出区”中显示,如图9所示。
图9编译结果
其中,“error(s)”代表语法错误,“warning(s)”代表警告。
图9中的结果显示,语法错误(error(s))与警告(warning(s))的数量都为0,也就意味着程序编译成功。
在实际编程当中,语法错误(error(s))是绝对不允许存在,哪怕存在一个语法错误(error(s)),程序都无法进入下一步的连接和运行,也就是编译失败。
因此“error(s)”前面的错误必须是“0”,才能进入下一步的连接和运行,否则就要改成程序中的错误,并重新进行编译,直到编译成功。
而对于警告(warning(s)),则可以不必理会,因为造成警告(warning(s))的原因比较复杂,并不一定是因为语法错误。
需要特别指出的是,编译成功只能保证程序在语法上是正确的,并不能保证程序是无错的。
例如,“奥巴马是德国总理”,这句话在语法上是正确的,但在逻辑上却是错误。
编译器无法检查出程序在逻辑上的错误。
由图6可知,编译结束后需要进行连接,然后才能运行。
但在VC当中,这两部可以合并一步。
在编译成功后,“组建”菜单中的“执行”选项就会出现,直接单击,VC就会连续进行连接和执行两步操作,如图10所示。
或者也可以单击图10中划圈的按钮(红色惊叹号),那是“执行”的快捷键。
图10C程序的执行
程序在运行后,VC会弹出一个黑色的DOS界面,来显示程序的运行结果,如图11所示。
图11程序的运行结果
我们看到,运行界面上出现了两行信息,其中第一行是“Helloworld!
”,这是由程序中的printf()语句输出的,正是“example-1.c”这个程序的运行结果。
而第二行“Pressanykeytocontinue”,它是由VC自动输出的提示信息,不属于程序的运行结果。
事实上,任何程序在运行结束后,VC都会在最后加上这样一行提示信息。
我们可以把它作为程序运行结束的标志,只有当最后一行出现了“Pressanykeytocontinue”,才能证明程序正常运行结束了。
否则,程序可能在等待用户输入数据,或者陷入了死循环。
2.4关闭工作空间
在完成一个程序的编写、编译、连接和运行后,如果要编写和运行另一个程序,那么要把前一个程序的编辑区及其工作空间关闭。
最简单的方法就是直接将整个VC关闭,然后重新启动。
也可以单击“菜单栏”上的“文件菜单”,弹出一个下拉菜单,单击其中的“关闭工作空间”选项,如图12所示。
这样程序的编辑区和工作空间就一起关闭了。
图12关闭工作空间
注意:
在编写和运行另一个程序前,一定要关闭工作空间,而不能只是简单的把程序的编辑区关闭,这样会造成下一个程序无法运行。
2.5打开开已存在的C源程序文件
要打开一个已存在的C源程序文件,首先要知道该文件的位置。
例如,前面的那个“example-1.c”文件,我们知道它是放在D盘的program文件夹下的。
下面,我们来用VC打开它。
单击“菜单栏”上的“文件菜单”,弹出一个下拉菜单,单击其中的“打开”选项,如图13所示。
图13打开C源程序文件
随后,会弹出一个“打开”对话框,如图14所示。
单击图14中划圈的按钮,就可以在弹出的下拉界面中选择要到达的位置。
现在选中D盘,然后双击D盘中的program文件夹,就可以进入该文件夹了,如图15所示。
图14“打开”对话框
默认情况下,“打开”对话框只会显示C\C++程序或工程文件。
但用VC也可以打开其它类型的文件(在程序设计题的解题技巧中会用到该操作),只要单击图15中划圈的按钮,然后再弹出的下拉菜单中选中“所有文件(*.*)”即可显示所有类型的文件。
用鼠标单击选中要打开的文件“example-1.c”然后单击右方的“打开”按钮,即可打开该文件。
图15打开文件
3C程序编译错误的查找与排除
在实际的程序编写过程中,语法错误时难免的,尤其是对初学者而言。
编写的程序中出现语法错误是很正常的事情,没有必要感到急躁或灰心。
平时的练习中犯些错误,是有助于提高程序设计水平的。
VC为我们提供了一个辅助功能,帮助我们查找和排除程序中的编译错误。
以前面的那个简单程序为例,故意将“printf("Helloworld!
\n");”语句最后的那个分号(;)去掉,这样很明显就出现了一个语法错误。
事实上,初学者也常犯这样的错误。
现在,再次编译这个源程序,编译结果显示,出现了一个语法错误,编译失败,如图16所示。
图16程序的编译结果
在编译失败的情况下,“执行”按钮是灰色,不可点击。
下面要做的就是要找出这个语法错误。
将图16中划圈的滚动条向上拖动,会看到一行信息“D:
\program\example-1.c(6):
errorC2143:
syntaxerror:
missing';'before'}'”,如图17所示。
这是一行错误提示信息,辨认的标志在“errorC2143”上,“error”意味着该行是语法错误的提示信息(如果是“warning”则意味着该行警告错误的提示信息,不用去管它),“C2143”是错误代码。
把鼠标移到该行的任意位置上,并双击,该行错误提示信息变为兰色,如图17所示。
图17错误提示信息
此时,在回到“程序编辑区”,观察它的变化,如图18所示。
图18程序编辑区
注意到程序编辑区的做左端多了一个兰色的小箭头(图中划圈部分),该箭头所指向的行就是该语法错出现的大概位置,可能在箭头所指行,也可能在前一行或后一行。
实际上,尽管错误提示信息时英文的,但其中多数的单词都很简单常见,大致上是可以读懂的。
例如图17中的语法错误提示“D:
\program\example-1.c(6):
errorC2143:
syntaxerror:
missing';'before'}'”,后半句的意思就是:
在“}”前丢了“;”。
而兰色箭头又指出了该错误的大概位置,所以应该是能够比较容易的排除该错误的。
附录1中列出了常见的编译错误,可供需要时查阅。
需要提醒的是,如果出了多个“error(s)”,那么一定要从第一个错误信息提示行开始查错。
并且每排除一个错误,就要重新编译一次,因为后面的错误可能是由于前面的错误产生的。
4C程序的错误类型
4.1语法错误
语法错误是指不符合C语言的语法规定,例如左右括号数量不匹配、语句最后漏了分号等等,这些错误会在编译时被发现并指出。
这些错误都属于“致命错误”,不改正是无法通过编译的。
对一些在语法上有轻微毛病但不影响程序运行的问题(如定义了某个变量但始终未使用),编译时会发出“警告”。
但“警告”不属于“致命错误”,程序可以通过编译。
但是在程序的运行过程中,这些“警告”可能造成一些运行时错误。
4.2逻辑错误
程序没有语法错误,可以正常运行,但结果不对。
例如,要求a和b的和,可是却写成了“a-b;”。
语法上没有错,但求出的却是a和b的差。
这类错误可能是由于设计算法时的错误,也可能是由于在编写程序时出现的疏忽所致。
这类错误计算机是无法检查出来的。
4.3运行错误
有时程序既无语法错误,又无逻辑错误,但程序不能正常运行或结果不对。
多数情况下,是由于数据不正确,或数据类型不合适造成的。
例如:
要求a/b,如果b的值为非0程序不会有问题,而如果b的值为0就为造成溢出(over-flow)错误。
四、总结与思考
VC的使用是整个上机考试的基石,如果不能熟练地使用VC,那么编程能力根本无从提高,也会严重影响考试的发挥。
因此,应该要反复练习“实验内容”中所讲到的操作,并且用一些课本上的其它程序来进行实验。
尤其是“C编译错误的查找与排除”以及附录1中常见的编译错误,如果能够熟悉并掌握,能够对程序设计水平的提升起到很大的促进作用。
实验二数据处理
一、实验目的
●熟悉并掌握数据输入函数的格式与应用
●熟悉并熟悉数据输出函数的格式与应用
●进一步熟悉VC的使用
●学习独立排除程序中的编译错误
二、实验环境
●个人计算机一台,PIII500(或同等性能)以上CPU,128MB以上内存,500MB以上硬盘剩余空间,SVGA彩色显卡。
●WindowsXP操作系统
●MicrosoftVisualC++6.0(中文/英文)版
三、实验内容
1程序阅读与分析
注意:
以下在书写时,用“”代表空格,用“↙”代表回车换行。
1.1printf()函数
阅读以下程序,并分析预测程序的运行结果,然后上机验证。
/*example-1.c*/
#include
main()
{
inta=5,b=7;
floatx=67.8564,y=-789.124;
charc='A';
longn=1234567;
printf("%d%d\n",a,b);
printf("%3d%3d\n",a,b);
printf("%f,%f\n",x,y);
printf("%8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n",x,y,x,y,x,y);
printf("%e,%10.2e\n",x,y);
printf("%c,%d,%o,%x\n",c,c,c,c);
printf("%ld,%lo,%x\n",n,n,n);
}
分析预测的运行结果:
上机验证的运行结果:
1.2scanf()函数
以下程序中的scanf语句用于输入数据,目标是使得a的值为3,b的值为7,m的值为5,n的值为9,x的值为8.5,y的值为71.82,c1的值为′A′,c2的值为′a′,即屏幕上应出现以下的输出结果:
a=3b=7
m=5n=9
x=8.500000y=71.820000
c1=Ac2=a
那么应该从键盘上怎样输入数据?
请上机验证,并把正确的结果写下来。
程序中的printf语句会把各个变量的值输出。
/*example-2.c*/
#include
main()
{
inta,b,m,n;
floatx,y;
charc1,c2;
/*以下scanf语句用于输入数据*/
scanf("a=%db=%d",&a,&b);
scanf("%d,%d",&m,&n);
scanf("%f%e",&x,&y);
scanf("%c%c",&c1,&c2);
/*以下printf语句用于输出各变量数据,验证结果*/
printf("\n以下是输出结果:
\n");
printf("a=%db=%d\n",a,b);
printf("m=%dn=%d\n",m,n);
printf("x=%fy=%f\n",x,y);
printf("c1=%cc2=%c\n",c1,c2);
}
正确的输入格式是:
1.3putchar()与getchar()函数
观察分析以下程序,选出对应的输入与输出,并上机验证。
/*example-3.c*/
#include
intmain()
{
charc1,c2,c3;
c1=getchar();
c2=getchar();
c3=getchar();
printf("\n以下是输出:
\n");
putchar(c1);
putchar(c2);
putchar(c3);
printf("\n");
}
输入:
A)abc↙B)abc↙C)a↙b↙
输出:
A)a↙B)abc↙C)ab↙
b↙
在三组输入与输出中:
输入()与输出()对应
输入()与输出()对应
输入()与输出()对应
2程序编写
按要求编写程序或将程序填充完整。
2.1显示图形
在花括号({})之间填入适当的语句,并运行,使其能够显示图1所示的图形。
/*example-4.c*/
#include
main
{
}
【解题提示】
可以使用printf()语句按行直接输出。
图1example-4.c程序的输出结果
2.2温度转换
在花括号({})之间划线的部分填空,将程序补充完整实现下述功能,并上机运行验证。
该程序的功能是从键盘上输入一个实数F,代表华氏温度。
将华氏温度转换为摄氏温度C(实数)并输出,摄氏温度保留两位小数。
华氏温度与摄氏温度的关系式:
例如,
输入:
17.2
输出:
Thetempratureis-8.22
/*example-5.c*/
#include
main()
{
scanf("%lf",&f);
printf("Thetempratureis\n",c);
}
【解题提示】
(1)变量要先定义后使用。
(2)控制输出的实数的小数位的方法是“%n1.n2f”,n1和n2是两个整数,n1表示输出的实数占的总位数,n2表示输出实数的小数位的位数。
2.3数据交换
在花括号({})之间划线的部分填空,将程序补充完整实现下述功能,并上机运行验证。
该程序的功能是从键盘上输入两个整数,分别存放在变量a和b中,然后将a与b中的数据交换。
例如,
输入:
1020
输出:
beforeswap:
a=10,b=20
afterswap:
a=20,a=10
/*example-6.c*/
#include
main()
{
/*定义变量*/
/*输入两个整数*/
printf("Inputaandb:
");
scanf("%d%d",&a,&b);
/*输出数据交换前,a与b的值*/
printf("beforeswap:
");
printf("a=%d,b=%d\n",a,b);
/*数据交换*/
/*输出数据交换后,a与b的值*/
printf("Afterswap:
");
printf("a=%d,b=%d\n",a,b);
}
【解题提示】
两个整数的交换是十分重要的,一定要掌握
四、总结与思考
数据的输入和输出,以及数据的基本数学运算时整个程序设计的根基,因为程序设计的本质就是数据的获取以及数学运算。
因此,一定要熟练掌握几个数据输入输出函数的格式与应用方法,以及基本数学运算符的运算法则。
在完成以上实验的基础上,有兴趣的同学可以在课后思考以下问题:
思考题:
数字加密
在花括号({})之间划线的部分填空,将程序补充完整实现下述功能,并上机运行验证
输入1个四位数,将其加密后输出。
方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。
例如,
输入:
1257
输出:
Theencryptednumberis4601
/*think-1.c*/
#include
main()
{
/*n用来存放输入的4位数,n1存放4位数的第1位数字*/
/*n2存放4位数的第2位数字,n3存放4位数的第3位数字*/
/*n4存放4位数的第4位数字*/
intn,n1,n2,n3,n4;
scanf("%d",&n);
/*获取第1位数*/
/*获取第2位数*/
/*获取第3位数*/
/*获取第4位数*/
/*第1位数加9对10取余*/
/*第2位数加9对10取余*/
/*第3位数加9对10取余*/
/*第4位数加9对10取余*/
/*第1位和第3位上的数字互换,第2位和第4位上的数字互换*/
printf("Theencryptednumberis%d\n",n);
}
【解题提示】
对于一个整数n而言,如果要获取个位数,那么直接对10取余就可以了:
n%10。
如果要获得十位数,那么首先要把个位数抹去:
n/10,然后原来的十位数就变成了个位数。
如果要获得百位数,那么首先要把十位数和个位数抹去:
n/100,然后原来的百位数就变成了个位数。
根据以上的分析,我们可以发现,要获得一个整数的个位数,就将n对10取余(n%10);要抹去一个整数的最末x位,就将n除以10x(n/10x)。
实验三选择结构程序设计
一、实验目的
●了解并掌握C语言表示逻辑值的方法(以0代表“假”,以非0代表“真”)
●了解并掌握逻辑运算符的运算法则
●熟悉并掌握逻辑表达式的使用
●熟练掌握if语句及其嵌套形式的使用
●熟练掌握if-ese语句及其嵌套形式的使用
●熟练掌握switch语句的使用
二、实验环境
●个人计算机一台,PIII500(或同等性能)以上CPU,128MB以上内存,500MB以上硬盘剩余空间,SVGA彩色显卡。
●WindowsXP操作系统
●MicrosoftVisualC++6.0(中文/英文)版
三、实验内容
注意:
以下在书写时,用“”代表空格,用“↙”代表回车换行。
1程序阅读与分析
阅读以下程序,并分析预测程序的运行结果,然后上机验证。
(在书写时,用“”代表空格,用“↙”代表回车换行)
1.1switch语句
阅读以下程序,并分析预测程序的运行结果,然后上机验证。
/*example-7.c*/
#include
main()
{
intn;
printf("Inputn:
");
scanf("%d",&n);
switch(n)
{
case1:
printf("Iamcase1.\n");
default:
printf("Iamdefault.\n");
case2:
printf("Iamc