精品课程之《C语言》

 

 

实训1 C语言上机环境介绍

一、实训目的

1、   掌握Windows DOS环境的操作以及有效管理用户程序文件。

2、   熟悉C程序的实现过程和方法。

(1)  掌握编辑、编译、连接、运行程序的过程和方法。

(2)  了解常见的两种语法错误(Error/Warning)。

3、   了解Turbo C集成开发环境强大的功能。

 

二、实训内容

1、 Windows DOS环境的操作以及有效管理用户程序文件,即:掌握

切换工作驱动器;创建、进入用户目录;目录列表(注意可以随时用图形界面比较)的命令。

2、 了解Turbo C集成开发环境的功能,熟悉菜单、热键基本操作

(1)  启动、退出Turbo C集成开发环境。

(2)  了解F5/F6F10,→、←、↑、↓功能键;Alt+高亮度键的效果和作用。

(3)  激活文件菜单(File)、编译菜单(Compile)、运行菜单(Run)、监视菜单(Break/Watch),查看菜单选项。

3、 Turbo C下完成“源程序清单”中规定的程序题。

 

三、实训要求

1、 实训中仔细观察本实训创建的目录、文件,回答实训小结和思考中的问题。

2、 Turbo C下完成“源程序清单”中规定的程序题。编辑、编译、运行程序并获得程序结果;如果程序有错,记录编译、连接遇到的提示错误。仔细思考出错原因,并更正之。

3、 编制的程序必须保存在D:\用户目录中。注:用户目录可以用学号或姓名拼音简写。

 

四、实训步骤、过程

1、 启动操作系统,查找Turbo C集成开发环境安装位置(路径)。假如为:C:\TC,查看目录中是否有tc.exe,此程序就是Turbo C集成开发环境的执行程序。记录您的系统Turbo C2.0的安装位置                   

2、 进入DOS窗口,切换到D盘,创建、进入用户目录。

(1)  开始-程序-附件-命令提示符,进入DOS窗口;

(2)  D<CR>,切换到D盘;

(3)  md \您的学号<CR>,创建以学号为目录名的用户目录;

(4)  dir<CR>  查看目录是否创建好

(5)  cd \您的学号<CR> 进入您的用户目录

以后您的程序默认保存在此目录下!

3、 启动、退出Turbo C集成开发环境。

(1)  启动Turbo C集成开发环境。如Turbo C集成开发环境安装位置(路径)为:C:\TC,则:C:\>c:\tc\tc<回车>  启动Turbo C集成开发环境。

(2)  退出Turbo C集成开发环境。File-Quit  退出Turbo C集成开发环境

(3)  再次启动Turbo C环境。C:\>c:\tc\tc<回车>

4、
Turbo C环境中,F5/F6F10,→、←、↑、↓功能键;Alt+高亮度键的效果和作用。

(1)  重复按F6键,仔细观察。当前激活窗口在编辑窗口、消息窗口之间切换。

(2)  重复按F5键,仔细观察。当前激活窗口最大,正常状态之间切换。

(3)  先按F10,可以看到主菜单被激活,按→、←,主菜单各个项被依次激活,试着按↑、↓可以打开相应菜单。重点浏览File(文件管理)、Run(程序运行控制)、Compile菜单(程序编译、连接)菜单。最后按ESC键光标回到编辑窗口。

(4)  主菜单各个项,首字母为红色(高亮度)。可以按Alt+高亮字母,直接激活相应菜单选项。例如按Alt+F激活File菜单,比F10再按光标快捷多了!按ESC键光标回到编辑窗口。

(5)  观察当前源程序名NONAME.C表示当前的程序还没有取名字,以后保存程序时,系统会提示输入源程序名。

 

5、 按照下面步骤完成第1个程序题。

(1)        File-New”创建一个新的源程序文件

(2)        输入源程序,全屏幕编辑源程序。

(3)        File-Save”保存源程序(文件名应按题目要求)。观察编辑窗口源程序名是否已经修改。用Windows资源管理器查看用户目录中是否产生了源程序文件*.c

