C语言(第一章)高教1.ppt_第1页
C语言(第一章)高教1.ppt_第2页
C语言(第一章)高教1.ppt_第3页
C语言(第一章)高教1.ppt_第4页
C语言(第一章)高教1.ppt_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计教程,2008年3月,The C Programming Language,使用教材 谭浩强,张基温编著 C语言程序设计教程高等教育出版社 (第三版) 参考教材 张向利等.C语言程序设计.广西师大出版社 谭浩强.C程序设计(第三版)清华大学出版社,课程安排,第一章 C语言概述 第二章 数据类型、运算符与表达式 第三章 算法基础与程序控制结构 第四章 模块化程序设计(函数) 第五章 数组 第六章 指针 第七章 结构体与共用体 第八章 文件 计算机等级二级考试 期末考试 实验(穿插在课程中进行),第一章 C语言概述,C语言程序设计,一、C语言及其学习特点,1为什么从C语言开始 开发能

2、力最强,应用最广泛 操作系统开发、应用程序开发、单片机程序开发、网络程序设计 专业水平的试金石 各种专业考试首选程序设计语言:等级考试、程序员考试、研究生入学考试 后续主干课程的重要基础 数据结构、微机原理、单片机原理、嵌入式系统、数据库程序设计、Java程序设计、可视化程序设计、网络编程,如何学习C语言编程?,编程似写作 先学“字词句”和“语法”,目标是“写作”。 学习数据类型、控制结构、语法规则等学语基 掌握程序分析、算法与编程写文章 仅仅读书是不够的 程序是编出来的,程序是调出来的 在编程实践中消化知识。 没有天生的程序员 初学者:有点难。 没有学不会的,只有学不精的除非自己放弃。 出于

3、蓝胜于蓝:超过你的老师完全可能。 循次渐近很重要 阅读/分析程序摹仿编程掌握常见程序模块简单程序复杂编程 仅是起点,而非终点 从此编程与你相伴而行真正的程序员从此起步。,听课要求: 切实掌握各章主要内容(预习/听课/消化/归纳) 在预习基础上,听课为主,笔记为辅,课后弄懂课件和教材中的程序(会分析,会流利写出) 考核方式: 作业(书面/上机)、期中考?、二级考试、期未考、实验考试 教师联系: 李优 ,二、C语言发展历史1、 C语言的出现及特点,程序设计语言的发展,CPU指令系统,由0、1序列构成的指令码组成 如:10000000 加 10010000 减,用助记符号描述的指令系统 如 ADD

4、AX, B,面向机器的语言,程序设计是数据被加工的过程,客观世界可以分类,对象是类的实例 对象是数据和方法的封装 对象间通过发送和接受消息发生联系,程序设计关键是定义类,并由类派生对象,2、 C语言的发展历史,产生背景 C语言是在B语言基础上发展起来的。,C语言,1960年出现,面向问题的高级语言,离硬件较远。,1963年,英国剑桥大学,1967年,英国剑桥大学Martin Richards对CPL进行简化,1970年,美国贝尔实验室Ken Thompson以BCPL语言为基础,进一步简化。并用之编写第一个UNIX操作系统。,3、C语言的产生,产生过程 产生时间: 19721973年 产生地点

5、: 美国贝尔实验室 目的: UNIX操作系统(第5版,90%用C语言编写) 设计人: Ken.Thompson和 Dennis.M.Ritchie,4、C语言标准,1977年,出现不依赖于具体机器的C语言编译文本。 1978年,标准C出现: K /*输出Hello,world! */ ,四、C程序的基本结构,例一 输出字符串的C程序ex101.c,/*给定半径,求圆的面积*/ #define PI 3.14159 /*编译预处理宏替换*/ #include /*编译预处理文件包含*/ #include /*编译预处理文件包含*/ main( ) /*主函数*/ float r,s; /*定义变

