语言的基本要素_第1页
语言的基本要素_第2页
语言的基本要素_第3页
语言的基本要素_第4页
语言的基本要素_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

语言的基本要素演示文稿当前1页,总共75页。(优选)语言的基本要素当前2页,总共75页。变量定义、算术表达式、赋值语句和while语句

本章主要内容ARMVectorTableFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x00132第一个C语言程序

C语言程序的开发过程4for循环语句、常量5字符的输入和输出操作、函数6字符、整型数组和外部变量当前3页,总共75页。本章的节本要求本章主要介绍C语言的核心要素,通过本章的学习读者会对C语言有一个整体的基本概念,并能够编制基本的C程序。本章将主要集中在以下基本内容上:变量、常量、运算符、表达式、控制流、函数、以及基本的输入输出库函数等。让初学者快速建立对C语言程序设计的整体概念,并能够编制一些简单有趣的C程序。最常使用的20%元素当前4页,总共75页。学习或者教学C语言最重要的第一步是让学习者能够动手。动手能够增强学习者的信心,而信心对学好C语言来说是重要的。在阅读过程中,作者希望初学者把主要精力放在基本要素上,感觉有难度的内容可以先放一放。当前5页,总共75页。2.1C语言程序的开发过程第一步:编辑——得到源程序。第二步:编译——得到目标码。第三步:连接——得到可执行代码。第四步:装载运行程序——得到结果。程序开发调试过程当前6页,总共75页。2.2第一个C语言程序开发工具:VC++工具,或者Dev-C++工具等。其次,学会该工具的基本使用方法。下面以“HelloWorld”程序为例:例题2.1输出“HelloWorld!”当前7页,总共75页。#include<stdio.h>intmain(void){printf("HelloWorld!\n");return0; }预处理命令主函数被调函数函数参数函数返回值当前8页,总共75页。main()函数是特殊函数。任何C程序必须有且只能有一个main()函数。main()函数可以放在C程序的任意位置。C程序的运行必须从main()函数开始,而且也在main()函数中结束。通过main这个名字才能找到将要执行的程序入口。main当前9页,总共75页。函数就是组成C语言程序的一个一个的功能模块,就像房子是由一块块砖头搭建起来的一样,C程序就是由一个个的函数组建而来的。函数是C程序的基本单位,一般一个函数完成某一个相对独立的功能。在C语言中,满足函数定义格式要求的就是一个函数。函数包括函数头和函数体两部分。当前10页,总共75页。图2.1函数定义的基本形式及函数调用的传值过程intMax(intx,inty) {intz;

if(x>y) {z=x; }else{z=y; }

return(z); }函数头函数体变量定义部分可执行语句部分c=Max(a,b)(函数调用时的复制传值过程)

函数定义部分函数参数的对应关系当前11页,总共75页。例题2.2比较两个整数的大小intMax(intx,inty); c=Max(a,b); intMax(intx,inty) {

……;}声明时有类型调用时无类型定义时有类型当前12页,总共75页。C程序的基本结构1.C语言程序的注释——/*和*/中间所包含的任何内容即为注释部分。2.main()函数及其返回值——是主函数的函数名,main()函数名是操作系统调用C程序的入口。

