1、计算机学院:薛磊江计算机程序是指为让计算机完成某一任务而给它发出的一组有序的指令集合。 在生活中程序往往是对做某事的过程描述,比如你学开车时教练(相当于编写程序的人)教给你(相当于计算机)启动步骤:检查安全带点火松开手刹观察后视镜打转向灯松离合起步。这就是教练发给你的“执行汽车启步”的一组有序指令(相当于程序)。只不过这是使用你听懂的人类自然语言发出的指令,而要让计算机执行某项任务,就要用计算机语言来发指令了。计算机语言:用来书写计算机程序(即指令集合)的语言。 计算机程序中的指令是用计算机语言来写的。计算机语言总的来说分为三类:1、机器语言:由二进制0、1书写的指令。2、汇编语言:用一些简洁
2、的英文字母和符号串来替代人类难以理解0、1来书写指令。如:add、move。3、高级语言:接近于数学语言或人自然语言来书写指令。前两种也称为低级语言。他们各有优缺点。从人的理解角度而言:高级语言最容易理解其次是汇编和机器语言,而从计算机执行速度角度而言正好相反。高级语言又可分为如下几类:1、从执行方式上分为:编译型和解释性语言。2、从编程理念上分为:面向过程和面向对象。常见的编程语言:C、C+、C#、JAVA、VB等。语言开发工具:高级语言需要翻译成计算机能识别并执行的机器语言,这一过程称为编译。不同的语言有不同的编译工具,即使相同的语言,由于开发编译工具的公司不同,编译工具的名称也有区别。如
3、:Mc,Tc等。这些工具往往集编写代码、编译、调试等功能于一身,所以也称为IDE(集成开发环境)。关于C语言:C语言是面向过程的高级语言。其主要优点是它兼有高级语言和汇编语言的特点,功能齐全,应用范围广泛,非常适合程序语言教学。缺点是不容易支持面向对象技术。如何学习计算机编程语言。 要学好计算机语言主要从掌握关键字的用法、控制语句的语法规则、常见问题的算法入手。多读程序、多做练习。循序渐进,逐步提高。 例1-1:在屏幕上输出“Hello, World!”#include main() printf(“Hello, World!”);主主函数,名字固定函数,名字固定main()main()函数开
4、始结束,中间为函数体函数开始结束,中间为函数体函数体内的语句函数体内的语句编译预处理编译预处理函数与主函数函数与主函数 程序由一个或多个函数组成。 一个程序中必须有、且只能有一个主函数main()。 程序执行从主函数main开始(即程序执行的),在main中结束,其它函数通过嵌套调用得以执行。 函数是由函数名和函数体构成的,函数体由包含。程序语句程序语句 函数主要由语句组成。 用英文分号“;”作为语句终止符。编译预处理命令编译预处理命令 预处理命令通常应放在源文件或源序的最前面C程序书写规定 C程序书写自由,一行可以写多条语句,但每条语句要用分号作为结束标记;也可以将一条语句分成多行书写,但除
5、了控制语句外,其它语句多行书写要使用续行符“”。 C语言大小写敏感,即区分大小写。 C语言忽略两个语句之间的空行和空格。 可以使用/对单行语句或使用/*/对语句块进行注释,包含在/* */中的内容或/后的内容不被编译。C程序书写规范 使用TAB键缩进。采用缩进书写能使程序清晰易懂 对齐。对齐 可以避免 丢失,易于检查。 要有足够的注释。以便以后程序的修改和维护。初学者易犯的书写错误 没注意大小写,如main()写成Main()。 每条语句后忘记书写;或将;写成;。 丢失“”或没能合理配对使用“”“”。编辑编辑链接链接编译编译执行执行C程序开发步骤file.exe程序代码的录入程序代码的录入,生
6、成源程序生成源程序*.c语法分析查错,语法分析查错,翻译生成目标程翻译生成目标程序序*.obj与其它目标程序与其它目标程序或库链接装配或库链接装配,生生成可执行程序成可执行程序*.exeC C数数据据类类型型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型void自定义型自定义型typedef字符类型字符类型char枚举类型枚举类型enum整整 型型实实型(浮点型)型(浮点型)单精度型单精度型float双精度型双精度型double数组数组结构体结构体struct共用体共用体union短整型短整型short长整型长整型long整型整型int长双精度型长双精度型 long double
7、C C语言的数据类型语言的数据类型类型 符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-3276832767(signed)short16-3276832767(signed)long32-2147483648214748364716unsigned int0655353204294967295unsigned longunsigned short16065535有float323.4e-383.4e38 7位有效有double641.7e-3081.7e308 16位有效 有char8-128127无unsigned char80255返回返回常量:程序运行时其值
8、不能改变的量。(常量有普通常量和符号常量)普通常量 整型常量 按进制来分为:十进制、八进制(数字0开头如:0123)、十六进制(0 x开头如:0 x3A4) 按类型分为:int(基本整型)、short(短整型)、long(长整型)如:32L 按有无符号分:有符号、无符号(unsigned) 实型常量(实数或浮点数): 普通写法:3.2、3.0或3.通常情况下,默认的实数常量为double型,如果在实数后加f,如:3.2f,则认为它是float 型。 科学记数法:“数字部分e指数部分”。e或E之前必须有数字,指数必须为整数。如1e2、2.3E-5等。 字符型:用单引号括起来的单个字符或转义字符(
9、将反斜杠后面的字符转变成另外的意义)。如:A、3、好。 字符串型:用双引号(“”)括起的一个或多个字符。(详细解释) 注意:单引号、双引号必须在英文状态下书写。符号常量:用标识符代表常量。 关于标识符:用来标识常量、变量、函数等的字符序列。通俗讲就是给常量、变量、函数等用字符或字符串起的一个名字。标识符命名规则如下: 只能由字母、数字、下划线组成,且第一个字符必须是字母或下划线;不能和保留字冲突;区分大、小写。 规范:最好见名知义;常量名大写、变量名小写。 定义符号常量的格式: #define 标识符 常量 如:define PRICE 30变量:程序运行时中其值可以改变的量。理解变量 在C程
10、序中变量必须先定义后使用,变量定义的格式:数据类型 变量名; ( 数据类型参看表1) 如 int num,a;float scor,height;char sex;变量的使用:变量的使用要注意以下几个问题1、定义变量后,虽然没有赋值,但其内容非空。2、定义变量的同时给变量赋值,称为初始化。如:int a=3,b=3;char=M;注意:不允许 int a=b=3;3、给变量赋值时,变量原来内容被新内容取代。4、给变量赋值时要注意数值范围、类型匹配和精度问题。如:num=92345678675756;a=3.6 scor=3.1415926;5、在0-127范围内char类型和int型通假。 c
11、har c=A 和int c=65 一致。6、同一个函数体内不允许2个名字完全相同的变量。隐式转换 什么情况下发生 运算转换-不同类型数据混合运算时。 赋值转换-把一个值赋给与其类型不同的变量时。 输出转换-输出时转换成指定的输出格式。 函数调用转换-实参与形参类型不一致时转换。 运算转换规则:不同类型数据运算时先自动转换成同一类型。显式转换(强制转换) 一般形式:(类型名)(表达式)例:(int)(x+y); (int)x+y;(double)(3/2); (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变 整型、实型(单、双精度)、字符型数据间可混合运算。整型、实型(单
12、、双精度)、字符型数据间可混合运算。例如:例如: 10+10+a a+1.5-8765.1234+1.5-8765.1234* *b b 高高 doublefloatdoublefloat long long unsigned unsigned 低低 intchar,shortintchar,shortC运算符算术运算符:(+ - * / % + -)关系运算符:( = !=)逻辑运算符:(! & |)位运算符 :( | &)赋值运算符:(= 及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(* &)求字节数 :(sizeof)强制类型转换:(类型)分量运算符:(. -)下标运算符
13、:()其它 :(( ) -)表达式:由运算符和相关操作数组成的式子,如:a+b、 a=34、printf(“/d”, c/m)、等等。表达式后加分号就变成语句。如: a+b; a=34;printf(“%d”, c/m);学习运算符应注意: 运算符功能 与运算量(操作数)关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型算术运算符和表达式 基本算术运算符: +、 -、 *、 /、 % 结合方向:从左向右 优先级: - 、* / % 、 + -说明: “-”可为单目运算符时,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据例 : 5/2 = 2 -5/2.0 =
14、-2.5例 :5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 ()自增、自减运算符+、 - 作用:使变量值加1或减1 种类: 前置 +i, -i (先执行i+1或i-1,再使用i值) 后置 i+,i- (先使用i值,再执行i+1或i-1) 说明: + - 不能用于常量和表达式,如5+,(a+b)+ + -结合方向: 自右向左 优先级:- - +、 * * / % / %、+ -+ -例 j+k; (j+)+k;例 -i+ -(i+)i=3; printf(“%d”,-i+); 输出:-3 赋值运算符和表达式 简单赋值运算符 符号: = = 格式: 变量标识符=
15、表达式 作用:将一个数据(常量或表达式)赋给一个变量。复合赋值运算符 种类:+= += 、 -= -= 、 * *= =、 /= /=、 %= %=a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例 a=3; d=func(); c=d+2; 说明: 结合方向:自右向左。 优先级: 14。 左侧必须是变量,不能是常量或表达式。 赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型。 赋值表达式的值与变量值相等,且可嵌套。例 3=x-2*y; a+b=3;例 float f; int I; i=10; f=I; 则 f=10.0例: a=b=c=5 a=(b=5) a=
16、5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2)逗号运算符和表达式 形式:表达式1,表达式2,表达式n 结合性:从左向右。 优先级: 15。 逗号表达式的值:等于表达式n的值。 用途:常用于循环for语句中。例 a=3*5,a*4; a=3*5,a*4,a+5例 x=(a=3,6*3); x=a=3,6*a例 a=1;b=2;c=3; printf(“%d,%d,%d”,a,b,c); printf(“%d,%d,%d”,(a,b,c),b,c); 关系运算符和表达式 关系运算符 种类: = !=。 结合方向:自左向右。 优先级别:(如图) 关系表达式的值:用1表示真和
17、用0表示假。=!=优先级6(高)优先级7(低)例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc /a=(bc)例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc 关系运算注意:例 若a=0; b=0.5; x=0.3; 则 a=x43 值为 0例 int i=1, j=7,a; a=i+(j%4!=0); 则a=2例 a0 结果为 1 A100 结果为 0例 注意区分“=”与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to
18、 b”);例 应避免对实数作相等或不等的判断如 1.0/3.0*3.0=1.0 结果为0可改写为:fabs(1.0/3.0*3.0-1.0)3&2|8b)&(n=cd)条件运算符与表达式 一般形式: expr1 ? expr2 : expr3 执行过程: 功能:相当于条件语句,但不能取代一般if语句 条件运算符可嵌套: 如 x 0 ? 1 : (xb?a:cd?c:d 相当于: ab?a:(cd?c:d) expr1、expr2、expr3类型可不同,表达式值取较高的类型expr1取expr2值取expr3值非0=0结构化程序设计的三种基本结构:顺序结构、选择结构循环结构。程序设计应遵守结构化
19、原则。C语句的种类: 控制语句 : 完成一定的控制功能。 函数调用语句: 完成函数调用功能。 表达式语句 : 由各种表达式加分号构成。 空语句 : 只有分号的语句。 复合语句 : 由 多个语句 组成。数据I/O在C语言中的实现 I/O是指从计算机输入设备(如键盘、磁盘、扫描仪等)向计算机输入数据;由计算机向输出设备(如显示器、磁盘、打印机等)输出数据。(本章只介绍键盘输入和屏幕输出) C语言本身不提供I/O命令,所有的数据IO都是由库函数完成的。 C程序的“I/O函数” 均放在stdio.h头文件中,若在程序中使用这些函数必须在函数体外使用#include 将其包含在源程序中。(格式化输入/输
20、出函数除外)printf函数(格式输出函数)1) 作用:向显示器输出若干个任意类型的数据。2) 格式:printf(格式控制,输出表列)3) 说明: 格式控制是用双引号括起来的字符串,也称“转换控制字符串”,它包括两种信息: 格式说明:由格式说明:由“% %”和格式字符组成。和格式字符组成。 普通字符:即需要原样输出的和转义的字符。普通字符:即需要原样输出的和转义的字符。 输出表列是需要输出的数据,可以是常量 、 变量或表达式,也可以没有,若有多个输出项,每项用逗号分隔。4)格式字符:对不同类型的数据用不同的格式字符,有以下几种: d格式符: 用来输出十进制整数。 %d 按整型数据的实际长度输
21、出。 %md m为指定的输出字段的宽度。(右对齐) %ld 输出长整型数据。 %mld 输出长整型数据,m为指定的输出宽度。 o格式符:以8进制形式输出整数。符号位被作为8进制的一部分输出,不会输出带负号的8进制数。也可分为%o,%mo ,%lo ,%mlo几种。 x格式符:以16进制形式输出整数。同样不会出现负的 16进制数。也可分为%x ,%mx ,%lx ,%mlx几种。 u格式符:输出unsigned型数据。以十进制形式输出。 c格式符:用来输出一个字符。 s格式符:用来输出一个字符串。 %s 按字符串原长输出。 %ms 输出字符串占m列,右对齐 %-ms 输出字符串占m列,左对齐 %
22、m.ns 字符串占m列,但只取左端n个字符,右对齐 %-m.ns 字符串占m列,但只取左端n个字符,左对齐 f格式符:用来输出以小数形式表示的实数。 %f 指定字段宽度,由系统自动指定,整数部分全部输出,输出6位 小数,单精度有效位为7位,双精度有效位为16位。 %m.nf 输出数据共占m列,其中有n位小数,右对齐。 %-m.nf 输出数据共占m列,其中有n位小数,(按四舍五入取舍) 左对齐,右补空格。scanf函数(格式输入函数)1) 作用:输入任何类型的多个数据。2) 形式:scanf(格式控制,地址表列)3) 说明: 格式控制与printf函数中的格式控制相同。 地址表列是由若干个地址组
23、成的表列,可以是变量的地址,或字符串的首地址。例 main( ) int a,b,c;scanf( %d%d%d ,&a,&b,&c);printf( %d,%d,%dn,a,b,c); “& &”是地址运算符,是地址运算符,&a&a指指a a在内在内存中的地址。存中的地址。“%d%d%d”%d%d%d”表示按表示按十进制整数形式输入数据,输入十进制整数形式输入数据,输入数据时,在两个数据之间以一个数据时,在两个数据之间以一个或多个或多个空格空格间隔,也可以用间隔,也可以用回车回车键键、跳格键跳格键TabTab,不能用逗号。不能用逗号。4) 格式说明:格式说明符与printf中相似,需要注意的
24、是除了格式说明符外,若有普通字符则要求原样输入。另作几点说明:(1)在scanf中不能用%u说明符,对无符号型数据,以%d,%o,%x格式输入。(2)可以指定输入数据所占列数,系统自动按它截取所需数据。 例如:scanf(%3d%3d,&a,&b); 输入123456 则自动将123a,456b scanf(%3c,&ch); 输入abc个字符,把第一个字符a赋给ch(3) %后的“*”附加说明符,用来表示跳过它相应的数据。 例如:scanf(%2d%*3d%2d,&a,&b); 输入 12 345 67 则将12付给a,67付给b,345被跳过。(4) 输入数据时不能规定精度。如:scanf
25、(“%7.2f”,&a);非法两个不常用的字符输入与输出函数1. putchar函数(字符输出函数)1) 作用:向终端输出一个字符。2) 形式:putchar(c); c可以是字符变量或整型变量。2. getchar函数(字符输入函数)1) 作用:由终端输入一个字符。2) 形式:getchar( );函数的返回值为输入的字符。要注意有变量接收。例如:char c;c=getchar();putchar(c);也可以直接写成: putchar(getchar();简单顺序程序设计例1:输入一个华氏温度,要求输出摄氏温度,公式为:#include “stdio.h”main() float c,f
26、; scanf(“%f,&f); c=5.0/9*(f-32); printf( nc=%7,2fn ,c); )32(9/5fc变量实际上是在内存中开辟的用来存放用户数据的内存空间,程序中所需要用到的数据,就临时存放到内存中 当你定义了一个变量时,系统就内存中给你开辟了一个相应的内存空间,供你存放数据。 如:int a;float b;char c;c=;a=32;在你定义变量的时候,系统做了两件事:开辟空间,记录地址。0 x00100 x00100 x00110 x00120 x00130 x00140 x00150 x0016内存内存内存地址内存地址a ab bc c3232a a0 x
27、00100 x0010返回返回字符形式字符形式含义含义ASCII代码代码n回车换行行10t跳到下一制表位跳到下一制表位9b从当前位后退一位从当前位后退一位8r返回本行开头返回本行开头13f换页换页12 反斜杠反斜杠92 单引号单引号39” 双引号双引号34dddASCII的八进制的八进制xhhASCII的十六进制的十六进制返返 回回字符串常量在内存中的存放:字符串中的每一个字符均:字符串中的每一个字符均以其以其ASCIIASCII码存放,且最后添加一个码存放,且最后添加一个“空字符空字符” ” 作为字作为字符串的结束标志。符串的结束标志。例:字符串常量例:字符串常量“CHINA”CHINA”存放在内存中的情况是:存放在内存中的情况是: 因此,字符常量因此,字符常量aa和字符串常量和字符串常量aa的区别是:的区别是:字符字符a a :1 1字节(值为字节(值为9797)字符串字符串“a”“a”:2 2字节(值为字节(值为97,097,0)C CH HI IN NA A00返返 回回