C语言的基本要素.ppt

上传人:小飞机 文档编号:5426366 上传时间:2023-07-05 格式:PPT 页数:76 大小:609KB
返回 下载 相关 举报
C语言的基本要素.ppt_第1页
第1页 / 共76页
C语言的基本要素.ppt_第2页
第2页 / 共76页
C语言的基本要素.ppt_第3页
第3页 / 共76页
C语言的基本要素.ppt_第4页
第4页 / 共76页
C语言的基本要素.ppt_第5页
第5页 / 共76页
点击查看更多>>
资源描述

《C语言的基本要素.ppt》由会员分享,可在线阅读,更多相关《C语言的基本要素.ppt(76页珍藏版)》请在三一办公上搜索。

1、2023/7/5,1,本书内容,第1章 基础知识第2章 C语言的基本要素第3章 变量名、数据类型、运算符和表达式第4章 C程序基本控制结构第5章 函数第6章 数组和指针第7章 递归第8章 结构、联合、位运算和枚举类型 第9章 预处理命令 第10章 文件 第11章 高级话题第12章 C89 Vs C99实验(待安排),2023/7/5,2,变量定义、算术表达式、赋值语句和while语句,本章主要内容,ARM Vector Table,FIQ,IRQ,(Reserved),Data Abort,Prefetch Abort,Software Interrupt,Undefined Instruct

2、ion,Reset,1,3,2,第一个C语言程序,C语言程序的开发过程,4,for循环语句、常量,5,字符的输入和输出操作、函数,6,字符、整型数组和外部变量,2023/7/5,3,本章的节本要求,本章主要介绍C语言的核心要素,通过本章的学习读者会对C语言有一个整体的基本概念,并能够编制基本的C程序。本章将主要集中在以下基本内容上:变量、常量、运算符、表达式、控制流、函数、以及基本的输入输出库函数等。让初学者快速建立对C语言程序设计的整体概念,并能够编制一些简单有趣的C程序。,最常使用的20元素,2023/7/5,4,学习或者教学C语言最重要的第一步是让学习者能够动手。动手能够增强学习者的信心

3、,而信心对学好C语言来说是重要的。在阅读过程中,作者希望初学者把主要精力放在基本要素上,感觉有难度的内容可以先放一放。,2023/7/5,5,2.1 C语言程序的开发过程,第一步:编辑得到源程序。第二步:编译得到目标码。第三步:连接得到可执行代码。第四步:装载运行程序得到结果。,程序开发调试过程,2023/7/5,6,2.2 第一个C语言程序,开发工具:VC+工具,或者Dev-C+工具等。其次,学会该工具的基本使用方法。下面以“Hello World”程序为例:例题2.1 输出“Hello World!”,2023/7/5,7,#include int main(void)printf(Hel

4、lo World!n);return 0;,预处理命令,主函数,被调函数,函数参数,函数返回值,2023/7/5,8,main()函数是特殊函数。任何C程序必须有且只能有一个main()函数。main()函数可以放在C程序的任意位置。C程序的运行必须从main()函数开始,而且也在main()函数中结束。通过main这个名字才能找到将要执行的程序入口。,main,2023/7/5,9,函数就是组成C语言程序的一个一个的功能模块,就像房子是由一块块砖头搭建起来的一样,C程序就是由一个个的函数组建而来的。函数是C程序的基本单位,一般一个函数完成某一个相对独立的功能。在C语言中,满足函数定义格式要求

5、的就是一个函数。函数包括函数头和函数体两部分。,2023/7/5,10,图2.1 函数定义的基本形式及函数调用的传值过程,函数参数的对应关系,2023/7/5,11,例题2.2 比较两个整数的大小,int Max(int x,int y);c=Max(a,b);int Max(int x,int y);,声明时有类型,调用时无类型,定义时有类型,2023/7/5,12,C 程序的基本结构,1.C语言程序的注释/*和*/中间所包含的任何内容即为注释部分。2.main()函数及其返回值 是主函数的函数名,main()函数名是操作系统调用C程序的入口。3.函数参数和返回值 int Max(int x

6、,int y)”则有两个参数,一个是x,一个是y。,2023/7/5,13,2023/7/5,14,4.函数体包含在函数名后面的一对大括弧“”之间的部分就是函数体。构成函数体的基本要素,一般分为两种:一种是变量定义、声明语句;一种是可执行语句。变量定义语句:int a,b,c;int z;,函数体大括弧 之间的内容。,2023/7/5,15,C程序的运行过程,假设例题22的每一条语句所对应的机器指令都只占据一个字节。那么程序编译、连接、装载以后所对应的程序内存空间将抽象为如图2.2所示的结构。同时,假定:1.假定计算机有两个读写头,一个是程序读写头;另一个是数据读写头。2.假定变量定义语句也会

