




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2020/7/21,1,本书内容,第1章 基础知识 第2章 C语言的基本要素 第3章 变量名、数据类型、运算符和表达式 第4章 C程序基本控制结构 第5章 函数 第6章 数组和指针 第7章 递归 第8章 结构、联合、位运算和枚举类型 第9章 预处理命令 第10章 文件 第11章 高级话题 第12章 C89 Vs C99 实验 (待安排),2020/7/21,2,变量定义、算术表达式、 赋值语句和while语句,本章主要内容,ARM Vector Table,FIQ,IRQ,(Reserved),Data Abort,Prefetch Abort,Software Interrupt,Undef
2、ined Instruction,Reset,1,3,2,第一个C语言程序,C语言程序的开发过程,4,for循环语句 、常量,5,字符的输入和输出操作 、函数,6,字符、整型数组和外部变量,2020/7/21,3,本章的节本要求,本章主要介绍C语言的核心要素,通过本章的学习读者会对C语言有一个整体的基本概念,并能够编制基本的C程序。 本章将主要集中在以下基本内容上:变量、常量、运算符、表达式、控制流、函数、以及基本的输入输出库函数等。 让初学者快速建立对C语言程序设计的整体概念,并能够编制一些简单有趣的C程序。,最常使用的20元素,2020/7/21,4,学习或者教学C语言最重要的第一步是让学
3、习者能够动手。 动手能够增强学习者的信心,而信心对学好C语言来说是重要的。 在阅读过程中,作者希望初学者把主要精力放在基本要素上,感觉有难度的内容可以先放一放。,2020/7/21,5,2.1 C语言程序的开发过程,第一步:编辑得到源程序。 第二步:编译得到目标码。 第三步:连接得到可执行代码。 第四步:装载运行程序得到结果。,程序开发调试过程,2020/7/21,6,2.2 第一个C语言程序,开发工具:VC+工具,或者Dev-C+工具等 。 其次,学会该工具的基本使用方法。 下面以“Hello World”程序为例: 例题2.1 输出“Hello World!”,2020/7/21,7,#i
4、nclude int main (void) printf(Hello World!n); return 0; ,预处理命令,主函数,被调函数,函数参数,函数返回值,2020/7/21,8,main( )函数是特殊函数。 任何C程序必须有且只能有一个main( )函数。 main( )函数可以放在C程序的任意位置。 C程序的运行必须从main( )函数开始,而且也在main( )函数中结束。 通过main这个名字才能找到将要执行的程序入口。,main,2020/7/21,9,函数就是组成C语言程序的一个一个的功能模块,就像房子是由一块块砖头搭建起来的一样,C程序就是由一个个的函数组建而来的。
5、函数是C程序的基本单位,一般一个函数完成某一个相对独立的功能。 在C语言中,满足函数定义格式要求的就是一个函数。 函数包括函数头和函数体两部分 。,2020/7/21,10,图2.1 函数定义的基本形式及函数调用的传值过程,函数参数的对应关系,2020/7/21,11,例题2.2 比较两个整数的大小,int Max (int x, int y); c = Max (a, b); int Max (int x, int y) ; ,声明时有类型,调用时无类型,定义时有类型,2020/7/21,12,C 程序的基本结构,1. C语言程序的注释 /*和*/中间所包含的任何内容即为注释部分。 2. m
6、ain( )函数及其返回值 是主函数的函数名,main( )函数名是操作系统调用C程序的入口。 3. 函数参数和返回值 int Max (int x, int y)”则有两个参数,一个是x,一个是y。,2020/7/21,13,2020/7/21,14,4. 函数体包含在函数名后面的一对大括弧“ ”之间的部分就是函数体。 构成函数体的基本要素,一般分为两种:一种是变量定义、声明语句;一种是可执行语句。 变量定义语句: int a, b, c; int z;,函数体大括弧 之间的内容。,2020/7/21,15,C程序的运行过程,假设例题22的每一条语句所对应的机器指令都只占据一个字节 。 那么
7、程序编译、连接、装载以后所对应的程序内存空间将抽象为如图2.2所示的结构。 同时,假定: 1. 假定计算机有两个读写头,一个是程序读写头;另一个是数据读写头。 2. 假定变量定义语句也会在程序中产生可执行代码,对应PC,对应SP,2020/7/21,16,PC,SP,2020/7/21,17,变量定义、算术表达式、赋值语句和while语句,完成一段数据转换任务: 它按照公式m = (1+3n+3n2+n3),计算m的值。 当正整数n从0变化到99时,要求在终端上显示表格2.1的内容:,2020/7/21,18,表2.1 例题2.3的数值转换表,2020/7/21,19,例题2.3 数值转换程序
8、(第一版):,在程序中,设计了两个函数: 一个是必不可少的main( )函数, 另一个是数据转换函数Convert( ),它完成公式m = (1+3n+3n2+n3)的计算。,注意结果的取值范围。,2020/7/21,20,将int改为long有什么好处?,int Convert (int x); int main (void) while ( n=bottom ) m = Convert (n); int Convert (int x) int z; z = 1 + 3*x + 3*x*x + x*x*x; return (z); ,2020/7/21,21,变量定义语句 :变量类型和变量名
9、列表 int top; int bottom; int step; int a, b, c;,变量类型,变量名列表,2020/7/21,22,表2.2 几种不同的数据类型,2020/7/21,23,赋值语句 : top = 0; bottom = 99; step = 1; n = top;,将0赋值给top变量,并非代数运算的等于符号。,2020/7/21,24,算术表达式 : z = 1 + 3*x + 3*x*x + x*x*x; /* 算术表达式 */,注意3x需要写为3*x。 C语言中3x时错误的。,2020/7/21,25,当时,while循环语句 : while ( n=bott
10、om ) m = Convert (n); printf (%dt%dn, n, m); n = n+step; ,当型循环结构。,2020/7/21,26,while循环操作步骤: 1. 测试while后的条件表达式,如果条件不成立则退出while循环语句; 2. 如果条件表达式成立,则执行while后面的循环体部分(也就是while后大括弧之间的内容,如果循环体只有一个语句,也可以去掉大括弧,此时循环体就是while后的第一条语句)。 3. 转入1(进行下一次while循环)。,2020/7/21,27,表2.3 while循环时内存的变换过程,2020/7/21,28,显示输出函数pri
11、ntf( ) printf( )是一个通用的格式输出函数。它有两个输出参数,第一个参数是格式输出控制字符串,第二个参数是输出项,第二个参数可以缺省,也可以有多个输出项。 在第一个参数中的是格式控制字符,它控制后面参数中对应的输出项以后面字符对应的格式输出。,2020/7/21,29,d,n,t表示跳8个空格,2020/7/21,30,表2.4常用的输出格式控制字符,数字表示输出的域宽,字母表示输出数据类型,2020/7/21,31,2.4 for循环语句,用for( )循环实现while。如下: for ( n=top; n=bottom; n = n+step ) m = Convert (
12、n); printf (%dt%dn, n, m); ,For型循环,2020/7/21,32,基本语法格式如下: for ( 循环初值条件; 循环终止条件; 循环步进表达式 ) . ,两个“;”号分隔三个表达式。,2020/7/21,33,例题2.4 用for循环计算1到100的和。,sum = 0; for (i = 1; i=100; i=i+1) sum = sum+i; ,注意循环边界,2020/7/21,34,for循环的执行步骤一共四步,如下: 1. 首先执行循环初值表达式(只在进入for循环时执行一次,以后的每一次循环不再执行循环初值表达式), 2. 其次判断循环终止条件表达式
13、。如果条件不满足则退出for循环语句。 3. 如果条件满足则执行循环体(for后大括弧之间的内容,当只有一个语句时,可以不加大括弧,此时循环体就是for后第一条语句)。 4. 执行循环步进表达式,转入2(进行下一次循环条件判断)。,2020/7/21,35,2.5 常量,程序中恒定不变的量,就是常量。 但是,直接在程序中使用数字表示常量,会给编程带来更大的麻烦: 第一,数目字的意义不明确,不便阅读; 第二,一旦这些常量有变化时,需要找到每一个数目字并进行修改,这不但麻烦而且容易出错。,有什么办法表示数目字常量吗?,2020/7/21,36,用#define定义宏,宏的定义格式如下: #defi
14、ne NAME 替换字符串 程序在编译预处理时,自动用“替换字符串”取代NAME。 例题2.5 数值转换( 第2版): #define TOP 0 #define BOTTOM 99 #define STEP 1,符号表示常量,2020/7/21,37,for(n=TOP; n=BOTTOM; n=n+STEP ) m = Convert (n); printf (%dt%dn, n, m); /* n = n+STEP; */ ,在步进表达式中步进。,2020/7/21,38,用const定义常量,const int SINT_MAX = 65535; 就定义了一个常量,它与用宏定义的宏名是
15、有区别的:#define定义的宏名在编译前的编译预处理阶段用字符串替换宏名得到常量,这个常量在编译以后将位于只读程序存储区; 而const定义的常量将有对应的名字,它位于数据存储区。,const定义的常量有名字,位于数据区。,2020/7/21,39,2.6 字符的输入和输出操作,getchar( )和putchar( )函数 文本的输入/输出是按照字符流的方式来处理的。字符流实际就是字符序列它被分成若干行,每一行有零个或者多个字符,一行紧接一行,直到整个流结束。 int getchar(void); int putchar(int ch);,获取一个字符,输出一个字符,ch为int。,202
16、0/7/21,40,while(ch=getchar( ) != EOF) putchar(ch); ,ch为什么必须是int?可以是char吗?,2020/7/21,41,scanf( )和printf( )函数,scanf( )可用于输入字符、数值或者字符串等。 它有两个参数: 第一个参数是输入格式控制字符串, 第二个参数是输入项 。,scanf( )还有什么不可以输入的吗?,2020/7/21,42,char ch; int i; scanf(%c, ,函数参数个数可变,2020/7/21,43,基本的格式控制字符如下: %c代表字符型; %d代表整型; %u代表无符号整型; %ld代表
17、长整型; %f代表浮点型; %s代表字符串。,2020/7/21,44,gets( )和puts( )函数,char *gets(char *str); int puts(const char *str); 函数gets( )获取一个字符串直到回车返回 。 函数puts( )则将其参数str所代表的字符串写到显示屏上,并回车换行 。 函数原型中的const表示不可在该函数中修改该字符串的内容 。,puts自动回车,2020/7/21,45,2.6.2 文件拷贝,例题2.6 将从键盘输入的字符显示到终端上(第1版)。 ch = getchar( ); while (ch != EOF) putc
18、har(ch); ch = getchar( ); ,为何需要该语句?,2020/7/21,46,例题2.7 将从键盘输入的字符显示到终端上(第二版)。,/* ch = getchar( );*/ while (ch=getchar( ) != EOF) putchar(ch); /* ch = getchar( ); */ ,为何可去掉两处的getchar( )?,2020/7/21,47,(ch=getchar( ) != EOF的意义? int getchar( ) int getch(void); int getche(void);,依据运算符的优先级解读语句的意义。,2020/7/2
19、1,48,2.6.3 字符计数,例题2.8 统计键盘输入的字符个数(第一版) lCount = 0; while ( getchar( ) != EOF ) + lCount; ,+运算符的意义?,2020/7/21,49,l1 = + lCount; l2 = lCount +; 例题2.9 统计键盘输入的字符个数(第二版)。 double dCount; for ( dCount=0; getchar( )!=EOF; +dCount) ; ,for循环实现,2020/7/21,50,2.6.4 行计数,例题2.10 统计从键盘输入的文本的行数 while (ch = getchar( )
20、 != EOF) if (ch = n) +dCountRow; ,while循环实现,注意”=”并非”=”,2020/7/21,51,if语句,单分支if语句,它控制if后面大括弧之间的语句是否执行。它分两步执行: 1. 首先求if后的条件表达式的“ch = n”的值。 2. 如果值为真,即条件表达式满足,则执行if后一对大括弧间的语句体“+ dCountRow”,如果值为假,即条件表达式不满足,则不予执行。,2020/7/21,52,2.6.5 单词计数,例题2.11 统计从键盘输入的字符个数、单词数和行数。,关键是如何判断一个单词。,2020/7/21,53,2.7 函数,函数可以将函数
21、的内部实现细节封装在函数内部。 例题2.12 定义函数Factorial ( unsigned n)用于计算n!。,函数具有一定的封装和隐藏性。,2020/7/21,54,抽象成更一般的形式如下: 函数名(, .) 变量定义部分; 可执行语句部分; ,一个带括弧的名字就是函数,2020/7/21,55,函数返回语句return的语法格式如下: return (返回值); /* 括弧可省*/ 当函数不需要返回值时,可以省掉return语句。 在新标准C99中,return语句必须带一个确定的返回值。,void以外的函数必带return语句。,2020/7/21,56,2.8 函数参数复制传值,参
22、数的传递都通过复制传值。在调用函数时,将实参复制一份传递给对应的形式参数 。 形参和实参各自占据不同的内存空间,对形参的任何改变都不会反作用于实参,也就是说对形参的任何改变都不会影响实参。,实参并非形参。,2020/7/21,57,我们来研究研究Pow( )函数,该函数计算xy,它有两种实现方式 。 int Pow(int x, int y) int i, p; p = 1; for (i = 1; i = y; +i) p = p * x; return p; ,注意y和i的作用。,2020/7/21,58,为了减少一个内存单元的使用,我们可以采用例题2.13中的设计,该设计就利用了函数的形
23、式参数不会影响实际参数这一特性,使形参y不但用于传值还用于函数内部计数。 例题2.13 设计Pow( )函数计算xy。,2020/7/21,59,int Pow(int x, int y) int p; for (p = 1; y 0; -y) p = p * x; return p; ,注意y的作用,取消了i,2020/7/21,60,图2.3 函数调用时的复制传值过程。,2020/7/21,61,2.9 字符数组和字符指针,数组是连续排放的数据类型相同的多个“对象”的集合。 while (有另外一行文本输入吗?) if (该行比以前找到的最长行还长吗?) (保存该行) (并保存该行的长度)
24、 打印最长的行,2020/7/21,62,例题2.14 获取输入的最长行,并打印该行。,在例题2.14中,主要有以下新的知识点: char lineMAXLINE; char longestMAXLINE; while (length = GetLine(line, MAXLINE) 0) if (length maxLen) StrCpy (longest, line); maxLen = length; ,数组的定义形式,2020/7/21,63,图2.4 字符数组和指针,指针指向数组的首地址,2020/7/21,64,图2.5字符数组存放字符串常量Goodn,注意0的存在,它有用吗?,2
25、020/7/21,65,2.9.2 字符指针,所谓指针,实际上就是内存单元的地址。由于内存单元存放的数据类型不同,因而指针的类型也有所不同。 字符指针(也就是char型指针)就是一个指向字符的指针,它实际上就是字符变量在内存单元的地址。 指针变量则是这样一个变量它专门用来存放变量的地址。某种类型的指针变量只能用于存放该种类型的指针。,2020/7/21,66,定义指针变量的方法如下: char ch; /* 定义了两个指针变量,其名字分别为p1、p2,它们可以指向char型变量 */ char *p1, *p2; p1 = ,指针就是地址,2020/7/21,67,p1和p2都指向了ch,2020/7/21,68,StrCpy: 将指针pSrc所指向的字符复制到指针pDest所指向的位置,void StrCpy(char *pDest, char *pSrc) int i; i = 0; while (*pDest+ = *pSrc+) != 0) ; ,该语句的语义实什么?,2020/7/21,69,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商品房预售抵押合同
- 筒仓钢管楼梯施工方案
- 变压器采购合同采购合同
- 商铺物业服务合同
- 酒店装修改造施工方案
- 外墙面铝钢板加固施工方案
- 2025届甘肃省兰州市部分学校高三一模地理试题(原卷版+解析版)
- 连云港燃气管道施工方案
- 计划生育手术器械项目风险识别与评估综合报告
- 2025年人力资源制度:04 -艺人签约合同书
- 大学生职业生涯规划PPT第3版高职完整全套教学课件
- 信息化武器装备智慧树知到答案章节测试2023年中北大学
- 中海大海洋化学课件02海洋的形成和海水的组成
- 高考英语作文练习纸(标准答题卡)
- 教科版二年级科学下册(做一个指南针)教育教学课件
- GB/T 19519-2014架空线路绝缘子标称电压高于1 000 V交流系统用悬垂和耐张复合绝缘子定义、试验方法及接收准则
- GB/T 14996-2010高温合金冷轧板
- 用地性质分类表
- 电子技术基础(数字部分 第五版 康华光)华中科大课件 第
- 公路工程概论全套课件
- 缺血性卒中和短暂性脑缺血发作的二级预防课件
评论
0/150
提交评论