语言基本语法归纳_第1页
语言基本语法归纳_第2页
语言基本语法归纳_第3页
语言基本语法归纳_第4页
语言基本语法归纳_第5页
已阅读5页,还剩256页未读 继续免费阅读

下载本文档

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

文档简介

演示文稿语言基本语法归纳现在是1页\一共有261页\编辑于星期日(优选)语言基本语法归纳现在是2页\一共有261页\编辑于星期日提纲C语言概况C程序的结构数据类型、运算符与表达式最简单的C程序设计—顺序程序设计选择结构程序设计循环控制数组函数指针现在是3页\一共有261页\编辑于星期日C语言概况C的优点1)、高效2)、可移植3)、灵活C的缺点可读性差,学习应用较难。现在是4页\一共有261页\编辑于星期日C语言概况--简单的C程序[例1.1]

main(){printf("ThisisaCprogram.\n");

}

该程序的作用:在屏幕上输出一行信息:

ThisisaCprogram.

1、main()表示“主函数”,每一个C程序都必须有且只有一个主函数。2、main函数体由大括号{}括起来。3、语句后面有一个分号。.4、printf()是C语言的输出函数。双引号内的字符被原样输出。5、“\n”是换行符,即在输出ThisisaCprogram之后换行。现在是5页\一共有261页\编辑于星期日[例1.2]求两数之和。

main()

{inta,b,sum;

/*定义三个整型变量。(int=integer)。*/a=123;b=456;

/*把常数123赋给变量a,把常数456赋给变量b*/sum=a+b;

/*计算a、b之和,并把和值赋变量给sum*/

printf(“Sumis%d\n”,sum);/*输出sum的值*/}

程序的输出信息为:

sumis579/**/中间的内容表示“注释”。注释是程序员对程序某部分的功能和作用所做的说明,是给人看的,对编译和运行不起作用。%d表示输出的数据类型是十进制整数类型。在输出时,该位置用对应变量sum的值代替。现在是6页\一共有261页\编辑于星期日[例1.3]输入两个整数,输出其中的最大值。

intmax(intx,inty)/*求两数最大值函数max*/

{intz;

if(x>y)z=x;elsez=y;

return(z);/*将z的值返回给主函数main*/

}/*返回值通过函数名max带回main函数调用处*/

main()/*主函数*/

{inta,b,c;

scanf(“%d,%d”,&a,&b);/*输入a,b的值*/

c=max(a,b);/*调用max函数,将实参a,b的值给形参x,y*/printf(“max=%d”,c);/*输出最大值*/

}现在是7页\一共有261页\编辑于星期日C程序的结构1、C程序是由函数构成的。一个C源程序至少包括一个函数(main函数:它代表程序开始执行的起始位置),也可以包括一个main函数和若干其它函数。因此,函数是C程序的基本单位。

现在是8页\一共有261页\编辑于星期日C程序中有三种类型的函数:1).main():主函数,每一个C程序必须且只有一个main()函数。2).开发系统提供的特殊函数,如printf()、scanf()等。

TurboC开发系统提供三百多个函数。3).程序员自己设计的函数,如例1.3中的函数max()。

C的函数相当于其它语言中的子程序。用函数来实现特定的功能。可以说C是函数式的语言。程序全部工作都是由函数来完成的。C的这种特性很容易实现模块化。C程序的结构现在是9页\一共有261页\编辑于星期日C程序的结构2、一个函数由两部分组成:

(1)函数的说明部分。包括函数名、函数类型、函数属性、函数参数(形参)名、形式参数类型。如intmax(intx,inty)

函数类型函数名函数参数类型函数参数名函数参数类型函数参数名(2)函数体。即函数说明部分下面的大括弧{...}内的部分。如果一个函数内有多个大括弧,则最外层的一对{}为函数体的范围。

现在是10页\一共有261页\编辑于星期日函数体一般包括:①变量定义。如[例1.3]中main函数中的“inta,b,c;”

②执行部分。由若干个语句组成。

当然,在某些情况下也可以没有变量定义部分(例如[例1.1])。甚至可以既无变量定义也无执行部分,如:

dump()

{}

它是一个空函数,什么也不干,但这是合法的。C程序的结构现在是11页\一共有261页\编辑于星期日3、一个C程序总是从main函数开始执行的,而不论main函数在整个程序中的位置如何(main函数可以放在程序最前头,也可以放在程序最后,或在一些函数之前在另一些函数之后)。

4、C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。C程序没有行号,也不象fortran或cobol那样严格规定书写格式(语句必须从某一列开始书写)。

C程序的结构现在是12页\一共有261页\编辑于星期日5、每个语句和数据定义的最后必须有一个分号。分号是C语句的必要组成部分。例如:c=a+b;分号不可少。即使是程序中最后一个语句也应包含分号(这是和pascal语言不同的)。6、C语言本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。C对输入输出实行“函数化”。7、可以用/*……*/对C程序中的任何部分作注释。可以增加程序的可读性。

C程序的结构现在是13页\一共有261页\编辑于星期日程序开发过程

……

C源代码编译程序目标代码链接程序可执行代码库C源代码编译程序目标代码现在是14页\一共有261页\编辑于星期日数据类型、运算符与表达式现在是15页\一共有261页\编辑于星期日§3.1信息在计算机中的存储与表示计算机的基本功能是进行数据的计算和加工处理,程序和数据在计算机的存储是用二进制形式表示的。数与字符是自然信息与计算机二进制信息的中转环节。数制:就是用一组固定的数字和一套统一的规则来表示数据的方法。日常使用的十进制(逢十进一)机器内部的二进制(逢二进一)其它常用的数制:八进制,十六进制现在是16页\一共有261页\编辑于星期日不同数制之间的对应表示十进制decimal二进制binary八进制octal十六进制hexdecimal000011112102231133410044510155611066711177现在是17页\一共有261页\编辑于星期日十进制decimal二进制binary八进制octal十六进制hexdecimal810008910019101010111011121100131101141110151111161000010ABCDEF201011121314151617现在是18页\一共有261页\编辑于星期日数制间的转换1.二、八、十六进制转换为十进制按权展开法。例:(101.11)2=1×22+0×21+1×20+1×2-1+1×2-2

