C语言上机指导WINTCVC60Word文档下载推荐.docx
《C语言上机指导WINTCVC60Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言上机指导WINTCVC60Word文档下载推荐.docx(79页珍藏版)》请在冰点文库上搜索。
有时程序本身不存在语法错误,也能够顺利运行,但是运行结果显然是错误的。
开发环境所提供的编译系统无法发现这种程序逻辑错误,只能靠自己的上机经验分析判断错误所在。
程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。
有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。
经常上机的人见多识广,经验丰富,对出现的错误能很快地找到出错点。
通过C语言提供的调试手段逐步缩小错误点的范围,最终找到错误点和错误原因,这样的经验和能力只有通过长期上机实践才能取得。
向别人学习调试程序的经验当然重要,但更重要的是自己上机实践,分析、总结调试程序的经验和心得。
别人告诉你一个经验,当时似乎明白。
当出现错误时,由于情况千变万化,这个经验不一定用得上,或者根本没有意识到使用该经验。
类似的错误照犯不误。
只有通过自己在调试程序过程中的经历并分析总结出的经验才是自己的。
一旦遇到问题,应对之策自然而生。
所以调试程序不能指望别人替代,必须自己动手。
编制出源程序,只能说完成一半工作,另一半工作就是调试程序、得到正确结果。
请牢牢记住这句话:
“程序是调试出来的!
”。
二、实验要求
上机实验一般经历上机前的准备(编程)、上机调试运行和实验后的总结三个步骤。
1.上机前的准备
根据问题,进行分析,选择适当算法并编写程序。
上机前一定要仔细检查程序(称为静态检查)直到找不到错误(包括语法和逻辑错误)。
分析可能遇到的问题及解决的对策。
准备几组测试程序的数据和预期的正确结果,以便发现程序中可能存在的错误。
上机前没有充分的准备,到上机时临时拼凑一个错误百出的程序,宝贵的上机时间白白浪费了;
如果抄写或复制一个别人编写的程序,到头来自己一无所获。
2.上机输入和编辑C源程序,并对源程序进行编译、连接、调试运行。
按照C语言语法规则而编写的C程序称为源程序。
源程序由字母、数字及其它符号等
构成,在计算机内部用相应的ASCII码表示,并保存在扩展名为.C或.CPP的文件中。
源程序是无法直接被计算机运行的,这就需要把源程序先翻译成机器指令(目标程序),然后计算机的CPU才能运行。
源程序翻译过程由两个步骤实现:
编译与连接。
首先对源程序进行编译,即把每一条语句用若干条机器指令来实现,以生成由机器指令组成的目标程序。
但目标程序还不能马上交计算机直接运行,因为在源程序中,输入、输出以及常用函数的计算过程并不是用户自己编写的,而直接调用系统函数库中的库函数。
因此,必须把“库函数”的计算过程指令连接到经编译生成的目标程序中,合成可执行程序,并加入经操作系统对执行程序的地址重定位机制而产生的文件头,方可由计算机运行,最终得到结果。
首先进入C语言集成开发环境,输入并编辑事先准备好的源程序;
然后对源程序进行编译,查找语法错误,若存在语法错误,重新进入编辑环境,改正后再进行编译,直到通过编译,得到目标程序(扩展名为.OBJ)。
下一步是进行连接,产生可执行程序(扩展名为.EXE)。
使用预先准备的测试数据运行程序,观察是否得到预期的正确结果。
若有问题,则仔细调试,排除各种错误,直到得到正确结果。
在调试过程中,要充分利用C语言集成开发环境提供的调试手段和工具,例如单步跟踪、设置断点、监视变量值的变化等。
整个过程应自己独立完成。
不要一点小问题就找老师,学会独立思考,勤于分析,通过自己实践得到的经验用起来更加得心应手。
3.整理上机实验结果,写出实验报告
实验结束后,要整理实验结果并认真分析和总结,根据老师要求写出实验报告。
实验报告一般包括如下内容:
⑴实验名称。
⑵实验目的要求
⑶具体的实验步骤(含程序或程序段)
⑷实验结果
原始数据、相应的运行结果和必要的说明。
⑸实验小结
实验过程中的心得体会和经验教训的分析与思考
C语言编译工具及其操作方法
一、WIN-TC编译系统
WIN-TC是基于windows操作系统的一个16位的C语言编译工具,它的内核还是TurbocV2.0。
所以最好是在windowsXP下使用。
操作步骤:
1、进入WIN-TC集成环境:
双击桌面上的WIN-TC图标或在WIN-TC文件夹中双击WIN-TC.EXE文件进入WIN-TC集成环境,如图W-1。
若你想将自己的实验成果(含源程序)保存在自己的文件夹中,可以先建立一个文件夹,如:
C:
\mydoc,
然后单击:
编辑→编辑配置→工作目录右边图标→找到C\mydoc→确定。
出现如图W-2,你的实验成果将保存在C:
\mydoc文件夹中。
否则你的所有成果将保存在:
\WIN-TC\projects文件夹中。
在如图W-1主窗口中可能残留有其它C程序,此时可以单击:
文件→新建。
出现图W-3。
在图W-3的中间窗口中输入准备好的C语言源程序,认真仔细检查有无错误,然后转第2步进行编译连接。
此处,假设已经输入了如下程序:
例L1-1
#include<
stdio.h>
voidmain()/*主函数*/
{
printf(“Thisisaprogram.\n”);
/*在屏幕上显示:
Thisisaprogram*/
getch();
}
图W-1新建文件窗口
图W-2编辑配置
2、编译、连接源程序:
图W-3WIN-TC集成环中境源程序输入与编辑
在如图W-3中单击:
运行→编译连接,此时有2种可能:
●程序中有错误,此时在屏幕下部[输出]小窗口中有出错的行号及错误原因,应据此进行修改并再次编译连接。
●程序无错。
则出现如下图W-4
图W-4输入源程序文件名
输入文件名后单击:
保存,出现如图W-5,单击:
确定。
图W-5编译连接成功
3、运行程序
单击:
运行→编译连接运行→确定。
●特别重要提示:
在WIN2K或WINXP系统下运行,程序最后一行一定要加上:
否则,看不到运行结果。
出现如下显示运行结果的黑色窗口(图W-6),在此窗口中,若需要输入数据,则在此按照输入格式输入。
本例不要求输入数据。
图W-6运行结果
二、VISUALC++V6.0编译系统
VC++6.0是一个集成环境下的编辑、编译、运行C语言程序的工具,其操作步骤如下:
1、事先在尾逻辑盘上建立自己的工作文件夹(例如:
E:
\MYDOC)
2、单击桌面上的图标或单击:
开始→程序→MicrosoftVisualStudio6.0→MicrosoftVisualC++6.0,可启动VC++,屏幕上将显示图V-1所示的窗口。
图V-1VC++6.0主窗口
3、单击:
文件→新建→工程出现图V-2窗口,选中Win32ConsoleApplication并在在工程文本框中输入工程名(例如:
P1);
单击位置文本框右边的省略号按钮进行浏览并找到自己事先建立的文件夹(如:
\MYDOC).
单击确定→完成→确定
图V-2新建工程窗口
4、单击:
文件→新建→文件,选中“C++SourceFile”,在“文件”框中输入文件名(如VL1-1),若想将实验成果保存在自己的文件夹中,此处可以在目录对话框中输入自己的事先建立的文件夹(如:
c:
\mydoc)。
或单击目录对话框右边的…按钮并逐步选择到c:
\mydoc,出现图V-3。
图V-3输入文件名
●再单击:
确定按钮,出现如下图V-4
5、在图V-4的源程序编辑区内,输入源程序。
以如下程序VL1-1为例:
{/*函数体应该处于一对大括号中*/
inta,b,sum;
/*定义整形变量a,b,sum*/
a=123;
b=456;
/*给变量a,b赋值*/
sum=a+b;
/*做加法,并将此和赋值给变量SUM保存*/
printf("
total=%d\n"
sum);
/*输出变量SUM的值*/
}
图V-4输入源程序
●特别提示:
在VisualC++下,程序尾不要:
getch();
VC++不支持该函数。
6、单击:
编译→编译VL1-1.cpp,出现如图V-5。
在窗口底部信息框中可以看到:
0errer(s),0warning(s)表明编译通过,程序无任何错误,可以进行下一步连接。
图V-5编译源程序正确
7、若程序有错误,则出现图V-6,且在屏幕底小信息窗口中出现错误信息,应根据提示改正错误,重新进行第6步,直到无任何错误。
单击菜单编译→构建VL1-1.EXE进行连接。
无任何错误时出现如图V-7窗口。
进入第8步。
否则重新第5步修改源程序。
图V-6源程序有错误提示
(注:
本例题中sum变量未定义且第4行尾缺了分号;
。
改正后再重复第6步、第7步直到编译连接正确。
此时信息窗口中显示错误是0。
)
图V-7连接源程序正确
8、单击菜单编译→执行P1.EXE,出现如图V-9窗口。
图V-8执行程序
9、出现程序运行结果,如图V-9。
观察结果正确后,按任何键即可回到集成环境窗口。
若程序需要输入数据,则在图V-9中按照数据格式输入数据后得到运行结果。
若结果不正确,再修改源程序,重复第6、7、8、9步。
图V-9程序运行结果
10、完成第一个程序:
单击主菜单中的文件关闭工作区,弹出小窗口如图V-10,单击是
回到图V-1,完成第一个程序。
图V-10
●在硬盘上查看本工程p1产生的文件
在自己的文件夹如E:
\MYDOC中可以看到子文件夹P1,在P1中有VL1-1.CPP,这就是源程序文件。
有P1.DSW,这是P1工程(工作区)文件,打开(或双击)它可以重新进入P1工程进行修改。
进入P1中的DEBUG文件夹,有P1.EXE文件,这就是执行程序,双击它可以得到本程序运行结果。
11、开始第二个程序
重复3~10步输入并编辑、编译、连接、运行第2个源程序。
三、VC60环境下程序调试
程序编译连接通过后,发现运行结果不正确时会问“问题出在哪儿?
”,调试程序的过程就是缩小错误范围直到找到发生错误的语句并加以改正的过程。
1、在源程序中设置断点
设置断点就是为了缩小错误范围而将程序分成若干块甚至单个语句。
设置断点:
光标移到某程序行上按下F9键,该行前出现红色圆点。
程序执行到此会无条件停下来,
这是无条件断点。
有时想当某个变量或某一表达式等于某一特定值时能停下来,即依据条件设置断点,这叫条件断点,要在专门的窗口中设置,其方法较复杂,请参考其他资料。
图V-11程序中设置断点示意
2、跟踪执行
①单步执行:
F10键:
每次执行当前光标处的一行程序或一条语句或一次函数调用(不进入函数中)。
F11键:
每次执行当前光标处的一行程序或一条语句,遇到函数调用则进入该函数中。
②执行到下一个断点:
F5键:
从当前行一直执行到下一个断点处停
③执行到光标处
CTRL+F10键:
从当前行一直执行到光标处停
④执行完余下代码:
SHIFT+F10键:
从当前行执行完本函数中余下所有代码
⑤退出调试模式
SHIFT+F5键:
停止调试返回到编辑源程序状态
⑥重新开始
CTRL+SHIFT+F5键:
重新开始,返回掉程序的第一条代码
3、查看程序执行过程中变量值的变化
边执行变查看变量的值时调试的重要环节,进入调试模式后系统会自动打开Variables窗口和Watch窗口。
①Variables窗口:
其中包含三个标签。
Auto标签:
按字母顺序显示当前所有变量(包含变量的地址如&
a,若有的话)的值,构造型变量如数组、结构体则可按下前面的+号展开
Locals标签:
显示当前函数内所有局部变量的名称和值
This标签:
显示this指针的类型、名称和值
②Watch窗口:
含有Watch1~4等四个标签,每个标签都可以由用户输入任意变量和表达式并观察其值。
图V-12Variables窗口中的Auto标签
图V-13Variables窗口中的Locals标签
四、在C语言程序中使用汉字
在WIN2K和WIN-XP下汉字只能作为字符串使用,只有VC++系统中才能使用汉字串。
第一章上机题编译环境、数据类型
1、键盘输入圆的半径,输出其面积
#definePI3.14159/*编译预处理——符号常量*/
#include<
math.h>
/*编译预处理——头文件*/
voidmain()/*主函数,用户自定义的函数*/
{floatr,s;
/*定义变量r、s类型为单精度实型*/
Enteraradius:
"
);
scanf("
%f"
&
r);
/*由键盘输入圆的半径*/
s=PI*pow(r,2);
/*计算圆面积s*/
R=%f,S=%f\n"
r,s);
/*输出结果*/
2、整数溢出示例
voidmain()
{shortinta,b;
/*改为:
longinta,b;
则结果正确*/
a=32767;
b=a+1;
printf(“%d,%d\n”,a,b);
3、实型数据7位有效,小数保留6位例
voidmain()
{floata,b;
a=123456.789e5;
b=a+2;
printf(“%f\n”,a);
改为:
doublea,b;
后结果正确:
printf(“%f\n”,b);
}
4、实型数据7位有效,小数保留6位例
{floatx=111111.111,y=222222.222;
printf(“%f\n”,x+y);
5、字符与整数(ASCII码)输出例
{charch1,ch2;
ch1='
a'
;
ch2='
b'
ch1=%c,ch2=%c\n"
ch1,ch2);
ch1=%d,ch2=%d\n"
6、字符与字符串的区别(‘a’和”a”除了定界符不一样外,内存占用字节数不同)例
{charc1[]={'
},c2[]="
a"
%d,%d\n"
sizeof(c1),sizeof(c2));
}
第二章上机题学习C语言运算符、表达式
1、不同类型数据混合运算及PRINTF函数中格式串与输出项类型匹配例
{inta=1;
charc1='
A'
floatf=100;
doubled=200.0;
longl=40000;
printf("
\n%f"
a+c1+f+d);
%d"
sizeof(a+c1+f+d));
%ld"
a+l);
%f"
a+c1);
/*整数用实输格式%f输出,结果错误*/
%lf"
c1+d);
2、自增自减运算例
{inti=3,x,y;
x=i++;
/*执行后,x的值为3,i的值为4*/
y=++i;
/*执行后,y的值为5,i的值为5*/
%d%d%d\n"
x,y,i);
3、自增自减运算例
{inti=8;
%3d"
++i);
--i);
i++);
i--);
-i++);
%3d\n"
-i--);
/*单目运算++、--结合方向自右向左,相当于–(i++)和-(i--)*/
10、自增自减运算例
{intx=100;
%d,%d,%d,%d\n"
x++,x,--x,x);
/*TC20编译器下函数的实参数的求值顺序为:
自右向左*/
%d\n"
x);
4、强制类型转换例(变量num被强制转换输出后其本身值和类型未改变)
{floatnum=2.5;
inta;
a=(int)num;
a);
%f\n"
num);
sizeof(num));
5、赋值过程中溢出例
{inta,b=322,c;
floatx,y=8.88;
charc1=‘k’,c2;
a=y;
x=b;
c=c1;
c2=b;
printf(“%d,%f,%d,%c”,a,x,c,c2);
}/*变量c2的值按%c字符输出为什么是字符B呢?
*/
6、赋值表达式例
{intx=2,y,z;
x*=3+2;
(1)x=%d\n"
x*=y=z=4;
(2)x=%d\n"
x=y=1;
z=x++-1;
(3)x=%d***z=%d\n"
x,z);
z=x++*++y;
(1)x=%d***y=%d***z=%d\n"
x,y,z);
7、逗号表达式例
{inta=4;
charb='
B'
doublec=3.14;
(a*a,a)=%d\n"
(a*a,a));
(c+2.23,a)=%d\n"
(c+2.23,a));
(c,b,a)=%d\n"
(c,b,a));
8、逻辑表达式的值例
{charx='
m'
y='
n'
intn;
n=x<
y;
n);
n=x==y-1;
n=('
y'
!
='
Y'
)+(5<
3)+(y-x==1);
%d,\n"
9、逻辑表达式运算法则例
{inta=1,b=2,n,x;
n=1;
x=(a>
b)&
&
(++n);
x=%d\n"
n=%d\n"
}
10、逻辑表达式的值例
{intm,k;
k=(m=0)||(m=1)&
(m=2);
m,k);
k=(m=2)||(m=1)&
(m=0);
k=(m=2)&
(m=1)||(m=0);
k=(m=0)&
(m=1)||(m=2);
11、逗号表达式的值
{inta=2,b=4,c=6,x,y;
y=((x=a+b),(b+c));
/*尾表达式的值