(4)        Compile-Build all”编译、连接源程序。如果有语法错误,修改源程序后再次编译、连接程序,直到没有语法错误,系统提示成功。

编译连接成功后用Windows资源管理器查看用户目录中是否产生了目标文件*.obj,可执行文件*.exe,观察其命名规则。

(5)        Run-Run”运行程序,用Alt-F5切换到用户屏幕查看运行结果。对比结果是否与预期相同。如果发现逻辑错误-结果与预期不同,修改源程序,重复(3-5)保存、编译、运行程序,直到程序获得正确结果。

注意:

n         必须顺序完成程序编辑、编译连接、运行的各个过程。没有正确编译成功的程序是不可能运行的!

n         程序开发中经常用“File”-“Save”保存源程序以免意外导致源程序丢失。

 

6、 按步骤5完成第2个程序题。注意:Error-致命错的程序不能产生目标程序、执行程序,必须修改程序,并重新编译,直到成功。

7、 按步骤5完成第3个程序题。注意:Warning-警告错的程序可以产生目标程序、执行程序,试着运行一下,结果是?!                  

^_^,还是修改吧,警告错一般也意味着程序有毛病,尽管这种程序可以强行编译连接为可执行程序,但结果一般都有问题。

 

五、源程序清单、测试数据、结果。

1、   最简单的C程序。(要求文件名:1_1.c)

main()

{

  printf(“Hello world!\n”);

}

 

2、   一个具有致命语法错的程序。(要求文件名:1_2.c)

main()

{

  int i=9

  printf(“i=%d\n”,i)

}

 

3、   一个具有警告语法错的程序。(要求文件名:1_3.c)

main()

{

int i=9,j,s;

  s=i+j;

printf("s=%d\n",s);

}

 

六、实训出现的问题、实训结果分析(语法错英语提示,中文翻译,原因,您的理解?)

1

2

3

 

七、实训小结和思考

1、   您自己的系统上Turbo C安装目录在哪里?Turbo C集成开发环境程序名是什么?

答:Turbo C安装目录是:c:\tc Turbo C集成开发环境程序名为:tc.exe

2、   写出常见Dos命令的格式。

答:

切换工作驱动器:X...>  驱动器:<CR>

创建用户目录:X...>   md 目录名<CR>  

进入用户目录:X...>   cd 目录名<CR> 

目录列表:X...>    dir<CR>    

启动程序:X...>    路径\程序名<CR>   ,例如:c:\tc\tc<CR>

注:<CR>表示回车键。

3、   F5/F6F10,→、←、↑、↓功能键;Alt+高亮度键的效果和作用?

答:

F10,→、←、↑、↓:F10激活Turbo C主菜单,光标键选择菜单之间;回车确认。

F5:编辑窗口或消息窗口最大/恢复;

F6:切换编辑窗口/消息窗口。

Alt+高亮度键,直接激活主菜单项。

4、   C语言程序直接相关的几种文件及扩展名分别是什么?

答:C语言源程序、目标程序、可执行程序,其后缀分别为*.c*.obj*.exe

5、   C语言程序主要的实现过程?

答:分为编辑、编译、连接、运行四个阶段。其中,开发环境中,编辑完成后,可以直接启动运行,但分解的阶段仍然是四个,前面阶段未完成,程序仍然不能运行。

6、   C语言程序主要的错误?

答:程序错误分为:

(1)                      语法错误:编译系统可以协助查找出来的语法上的错误。语法错还包括:致命错Error/和警告错Warning。致命错必须修改!,警告错可以不修改,但常常暗示程序存在问题。

(2)                      逻辑错误:运行结果与预期不符,与程序算法逻辑相关的错误。

 


实训2-1:数据类型、运算符和表达式

一、实训目的

1、   掌握C语言基本数据类型(整型,实型,字符型)数据的常量表示、变量的定义和使用。

2、   掌握常见格式控制字符对输出结果的控制作用。

3、   了解数据溢出错误和舍入误差(以整型、实型数据为例)。