=(5.75)10(127.4)8=1×82+2×81+7×80+4×2-1

=(87.5)10现在是19页\一共有261页\编辑于星期日数制间的转换2.十进制转换为二、八、十六进制整数部分:除R取余法(先余为低,后余为高)小数部分:乘R取整法(先整为高,后整为低)转换精度问题例:(4.6875)10=(?)2结果:(100.1011)2(87.5)10=(?)8结果:(127.47)8现在是20页\一共有261页\编辑于星期日数制间的转换3.二进制与八、十六进制之间的转换八、十六进制转换为二进制一分为三、一分为四 例:

(23.54)8=(010011.101100)2

=(10011.1011)2

(13.B)16=(00010011.1011)2

=(10011.1011)2二进制转换为八、十六进制合三为一、合四为一现在是21页\一共有261页\编辑于星期日§3.2C的数据类型数据结构指的是数据的组织形式。不同的计算机语言所允许定义和使用的数据结构是不同的。处理同一类问题,如果数据结构不同,算法也会不同。所以,我们应当综合考虑算法和数据结构,选择最佳的数据结构和算法。数据结构+算法=程序对程序当中所用到的所有数据都必须指定其数据类型。C语言的数据结构是以数据类型形式出现的。现在是22页\一共有261页\编辑于星期日C的数据类型如下:现在是23页\一共有261页\编辑于星期日§3.2常量与变量3.2.1常量和符号常量3.2.2变量现在是24页\一共有261页\编辑于星期日3.2.1常量和符号常量在程序运行过程中,其值不能被改变的量称为常量。常量分为:(1)整型常量;如12,0,-3等;(2)实型常量;如4.6,-1.23等;(3)字符常量;如‘a’,‘d’等;(将在后面的小节中详细讲解)常量一般从其字面形式即可判别,这种常量称为字面常量或直接常量。也可以用一个标识符代表一个常量。如例3.1现在是25页\一共有261页\编辑于星期日例3.1符号常量的使用。#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf(“total=%d”,total);}

程序中用#define命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算。程序运行结果为:total=300现在是26页\一共有261页\编辑于星期日符号常量用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量。注意:符号常量不同于变量。符号常量的值在其作用域(例3.1中即为main()函数)内不能被改变,也不能被再次赋值。如:在主函数main中再次用“PRICE=40”语句对PRICE赋值是错误的。为了方便区分符号常量与变量,习惯上符号常量名大写,变量名小写。现在是27页\一共有261页\编辑于星期日使用符号常量的好处(1)含义清楚。定义符号常量名时应考虑“见名知意”,在一个规范的程序中不提倡使用很多的常数,如:sum=15*30*23.5*43.在检查程序时搞不清各个常数究竟代表什么。应尽量使用“见名知意”的变量名和符号常量。(2)在需要改变一个常量时能够做到“一改全改”。例如,在程序中多处用到某物品的价格,如果价格用常数表示,则在价格进行调整时,需要在程序中作多处修改;若使用符号常量PRICE代表价格,则只需在定义该符号常量处作一次修改即可。如:#definePRICE=35

现在是28页\一共有261页\编辑于星期日3.2.2变量其值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元中存放该变量的值。注意:变量名与变量值的区别。

3a变量名(一个符号地址,在对程序编译时系统分配给它一个内存地址)变量值(在程序中对变量取值,实际上是通过变量名找到相应内存地址,从其存储单元中读取数据)存储单元现在是29页\一共有261页\编辑于星期日变量的使用是程序设计的中心环节之一,应掌握:(1)变量的定义:某一时刻值是确定的,不同时刻可能取不同的值,其改变是不连续的。(2)变量的两个要素

变量名:它是一个标识符,代表一定的内存存储单元,存储单元有一个地址。C语言以“&变量名”表示变量的地址。

变量值:它存放在相应的存储单元中,C语言在使用变量名时,实际上是在使用存储单元中存放的变量的值。现在是30页\一共有261页\编辑于星期日变量的命名规则变量的命名符合一般标识符(名字)的命名规则。(1)“字母数字串”;以字母开头,后边跟以字母或者数字,下划线等同于字母。(汉字看作字母,但编程时尽量避免使用汉字,因为汉字的兼容性不好)(2)建议长度不超过8个字符(可移植性要求);(3)区分大小写(一般使用小写字母);(4)尽量做到“见名知意”,避免使用代数符号(如a,b);(5)不能有空格,不能有小数点。现在是31页\一共有261页\编辑于星期日变量的强制定义在C语言中,要求对所有用到的变量作强制定义,就是“先定义,后使用”。这样做的目的是:(1)凡是没有被事先定义的,不作为变量名,这就能保证程序中变量名使用的正确;(2)每一个变量被指定为一确定类型,在编译时就能为其分配相应的存储单元;(3)制定每一变量属于一个类型,这就便于在编译时,据此检查该变量所进行的运算是否合法。现在是32页\一共有261页\编辑于星期日§3.3整型数据3.3.1整型常量的表示方法3.3.2整型变量3.3.3整型常量的类型

现在是33页\一共有261页\编辑于星期日3.3.1整型常量的表示方法整形常量即整常数。C整常数可用以下三种形式表示:(1)十进制整数。如123、-456、0

