《c02第1章c语言与计算机.ppt》由会员分享,可在线阅读,更多相关《c02第1章c语言与计算机.ppt(55页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、新编C语言程序设计教程 清华大学出版社周二强 软件学院 计算机科学与工程系配套视频:配套视频: 博客:博客:第第1 1章章 C C语言与计算机语言与计算机1.11.1计算机工作原理及计算机工作原理及C C语言语言1.2C1.2C语言中的函数语言中的函数 1.3“1.3“懂懂”C C语言的计算机语言的计算机1.3.1 虚拟的C计算机 1.3.2 Visual C+6.0(简称VC6.0)1.3.3 在VC6.0中编译程序1.41.4与虚拟与虚拟C C语言计算机深入交流语言计算机深入交流1.4.1 C语言的一些语法规则1.4.2 printf函数的使用一个C程序的执行顺序计算机的基本原理1.1.采
2、用二进制形式表示数据和指令。采用二进制形式表示数据和指令。二进制只有2种状态,很容易在物理上表示,如开关的接通和断开表示1和0。现实世界中的数据必须编码成由01组成的数字串,与此同时计算机中要有成千上万根导线用于存储数据,每根导线用有无电流来表示01串相应的位上是1还是0。2.2.采用存储程序方式。采用存储程序方式。存储程序意味着事先将编制好的程序(包含指令和数据)存入计算机存储器中,计算机就能够自动地、连续地运行程序,从而也就能够自动地、快速地完成许多的任务。计算机的基本原理3.3.计算机由运算器、存储器、控制器、输入设备和输出设备计算机由运算器、存储器、控制器、输入设备和输出设备5 5大部
3、件大部件组成。组成。计算机求两个整数的和计算机求两个整数的和计算机求两个整数的和计算机求两个整数的和C语言中的输出1.1.在显示器上提示用户输入两个整数;在显示器上提示用户输入两个整数;F C C语言中用语言中用printfprintf函数控制输出设备,函数控制输出设备,使用该函数可以在输出设备上显示信息。使用该函数可以在输出设备上显示信息。如用语句如用语句printfprintf(请输入两个整数:请输入两个整数:););就可以在显示器上该程序的运行窗口中显示上面的信息。就可以在显示器上该程序的运行窗口中显示上面的信息。C语言中用变量来表示内存中的存储单元,如变量x就可以表示内存中的一个存储单
4、元。如果x所表示的存储单元中存储的数据为3,则变量x的值就是3;如果想把数据存储到该存储单元,则只需用该数据对变量x赋值(x=3)即可。C语言中的输入和内存2.2.获得用户输入,并把用户的输入存储到内存中;获得用户输入,并把用户的输入存储到内存中;F C C语言中用语言中用scanfscanf函数控制输入设备,使用该函数可以获得输入设函数控制输入设备,使用该函数可以获得输入设备的输入,但是把输入数据存储到内存中的哪个存储单元呢?备的输入,但是把输入数据存储到内存中的哪个存储单元呢?F用用C C语言语句语言语句scanfscanf(%,&,&);就可以获得用户的);就可以获得用户的输入数据,并把
5、数据存储到变量输入数据,并把数据存储到变量a a、b b所标示的存储单元。所标示的存储单元。C语言中的输入和内存2.2.获得用户输入,并把用户的输入存储到内存中;获得用户输入,并把用户的输入存储到内存中;F C C语言中用语言中用scanfscanf函数控制输入设备,使用该函数可以获得输入设函数控制输入设备,使用该函数可以获得输入设备的输入,但是把输入数据存储到内存中的哪个存储单元呢?备的输入,但是把输入数据存储到内存中的哪个存储单元呢?F用用C C语言语句语言语句scanfscanf(%,&,&);就可以获得用户的);就可以获得用户的输入数据,并把数据存储到变量输入数据,并把数据存储到变量a
6、 a、b b所标示的存储单元。所标示的存储单元。F变量和的值分别为变量和的值分别为2323和和3232。C语言中运算器的运算3.3.运算器计算和,并把结果存储在内存中;运算器计算和,并把结果存储在内存中;F运算器对用户输入数据的处理,在运算器对用户输入数据的处理,在C C语言中就是对变量的处理。运语言中就是对变量的处理。运算器对数据的各种运算,算器对数据的各种运算,C C语言中用代数式表示。语言中用代数式表示。C C语言中语言中a+ba+b就是命就是命令运算器求变量令运算器求变量a a,b b所标示存储单元中的数据之和。所标示存储单元中的数据之和。F第三步的操作在第三步的操作在C C语言中的相
7、应语句为语言中的相应语句为c=c=a+ba+b;,该语句理解为先让,该语句理解为先让运算器求变量运算器求变量a a,b b所标示存储单元中的数据之和,再把和存储到变量所标示存储单元中的数据之和,再把和存储到变量c c标示的存储单元中。标示的存储单元中。C语言中的输出4.4.在显示器上显示计算结果。在显示器上显示计算结果。FC C语言中的相应的语句为:语言中的相应的语句为:printfprintf(和为和为%,),);。把变量。把变量的值输出到的值输出到显示器上该程序运行窗口中。显示器上该程序运行窗口中。C语言和计算机scanf函数函数变量变量printf函数函数代数式代数式语句的执语句的执行顺
8、序行顺序计算机与C语言 计算机中求和的步骤如下:计算机中求和的步骤如下:1.1.在显示器上提示用户输入两个整数;在显示器上提示用户输入两个整数;2.2.获得用户输入,并把用户的输入存获得用户输入,并把用户的输入存储到内存中;储到内存中;3.3.运算器计算和,并把结果存储在内运算器计算和,并把结果存储在内存中;存中;4.4.在显示器上显示计算结果。在显示器上显示计算结果。C C语言中对应的语句如下:语言中对应的语句如下:1.1.printfprintf(请输入两个整数:请输入两个整数:););2.2.scanfscanf(%,&,&););3.3.c=c=a+ba+b;4.4.printfpri
9、ntf(和为和为%,),);return1.2 C语言中的函数 printf,scanfprintf,scanf是是C C语言中的函数。提起函数,可能会想到语言中的函数。提起函数,可能会想到y=f(x)y=f(x)。在数学意。在数学意义上,函数是每个(组)输入值到唯一输出值的映射。输入值叫自变量;和义上,函数是每个(组)输入值到唯一输出值的映射。输入值叫自变量;和自变量对应的输出值叫做函数值。语言中的函数亦然。自变量对应的输出值叫做函数值。语言中的函数亦然。现有函数(,)现有函数(,)=x+y=x+y。C C语言中此函数可定义如下:语言中此函数可定义如下:1)int sum(int x,int
10、 y)2)3)int z;4)z=x+y;5)return z;6)函数的首部函数体函数的首部和函数体 1)int sum(int x,int y)2)3)int z;4)z=x+y;5)return z;6)函数(,)=x+y函数的首部函数体C语言关键字return z;return z;中的中的returnreturn称为称为C C语言关键字。语言关键字。C C语言关键字是由语言规定的具有特定意义的字符串,通常也称为语言关键字是由语言规定的具有特定意义的字符串,通常也称为C C语言保留字。语言保留字。如如intint就是就是C C语言的一个关键字,它的含义为与之相关变量的取值必须为语言的一
11、个关键字,它的含义为与之相关变量的取值必须为整数。整数。关键字关键字returnreturn用于返回函数值。用于返回函数值。C C语言中函数可以没有返回值,此时需用关键字语言中函数可以没有返回值,此时需用关键字voidvoid标识函数返回值标识函数返回值的类型。如果函数没有返回值,则函数体内也就无需的类型。如果函数没有返回值,则函数体内也就无需returnreturn语句了。语句了。C C语言中函数也可以没有输入值,但此时不能没有一对圆括号。语言中函数也可以没有输入值,但此时不能没有一对圆括号。最简单的C语言函数空函数void nothing()void nothing()没有输入值也没有返回
12、值,什么也不做。没有输入值也没有返回值,什么也不做。函数调用通过函数调用而使用通过函数调用而使用printfprintf函数和函数和scanfscanf函数的例子:函数的例子:printf(printf(请输入两个整数:请输入两个整数:););scanf scanf(%d%d%d%d,&,&););printfprintf(和为和为%d%d,);F调用函数时使用函数名和一对圆括号,括号中应包含与函数自变量调用函数时使用函数名和一对圆括号,括号中应包含与函数自变量相对应的实际输入值。函数被调用时相对应的实际输入值。函数被调用时,函数体会执行并根据实际的输函数体会执行并根据实际的输入值返回相应的输
13、出值。入值返回相应的输出值。F使用使用sumsum函数求函数求3 3和和2 2的和时可以用函数调用的和时可以用函数调用“sumsum(3 3,2 2)”。函数。函数调用调用“sumsum(3 3,2 2)”的返回值为的返回值为5 5,可以简单地认为,可以简单地认为“sumsum(3 3,2 2)”等同于等同于“5”5”,两者的区别在于它有执行函数体中语句的计算过,两者的区别在于它有执行函数体中语句的计算过程。程。1)int sum(int x,int y)2)3)int z;4)z=x+y;5)return z;6)问题:由n个函数构成的C语言程序如何运行呢?F函数是组成函数是组成C C语言程
14、序的基本单位。语言程序的基本单位。C C语言程序由语言程序由n(n1)n(n1)个函数构个函数构成。函数是成。函数是C C语言中的一个重要概念,后面会详细讲解。语言中的一个重要概念,后面会详细讲解。语言规定,程序中必须有且仅有一个名称为语言规定,程序中必须有且仅有一个名称为mainmain的函数。程序运行的函数。程序运行时,时,mainmain函数会被自动调用执行。函数会被自动调用执行。C C语言程序仅有一个函数时只能是语言程序仅有一个函数时只能是mainmain函数。函数。F函数与程序的区别与联系?函数与程序的区别与联系?变量在使用前必须定义在计算机中数据是分类处理的在计算机中数据是分类处理
15、的,常见的整数(如常见的整数(如2 2、1 1等)、小数(如等)、小数(如1.11.1、2.32.3等)、字符(如等)、字符(如a a、B B、c c等)在内存中有不同的存储格式。变量定义的作等)在内存中有不同的存储格式。变量定义的作用是事先告知计算机,变量所标示的存储单元在程序中要存储什么类型的数用是事先告知计算机,变量所标示的存储单元在程序中要存储什么类型的数据(是整数,小数还是字符)。据(是整数,小数还是字符)。变量定义的一般形式是:变量类型变量定义的一般形式是:变量类型 变量列表;变量列表;其中,其中,“变量类型变量类型”是是C C语言中的数据类型,如关键字语言中的数据类型,如关键字i
16、ntint表示整数类型,表示整数类型,另外还有另外还有floatfloat表示小数类型,表示小数类型,charchar表示字符类型。表示字符类型。“变量列表变量列表”由一个变量名称(标识符)或由逗号分开的多个变量名称由一个变量名称(标识符)或由逗号分开的多个变量名称构成,如变量名构成,如变量名1 1,变量名,变量名2 2,变量名,变量名n n。如:如:intint x,y,z;x,y,z;定义了三个整型变量;定义了三个整型变量;float fm,fn;float fm,fn;定义了二个用于存储小数的变量。定义了二个用于存储小数的变量。第一个C语言程序程序程序1-1 1-1 求两个整数的和求两个
17、整数的和1)void main()1)void main()2)2)3)int a,b,c;3)int a,b,c;4)printf(4)printf(请输入两个整数,请输入两个整数,nn););5)scanf(5)scanf(%d%d%d%d,&a,&b);,&a,&b);6)c=a+b;6)c=a+b;7)printf(7)printf(和为和为%dn%dn,c);,c);8)8)return机器语言是大多数计算机硬件能够“理解”的惟一语言;机器语言编写的程序是由二进制代码组成的序列,难于阅读和编写。用高级语言编写的程序称为源程序,计算机不能理解和执行,需要编译程序将源程序翻译成计算机能理
18、解并执行的目标程序。1.3“懂”各种语言的虚拟计算机 returnVC6.0VC6.0是微软公司提供的在是微软公司提供的在WindowsWindows环境下进行应用程序环境下进行应用程序开发的开发的C/C+C/C+编译器系统。编译器系统。VC6.0VC6.0是一个集成开发环境(是一个集成开发环境(IDE)IDE),包含了许多独立的组,包含了许多独立的组件,如编辑器、编译器、调试器以及各种各样为开发件,如编辑器、编译器、调试器以及各种各样为开发WindowsWindows下的下的C/C+C/C+程序而设计的工具。程序而设计的工具。VC6.0VC6.0把所有的工把所有的工具结合在一起,构成一个整体
19、,通过一个由窗口、对话框、具结合在一起,构成一个整体,通过一个由窗口、对话框、菜单、工具栏组成的系统,支持用户开发,方便用户观察菜单、工具栏组成的系统,支持用户开发,方便用户观察和控制整个开发过程。和控制整个开发过程。Visual C+6.0(简称VC6.0)return使用VC6.0与计算机沟通1.3.3 在VC6.0中编译程序 在在VC6.0中,程序须作为工程的一部分来管理,因此在编程前要先建立一中,程序须作为工程的一部分来管理,因此在编程前要先建立一个工程。个工程。工程类型工程类型Win32 Console Application即即Win32控制台应用程序。控制台控制台应用程序。控制台
20、应用程序的外观像一个增强版的应用程序的外观像一个增强版的MS-DOS界面(字符用户接口),它特点界面(字符用户接口),它特点之一是用命令行方式与用户交互。在命令行方式下,用户通常用键盘输入之一是用命令行方式与用户交互。在命令行方式下,用户通常用键盘输入命令或数据与程序交互。命令或数据与程序交互。选择 控制台程序的类型 查看 新建工程信息汇总 建立一个类型为空的控制台程序名为1_1的工程后VC6.0的界面 新建(New)对话框中的文件(Files)选项卡 VC6.0中编辑器等待输入时的界面 库函数C C语言中,函数先定义后使用,但是程序语言中,函数先定义后使用,但是程序1-11-1中并没有中并没
21、有printfprintf函数和函数和scanfscanf函数的定义,这是因为函数的定义,这是因为printfprintf函数和函数和scanfscanf函数是库函数。函数是库函数。库函数是由库函数是由C C语言编译系统根据一般用户的需要或语言编译系统根据一般用户的需要或C C语言标准编制并语言标准编制并提供给用户使用的一组函数。提供给用户使用的一组函数。使用库函数时,需要知道库函数在哪个文件中定义,并利用使用库函数时,需要知道库函数在哪个文件中定义,并利用“#include#include”命令把文件内容(函数的定义)包含到源文命令把文件内容(函数的定义)包含到源文件中。件中。“#inclu
22、de#include”命令的功能是用指定的文件内容替换该命令命令的功能是用指定的文件内容替换该命令行,从而把指定的文件和当前的源程序文件合成一个源文件。行,从而把指定的文件和当前的源程序文件合成一个源文件。完整的程序1-1 printfprintf函数和函数和scanfscanf函数在函数在stdio.h(stdio.h(标准输入输出标准输入输出)头文件中说明头文件中说明,因此程序因此程序1-1-1 1中需用中需用#include#include 命令把它们包含在源文件中命令把它们包含在源文件中(注意该行没有分号,注意该行没有分号,且常被放在首行且常被放在首行)。#include#includ
23、e void main()void main()int a,b,c;int a,b,c;printf(printf(请输入两个整数,请输入两个整数,nn););scanf(scanf(%d%d%d%d,&a,&b);,&a,&b);c=a+b;c=a+b;printf(printf(和为和为%dn%dn,c);,c);输入、编译并执行程序。程序程序1-1输入完成输入完成后,选择组建后,选择组建(Build)执行执行命令或按下快捷键命令或按下快捷键(Ctrl+F5),编),编译执行程序。译执行程序。程序1-1的运行 程序运行窗口中输入23 32(回车)再次输入、编译另一个程序return最需注意
24、的问题:编码规范#include#include void main()void main()int a,b,c;int a,b,c;printf(printf(请输入两个整数请输入两个整数:n);:n);scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);c=a+b;c=a+b;printf(printf(和为和为%dn,c);%dn,c);注释注释的功能是对程序中的内容提供解释说明,方便程序的阅读和理注释的功能是对程序中的内容提供解释说明,方便程序的阅读和理解。编译程序时注释会作为空白字符略过而不予处理。解。编译程序时注释会作为空白字符略过而不予处理。注释的例子:注释的
25、例子:/*/*这是一个单行注释的示例这是一个单行注释的示例*/*/*这是一个这是一个多行注释的示例多行注释的示例*/VC6.0/VC6.0中这也是一个单行注释的示例中这也是一个单行注释的示例 注意最后这种格式只能注意最后这种格式只能VC6.0VC6.0中中return1.4.1 C语言的一些规则 1.C1.C程序书写格式自由,一行内可以写几条语句,一条语句可以分写程序书写格式自由,一行内可以写几条语句,一条语句可以分写在多行上,在多行上,但是在多数情况下,一行写一条语句。但是在多数情况下,一行写一条语句。2.2.每条语句或变量定义的最后必须有一个分号每条语句或变量定义的最后必须有一个分号“;”
26、,分号是分号是C C语言语言语句的结束标志。语句的结束标志。只有一个分号的语句也是一条语句,称为空语句,只有一个分号的语句也是一条语句,称为空语句,不表示任何实际的操作,仅用于构造程序。不表示任何实际的操作,仅用于构造程序。3.3.在在C C程序中,变量、函数等对象用名字互相区别,这些名字常称为程序中,变量、函数等对象用名字互相区别,这些名字常称为标识符。标识符。标识符是一个由大写或小写(英文)字母、数字或下划线组标识符是一个由大写或小写(英文)字母、数字或下划线组成的字符串,但不能以数字开头。成的字符串,但不能以数字开头。如:如:a a、B2B2、_cd_cd、2b2b、a#sa#s中只有前
27、三个是合法的标识符。关键字中只有前三个是合法的标识符。关键字C语言的一些规则4.C4.C语言使用半角符号,不能把语言使用半角符号,不能把“;”;”误作全角符号误作全角符号“;”双撇号双撇号误作双引号误作双引号“”“”5.5.用用scanfscanf函数输入数据时,变量前面通常有一个函数输入数据时,变量前面通常有一个“&”&”,如,如scanf scanf(%d%d%d%d,a,a,b);b);。用。用scanfscanf函数一次输入多个数据时,数据之间函数一次输入多个数据时,数据之间可以用空格或回车分隔。可以用空格或回车分隔。#include#include void main()void m
28、ain()int a,b,c;int a,b,c;printf(printf(请输入两个整数请输入两个整数:n);:n);scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);c=a+b;c=a+b;printf(printf(和为和为%dn,c);%dn,c);return1.4.2 printf函数的使用 调用调用printfprintf函数可以在输出设备上输出一串字符,更具体说是类似函数可以在输出设备上输出一串字符,更具体说是类似DosDos窗口的程序运行窗口中输出。窗口的程序运行窗口中输出。使用时,须把欲显示的字符用一对双撇号(使用时,须把欲显示的字符用一对双撇号()
29、括起来作为输入)括起来作为输入值调用值调用printfprintf函数。如语句函数。如语句printfprintf(Welcome to CWelcome to C!);的输出);的输出结果为:结果为:分析程序1-2的输出#include#include void main()void main()printf(printf(Welcome Welcome );/*);/*注意空格字符注意空格字符*/printf printf(to Cto C!););printf函数的烦恼让让printfprintf函数换行输出需用到换行符,但是无法直接通过键盘把换函数换行输出需用到换行符,但是无法直接通过
30、键盘把换行符包括在用一对双撇号括起来的输入值中。与此类似的字符还有一行符包括在用一对双撇号括起来的输入值中。与此类似的字符还有一些如双引号些如双引号“”等。等。解决问题的办法,程序解决问题的办法,程序1-11-1中已经用过,就是用两个普通字符构成一中已经用过,就是用两个普通字符构成一个特殊的符号组合个特殊的符号组合“n”n”来表示换行符。来表示换行符。反斜杠和下一个字符的组合称为反斜杠和下一个字符的组合称为“转义序列转义序列”,有着特殊的含义。,有着特殊的含义。printfprintf函数在输出时如果遇到函数在输出时如果遇到“转义序列转义序列”就会按照它的含义调整输就会按照它的含义调整输出结果
31、。出结果。如遇到如遇到nn,printfprintf函数就会把输出定位到下一行的开始位置;遇到函数就会把输出定位到下一行的开始位置;遇到转义序列转义序列 ,就会输出一个双引号字符就会输出一个双引号字符 ;遇到转义序列;遇到转义序列,就会,就会输出一个反斜杠字符输出一个反斜杠字符。F如何输出双撇号,用语句printf();可以吗?F如何一次输出如下的两行信息?Welcome to C!printf函数的用法输出结果为输出结果为Welcome to Welcome to C C!的输出语句怎么写?的输出语句怎么写?printfprintf(Welcome to Welcome to CC););与
32、与printfprintf函数相关的另一个特殊符号组合是百分号函数相关的另一个特殊符号组合是百分号%及与之相邻的字及与之相邻的字符符,称为称为“格式字符串格式字符串”,或称为,或称为“占位序列占位序列”。遇到占位序列时,。遇到占位序列时,printfprintf函数会用相应位置上的值代替占位序列。函数会用相应位置上的值代替占位序列。如语句如语句printfprintf(和为和为%d!%d!,z,z);当当z=10z=10时,输出结果为:和为时,输出结果为:和为10!10!。分析程序1-3的输出结果#include#include void main()void main()int a=3;in
33、t a=3;int b=5;int b=5;printf(printf(%d+%d=%d%d+%d=%d,a,b,3+5);/,a,b,3+5);/注意空格字符注意空格字符 return利用VC6.0分析程序1-4的执行顺序 1)#include 1)#include 2)int sum(int x,int y)2)int sum(int x,int y)3)3)4)int z;4)int z;5)z=x+y;5)z=x+y;6)return z;6)return z;7)7)8)void main()8)void main()9)9)10)int a,b,c;10)int a,b,c;11)
34、a=23;11)a=23;12)b=-5;12)b=-5;13)c=sum(a,b);13)c=sum(a,b);14)printf14)printf(%d+%d=%dn%d+%d=%dn,a,b,c,a,b,c);15)15)程序1-4的执行顺序概览插入断点 选择组建(Build)开始调试(Debug)Go命令(快捷键F5),进入调试模式在调试模式可以利用调试命令控制程序执行过程,如此时可单步执行程序,即只执行一条应执行的语句,执行完后程序自动停下。单步执行命令(或按下快捷键F11),执行完第11行语句后程序再次暂停 当执行到第13条语句,进入并开始执行sum函数 执行完被调用的函数并返回到
35、调用函数没有必要单步执行库函数 快捷键快捷键F10F10F10F10与与F11F11的区别是的区别是,如果当前执行语句是函数调用如果当前执行语句是函数调用,则不会进入被调用则不会进入被调用函数里面单步执行,即是执行而非调试执行被调用函数。函数里面单步执行,即是执行而非调试执行被调用函数。程序1-4的执行顺序 1)#include 1)#include 2)int sum(int x,int y);2)int sum(int x,int y);3)3)4)int z;4)int z;5)z=x+y;5)z=x+y;6)return z;6)return z;7)7)8)void main()8)
36、void main()9)9)10)int a,b,c;10)int a,b,c;11)a=23;11)a=23;12)b=-5;12)b=-5;13)c=sum(a,b);13)c=sum(a,b);14)printf14)printf(%d+%d=%dn%d+%d=%dn,a,b,c,a,b,c);15)15)调试执行时注意事项在调试执行时可以切换到程序的运行窗口,输入数据或查看当前的在调试执行时可以切换到程序的运行窗口,输入数据或查看当前的输出。输出。程序中没有断点而调试执行程序时,程序执行完毕后运行窗口会自程序中没有断点而调试执行程序时,程序执行完毕后运行窗口会自动关闭。为查看输出结果,可在程序最后加一条输入语句,动关闭。为查看输出结果,可在程序最后加一条输入语句,如如scanfscanf(%d%d,&a,&a);定屏。定屏。上机编译上机编译C C程序时,常常会遇到错误,此时应耐心查明原因改正错程序时,常常会遇到错误,此时应耐心查明原因改正错误。误。遇到错误如编译程序1-1时,出现了如图所示的错误 return