4、   进一步熟悉C程序的实现过程。

二、实训内容

Turbo C下完成“源程序清单”中规定的程序题(4个)。

 

三、实训要求

1、 实训前认真预习,自行分析4个程序题的结果,体会本次实训的目的并了解实训要求。实训时仔细对比程序实际运行结果,认真思考并回答实训小结和思考中的问题。

2、 Turbo C下完成“源程序清单”中规定的程序题。编辑、编译、运行程序并获得程序结果;如果程序有错,记录编译、连接遇到的提示错误。仔细思考出错原因,并更正之。

3、 编制的程序必须保存在D:\用户目录中。注:用户目录可以用学号或姓名拼音简写。

4、 学生可以对实训程序进行修改、补充,以便上机完成自己需要的程序验证和测试。在完成实训要求的工作外,要学会创造性的工作。

 

四、实训步骤、过程

1、 启动操作系统,进入DOS窗口;切换到用户磁盘,创建、进入用户目录。(方法、命令与实训1相同)

2、 启动Turbo C集成开发环境。(方法与实训1相同)

3、 完成4个程序题。(编辑、编译连接、运行程序,步骤与实训1相同)

注:

(1)仔细观察2_3,2_4两个程序的编译、连接、运行过程,系统提示错误吗?程序运行结果有问题吗?

(2)经常用“File”-“Save”(热键F2)保存源程序以免意外导致源程序丢失。

4、 退出Turbo C集成开发环境,关机。

 

五、源程序清单、测试数据、结果。(注释供阅读、理解程序,上机时不必输入)

1、   写出一个程序测试整型、字符型数据表示,并输出以验证是否正确。(要求文件名:2_1.c

main()

{

                int x=010,y=10,z=0x10;      /* 整型数据表示 */

                char c1='M',c2='\x4d',c3='\115',c4=77,c;    /* 字符型数据表示 */

 

    /* 整型数据的输出 */

                printf("x=%o,y=%d,z=%x\n",x,y,z); 

/* 数据以原进制输出,注意是否有前导00x */

                printf("x=%d,y=%d,z=%d\n",x,y,z);  

/* 数据以10进制输出,换算到10进制,结果对吗? */

   

/* 字符型数据的输出 */

                printf("c1=%c,c2=%x,c3=%o,c4=%d\n",c1,c2,c3,c4); 

/* 数据以原进制输出,注意是否有前导00x */

                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); 

/* 看看这些字符的10进制ASCII码,哦,ASCII码一样,同一种字符 */

 

    /* 字符型数据参与算术运算 */

c=c1+32;   /* 字符怎么参加了数学运算,哦,是字符对应的ASCII码-整数

/* 参与数学运算;结果还是一个整数-另外一个字符的ASCII */

                printf("c=%c,c=%d\n",c,c); 

/* 看看这个字符是什么?哇,'M'+32='m'了,看看ASCII码表,原来如此! */

}

 

参考结果:

x=10,y=10,z=10

x=8,y=10,z=16

c1=M,c2=4d,c3=115,c4=77

c1=M,c2=M,c3=M,c4=M

c1=77,c2=77,c3=77,c4=77

c=m,c=109

 

2、   常见预定义的转义字符对输出的控制作用。(要求文件名:2_2.c)

main()

{

  int a,b,c;

  a=5,b=6,c=7;

 

  printf("12345678123456781234567812345678\n");  /* 打印一个标尺以便检查输出结果 */

  printf("%d\n\t%d  %d\n  %d   %d\t\b%d\n",a,b,c,a,b,c);  /* 打印1个字符串 */

  printf("c:\\a.txt");                                  /* 打印一个文件名 */

  printf("\n");

}

 

参考结果:

12345678123456781234567812345678

5

        6  7

  5   67

c:\a.txt

 

3、   整型数据的溢出错误(要求文件名:2-3.c)

整型(int型)数据的表达范围是-32768~32767,如果最大允许值32767+1,最小允许值-32768-1,会出现什么情况?

main()

