1、第第1章章 C语言概述语言概述与算法与算法C语言的发展史语言的发展史C语言的特点语言的特点C语言的语法成分语言的语法成分C语言程序的基本构成语言程序的基本构成C语言程序的编译过程语言程序的编译过程程序的灵魂程序的灵魂算法算法 从本章开始我们正式进入从本章开始我们正式进入C语言程序设计的语言程序设计的学习,也许大家会问:学习,也许大家会问:为什么我们要学习为什么我们要学习C语言语言呢?呢?理由理由1:因为:因为C语言流行语言流行.理由理由2:因为因为C语言在各种程序考试中必考。语言在各种程序考试中必考。理由理由3:因为它是必修课,是老师逼的,不学:因为它是必修课,是老师逼的,不学不能拿学分。不能
2、拿学分。理由理由n:问问 什么是计算机程序?什么是计算机程序?什么是什么是计算机语言计算机语言?什么是什么是C语言?(语言?(C的发展的发展)为什么要学程序设计?为什么要学程序设计?为什么选为什么选C语言语言?了解程序设计语言的发展及其特点;了解程序设计语言的发展及其特点;掌握机器语言、汇编语言和高级语言的差掌握机器语言、汇编语言和高级语言的差异;异;了解了解C C语言的发展历史及特点和应用;语言的发展历史及特点和应用;掌握掌握C C语言程序的基本结构;语言程序的基本结构;掌握编写掌握编写C C程序的基本步骤和调试过程。程序的基本步骤和调试过程。u程序设计语言的发展经历了三个阶段:程序设计语言
3、的发展经历了三个阶段:机器语言是用二进制表示的,计算机能直接识别和执行的语言 如:10000000(加)10010000(减),机器语言执行速度最快。由于用二进制表示,因而程序可读性差,非专业人员难于掌握 二进制指令通过符号化 如 ADD A,B汇编程序 高级语言表达方式接近被描述的问题,高级语言表达方式接近被描述的问题,接近于自然语言和数学表达式,易于人接近于自然语言和数学表达式,易于人们接受和掌握们接受和掌握 将将CPLCPL语语言言煮干煮干,提炼出它提炼出它的精华的精华B BC CPLPL的第二个的第二个字母作为这种字母作为这种语言的名字,语言的名字,这就是这就是C C语言语言 C+1.
4、语言的字符集语言的字符集 3.标识符标识符 3.关键字关键字 4.运算符运算符 5.分隔符分隔符 6.注释符注释符基本语法成分基本语法成分 在程序中使用的变量名、函数名、标号等统称为标识在程序中使用的变量名、函数名、标号等统称为标识符,用来标识各种程序成分。除库函数的函数名由系符,用来标识各种程序成分。除库函数的函数名由系统定义外,其余都由用户自定义。统定义外,其余都由用户自定义。C语言规定,标识语言规定,标识符只能是由字母符只能是由字母(AZ,az)、数字、数字(09)、下划线、下划线(_)组成的字符串,并且其第一个字符必须是字母或下组成的字符串,并且其第一个字符必须是字母或下划线。划线。在
5、使用标识符时还必须注意以下几点:在使用标识符时还必须注意以下几点:(1)在标识符中,大小写是有区别的。例如在标识符中,大小写是有区别的。例如BOOK和和book 是两个不同的标识符。习惯上符号常量用大写是两个不同的标识符。习惯上符号常量用大写字母表示,而变量名等用小写字母表示。字母表示,而变量名等用小写字母表示。(2)标识符虽然可由程序员随意定义,但不能与关键标识符虽然可由程序员随意定义,但不能与关键字同名,也不能与系统预先定义的标准标识符(如标字同名,也不能与系统预先定义的标准标识符(如标准函数)同名准函数)同名 关键字是由语言规定的具有特定意义的字符串,通关键字是由语言规定的具有特定意义的
6、字符串,通常也称为保留字。如类型说明符常也称为保留字。如类型说明符int,double等;语句等;语句特征特征if、switch、while等;预处理命令等;预处理命令include、define等。关键字是构成等。关键字是构成C语言的语法基础,用户定语言的语法基础,用户定义的标识符不应与关键字相同,也不能对关键字进行义的标识符不应与关键字相同,也不能对关键字进行重新定义。重新定义。语言中含有相当丰富的运算符。运算符与变量、函语言中含有相当丰富的运算符。运算符与变量、函数一起组成表达式,表示各种运算功能。运算符由一数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成。根据参加运算对象
7、的个数,运算个或多个字符组成。根据参加运算对象的个数,运算符可分为单目运算符、双目运算符和三目运算符。符可分为单目运算符、双目运算符和三目运算符。C语言中的分隔符有逗号和空格两种,逗号主要用在语言中的分隔符有逗号和空格两种,逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。在关键字、标识符之于语句各单词之间,作间隔符。在关键字、标识符之间必须要有一个以上的空格符作间隔,间必须要有一个以上的空格符作间隔,否则将会出现否则将会出现语法错误。例如把语法错误。例如把“int a;”,写成,写成“inta;”,C编译编译器
8、会把器会把“inta”当成一个标识符处理,其结果必然出错。当成一个标识符处理,其结果必然出错。注释符是以注释符是以“/*”开头并以开头并以“*/”结尾的串。在结尾的串。在“/*”和和“*/”之间的即为注释。程序编译时,不对注释作任何之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向处理。注释可出现在程序中的任何位置。注释用来向用户提示或解释程序的意义。在调试程序时,对暂不用户提示或解释程序的意义。在调试程序时,对暂不使用的语句也可用注释符括起来,使编译跳过不作处使用的语句也可用注释符括起来,使编译跳过不作处理,待调试结束后再去掉注释符。理,待调试结束后再去
9、掉注释符。关键字关键字表表3.1 C语言中的关键字语言中的关键字auto breakcasecharconstcontinue defaultdo doubleelseenumexternfloatforgotoif intlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsigned unionvoidvolatilewhile关键字为小写字母;不允许使用关键字为变量、关键字为小写字母;不允许使用关键字为变量、数组和函数等操作对象命名。数组和函数等操作对象命名。标识符练习标识符练习1、下列选项中,可以作为语言标识符的是
10、(、下列选项中,可以作为语言标识符的是()A)3stu B)#stu C)stu3 D)stu.32、以下不能定义为用户标识符的是、以下不能定义为用户标识符的是_。A)Main B)_0 C)_int D)int3、以下叙述中错误的是、以下叙述中错误的是()A)用户所定义的标识符允许使用关键字)用户所定义的标识符允许使用关键字 B)用户所定义的标识符应尽量做到)用户所定义的标识符应尽量做到“见名知意见名知意”C)用户所定义的标识符必须以字母或下划线开头)用户所定义的标识符必须以字母或下划线开头 D)用户定义的标识符中,大、小写字母代表不同标识)用户定义的标识符中,大、小写字母代表不同标识4、下
11、列选项中,不可以作为语言标识符的是(、下列选项中,不可以作为语言标识符的是()A)num B)turbo_c C)printf D)student35、以下不合法的用户标识符是、以下不合法的用户标识符是()A)j2_KEY B)Double C)4d D)_8_6、合法的语言标识符是(、合法的语言标识符是()。)。A)_a1 B)a+b C)3abc D)AB,CD7、以下选项中不合法的用户标识符是:(、以下选项中不合法的用户标识符是:()A)_xyz B)Int C)a_123 D)1238、以下选项中合法的用户标识符是:(、以下选项中合法的用户标识符是:()A)_123 B)int C)s
12、i%D)1_ads9、以下选项中合法的用户标识符是:(、以下选项中合法的用户标识符是:()A)sined B)printf C)aa$D)a1.函数体函数体语句结束标志语句结束标志 main是主函数的函数名,表示这是一个主函是主函数的函数名,表示这是一个主函数。每一个数。每一个C源程序都必须有,并且只能有源程序都必须有,并且只能有一个主函数一个主函数(main函数函数),这是整个,这是整个C程序运程序运行的入口点行的入口点 printf是是C语言中的输出函数,是一个由系统定义的语言中的输出函数,是一个由系统定义的标准函数,可在程序中直接调用,它的功能是把要标准函数,可在程序中直接调用,它的功能
13、是把要输出的内容送到显示器去显示。双引号内字符串原输出的内容送到显示器去显示。双引号内字符串原样输出,样输出,“n”是回车换行符。是回车换行符。C C语言规定:语句以分号结束语言规定:语句以分号结束 。数据类型名数据类型名定义的变量名,以定义的变量名,以“,”分隔分隔两个赋值语句,使两个赋值语句,使a a和和b b的值分别为的值分别为1212和和34 34 调用内部函数,输出计算的和数调用内部函数,输出计算的和数求和的值给求和的值给sum 46“%d”“%d”是输入输出的格式字符串,用是输入输出的格式字符串,用来指定输入输出时的数据类型和格式来指定输入输出时的数据类型和格式 。自定义函数声明自
14、定义函数声明自定义函数调用自定义函数调用自定义函数自定义函数max带两个形参带两个形参返回返回a、b中最大值中最大值返回值为整型数返回值为整型数0调用内部函数,接受键盘输入数据调用内部函数,接受键盘输入数据通过以上例子可以看出:通过以上例子可以看出:1.C程序至少要有一个程序至少要有一个main函数,用函数,用户也可以自己根据需要设计自己的函数,像上面的户也可以自己根据需要设计自己的函数,像上面的max()函函数。数。3.一个可执行的一个可执行的C语言程序总是从语言程序总是从main函数开始执行,而不论函数开始执行,而不论其在整个程序中的位置如何。其在整个程序中的位置如何。3.每条语句和数据定
15、义的最后必须有一个分号每条语句和数据定义的最后必须有一个分号(;)。说明:在以下三种情况下不允许有分号:说明:在以下三种情况下不允许有分号:a.所定义的函数的名称后面不使用分号;所定义的函数的名称后面不使用分号;b.在右花括号在右花括号“”后面不使用分号;后面不使用分号;c.预处理语句后面不使用分号。预处理语句后面不使用分号。while(i=100)i+;s=s+i;max();#include ;4.C语言中没有专门的输入,输出语句。输入输语言中没有专门的输入,输出语句。输入输出是通过出是通过scanf和和printf两个库函数实现的。两个库函数实现的。5.C程序书写格式自由,一行内可以写几
16、个语句,程序书写格式自由,一行内可以写几个语句,一个语句也可以分写在多行上。一个语句也可以分写在多行上。6.可用可用/*/对对C程序中的任何部分作注释,注程序中的任何部分作注释,注释可以写在程序的任何位置上,释可以写在程序的任何位置上,“/*”与与“*/”也可不在同一行上。也可不在同一行上。7.在在C语言中,大小写字母是有区分的语言中,大小写字母是有区分的(即大小写即大小写敏感敏感)。由前得出一般由前得出一般C语言程序的构成如下:语言程序的构成如下:main()/*主函数主函数*/变量定义部分;变量定义部分;变量赋初值部分;变量赋初值部分;语句执行部分;语句执行部分;1.4 C程序的执行过程程
17、序的执行过程1.1.编辑编辑:选择适当的编辑程序:选择适当的编辑程序,将将C C语言源程序通过键语言源程序通过键盘输入到计算机中盘输入到计算机中,并以文件的形式存入到并以文件的形式存入到磁盘中(磁盘中(.C.C)2.2.编译编译:即将源程序翻译成机器语言程序的过程。编:即将源程序翻译成机器语言程序的过程。编译出来的程序称为目标程序(译出来的程序称为目标程序(.OBJ.OBJ)3.3.连接连接:编译后生成的目标文件经过连接后生成最终:编译后生成的目标文件经过连接后生成最终的可执行程序(的可执行程序(.EXE.EXE)4.4.运行运行:运行是将可执行的目标程序投入运行,以获:运行是将可执行的目标程
18、序投入运行,以获取程序的运行结果;在操作系统中可以直接取程序的运行结果;在操作系统中可以直接执行扩展名为执行扩展名为.EXE.EXE的文件的文件开开 始始编编 辑辑编编 译译有错?有错?链链 接接执执 行行结果正确?结果正确?结结 束束源程序源程序file.c目标程序目标程序file.obj库函数和其库函数和其它目标程序它目标程序可执行程可执行程序序file.exe不正确不正确正确正确有有无无看看下面程序的运行结果是什么。看看下面程序的运行结果是什么。main()int x,y;x=3;y=6;printf(“%d,%d,%d”,x+y,xy,x*y);printf(“n”);1.5 程序与算
19、法程序与算法程序包括程序包括:(1)对数据的描述对数据的描述 数据结构数据结构 (2)对数据处理的描述对数据处理的描述 算法算法算法算法(algorithm)是对特定问题求解步骤是对特定问题求解步骤的一种描述。的一种描述。可将程序总结为:可将程序总结为:程序程序=算法算法+数据结构数据结构+程序设计方法程序设计方法+语言工具和环境语言工具和环境人们使用计算机,就是要利用人们使用计算机,就是要利用计算机处理各种不同的问题,计算机处理各种不同的问题,而要做到这一点,人们就必须而要做到这一点,人们就必须事先对各类问题进行分析,确事先对各类问题进行分析,确定解决问题的具体方法和步骤,定解决问题的具体方
20、法和步骤,再编制好一组让计算机执行的再编制好一组让计算机执行的指令即程序,让计算机按人们指令即程序,让计算机按人们指定的步骤有效地工作。这些指定的步骤有效地工作。这些具体的方法和步骤,其实就是具体的方法和步骤,其实就是解决一个问题的算法。根据算解决一个问题的算法。根据算法,依据某种规则编写计算机法,依据某种规则编写计算机执行的命令序列,就是编制程执行的命令序列,就是编制程序,而书写时所应遵守的规则,序,而书写时所应遵守的规则,即为某种语言的语法即为某种语言的语法.1 算法(算法(Algorithm)的概念)的概念【例【例1】输入输入3个数,求其最大值。个数,求其最大值。问题分析:设问题分析:设
21、num1,num2,num3存放存放3个数,个数,max存放其最大值。为求最存放其最大值。为求最大值,就必须对大值,就必须对3个数进行比较,可个数进行比较,可按如下步骤去做:按如下步骤去做:输入输入3个数个数num1,num2,num3。先把第先把第1个数个数num1的值赋给的值赋给max。将第将第2个数个数num2与与max比较,如果比较,如果num2max,则把第,则把第2个数个数num2的值的值赋给赋给max(否则不做任何工作)。(否则不做任何工作)。将第将第3个数个数num3与与max比较,如果比较,如果num3max,则把第,则把第3个数个数num3的值的值赋给赋给max(否则不做任
22、何工作)。(否则不做任何工作)。输出输出max的值,即最大值。的值,即最大值。2 算法的基本特征算法的基本特征 一个算法应具有以下一个算法应具有以下5个基本特征:个基本特征:有穷性有穷性 确定性确定性 有效性有效性 有零个或多个输入有零个或多个输入 有一个或多个输出有一个或多个输出 算法必须总是在执行有限个操作步骤和可以算法必须总是在执行有限个操作步骤和可以接受的时间内完成其执行过程。也就是说,对于接受的时间内完成其执行过程。也就是说,对于一个算法,要求其在时间和空间上均是有穷的。一个算法,要求其在时间和空间上均是有穷的。例如:一个采集气象数据并加以计算进行天气预例如:一个采集气象数据并加以计
23、算进行天气预报的应用程序,如果不能及时得到结果,超出了报的应用程序,如果不能及时得到结果,超出了可以接受的时间,就起不到天气预报的作用。可以接受的时间,就起不到天气预报的作用。算法中的每一步都必须有明确的含义,不允许算法中的每一步都必须有明确的含义,不允许存在二义性。例如:存在二义性。例如:“将成绩优秀的同学名单打将成绩优秀的同学名单打印输出印输出”,在这一描述中,在这一描述中“成绩优秀成绩优秀”就很不明就很不明确,是每门功课均为确,是每门功课均为95分以上?还是指总成绩在分以上?还是指总成绩在多少分以上?多少分以上?算法中描述的每一步操作都应能有效地执行,算法中描述的每一步操作都应能有效地执
24、行,并最终得到确定的结果。例如:当并最终得到确定的结果。例如:当Y=0时,时,X/Y是是不能有效执行的。不能有效执行的。3 算法的表示算法的表示 用自然语言表示用自然语言表示 用流程图表示用流程图表示 用伪代码表示用伪代码表示 计算机语言表示算法计算机语言表示算法 自然语言可以是中文、英文、数学表达式等。用自然语言表示自然语言可以是中文、英文、数学表达式等。用自然语言表示通俗易懂,缺点是可能文字过长,不太严格,表达分支和循环通俗易懂,缺点是可能文字过长,不太严格,表达分支和循环的结构不很方便。的结构不很方便。【例【例2】求】求1+2+100的值的值s。伪代码是用介于自然语言和计算机语言之间的文
25、字和符号伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法的,它不用图形符号,因此,书写方便,格式紧凑,来描述算法的,它不用图形符号,因此,书写方便,格式紧凑,也容易懂,同时也便于向计算机语言算法的转换。也容易懂,同时也便于向计算机语言算法的转换。【例【例4】用伪代码表示求】用伪代码表示求10!的算法。!的算法。begin(开始开始)置置t的初值为的初值为1(1t)置置i的初值为的初值为2(2i)当(当(while)i=10,执行(,执行(do)begin 使使t=t i 使使i=i+1 end 打印打印t的值(的值(print t)end(结束)。(结束)。计算机是无法识别流程图和
26、伪代码形式,只有用计算机语言计算机是无法识别流程图和伪代码形式,只有用计算机语言编写的程序才能被计算机执行。因此在用流程图和伪代码形式编写的程序才能被计算机执行。因此在用流程图和伪代码形式描述出算法后,还要将它转换成计算机语言程序。描述出算法后,还要将它转换成计算机语言程序。【例【例5】用】用C语言程序来描述求语言程序来描述求10!。!。#include int main()int i,t;t=1;i=2;while(i2)作为被除数,作为被除数,将将2 到(到(n1)各个整数轮各个整数轮流作为除数,如果都不能被整除,则流作为除数,如果都不能被整除,则n为素数。为素数。算法表示如下:算法表示如
27、下:S1:输入:输入n的值的值S2:2 i (i 作为除数)作为除数)S3:n 被被 i 除,得余数除,得余数 rS4:如果如果 r 等于等于 0,表示表示 n 能能 被被 i 整除,则打印整除,则打印 n“不是素不是素数数”,算法结束;否则执行,算法结束;否则执行S5S5:i+1 i S6:如果如果 i n1,返回返回S3;否则,打印;否则,打印 n“是素数是素数”,算法结束。,算法结束。算法举例算法举例2:求:求 11/2+1/3 1/4+1/99 1/100。S1:1 sS2:1 sumS3:2 dS4:(1)*s sS5:s*(1/d)tS6:sum+t sumS7:d+1 dS8:若
28、若d 100 返回返回S4;否则算法结束。;否则算法结束。算法举例算法举例3:用伪代码表示算法:用介于自然语言和计算用伪代码表示算法:用介于自然语言和计算机语言之间的文字和符号来描述算法机语言之间的文字和符号来描述算法 算法举例算法举例4:用计算机语言表示算法用计算机语言表示算法 main()int s=1;float d=2.0,sum=1.0,t;while(d=100)s=s;t=s/d;sum=sum+t;d=d+1;printf(“%f”,sum);C语言第语言第1次上机作业次上机作业1.输出以下字符:输出以下字符:Hello,world!2.输出如下图形:输出如下图形:*3.从键盘上输入两个整数从键盘上输入两个整数a和和b,输出,输出a与与b的和。的和。4.从键盘上输入两个两位整数,将它们合并为从键盘上输入两个两位整数,将它们合并为一个整数。例如,输入一个整数。例如,输入12和和34,输出,输出1234。