(2)八进制整数。以0开头的数是八进制数。如0123表示八进制数123,即(123)8,等于十进制数83(1×82+2×81+3×80=83)。-011表示八进制数-11,即十进制数-9。(3)十六进制整数。以0x开头的数是16进制数。如0x123,代表16进制数123。现在是34页\一共有261页\编辑于星期日3.3.2整型变量1.整型数据在内存中的存放形式2.整型变量的分类3.整型变量的定义4.整型数据的溢出现在是35页\一共有261页\编辑于星期日整型变量的分类(1)基本型,以int表示。(2)短整型,以shortint表示,或以short表示。(3)长整型,以longint表示,或以long表示。(4)无符号型,以存储单元中全部二进位(bit)存放数本身,而不必空出最高位作为符号位。无符号型中又分为无符号整型、无符号短整型和无符号长整型,分别以unsignedint,unsignedshort,unsignedlong表示。如果整量在内存中占2个字节(16位),则int型变量数的范围为-32768~32767。而unsignedint型变量数的范围为0~65535.现在是36页\一共有261页\编辑于星期日各类数据所占内存字节数C标准没有具体规定以上各类数据所占内存的字节数,只要求long型数据长度不短于int型,short型不长于int型。具体如何实现,有各计算机系统自行决定。通常的做法是:把long定为32位,把short定为16位,而int可以是16位,也可以是32位。在微机上用long型可以得到大范围的整数,但同时会降低运算速度,因此不要随便使用long型。现在是37页\一共有261页\编辑于星期日整型变量的定义前面已提到,C规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”。这和BASIC,FORTRAN不同,而和PASCAL相类似。例如:inta,b;(指定变量a,b为整型)

unsignedshortc,d;(指定变量c,d为无符号短整型)

longe,f(指定变量e,f为长整型)对变量的定义,一般是放在一个函数的开头部分的声明部分,变量的作用域是整个函数;也可以放在函数中的某一分程序内,但变量的作用域只限于该分程序内(这将在第8章介绍)。现在是38页\一共有261页\编辑于星期日例3.2整型变量的定义与使用main(){inta,b,c,d;/*指定a,b,c,d为整型变量*/unsignedu;/*指定u为无符号整型变量*/a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);}运行结果为:a+u=22,b+u=-14

可以看到:不同种类的整型数据可以进行算术运算。在本例中是int型数据与unsignedint型数据进行加减运算。现在是39页\一共有261页\编辑于星期日§3.4实型数据3.4.1实型常量的表示方法3.4.2实型变量3.4.3实型常量的类型现在是40页\一共有261页\编辑于星期日3.4.1实型常量的表示方法实数在C语句中又称为浮点数。实数有两种表示形式:(1)十进制数形式。它由数字和小数点组成(注意必须有小数点)。0.123,.123,123.0,123.,0.0都是十进制数形式。(2)指数形式。如123e3或123E3都代表123×103

。但注意字母e(或E)之前必须有数字,且e后面指数必须为整数,如e3,2.1e3.5,.e3,e等都不是合法的指数形式。现在是41页\一共有261页\编辑于星期日3.4.2实型变量1.实型数据在内存中的存放形式2.实型变量的分类3.实型数据的舍入误差现在是42页\一共有261页\编辑于星期日3.4.2实型变量1.实型数据在内存中的存放形式2.实型变量的分类3.实型数据的舍入误差现在是43页\一共有261页\编辑于星期日§3.5字符型数据3.5.1字符常量3.5.2字符变量3.5.3字符数据在内存中的存储形式3.5.4字符串常量现在是44页\一共有261页\编辑于星期日3.5.1字符常量C的字符常量是用单引号括起来的一个字符。如'a','D','?'等都是字符常量。注意,'a'和'A'是不同的字符的常量。除了以上形式的字符常量外,C还允许用一种特殊的字符常,就是以一个“\”开关的字符序列。例如,前面已经遇到过的,在printf函数中的‘\n’,它代表一个“换行”符,这种非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示。这类特殊的字符称为“转义字符”。现在是45页\一共有261页\编辑于星期日转义字符a.控制字符:\t水平制表(跳到下一个tab位置);

\r回车;\n

换行;

b.疑难字符:\’单引号字符\\

反斜杠字符

c.指定ASCII码对应的字符:

格式1:\xhh:1到2位十六进制数ASCII码对应的字符

如:\x42表示字符“B”;

格式2:\ddd:1到3位八进制数ASCII码对应的字符

如:\102同样表示字符“B”;现在是46页\一共有261页\编辑于星期日3.5.2字符变量字符型变量用来存放字符常量,注意只能放一个字符,不要以为在一个字符变量中可以放一个字符串(包括若干字符)。字符变量的字义如下:

charc1,c2;

它表示c1和c2为字符型变量,各可以放一个字符。因此可以用下面语句对c1,c2赋值:

c1='a';c2='b'一般以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。

现在是47页\一共有261页\编辑于星期日3.5.3字符数据在内存中的存储形式将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中,而是将该字符的ASCII码放到存储单元中,而且以二进制形式存放。例如:执行赋值语句c1=‘a’;c2=‘b’;字符‘a’的ASCII码为97,‘b’为98,在内存中变量c1,c2的值如图所示:既然在内存中,字符数据以ASCII码存放,它的存储形式就与整数的存储类似,这使得字符型数据和整型数据之间可以通用。9798c1c20110000101100010c1c2现在是48页\一共有261页\编辑于星期日字符型数据和整型数据的通用性一个字符数据既可以以字符形式输出,也可以以整数形式输出。两种通用形式的输出;以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出;以整数形式输出时,直接将ASCII码作为整数输出。对字符数据进行算术运算;相当于对它们的ASCII码进行整数的算术运算。相互赋值;字符数据与整型数据可以相互赋值。现在是49页\一共有261页\编辑于星期日两种通用形式的输出main(){charc1,c2;c1=97;c2=98;(等价于c1=‘a’;c2=‘b’;)

printf(“%c%c\n”,c1,c2);printf(“%d%d\n”,c1,c2);}