6、量r、s类型为单精度实型*/ r =1.0; /*变量r赋初值*/ s=PI * pow(r,2); /*计算圆面积s*/ printf (半径R=%f 时,面积S=%f n,r,s); /*输出结果*/ ,例二 求圆面积程序 ex102.c,/*给定半径,求圆的面积*/ #define PI 3.14159 /*编译预处理宏替换*/ #include /*编译预处理文件包含*/ #include /*编译预处理文件包含*/ main( ) /*主函数*/ float r,s; /*定义变量r、s类型为单精度实型*/ r =1.0; /*变量r赋初值*/ s=PI*pow(r,2); /*计算

7、圆面积s*/ printf(半径R=%f 时,面积S=%f n,r,s); /*输出结果*/ ,例二(求圆面积程序 ex102.c)分析,注释部份 这部分内容不会 被编译,也不被执行,编译预处理 程序编译、执行前系统 自动进行的特殊处理 特点: 以#开头 结束处无分号,关于编译预处理(宏定义) P143,#define PI 3.14159 #define 宏定义命令 PI 符号常量(宏名,最好用大写,以区别一般变量) 3.14159 宏体(可以是一个表达式,如3+4) 作用:用简单符号代表宏体部份内容(编译时会先自动替换) 意义:直观/多次使用/便于修改 注意: #define 可出现在程序

8、的任一位置(作用范围:由此行到程序末尾) 宏定义不是C语句,不必在行未加分号,否则会连分号一起置换。,关于编译预处理(文件包含) P143,#include stdio.h“头文件”(标准前导文件) C语言是一种“装配式”语言,许多常规的工作如输入、输出、数学函数等,往往事先由人做成各种“程序模块”(库函数),存放在各种所谓“头文件”(.h)中。使用时只需进行以下处理 #include “头文件名” 或 #include 在程序的执行部分调用该库函数:函数名(参数) 文件包含的作用,就是根据需要把相应的某个“头文件”的内容在编译时先整体嵌入所编的程序中。 用户也可以将自己设计的程序模块等做成“

9、头文件”,供其他程序“包含”。,文件包含示意图,#include #include 源程序ex102.c (用户编写),头文件stdio.h (系统提供),头文件math.h (系统提供),ex102.exe (可执行程序),stdio.h math.h,编译/ 连接,例一中,ex102.c文件本身只有12行,stdio.h有187行, math.h有107行, 实际上stdio.h本身还包括 一个24行的头文件stdarg.h。 “文件包含”是在编译后连接时“包含”进可执行程序的。 比较:ex102.c 1kb; ex102.obj 1kb; ex102.exe 26kb,stdarg.h,

10、stdio.h stdarg.h math.h,使用“文件包含”功能的优点,提高程序设计效率和程序可靠性 减少程序员重复劳动量 Turbo C提供了三百多个标准库函数,存放在若干个头文件中(常用库函数见附录) 本例中:stdio.h 标准输入/输出函数 math.h 数学函数 stdlib.h 常用函数 一个优秀的程序员不应是事无巨细都要从头做起的“工匠”,而应是一个“策划师”+“组装师”。 所以 ,逐步熟悉并掌握常用函数等现有功能模块,是学习C程序设计的一个重要内容。,/*给定半径,求圆的面积*/ #define PI 3.14159 /*编译预处理宏定义*/ #include /*编译预处

11、理文件包含*/ #include /*编译预处理文件包含*/ main( ) /*主函数*/ float r,s; /*定义变量r、s类型为单精度实型*/ r = 1.0; /*变量r赋初值*/ s=PI * pow(r,2); /*计算圆面积s*/ printf(半径R=%f 时,面积S=%f n,r,s); /*输出结果*/ ,例二(求圆面积程序 ex102.c)分析(续,主函数),主函数的基本形式 main() (函数体) ,主函数,关于主函数 main( ) ,C语言是一种函数式语言,它的一个函数实际上就是一个功能模块C程序的基本组成是函数。 一个C程序是由一个固定名称为main的主函