7、在程序中产生可执行代码,对应PC,对应SP,2023/7/5,16,PC,SP,2023/7/5,17,变量定义、算术表达式、赋值语句和while语句,完成一段数据转换任务:它按照公式m=(1+3n+3n2+n3),计算m的值。当正整数n从0变化到99时,要求在终端上显示表格2.1的内容:,2023/7/5,18,表2.1 例题2.3的数值转换表,2023/7/5,19,例题2.3 数值转换程序(第一版):,在程序中,设计了两个函数:一个是必不可少的main()函数,另一个是数据转换函数Convert(),它完成公式m=(1+3n+3n2+n3)的计算。,注意结果的取值范围。,2023/7/5

8、,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);,2023/7/5,21,变量定义语句:变量类型和变量名列表 int top;int bottom;int step;int a,b,c;,变量类型,变量名列表,2023/7/5,22,表2.2 几种不同的数据类型,2023/7/5,23,赋值语句:top=0;bottom=99;step=1;n=top;,将0赋值给top变

9、量,并非代数运算的等于符号。,2023/7/5,24,算术表达式:z=1+3*x+3*x*x+x*x*x;/*算术表达式*/,注意3x需要写为3*x。C语言中3x时错误的。,2023/7/5,25,当时,while循环语句:while(n=bottom)m=Convert(n);printf(%dt%dn,n,m);n=n+step;,当型循环结构。,2023/7/5,26,while循环操作步骤:1.测试while后的条件表达式,如果条件不成立则退出while循环语句;2.如果条件表达式成立,则执行while后面的循环体部分(也就是while后大括弧之间的内容,如果循环体只有一个语句,也可以

10、去掉大括弧,此时循环体就是while后的第一条语句)。3.转入1(进行下一次while循环)。,2023/7/5,27,表2.3 while循环时内存的变换过程,2023/7/5,28,显示输出函数printf()printf()是一个通用的格式输出函数。它有两个输出参数,第一个参数是格式输出控制字符串,第二个参数是输出项,第二个参数可以缺省,也可以有多个输出项。在第一个参数中的是格式控制字符,它控制后面参数中对应的输出项以后面字符对应的格式输出。,2023/7/5,29,d,n,t表示跳8个空格,2023/7/5,30,表2.4常用的输出格式控制字符,数字表示输出的域宽,字母表示输出数据类型

11、,2023/7/5,31,2.4 for循环语句,用for()循环实现while。如下:for(n=top;n=bottom;n=n+step)m=Convert(n);printf(%dt%dn,n,m);,For型循环,2023/7/5,32,基本语法格式如下:for(循环初值条件;循环终止条件;循环步进表达式).,两个“;”号分隔三个表达式。,2023/7/5,33,例题2.4 用for循环计算1到100的和。,sum=0;for(i=1;i=100;i=i+1)sum=sum+i;,注意循环边界,2023/7/5,34,for循环的执行步骤一共四步,如下:1.首先执行循环初值表达式(只

12、在进入for循环时执行一次,以后的每一次循环不再执行循环初值表达式),2.其次判断循环终止条件表达式。如果条件不满足则退出for循环语句。3.如果条件满足则执行循环体(for后大括弧之间的内容,当只有一个语句时,可以不加大括弧,此时循环体就是for后第一条语句)。4.执行循环步进表达式,转入2(进行下一次循环条件判断)。,2023/7/5,35,2.5 常量,程序中恒定不变的量,就是常量。但是,直接在程序中使用数字表示常量,会给编程带来更大的麻烦:第一,数目字的意义不明确,不便阅读;第二,一旦这些常量有变化时,需要找到每一个数目字并进行修改,这不但麻烦而且容易出错。,有什么办法表示数目字常量吗