{

  int a,b;

  a=32767;

  b=a+1;

  printf("a=%d,a+1=%d\n",a,b);

 

  a=-32768;

  b=a-1;

  printf("a=%d,a-1=%d\n",a,b);

 

  getch();  //获得键盘击键,起到暂停程序运行作用,目的是保留用户屏幕,便于查看结果。

}

 

参考结果:

a=32767,a+1=-32768

a=-32768,a-1=32767

 

4、   实型数据的舍入误差。(要求文件名:2_4.c)

实型变量只能保证7有效数字,后面的数字无意义

main()

{

  float a,b;

  a=123456.789e5;

  b=a+20;

  printf("a=%f,b=%f\n",a,b);

  printf("a=%e,b=%e\n",a,b);

}

 

参考结果:

a=12345678848.000000,b=12345678848.000000

a=1.23457e+10,b=1.23457e+10

 

 

六、实训出现的问题、实训结果分析(语法错英语提示,中文翻译,原因,您的理解?)

1

2

3

 

七、实训小结和思考

(3)                      C语言中整型数据、一般的字符型数据分别可以以什么形式表示?

答:整型数据可以用:10进制、8进制、16进制表示;

一般字符型数据可以用:字符本身(例‘M’)或转义表示。转义表示可以用字符的8进制或16进制ASCII码值表示(例‘\115’、‘\x4d’)。

 

(4)                      程序1_1.cc4=77,c=c4+32说明什么问题?

答:C语言中字符型数据存储的是字符的ASCII码值(1个字节的整数),所以可以将一个整数(看作字符的ASCII码)赋值给字符变量。本实训即允许:c4=77。同时,C语言字符数据可以参与算术运算,其本质是字符数据的ASCII码值(整数)参与算术运算。本实训即允许c4+32,其结果仍然是一个整数。再将结果看作是一个字符的ASCII码值,赋值给字符变量c,即本实训中的c=c4+32

另外,从1_1.c可以看出小写字母ASCII>大写字母ASCII码,同一字母小写大写相值32

 

(5)                      程序1_1.cc=77是否还可以写成c=0x4dc=0115

答:可以,整数可以直接赋值给字符变量,即10816进制形式的整数都可以赋值给字符变量。

 

(6)                      简述转义字符:‘\n’,‘\t’,‘\b’的功能?

答:(略,学生补充,不要也给我写略哦,^_^

 

(7)                      可以用一个字符串表示文件的路径,请问路径的连接符‘\’在C语言中如何表示?若要表示D:\wubin\stu.dat这个文件,C语言如何表示?

答:‘\’在C语言中如何表示‘\\’;C语言要表示D:\wubin\stu.dat这个文件,应当表示为“D:\\wubin\\stu.dat”。

 

(8)                      观察2_3,2_4两个程序的编译、连接、运行过程,系统提示错误吗?程序运行结果有问题吗?思考如何解决?

答:系统不提示错误,但运行结果不是我们希望的或者说是错误的。对2_3可以使用长整型数据类型,对2_4可以使用双精度数据类型解决。

 

(9)                      使用计算机处理数据可能出现溢出错误和舍入误差,这对我们编制程序有什么要求?

答:要求我们根据实际对数据的需求(范围、精度)正确选择合适的数据类型。另外,由于实数存在舍入误差,使用时要注意:

l         不要试图用一个实数精确表示一个大整数,记住:浮点数是不精确的。

l         实数一般不判断“相等”,而是判断接近或近似。

l         避免直接将一个很大的实数与一个很小的实数相加、相减,否则会“丢失”小的数。

l         根据要求选择单精度、双精度。

 

(10)                   写出一个演示字符型数据溢出的程序。(提示:参考2_3.c)

答:参考程序如下:

main()

{

char a,b;

a=127;

  b=a+1;

printf("a=%d,a+1=%d\n",a,b);

 

a=-128;

  b=a-1;

printf("a=%d,a-1=%d\n",a,b);

 

  getch();

}

 

参考结果:

a=127,a+1=-128

a=-128,a-1=127


实训2-2:运算符与表达式