3.函数参数和返回值——intMax(intx,inty)”则有两个参数,一个是x,一个是y。当前13页,总共75页。intMax(intx,inty)函数返回值类型函数名函数参数表当前14页,总共75页。4.函数体——包含在函数名后面的一对大括弧“{}”之间的部分就是函数体。构成函数体的基本要素,一般分为两种:一种是变量定义、声明语句;一种是可执行语句。变量定义语句:inta,b,c; intz;函数体大括弧{}之间的内容。当前15页,总共75页。C程序的运行过程假设例题2-2的每一条语句所对应的机器指令都只占据一个字节。那么程序编译、连接、装载以后所对应的程序内存空间将抽象为如图2.2所示的结构。同时,假定:1.假定计算机有两个读写头,一个是程序读写头;另一个是数据读写头。2.假定变量定义语句也会在程序中产生可执行代码对应PC对应SP当前16页,总共75页。printf();system();return0;}0x100000070x100000060x100000050x100000040x000000000xFFFFFFFFmain(void){inta,b,c;a=10;b=20;0x100000030x100000020x100000010x10000000程序读写头z}system(){y}0x1000101F0x3000FFFB0x100010080x100010070x3000FFFA0x10001000printf(){intz;if(x>y)z=x;elsez=y;return(z);}0x100001040x100001030x100001020x100001010x10000100Max(x,y){

主函数主自定义函数库函数

数据区c=Max(a,b);xc0x3000FFFD0x3000FFFCba0x3000FFFF0x3000FFFE

程序区

堆栈区数据读写头图2.2程序和数据在内存中的抽象PCSP当前17页,总共75页。变量定义、算术表达式、赋值语句和while语句完成一段数据转换任务:它按照公式m=(1+3n+3n2+n3),计算m的值。当正整数n从0变化到99时,要求在终端上显示表格2.1的内容:当前18页,总共75页。表2.1例题2.3的数值转换表nm=(1+3n+3n2+n3)01182273644125............9794119298970299991000000当前19页,总共75页。例题2.3数值转换程序(第一版):在程序中,设计了两个函数:一个是必不可少的main()函数,另一个是数据转换函数Convert(),它完成公式m=(1+3n+3n2+n3)的计算。注意结果的取值范围。当前20页,总共75页。将int改为long有什么好处?intConvert(intx);

intmain(void){while(n<=bottom) {

m=Convert(n);}}intConvert(intx){intz; z=1+3*x+3*x*x+x*x*x; return(z); }当前21页,总共75页。变量定义语句:变量类型和变量名列表

inttop; intbottom; intstep; inta,b,c; 变量类型变量名列表当前22页,总共75页。表2.2几种不同的数据类型类型在典型系统中占据的字节数意义C标准规定的最小取值范围char1字符型0~127或者0~255short2短整型-32768~32767long4长整型-231~231-1float4浮点型1E–37~1E+37

,6位精度double8双精度浮点型1E–37~1E+37

,10位精度当前23页,总共75页。赋值语句:

top=0; bottom=99;step=1; n=top; 将0赋值给top变量,并非代数运算的等于符号。当前24页,总共75页。算术表达式:z=1+3*x+3*x*x+x*x*x;

/*算术表达式*/注意3x需要写为3*x。C语言中3x时错误的。当前25页,总共75页。当…时while循环语句:while(n<=bottom)

{ m=Convert(n); printf("%d\t%d\n",n,m); n=n+step; }当型循环结构。当前26页,总共75页。while循环操作步骤:1.测试while后的条件表达式,如果条件不成立则退出while循环语句;2.如果条件表达式成立,则执行while后面的循环体部分(也就是while后大括弧之间的内容,如果循环体只有一个语句,也可以去掉大括弧,此时循环体就是while后的第一条语句)。3.转入1(进行下一次while循环)。当前27页,总共75页。表2.3while循环时内存的变换过程循环次数第1次第2次第3次......第98次第99次第100次退出m1827......94119297029910000001000000n012......979899100step111......1111当前28页,总共75页。显示输出函数printf()printf()是一个通用的格式输出函数。它有两个输出参数,第一个参数是格式输出控制字符串,第二个参数是输出项,第二个参数可以缺省,也可以有多个输出项。在第一个参数中的%是格式控制字符,它控制后面参数中对应的输出项以%后面字符对应的格式输出。当前29页,总共75页。%dn\t表示跳8个空格当前30页,总共75页。表2.4常用的输出格式控制字符%d以整数形式输出%6d以整数形式输出,且输出域宽为6位。%f以浮点数形式输出%6f以浮点形式输出,且输出域宽为6位。%.2f以浮点形式输出,且小数点后2位。%6.2f以浮点形式输出,6位宽度,小数点后2位。数字表示输出的域宽字母表示输出数据类型当前31页,总共75页。2.4for循环语句用for()循环实现while。如下:for(n=top;n<=bottom;n=n+step){ m=Convert(n); printf("%d\t%d\n",n,m); }For型循环当前32页,总共75页。基本语法格式如下:for(循环初值条件;循环终止条件;循环步进表达式

){ ......}两个“;”号分隔三个表达式。当前33页,总共75页。例题2.4用for循环计算1到100的和。sum=0;for(i=1;i<=100;i=i+1){sum=sum+i; }注意循环边界当前34页,总共75页。for循环的执行步骤一共四步,如下:1.首先执行循环初值表达式(只在进入for循环时执行一次,以后的每一次循环不再执行循环初值表达式),2.其次判断循环终止条件表达式。如果条件不满足则退出for循环语句。3.如果条件满足则执行循环体(for后大括弧之间的内容,当只有一个语句时,可以不加大括弧,此时循环体就是for后第一条语句)。4.执行循环步进表达式,转入2(进行下一次循环条件判断)。当前35页,总共75页。2.5常量程序中恒定不变的量,就是常量。但是,直接在程序中使用数字表示常量,会给编程带来更大的麻烦:第一,数目字的意义不明确,不便阅读;第二,一旦这些常量有变化时,需要找到每一个数目字并进行修改,这不但麻烦而且容易出错。有什么办法表示数目字常量吗?当前36页,总共75页。用#define定义宏宏的定义格式如下:#defineNAME替换字符串程序在编译预处理时,自动用“替换字符串”取代NAME。例题2.5数值转换(第2版):#defineTOP0 #defineBOTTOM99 #defineSTEP1 符号表示常量当前37页,总共75页。

for(n=TOP;n<=BOTTOM;n=n+STEP)

{m=Convert(n); printf("%d\t%d\n",n,m);

/*n=n+STEP;*/

}在步进表达式中步进。当前38页,总共75页。用const定义常量constintSINT_MAX=65535;就定义了一个常量,它与用宏定义的宏名是有区别的:#define定义的宏名在编译前的编译预处理阶段用字符串替换宏名得到常量,这个常量在编译以后将位于只读程序存储区;而const定义的常量将有对应的名字,它位于数据存储区。const定义的常量有名字,位于数据区。当前39页,总共75页。2.6字符的输入和输出操作getchar()和putchar()函数文本的输入/输出是按照字符流的方式来处理的。字符流实际就是字符序列——它被分成若干行,每一行有零个或者多个字符,一行紧接一行,直到整个流结束。intgetchar(void); intputchar(intch);获取一个字符输出一个字符

ch为int。当前40页,总共75页。while((ch=getchar(

))!=EOF) {

putchar(ch);

}

ch为什么必须是int?可以是char吗?当前41页,总共75页。scanf()和printf()函数scanf()可用于输入字符、数值或者字符串等。它有两个参数:第一个参数是输入格式控制字符串,第二个参数是输入项。

scanf()还有什么不可以输入的吗?当前42页,总共75页。charch; inti; scanf("%c",&ch);scanf("%d",&i);intprintf(constchar*control_string,...); intscanf(constchar*control_string,...);函数参数个数可变当前43页,总共75页。基本的格式控制字符如下:%c——代表字符型;%d——代表整型;%u——代表无符号整型;%ld——代表长整型;%f——代表浮点型;%s——代表字符串。当前44页,总共75页。

gets()和puts()函数char*gets(char*str); intputs(constchar*str); 函数gets()获取一个字符串直到回车返回。函数puts()则将其参数str所代表的字符串写到显示屏上,并回车换行。函数原型中的const表示不可在该函数中修改该字符串的内容。puts自动回车当前45页,总共75页。2.6.2文件拷贝例题2.6将从键盘输入的字符显示到终端上(第1版)。

ch=getchar(); while(ch!=EOF) {

putchar(ch); ch=getchar();

}为何需要该语句?当前46页,总共75页。例题2.7将从键盘输入的字符显示到终端上(第二版)。

/*ch=getchar(); */

while((ch=getchar())!=EOF) {putchar(ch);

/*ch=getchar();*/ }为何可去掉两处的getchar()?当前47页,总共75页。(ch=getchar())!=EOF的意义?intgetchar()intgetch(void); intgetche(void);依据运算符的优先级解读语句的意义。当前48页,总共75页。2.6.3字符计数例题2.8统计键盘输入的字符个数(第一版)lCount=0;while(getchar()!=EOF) { ++lCount; }++运算符的意义?当前49页,总共75页。l1=++lCount; l2=lCount++;例题2.9统计键盘输入的字符个数(第二版)。

doubledCount;for(dCount=0;getchar()!=EOF;++dCount){; }

for循环实现当前50页,总共75页。2.6.4行计数例题2.10统计从键盘输入的文本的行数

while((ch=getchar())!=EOF) { if(ch=='\n') {

++dCountRow;

}}

while循环实现注意”==”并非”=”当前51页,总共75页。if语句单分支if语句,它控制if后面大括弧之间的语句是否执行。它分两步执行:1.首先求if后的条件表达式的“ch=='\n'”的值。2.如果值为真,即条件表达式满足,则执行if后一对大括弧间的语句体“++dCountRow”,如果值为假,即条件表达式不满足,则不予执行。当前52页,总共75页。2.6.5单词计数例题2.11统计从键盘输入的字符个数、单词数和行数。关键是如何判断一个单词。当前53页,总共75页。2.7函数函数可以将函数的内部实现细节封装在函数内部。例题2.12定义函数Factorial(unsignedn)用于计算n!。函数具有一定的封装和隐藏性。当前54页,总共75页。抽象成更一般的形式如下:<返回类型>函数名(<数据类型参数1>,......<数据类型参数n>){

变量定义部分;

可执行语句部分;}一个带括弧的名字就是函数当前55页,总共75页。函数返回语句return的语法格式如下:return(返回值);/*括弧可省*/当函数不需要返回值时,可以省掉return语句。在新标准C99中,return语句必须带一个确定的返回值。

void以外的函数必带return语句。当前56页,总共75页。2.8函数参数——复制传值参数的传递都通过复制传值。在调用函数时,将实参复制一份传递给对应的形式参数。形参和实参各自占据不同的内存空间,对形参的任何改变都不会反作用于实参,也就是说对形参的任何改变都不会影响实参。实参并非形参。当前57页,总共75页。我们来研究研究Pow()函数,该函数计算xy,它有两种实现方式。intPow(intx,inty){inti,p; p=1;for(i=1;i<=y;++i){p=p*x;}returnp;}注意y和i的作用。当前58页,总共75页。为了减少一个内存单元的使用,我们可以采用例题2.13中的设计,该设计就利用了函数的形式参数不会影响实际参数这一特性,使形参y不但用于传值还用于函数内部计数。例题2.13设计Pow()函数计算xy。

当前59页,总共75页。intPow(intx,inty){intp;

for(p=1;y>0;--y){p=p*x;}returnp;}注意y的作用,取消了i当前60页,总共75页。图2.3函数调用时的复制传值过程。Pow(2,i)intPow(intx,inty){inti,p;

p=1;for(i=1;i<=y;++i){p=p*x;}returnp;}Pow(-3,i)Pow(2,i)和Pow(-3,i)是分时调用的,它们分别将对应的实际参数传给x和y。然后执行函数体Pow()。调用Pow()时内存中才有x、y、i、p等变量的位置,调用结束后,这些变量自动消失。当前61页,总共75页。2.9字符数组和字符指针数组是连续排放的数据类型相同的多个“对象”的集合。while(有另外一行文本输入吗?){ if(该行比以前找到的最长行还长吗?) { (保存该行) (并保存该行的长度) }}打印最长的行当前62页,总共75页。例题2.14获取输入的最长行,并打印该行。在例题2.14中,主要有以下新的知识点:charline[MAXLINE]; charlongest[MAXLINE]; while((length=GetLine(line,MAXLINE))>0){if(length>maxLen){

StrCpy(longest,line);

maxLen=length;}}数组的定义形式当前63页,总共75页。图2.4字符数组和指针指针指向数组的首地址当前64页,总共75页。图2.5字符数组存放字符串常量"Good\n"注意\0的存在,它有用吗?当前65页,总共75页。2.9.2字符指针所谓指针,实际上就是内存单元的地址。由于内存单元存放的数据类型不同,因而指针的类型也有所不同。字符指针(也就是char型指针)就是一个指向字符的指针,它实际上就是字符变量在内存单元的地址。指针变量则是这样一个变量——它专门用来存放变量的地址。某种类型的指针变量只能用于存放该种类型的指针。当前66页,总共75页。定义指针变量的方法如下:charch;

/*定义了两个指针变量,其名字分别为p1、p2,它们可以指向char型变量*/char*p1,*p2;

p1=&ch; *p1='A'; p2=p1; 指针就是地址当前67页,总共75页。ch='A'p1=&chp2=p1图2.6指针及其指向的对象

p1和p2都指向了ch当前68页,总共75页。StrCpy:将指针pSrc所指向的字符复制到指针pDest所指向的位置voidStrCpy(char*pDest,char*pSrc){inti;i=0;while((*pDest++=*pSrc++)!='\0'){;}}该语句的语义实什么?当前69页,总共75页。2.10整型数组编写程序统计从键盘输入的各个大写字母,以及数字、空字符(space、tab和换行符)以及其他字符出现的次数。总共有30种输入情况,其中大写字母的情况有26种,因此用一个数组来记录各种大写字母输入的次数比较方便。*例题2.15统计各大写字母的输入次数。当前70页,总共75页。

while((ch=getchar())!=EOF) {

if(ch>='A'&&ch<='Z')

温馨提示

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

评论

0/150

提交评论