13、?,2023/7/5,36,用#define定义宏,宏的定义格式如下:#define NAME 替换字符串程序在编译预处理时,自动用“替换字符串”取代NAME。例题2.5 数值转换(第2版):#define TOP 0#define BOTTOM 99#define STEP 1,符号表示常量,2023/7/5,37,for(n=TOP;n=BOTTOM;n=n+STEP)m=Convert(n);printf(%dt%dn,n,m);/*n=n+STEP;*/,在步进表达式中步进。,2023/7/5,38,用const定义常量,const int SINT_MAX=65535;就定义了一个常

14、量,它与用宏定义的宏名是有区别的:#define定义的宏名在编译前的编译预处理阶段用字符串替换宏名得到常量,这个常量在编译以后将位于只读程序存储区;而const定义的常量将有对应的名字,它位于数据存储区。,const定义的常量有名字,位于数据区。,2023/7/5,39,2.6 字符的输入和输出操作,getchar()和putchar()函数文本的输入/输出是按照字符流的方式来处理的。字符流实际就是字符序列它被分成若干行,每一行有零个或者多个字符,一行紧接一行,直到整个流结束。int getchar(void);int putchar(int ch);,获取一个字符,输出一个字符,ch为int

15、。,2023/7/5,40,while(ch=getchar()!=EOF)putchar(ch);,ch为什么必须是int?可以是char吗?,2023/7/5,41,scanf()和printf()函数,scanf()可用于输入字符、数值或者字符串等。它有两个参数:第一个参数是输入格式控制字符串,第二个参数是输入项。,scanf()还有什么不可以输入的吗?,2023/7/5,42,char ch;int i;scanf(%c,函数参数个数可变,2023/7/5,43,基本的格式控制字符如下:%c代表字符型;%d代表整型;%u代表无符号整型;%ld代表长整型;%f代表浮点型;%s代表字符串。

16、,2023/7/5,44,gets()和puts()函数,char*gets(char*str);int puts(const char*str);函数gets()获取一个字符串直到回车返回。函数puts()则将其参数str所代表的字符串写到显示屏上,并回车换行。函数原型中的const表示不可在该函数中修改该字符串的内容。,puts自动回车,2023/7/5,45,2.6.2 文件拷贝,例题2.6 将从键盘输入的字符显示到终端上(第1版)。ch=getchar();while(ch!=EOF)putchar(ch);ch=getchar();,为何需要该语句?,2023/7/5,46,例题2.

17、7 将从键盘输入的字符显示到终端上(第二版)。,/*ch=getchar();*/while(ch=getchar()!=EOF)putchar(ch);/*ch=getchar();*/,为何可去掉两处的getchar()?,2023/7/5,47,(ch=getchar()!=EOF的意义?int getchar()int getch(void);int getche(void);,依据运算符的优先级解读语句的意义。,2023/7/5,48,2.6.3 字符计数,例题2.8 统计键盘输入的字符个数(第一版)lCount=0;while(getchar()!=EOF)+lCount;,+运算

18、符的意义?,2023/7/5,49,l1=+lCount;l2=lCount+;例题2.9 统计键盘输入的字符个数(第二版)。double dCount;for(dCount=0;getchar()!=EOF;+dCount);,for循环实现,2023/7/5,50,2.6.4 行计数,例题2.10 统计从键盘输入的文本的行数 while(ch=getchar()!=EOF)if(ch=n)+dCountRow;,while循环实现,注意”=”并非”=”,2023/7/5,51,if语句,单分支if语句,它控制if后面大括弧之间的语句是否执行。它分两步执行:1.首先求if后的条件表达式的“c

19、h=n”的值。2.如果值为真,即条件表达式满足,则执行if后一对大括弧间的语句体“+dCountRow”,如果值为假,即条件表达式不满足,则不予执行。,2023/7/5,52,2.6.5 单词计数,例题2.11 统计从键盘输入的字符个数、单词数和行数。,关键是如何判断一个单词。,2023/7/5,53,2.7 函数,函数可以将函数的内部实现细节封装在函数内部。例题2.12 定义函数Factorial(unsigned n)用于计算n!。,函数具有一定的封装和隐藏性。,2023/7/5,54,抽象成更一般的形式如下:函数名(,.)变量定义部分;可执行语句部分;,一个带括弧的名字就是函数,2023

20、/7/5,55,函数返回语句return的语法格式如下:return(返回值);/*括弧可省*/当函数不需要返回值时,可以省掉return语句。在新标准C99中,return语句必须带一个确定的返回值。,void以外的函数必带return语句。,2023/7/5,56,2.8 函数参数复制传值,参数的传递都通过复制传值。在调用函数时,将实参复制一份传递给对应的形式参数。形参和实参各自占据不同的内存空间,对形参的任何改变都不会反作用于实参,也就是说对形参的任何改变都不会影响实参。,实参并非形参。,2023/7/5,57,我们来研究研究Pow()函数,该函数计算xy,它有两种实现方式。int Po

21、w(int x,int y)int i,p;p=1;for(i=1;i=y;+i)p=p*x;return p;,注意y和i的作用。,2023/7/5,58,为了减少一个内存单元的使用,我们可以采用例题2.13中的设计,该设计就利用了函数的形式参数不会影响实际参数这一特性,使形参y不但用于传值还用于函数内部计数。例题2.13 设计Pow()函数计算xy。,2023/7/5,59,int Pow(int x,int y)int p;for(p=1;y 0;-y)p=p*x;return p;,注意y的作用,取消了i,2023/7/5,60,图2.3 函数调用时的复制传值过程。,2023/7/5,

22、61,2.9 字符数组和字符指针,数组是连续排放的数据类型相同的多个“对象”的集合。while(有另外一行文本输入吗?)if(该行比以前找到的最长行还长吗?)(保存该行)(并保存该行的长度)打印最长的行,2023/7/5,62,例题2.14 获取输入的最长行,并打印该行。,在例题2.14中,主要有以下新的知识点:char lineMAXLINE;char longestMAXLINE;while(length=GetLine(line,MAXLINE)0)if(length maxLen)StrCpy(longest,line);maxLen=length;,数组的定义形式,2023/7/5,

23、63,图2.4 字符数组和指针,指针指向数组的首地址,2023/7/5,64,图2.5字符数组存放字符串常量Goodn,注意0的存在,它有用吗?,2023/7/5,65,2.9.2 字符指针,所谓指针,实际上就是内存单元的地址。由于内存单元存放的数据类型不同,因而指针的类型也有所不同。字符指针(也就是char型指针)就是一个指向字符的指针,它实际上就是字符变量在内存单元的地址。指针变量则是这样一个变量它专门用来存放变量的地址。某种类型的指针变量只能用于存放该种类型的指针。,2023/7/5,66,定义指针变量的方法如下:char ch;/*定义了两个指针变量,其名字分别为p1、p2,它们可以指

24、向char型变量*/char*p1,*p2;p1=,指针就是地址,2023/7/5,67,p1和p2都指向了ch,2023/7/5,68,StrCpy:将指针pSrc所指向的字符复制到指针pDest所指向的位置,void StrCpy(char*pDest,char*pSrc)int i;i=0;while(*pDest+=*pSrc+)!=0);,该语句的语义实什么?,2023/7/5,69,2.10 整型数组,编写程序统计从键盘输入的各个大写字母,以及数字、空字符(space、tab和换行符)以及其他字符出现的次数。总共有30种输入情况,其中大写字母的情况有26种,因此用一个数组来记录各种

25、大写字母输入的次数比较方便。*例题2.15 统计各大写字母的输入次数。,2023/7/5,70,while(ch=getchar()!=EOF)if(ch=A,else if(ch=|ch=n|ch=t)+iCountWhite;else+iCountOther;,2023/7/5,71,2023/7/5,72,在以下if语句中:if(ch=A 对字符ch的输入值,通过if语句后面的条件表达式作了一定的限定,字符ch的ASCII码值在65到90之间时才执行+iUpperCasech-A语句。,ch-A意义?,2023/7/5,73,else if语句,if(条件表达式1)语句1;else if

26、(条件表达式2)语句2;.,else if(条件表达式n)语句n;else语句n+1;,2023/7/5,74,2.11 外部变量及变量的作用域,在主函数main()中定义的数组:line、longest等,是主函数main()的私有数组,也是主函数main()的内部数组。这些内部变量为自动型变量。自动型变量随函数调用而存在,随函数调用结束而消失,因此它们不会在两次函数调用之间保持其值,每一次函数调用都必须重新分配内存单元、重新初始化。,内部变量的作用?,2023/7/5,75,要想一个变量能够被任何函数访问,可以将该变量设定为外部变量。外部变量只能够在函数外定义,且只能定义一次,系统会在定义外部变量的时候为其分配存储单元。例题2.16 利用外部变量传递信息,打印键盘输入的最长行。,将所有变量都设计为外部变量,可以吗?,2023/7/5,76,Thanks!,The End,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号