将97和98两个整数直接存放到c1和c2的内存单元中。

先将字符‘a’

和‘b’化成ASCII码97和98,然后放到内存单元中。两者的作用和结果是完全相同的程序输出如下:ab9798现在是50页\一共有261页\编辑于星期日对字符数据进行算术运算例3.7大小写字母的转换。main(){charc1,c2;c1=‘a’;c2=‘b’;c1=c1-32;c2=c2-32;printf(“%c%c”,c1,c2);}运行结果为:

AB‘a’的ASCII码为97,‘A’为65;‘b’为98,‘B’为66。从ASCII代码表中可以发现:每一个小写字母比它相应的大写字母的ASCII码大32。C语言允许字符数据与整数直接进行算术运算。现在是51页\一共有261页\编辑于星期日相互赋值字符数据与整型数据可以相互赋值。main(){inti;charc;i=‘a’;c=97;printf(“%c,%d\n”,c,c);printf(“%c,%d\n”,i,i);}运行结果:a,97a,97现在是52页\一共有261页\编辑于星期日3.5.4字符串常量前面已提到,字符常量是由一对单引号括起来的单个字符。C语言除了允许使用字符常量外,还允许使用字符串常量。字符串常量是一对双引号括起来的字符序列。如:“Howdoyoudo.”,“CHINA”,“$123.45”都是字符串常量。可以输出一个字符串,如printf("Howdoyoudo.");现在是53页\一共有261页\编辑于星期日不要将字符常量与字符串常混淆。‘a’是字符常量,“a”是字符串常量,二者不同。假设C被指定为字符变量:

charc;c=‘a’;是正确的;而c=“a”;是错误的。

c=“CHINA”,也是错误的。不能把一个字符串赋给一个字符变量。

究竟为什么c=‘a’就是正确的,而c=“a”就错了呢?现在是54页\一共有261页\编辑于星期日§3.6变量赋初值程序中常需要对一些变量预先设置初值。C语言允许在定义变量的同时使变量初始化。inta=3;/*指定a为整型变量,初值为3*/floatf=3.56;/*指定f为实型变量,初值为3.56*/charc=‘a’;/*指定c为字符变量,初值为‘a’*/也可以使被定义的变量的一部分赋初值。

inta,b,c=5;/*指定a,b,c为整型变量,只对c初始化*/如果对几个变量赋予初值3,应写为:inta=3,b=3,c=3;

不能写成:inta=b=c=3

现在是55页\一共有261页\编辑于星期日初始化不是在编译阶段完成的(只有在第8章中介绍的静态存储变量和外部变量的初始化时在编译阶段完成的)。如:inta=3;

相当于:inta;/*指定a为整型变量*/a=3;/*赋值语句,将3赋给a*/如:inta,b,c=5;

相当于:inta,b,c;/*指定a,b,c为整型变量*/c=5;/*赋值语句,将5赋给c*/

现在是56页\一共有261页\编辑于星期日§3.7算术运算符和算术表达式3.7.1C运算符简介3.7.2算术运算符和算术表达式

1.基本的算术运算符

2.算术表达式和运算符的优先级与结合性

3.强制类型转换运算符

4.自增、自减运算符

5.有关表达式使用中的问题说明现在是57页\一共有261页\编辑于星期日3.7.1C运算符简介C语言是表达式语言,除了控制语句和输入输出外几乎都是表达式。如:赋值符“=”作为赋值运算符,而方括号“[]”作为下标运算符等。C的运算符有13类之多。

现在是58页\一共有261页\编辑于星期日C的运算符1.算术运算符(+,-,*,/,%,即加,减,乘,除,求余)2.关系运算符(>,<,==,>=,<=,!=)3.逻辑运算符(!,&&,||)4.位运算符(<<,>>,~,|,^,&)5.赋值运算符(=及其扩展赋值运算符)6.条件运算符(?,:)7.逗号运算符(,)8.指针运算符(*和&)9.求字节数运算符(sizeof)10.强制类型转换运算符((类型))11.分量运算符(.->)12.下标运算符([])13.其他(如函数调用运算符())

运算符详见本书附录III现在是59页\一共有261页\编辑于星期日基本的算术运算符四则运算:+(加法运算符,或正值运算符。如3+5、+3)-(减法运算符,或负值运算符。如5-2、-2)*(乘法运算符。如3*5)

/(除法运算符。如5/3)

%(模运算符,或求余运算符,%两则应均为整型数据)说明:/运算如果除数或被除数中有一个为负数,则舍入的方向是不固定的。如-5/3有的机器上结果为-1,有的为-2。但多数机器采取“向零取整”的方法,即5/3=1,-5/3=-1,取整后向零靠拢。现在是60页\一共有261页\编辑于星期日算术表达式和运算符的优先级与结合性用算术运算符和括号将运算对象(操作数)连接起来,符合C语法规则的式子,称C算术表达式。运算对象包括常量、变量、函数。合法的C算术表达式如:a*b/c-1.5+‘a’

优先级:若运算对象两侧运算符的优先级不同,则先乘除后加减。结合性:若一个运算对象两侧的运算符的优先级相同,则满足结合性规则,自左向右,左结合性(运算对象先与左面的运算符结合)。

现在是61页\一共有261页\编辑于星期日自增、自减运算符有前置和后置两种形式:

前置形式:++变量名,--变量名