12、数和若干个其他函数(可没有)组成。 一个C程序必须有一个、也只能有一个主函数。 主函数在程序中的位置可以任意,但程序执行时总是从主函数开始,在主函数内结束。 主函数可以调用其他各种函数(包括用户自己编写的),但其他函数不能调用主函数。,主函数的一般形式:,main( ) 说明部分程序段(定义数据类型) 执行部分程序段(给出操作指令) ,函数体,说明部分(简单程序可能没有此部分,如P4例1.1): float r,s; /*定义变量r、s类型为单精度实型*/ int a,b; /*定义变量a、b类型为整型*/ 执行部份:输入、赋值、计算、控制、输出等: r=1.0; /*变量r赋初值*/ s=P

13、I*pow(r,2); /*计算圆面积s*/ printf(半径R=%f 时,面积S=%f n,r,s); /*输出结果*/,其他函数,标准库函数只能调用 。使用方法: 先“包含”,即将该函数所在头文件包含在程序中。 后调用。调用方式:函数名(参数),例: #include #include main( ) s=PI*pow(r,2); printf(“半径R=%f 时,面积S=%fn”,r,s); 说明:pow(x,y) 求xy (math.h中的标准数学函数)p313 printf(); (stdio.h中的标准输出函数) p322,其他函数,自编(定义)函数: (详见教材第4章) 先定义

14、(规定函数类型、函数名和函数功能) 后调用(使用所定义的函数实现其功能) 定义函数: 函数类型 函数名(形式参数) 函数体 调用函数:函数名(参数) 【示例】求三个数的平均值,自定义函数示例,float average ( float x, float y, float z) /*定义函数average( )*/ float aver; aver=(x+y+z)/3; return(aver); main( ) /*主函数*/ float a,b,c,ave; a=3.5;b =4.6;c =7.9; ave=average(a,b,c); /*调用自定义函数average( )*/ prin

15、tf(average=%f ,ave); ,自定义函数一般形式 函数类型 函数名(形式参数) (函数体) ,/*给定半径,求圆的面积*/ #define PI 3.14159 /*编译预处理宏替换*/ #include /*编译预处理文件包含*/ #include /*编译预处理文件包含*/ main( ) /*主函数*/ float r,s; /*定义变量 r、s类型为单精度实型*/ r =1.0; /*变量r赋初值*/ s=PI*pow(r,2); /*计算圆面积s*/ printf (半径R=%f 时,面积S=%f n,r,s); /*输出结果*/ ,求圆面积程序 ex102.c分析(续

16、,语句),关于语句 特点: 均以分号结束; 一个程序行可以有多个语句。 语句组成了函数体。 强烈建议: 按缩进格式书写语句。 本示例程序中使用了: 数据类型定义语句 赋值语句 输出语句,关于语句:数据类型定义语句,语句形式 变量类型关键字 变量名; float r,s; 定义r、s为单精度实型变量 int r,s; 定义r、s为整型变量 【注意】在C语言程序中,所有变量都要先定义后使用,否则就会出现编译错误提示,如: Error: Undefined symbol a in function main Lets try,变量类型关键字 字符型(描述文字性的数据) char 数值型: 整型(在机

17、内是准确表示的) int 实型(在机内一般是近似表示的) float (有效数字6位) double(有效数字16位),变量名 P16 C语言标识符(变量名、符号常量名、函数名等)命名: 组成:字母、数字、下划线 开头:字母、下划线 长度:32字符(Turbo C) 【注意】大小写为不同字符(变量名一般小写,符号常量 名一般大写),还要注意不得与关键字(P307)同名。,关于语句: 赋值语句,作用:使变量获得具体的运算值。 语句形式 变量名=表达式(常量、变量、函数、算式及其混合); r =1.0; /*变量r赋初值*/ s=PI*pow(r,2); /*计算圆面积s*/ 注意:函数pow(

18、)在头文件math.h中定义。 所以程序开头处必须加上一行所谓“文件包含”: #include 变量赋初值亦可在数据类型定义时进行: float r =1.0, s; 把变量声明语句与赋值结合在一起的语句,术语上称为 “初始化语句”。,关于语句: 输出语句,作用:将运算结果送到显示器屏幕显示出来 语句形式 printf ( ) ; printf (半径R=%f 时,面积S=%fn,r,s); printf (“Hello,everyone!”); 【注意】C语言本身没有输入、输出语句,其功能要借用有关函数来实现。 %f 格式字符串(见后) n 控制字符(转义字符) n表示回车换行 按定义输出动

19、作或特殊字符 引号中的其他部分照原样输出,关于格式字符串,表示该处将用printf语句引号外对应表达式的值替换后输出 例:若 r =1,s=3.14 printf (“半径R=%f 时,面积S=%fn”,r,s); 输出结果: 半径R=1 时,面积S=3.140000 常用格式字符串: 字符型:%c 单字符 %s 字符串 数值型:%d 整数(十进制) %f 实数(小数形式,默认为6位小数),例一 int x = 5; f loat y =3; printf (a=%d,b=%f,c=%s,x,y, abcdefg);,输出结果: a=5,b=3.000000,c=abcdefg,例二 int

20、x = 5; f loat y =3; printf (a=%d,b=%f,c=%s,x+2,y*3, 123defg);,输出结果: a=7,b=9.000000,c=123defg,五、 C程序的符号系统,主要内容: 基本字符 标识符 关键字,1 基本字符,大写英文字母:A B C X Y Z 小写英文字母:a b c x y z 数字:0 1 2 9 空白符:空格符、换行符、制表符 特殊字符:+ - * / ( ) _ = ! # % . , ; : “ | 例: c=3+(a=5)*6 结果:c=33,a=5(一个语句可以有几个赋值运算) 变量必须先定义后使用 变量名必须符合标识符命名

21、规则,数据间的转换(混合运算),数据的类型级别 基本规则 不同类型运算量参加运算,遵守“向高看齐”的类型一致化规则:将长度较短的运算量转换为长度较长的运算量,以保证不丢失信息。 将实型常量赋给整型变量,将被自动取整 int a=7.999999 ; 等效于 int a=7;,七、算术运算,C语言运算符(13类,提供丰富的运算功能) 1、算术运算 算术运算符 + * / % + + ,例:3.5 * 4=14.000000 3 * 4=12 8 + 3=11 8 - 3.0=5.000000 14 % 4 = 2 14 / 4 = 3 4.5 / 5.0=0.900000 20.4%2(出错),

22、2.500000 (1/4为0),例: float x, y; x%y; (出错),例:若int a=7;float x=2.5,y=4.7; 则表达式 x + a % 3 * (int)(x+y) % 2 / 4 的值是什么?,自反算术赋值运算符(复合的赋值运算符) C语言规定可以使用10种复合赋值运算符,其中与算术运算有关的复合运算符是: +=、-=、*=、/=、%= 复合赋值运算符的含义为: a+=5 aa5 a-=5 aa5 a%=5 aa%5 a/=5 aa/5 n*=m+3 n=n*(m+3),注意:复合赋值运算符的优先级与赋值运算符的优先级相同。 例如: 已有变量a,其值为9,计