后置形式:变量名++,变量名--功能:对变量的值进行自加1(自减1)的运算。例:语句++a;相当于执行a=a+1;

前置形式运算规则:先对表达式中含有前置自增(减)运算符的变量进行自加(减)1,然后用这些变量的新值参与表达式运算。后置形式运算规则:先用变量原值参与表达式运算,然后对含有后置自加(减)运算符的变量进行自加(减)1运算。现在是62页\一共有261页\编辑于星期日main()main(){intj,i=3;{intj,i=3;j=++i;(相当于i=i+1;j=i)j=i++;(相当于j=i;i=i+1)printf(“%d,%d”,i,j);}printf(“%d,%d”,i,j);}运行结果:4,4运行结果:4,3(1)自增运算符(++)和自减运算符(--),只能用于变量,不能用于常量或表达式;(2)++和--的结合方向为“自右至左”。

考虑:若i的初值为3,那么print(“%d”,-i++)的结果应该为多少呢?现在是63页\一共有261页\编辑于星期日§3.8赋值运算符和赋值表达式1.赋值运算符2.类型转换3.复合的赋值运算符4.赋值表达式现在是64页\一共有261页\编辑于星期日1.赋值运算符赋值符号“=”就是赋值运算符,作用是将一个数据赋给一个变量。如“a=3”的作用是执行一次赋值操作(或称赋值运算),把常量3赋给变量a。也可以将一个表达式的值赋给一个变量。如“a=3+5-8%5”,相当于把结果值5赋给变量a(“a=5”)。现在是65页\一共有261页\编辑于星期日2.类型转换如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。现在是66页\一共有261页\编辑于星期日3.复合的赋值运算符在赋值符“=”之前加上其他运算符,可以构成复合的运算符。如:a+=3等价于a=a+3,x%=3等价于x=x%3。注意:赋值符“=”右边看作一项。凡是二元运算符,都可以与赋值符一起组成复合赋值符。C语言规定了10种复合赋值运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=规则:(1)“=”后边先加括号;

(2)“=”前边复制到“=”后边;现在是67页\一共有261页\编辑于星期日4.赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般形式为:<变量>

<赋值运算符><表达式>赋值表达式求解过程:将赋值运算符右侧“表达式”的值赋给左侧的变量。表达式的值就是被赋值的变量的值。上述一般形式中的“表达式”还可以是一个赋值表达式。如:a=(b=5)。所以,C语言允许连续赋值。现在是68页\一共有261页\编辑于星期日inta,b,c;

a=b=c=0;连续使用等号时,从右向左顺序赋值:a=(b=(c=0));赋值表达式也可以包含复合的赋值运算符。如:

a+=a-=a*a也是一个赋值表达式。若a的初值为12,则:先进行“a-=a*a”,相当于a=a-a*a,a的值为

12-144=-132;再进行“a+=-132”的运算,相当于“a=a+(-132)”,a的值为-132-132=-264。现在是69页\一共有261页\编辑于星期日§3.9逗号运算符和逗号表达式逗号运算符(又称顺序求值运算符):,逗号表达式:用逗号运算符把两个表达式连接起来的表达式。一般形式为:表达式1,表达式2,…..,表达式n逗号表达式的值:表达式n的值.如:逗号表达式“3+5,6+8”的值为14。如:“a=3*5,a*4”,由于赋值运算符的优先级高于逗号运算符(逗号运算符在所有运算符中级别最低),因此应先求解a=3*5,再求解a*4,得到逗号表达式的值60。现在是70页\一共有261页\编辑于星期日一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如:(a=3*5,a*4),a+5,先计算出a的值为15,由于a*4的操作并没有改变a的值,所以a+5的值为20。因此,逗号表达式最终的值为20。在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值。逗号表达式最常用于循环(for)语句。注意:并不是任何地方出现的逗号都作为逗号运算符。例如函数参数也是用逗号来间隔的,如:printf(“%d,%d,%d”,a,b,c);现在是71页\一共有261页\编辑于星期日课堂作业:2.1指出下面哪些是合法的变量名:①123②abc③a+b④a_b⑤pad⑥?12⑦Li_Li⑧*P2.2‘a’在内存中占

个字节,“a”在在内存中占

个字节.2.3写出下面程序的运行结果:

main(){charch;ch=‘B’;/*B的ascii码的值为66*/printf(“%c,%d\n”,ch,ch)

②④⑤⑦12B66现在是72页\一共有261页\编辑于星期日2.4写出下面程序的运行结果:main(){inta=10,b,c,d;intb,c;a+=6;b=(c=20,6,a+2);printf("a=%d,b=%d,c=%d\n",a,b,c);}运行结果:a=16,b=18,c=20现在是73页\一共有261页\编辑于星期日2.5写出下面程序的运行结果:main(){inta=4;intb,c;c=a+(b=2);a+=a-=a*a;printf("%d,%d,%d\n",a,b,c);}2.6写出下面程序的运行结果:

main(){inta,b,c=9;a=3,b=4; c%=a+b; printf(“%d\n”,c) }

运行结果:-24,2,6运行结果:2现在是74页\一共有261页\编辑于星期日2.7写出下面程序的运行结果:

main(){ inti,j,m,n; i=8;j=10; m=++i; n=j++; printf("%d,%d,%d,%d\n",i,j,m,n);}运行结果:9,11,9,10现在是75页\一共有261页\编辑于星期日2.8写出下面程序的运行结果:

main(){ floatx=5.4; inti; i=(int)x; printf(”x=%f,i=%d\n",x,i);}运行结果:x=5.400000,I=5现在是76页\一共有261页\编辑于星期日第四章最简单的C程序设计

————顺序程序设计现在是77页\一共有261页\编辑于星期日§4.1C语句概述§4.2赋值语句§4.3数据输入输出的概念及实现§4.4字符数据输入输出函数§4.5格式输入与输出§4.6顺序结构程序设计举例现在是78页\一共有261页\编辑于星期日§4.1C语句概述与其他高级语言一样,C语言的语句用来向计算机系统发出操作指令。一个语句经编译后产生若干条机器指令。一个实际的程序应当包含若干条语句。C语句都是用来完成一定的操作任务的;声明部分的内容不应称为语句。如:inta;不是一个C语句,它不产生机器操作,而只是对变量的定义。现在是79页\一共有261页\编辑于星期日C程序结构C程序源程序文件1源程序文件2源程序文件n预处理命令全局变量声明函数1函数n函数首部函数体局部变量声明执行语句…..…现在是80页\一共有261页\编辑于星期日C语句分类C语句可以分为以下5类:

1.控制语句;

2.函数调用语句;

3.表达式语句;

4.空语句;

5.复合语句;现在是81页\一共有261页\编辑于星期日1.控制语句完成一定的控制功能。C只有9种控制语句:

if()~else~(条件语句)

for()~(循环语句)

while()~(循环语句)

do~while()

(循环语句)

continue

(结束本次循环语句)

break

(中止switch或循环语句)

switch

(多分支选择语句)

goto

(转向语句)

return

(从函数返回语句)

()表示条件,~表示内嵌的语句。现在是82页\一共有261页\编辑于星期日2.函数调用语句由一次函数调用加一个分号构成一个语句。如:printf(“ThisisaCstatement.”);一次函数调用分号现在是83页\一共有261页\编辑于星期日3.表达式语句由一个表达式构成一个语句;最典型的是,由赋值表达式构成一个赋值语句(表达式后面加分号即构成语句)。如:a=3是一个赋值表达式,而a=3;是一个赋值语句。一个语句必须在最后出现分号。任何表达式都可以加上分号而成为语句。如:x+y;是语句,但没有意义(没有将相加之和赋给另一个变量)。表达式能构成语句是C语言的一个重要特色。C中大多数语句是表达式语句(包括函数调用语句),所以有人称C语言为“表达式语言”。现在是84页\一共有261页\编辑于星期日4.空语句

空语句:仅包含一个分号的语句,它什么都不做。有时用来做被转向点,或是循环语句中的循环体(循环体是空语句,表示循环体什么也不做。)

如:;现在是85页\一共有261页\编辑于星期日5.复合语句

由大括号{}括起来的语句序列,称为复合语句,或是分程序。

如:{z=x+y;t=z/100;printf("%f",t); }

注意:复合语句中最后一个语句最后的分号不能忽略不写。

C语言允许一行写几个语句,也可以一个语句拆开写在几行上。现在是86页\一共有261页\编辑于星期日§4.2赋值语句C语言的赋值语句具有其他高级语言赋值语句的一切特点和功能,但也有不同之处:

1、C语言中的赋值号“=”是一个运算符,而其它大多数语言中赋值号“=”不是运算符。

2、关于赋值表达式和赋值语句的概念。其他大多数高级语言中没有“赋值表达式”这一概念。作为赋值表达式可以包括在其他表达式之中,如:

if((a=b)>0)t=a;(先赋值,将b的值赋给a;再判断a是否>0,若>0,则执行t=a;)

if((a=b;)>0)t=a;(不合法:if条件不能包含赋值语句)现在是87页\一共有261页\编辑于星期日§4.3数据输入输出的概念及实现所谓输入输出是以计算机主机为主体而言的。从计算机向外部输出设备(显屏,打印机)输出数据称为“输出”;从输入设备(键盘,磁盘)向计算机输入数据称为“输入”。C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。在C的标准函数库中提供了一些输入输出函数,例如,printf函数和scanf函数。在使用它们时,千万不要简单地认为它们是C语言的“输入输出语句”。printf和scanf不是C语言的关键字。完全可以不用printf和scanf这两个名字,而另外编两个函数,另用其它函数名。

现在是88页\一共有261页\编辑于星期日C提供的函数以库的形式存放在系统中,它们不是C语言文本中的组成部分。因此各函数的功能和名,在各种不同的计算机系统所不同。有些通用的函数(如printf和scanf等),各种计算机系统都提供,成为各种计算机系统的标准函数(标准输入输出库的一部分)。在程序编译连接时,用户程序与标准文件相连,所以在程序中可以直接使用printf和scanf函数。注意:在源程序中有printf函数,在编译时并不把它翻译成目标指令,而是在执行阶段中调用已被连接的函数库中的printf函数。现在是89页\一共有261页\编辑于星期日C语言函数库中有一批“标准输入输出函数”,它是以标准的输入输出设备(一般为终端设备)为输入输出对象的。其中有:

putchar(输出字符)

getchar(输入字符)

printf(格式输出)scanf(格式输入)

puts(输出字符串)gets(输入字符串)现在是90页\一共有261页\编辑于星期日在使用标准I/O库函数时,要用预编译命令“#include”将“stdio.h”文件包括到用户源文件中。即

#include

“stdio.h”(或#include<stdio.h>)。stdio.h是standartinput&output的缩写,它包括了标准I/O库有关的变量定义和宏定义(有关预编译命令见第九章)。在需要使用标准I/O库中的函数时,应在程序前使用上述预编译命令,但在用printf和scanf函数时,则可以不要(只有printf和scanf例外)。预编译命令“#include”都是放在程序的开头,因此这类文件被称为“头文件”。现在是91页\一共有261页\编辑于星期日§4.4字符数据输入输出函数4.4.1putchar函数(字符输出函数)4.4.2getchar函数(字符输入函数)现在是92页\一共有261页\编辑于星期日4.4.1putchar函数putchar函数的作用是向终端输出一个字符。例如:putchar(c)输出字符串变量C的值。C可以是字符型变量或整型变量。例4.1:#include"stdio.h"

main()

{chara,b,c;

a="B";b="O";c="Y";

putchar(a);putchar(b);putchar(c);

}

运行结果:BOY现在是93页\一共有261页\编辑于星期日也可以输出控制字符,如putchar(‘\n’)输出一个换行符。

如果将例4.1程序最后一行改为:

putchar(a);putchar('\n');putchar(b);putchar('\n');putchar(c);putchar('\n');

则输出结果为:

B

O

Y现在是94页\一共有261页\编辑于星期日也可以输出其它转义字符,如:

putchar(‘\101’)

(输出字符‘A’)

putchar(‘\’‘)

(输出单引号字符’)

putchar(‘015’)

(输出回车,不换行,使输出的位置移到本行开头)

现在是95页\一共有261页\编辑于星期日4.4.2getchar函数此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。getchar函数没有参数,其一般形式为:getchar()函数的值就是从输入设备得到的字符。例4.2:#include"stdio.h"

main()

{charc;

c=getchar();

putchar(c);

}

在运行时,如果从键盘输入字‘a’

a<enter>(输入a后,按“回车”键,字符才送到内存)

a(输出变量c的值'a')现在是96页\一共有261页\编辑于星期日请注意,getchar()只能接收一个字符。getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量,作为表达式的一部分。例如,例4.2第4、5行可以用下面一行代替:putchar(getchar());也可以用printf函数:printf("%c",getchar());在函数中要用getchar函数,应该在函数的前面(或本文件开头)用#include"stdio.h”。因为在使用标准I/O库中的函数时需要用到“stdio.h”文件中包含的一些信息。

现在是97页\一共有261页\编辑于星期日§4.5格式输入与输出4.5.1printf函数(格式输出函数)4.5.2scanf函数(格式输入函数)现在是98页\一共有261页\编辑于星期日4.5.1printf函数1.printf函数的一般格式2.格式字符现在是99页\一共有261页\编辑于星期日printf函数的一般格式printf函数的作用是:向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据。注意:putchar只能输出字符,而且只能是一个字符;而printf可以输出多个数据,且为任意类型。现在是100页\一共有261页\编辑于星期日一般格式:printf(格式控制,输出列表)如:printf(“%d,%c\n”,i,c)格式说明:将数据转换为指定格式输出。普通字符:即需要原样输出的字符(逗号,空格和换行符)输出列表:需要输出的数据,可以是表达式。现在是101页\一共有261页\编辑于星期日例:printf(“a=%d_b=%d”,a,b);

双引号中的字符除了“%d”和“%d”以外,还有非格式说明的普通字符“a=”、“b=”及空格“_”,它们按原样输出。若a=3,b=4,则输出为:a=3_b=4现在是102页\一共有261页\编辑于星期日格式字符对不同类型的数据用不同的格式字符。常用的有以下几种格式字符:

(1)

d格式符(6)s格式符

(2)

o格式符(7)f格式符

(3)x格式符(8)e格式符

(4)u格式符(9)g格式符

(5)c格式符

现在是103页\一共有261页\编辑于星期日d格式符:输出十进制整数%d:按整型数据的实际长度输出;%md:输出m位(指定的输出字段宽度);(数据位数小于m位时左端补空格,大于m位时按实际长度输出);%ld,%mld:l表示输出“长整型”数据,也可以指定输出字段宽度;一个int型数据可以用%d或%ld格式输出;注:%后面的m(位数控制)对于其它格式符也适用。现在是104页\一共有261页\编辑于星期日例、(□表示空格)inti=123;longj=123456;printf("%d,%5d,%ld,%8ld

",i,i,j,j);

输出:123,□□123,123456,□□123456现在是105页\一共有261页\编辑于星期日c格式符:输出一个字符一个整数,只要它的值在0~255之间,也可以用字符形式输出。在输出前,系统会将该整数作为ASCII码转换成相应的字符;反之,字符数据也可以用整数形式输出。例:4.4main(){charc='a';inti=97;printf("%c,%d\n",c,c);printf("%c,%d\n",i,i);}

可以指定输出字段宽度:printf(“%3c”,c);则输出:__a

输出:a,97a,97现在是106页\一共有261页\编辑于星期日s格式符:输出一个字符串(1)%s:原样输出字符串;如:printf(“%s”,“CHINA”)输出:CHINA(2)%ms:输出字符串占m列;>m全输出<m左补空格;(3)%-ms:输出字符串占m列;<m字符串左靠右补空格;(4)%m.ns:输出字符串占m列,但只取串左端n个字符。这n个字符输出在m列的右侧,左补空格。(5)%-m.ns:输出字符串占m列,但只取串左端n个字符。这n个字符输出在m列的左侧,右补空格。若n>m,则m自动取n值,即保证n个字符正常输出。现在是107页\一共有261页\编辑于星期日例

4.5main(){ printf("%3s,%7.2s,%.4s,%-5.3s\n","CHINA","CHINA","CHINA","CHINA");}输出:CHINA,□□□□□CH,CHIN,CHI□□m自动取n值,即等价于:%4.4s现在是108页\一共有261页\编辑于星期日f格式符:以小数形式输出实数(单/双精度)(1)%f:由系统自动指定字段宽度,使整数部分全部输出,并输出6位小数。(2)%m.nf:指定输出的数据共占m列,其中由n位小数。若数值长度<m,则左端补空格。(3)%-m.nf:同%m.nf,只是输出的数值向左端靠,右端补空格。

注意:并非全部数字都是有效数字。单精度实数的有效位数一般为7位,而双精度实数的有效位数一般为16位(小数6位)。现在是109页\一共有261页\编辑于星期日例4.6main(){floatx,y;x=111111.111;y=222222.222;printf(“%f”,x+y);}运行结果为:333333.328125显然,只有前7位数字是有效数字。现在是110页\一共有261页\编辑于星期日例4.7main(){doublex,y;x=1111111111111.111111111;y=2222222222222.222222222;printf(“%f”,x+y);}运行结果为:3333333333333.333010可以看到,最后3位小数(超过16位)是无意义的。现在是111页\一共有261页\编辑于星期日例:4.8main(){floatf=123.456; printf("%f□□%10f□□%10.2f□□%.2f□□

%-10.2f\n",f,f,f,f,f);}输出:123.455994□□

123.455994□□

□□□□123.46□□123.46□□

123.46□□□□按原样输出的字符由于格式定义而输出的字符现在是112页\一共有261页\编辑于星期日4.5.2scanf函数getchar函数只能用来输入一个字符,用scanf函数可以用来输入任何类型的多个数据。在前面已初步接触到了scanf函数,在本节中再作详细介绍。

1.一般形式

2.格式说明

3.使用scanf函数时应注意的问题现在是113页\一共有261页\编辑于星期日一般形式scanf(格式控制,地址表列)“格式控制”含义同printf函数。“地址表列”是由若干个地址组成的表列,可能是变量的地址,或字符串的首地址。现在是114页\一共有261页\编辑于星期日例4.9:用scanf函数输入数据main()

{inta,b,c;

scanf("%d%d%d",&a,&b,&c);

printf("%d,%d,%d\n",a,b,c);

}运行时按以下方式输入a,b,c的值:

345<enter>

(输入a,b,c的值)

3,4,5

(输出a,b,c的值)&a,&b,&c中的“&”是“地址运算符”,&a指a在内存中的地址。上面scanf函数的作用是:按照a,b,c在内存的地址将a,b,c的值存进去。

现在是115页\一共有261页\编辑于星期日见下图,a,b,c的地址是在定义a,b,c之后就确定的(在编译阶段分配的)。

354acb现在是116页\一共有261页\编辑于星期日"%d%d%d"表示按十进制整数形式输入数据。输入数据时,在两个数据之间以一个或多个空格间隔,也可以用回车键、跳格键tab。下面输入各法:①345<enter>

②3<enter>

45<enter>

③3(按tab键)4<enter>

5<enter>用“%d%d%d”格式输入时,不能用逗号作为两个数据间的分隔符,如下面输入不合法:3,4,5<enter>

现在是117页\一共有261页\编辑于星期日格式说明和printf函数中的格式说明相似,以%开始,以一个字符结束,中间可以插入附加的字符。

格式字符说明d,i用来输入有符号的十进制整数。

u用来输入无符号的十进制整数。o用来输入无符号的八进制整数。x,Xc用来输入单个字符。s输入字符串,将字符串送到一个字符数组中,输入以非空白符开始,以第一个空白符结束,以'\0'作为其最后一个字符。

f用来输入实数,可以用小数形式或指数形式输入。

e,E,g,G与f作用相同,e与f,g可以互相替换(大小写作用相同)。

用来输入无符号的十六进制整数(大小写作用相同)。现在是118页\一共有261页\编辑于星期日scanf的附加格式说明字符字符lh域宽*说明用于输入长整型数据(可用%ld,%lo,%lx,%lu),以及double型数据(用%lf或%le)。

用于输入短整型数据(可用%hd,%ho,%hx)。

指定输入数据所占宽度(列数),域宽应为正整数表示本输入顶在读入后不赋给相应的变量。

现在是119页\一共有261页\编辑于星期日§4.6顺序结构程序设计举例[例4.10]

输入三角形的三边长,计算其面积。现在是120页\一共有261页\编辑于星期日算法:问题求解的方法与步骤.

算法的表示:1)自然语言:Step1:输入a,b,cStep2:计算s=(a+b+c)/2Step3:计算面积areaStep4:输出面积area2)传统流程图计算面积area输出面积area输入a、b、c计算s结束开始现在是121页\一共有261页\编辑于星期日3)结构化流程图(N-S图)4)伪代码

(1)(用英语描述)begin(算法开始)inputa,b,cs(a+b+c)/2areas(s-a)(s-b)(s-c)outputareaend5)计算机语言计算面积area输出面积area输入a、b、c计算s现在是122页\一共有261页\编辑于星期日1.设计算法、设三边长a、b、c,面积area的算法是:2.画出流程图。求平方根函数sqrt()

在math.h中定义。计算面积area输出面积area输入a、b、c计算s结束开始现在是123页\一共有261页\编辑于星期日#include"math.h"main(){floata,b,c,s,area;

scanf("%f,%f,%f",&a,&b,&c);

s=1.0/2*(a+b+c);area

=sqrt(s*(s-a)*(s-b)*(s-c));printf("a=%7.2f,b=%7.2f,c=%7.2f\n",a,b,c);printf("area=%7.2f\n",area);}运行情况如下:

3,4,6↙a=□□□3.00,b=□□□4.00,c=□□□6.00area=□□□5.33现在是124页\一共有261页\编辑于星期日例4.11输入一个大写字母,改为小写字母输出。#include<stdio.h>main(){charc1,c2;c1=getchar();printf(“%c,%d\n”,c1,c1);c2=c1+32;printf(“%c,%d\n”,c2,c2);}运行情况如下:A<enter>A,65a,97现在是125页\一共有261页\编辑于星期日第5章选择结构程序设计现在是126页\一共有261页\编辑于星期日C语言中选择结构是用if语句实现的。if语句最常用的形式是:

if(关系表达式)语

温馨提示

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

评论

0/150

提交评论