23、算表达式的值。 a+=a-=a+a 分析:从右往左分析 先看: a -= aa a=a-(a+a)结果为9 再看: a+=a a=a+a 结果为18 切不能以为: a=9+(9-(9+9)=0 ,例: c=b*=a+3 相当于(1)a+3 (2)b=b*(a+3) (3)c=b 例:若 i 、j 的初值分别为3和4,则执行 j+=i- =1 后i 、j 的值为多少?,解题步骤: i=i-1=3-1=2 j=j+i=4+2=6 结果:i=2, j=6,关于优先级和结合方向: C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行。如果在一个运算对象两侧的运算符的优先

24、级别相同,则按规定的结合方向处理。 (各种运算符的优先级和结合性见附录) 【例】设i、j初值分别为3和4,则执行 j+=i-=1;后 i ,j的值为多少? 【例】若x=7;则x+=x-=x+x的值是多少?,(i=2,j=6),(-14),解法:从右到左,先做x=x-(x+x)=-7, 再做x=x+x=-14,自加、自减运算符 +(自加运算符)-(自减运算符) 用法: +1 -1 运算 a、前缀形式 int i=5; x = + i ; y= i ; 执行后: (x=6, i =6, y=6) int i =5; + i ; y= i ; 执行后:( i =6, y=6 ) b、后缀形式 int

25、 i =5; x = i +; y= i ; 执行后: (x=5, i =6, y=6) int i =5; i +; y= i ; 执行后:( i =6, y=6),若对某变量自加/自减而不赋值,结果都是使该变量自身1;若某变量自加/自减的同时还要参加其他运算,则前缀运算是先变化后运算,后缀运算是先运算后变化。注意:运算对象只能是整型变量, 5+或(x+y)+均为错,例一: main() int a=100; printf(“%dn”,a); printf(“%dn”,+a); printf(“%dn”,a+); printf(“%dn”,a); 运算结果:100 101 101 102,例

26、二: 若 int x=3,y; 求下列运算后y和x的值 y=x+ -1; (2 4) y=+x -1; (3 4) y=x - - +1; (4 2) 分析思路:先对右边的表达式进行扫描,如果x+,先取x值完成表达式运算后再让x自加1,如果+x,则先将x自加1后再代入表达式进行其他运算,例三: 若 int i=3 求下列运算后y和z的值 y=(i+)+ (i+)+ (i+); y=9 (3+3+3) z=(+i )+ (+i )+ (+i ); z=18 (6+6+6)分析思路:先对右边的表达式进行扫描,看是否需要先自加,如需要,就作若干次自加,然后再进行表达式的其他运算。 思考: y=(+

27、i)+ (i+)+ (+ i);,y=15 (5+5+5),【例一】 main( ) int x,a; x=(a=3*5,a*4,a+5); printf(“x=%d,a=%dn”,x,a); ,【例二】 main( ) int x,a; x=(a=3*5,a*4),a+5; printf(“x=%d,a=%dn”,x,a); ,运算结果:x=20,a=15,运算结果:x=60,a=15,【例三】main() int a,b,x; x=(a=8,b=15,b+,a+b); printf(“a=%d,b=%d,x=%dn”,a,b,x);,运算结果:a=8,b=16,x=24,【例一】 main

28、( ) int m=5; if (m+5) printf(“m5”); else printf(“m=%d,”,m-); printf(“m=%d”,m-); ,运算结果: m=6,m=5,【例二】 main( ) int m=5; if (+m5) printf(“m5”); else printf(“m=%d,”,m-); printf(“m=%d”,m-); ,运算结果: m5,下面是容易引起误解的两个例子。 c = b* = a + 2;容易误解为 b *= a; c = b + 2; x = i + +j;应该理解为x =(i + +) + j呢?还是x = i +(+ + j)呢?

29、 实际上C编译器总是从左至右尽量多地将若干个字符组成一个运算符(对标识符也如此),因此i + + + j被处理成(i +) + j而不是i + (+ j)。,(2) 加注释说明。 注释是提高程序清晰性的有力工具。怕别人误解(当然自己不能误解)的情况下,可以加注释说明。如对c = b* = a + 2可以写为:,a = a + 2; b = b * a; c = b;或c = a + 2; c = b*c;,对第个表达式语句,可分写为:,x = i + j; i +;,为了克服这类副作用,要养成良好的编程习惯。 (1) 将费解处分解。 例如将上面第个表达式语句分写为,c = b* = a + 2

30、; /*a=a+2;c=b*c*/,执行这段程序时,不同机器上得到i的值可能不同。 有的机器先执行(k=j+1)然后再执行(j=5),i值得9。 而有的机器是先执行(j=5)后执行(k=j+1),i的值就成了11。 为了提高程序的可移植性,应当使表达式分解,使之在任何机器上运行都能得到同一结果。因此上面语句可改为:,j = 3; i =(k = j + 1)+(j = 5);,j = 3; k = j + 1; j = 5; i =k + j;,不定解问题对机器的副作用 先看一个例子:,小 结1、C语言程序的基本结构,一个C程序是由一个固定名称为main的主函数和若干个其他函数(可缺省)组成。

31、 其基本结构一般形式如右图所示。 注:TC环境下C源程序的扩展名一般为.c(如area.c),小 结2、C语言程序的基本特点,C语言是一种函数式语言,其程序基本组成是函数 每个C程序必须有一个、也只能有一个主函数main 不管主函数在程序中的位置如何,程序执行总是从主函数开始 所有变量必须先定义(规定数据类型)后使用 每个语句必须用分号“;”结束(注意是“每个语句”而不“每行语句”) 编译预处理命令不是语句(行末不能用分号结束) C语言本身没有输入/输出语句,其输入/输出功能须通过调用标准函数来实现 使用系统提供的标准库函数或其他文件提供的现成函数时,必须使用“文件包含”(除了printf和s

32、canf语句)。,四、示例程序的完善,左铡的示例程序(求圆面积)有四个不足: 每次运行后屏幕残留的显示内容和运行结果混在一起。 如果要求多个半径r值时的面积s,每次都必须修改源程序并重新编译处理; 如果半径r为负值,也会有正常的s值输出。 输出结果的小数位数为6位,与习惯不符。 为此,可将程序进行如下修改:,#define PI 3.14159 #include #include #include main( ) float r,s; clrscr( ); /*清屏*/ printf(请输入半径 R=); scanf(%f , ,#define PI 3.14159 #include #inc

33、lude main( ) float r,s; r =1.0; s=PI*pow(r,2); printf(R=%f,S=%f n,r,s); ,示例程序ex102.c :,/*改进后的求圆面积程序ex102.C */ #define PI 3.14159 #include #include #include #include main() float r,s; clrscr( ); /*清屏,在conio.h中定义*/ printf(请输入半径R=); /*人机对话提示语*/ scanf (%f, /*限制R,S小数位数*/ ,Lets try,改进程序有关语句分析,键盘输入函数 scanf

34、(“%f”, (结果将使 r 等于某个随机值) 通常与printf()函数组合使用,实现“人机对话”功能。,Example: printf(“Input R=”); scanf(“%f ”, ,改进程序有关语句分析(续),选择语句 if (条件表达式)语句或复合语句(用花括号括起); 功能:如果条件表达式的值为真,就执行指定语句或复合语句。 扩展形式: if else 语句 if (条件表达式) 语句或复合语句; else 语句或复合语句; 注意:条件表达式必须用()括起,且不能跟分号。,Example: #include #include main( ) int a,b,c; clrscr(

35、 ); /*清屏*/ printf(Input a、b=); scanf(%d,%d, ,int max(int x, int y) int z; if (xy) z=x; else z=y; return z; ,更多的改进,给程序加上软件“封面”和“封底” 封面程序标题和编程者等 封底告别辞,熟记下列TC编译软件常用英语词汇: function 函数 statement 语句 missing 丢失 error 出错 parameter 参数 illegal 非法的 invalid 无效的 pointer 指针 character 字符 array 数组 string 字符串 constan

36、t 常量 syntax 语法 argument 参数 type 类型 definition 定义 compile 编译 call 调用 symbol 标识符(变量名等) declaration 说明、声明 并将以下屏幕提示译为中文: Compiling E:tcabc.c Error E:tcabc.c 4: statement missing ; in function main Error E:tcabc.c 3: Undefined symbol s in function aa,其他要求,附:Turbo C编程常用操作键(按F1键可获得帮助),Turbo C基本操作 Alt+F 建立新文件 Load/Pick 调入现有文件 Save 存盘(F2) Write to 换名存盘 Ctrl+F9 运行程序(自动完成编译/连接) Alt+F5 观看运行结果 程序调试常用操

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论