C语言基本语法归纳市公开课金奖市赛课一等奖课件_第1页
C语言基本语法归纳市公开课金奖市赛课一等奖课件_第2页
C语言基本语法归纳市公开课金奖市赛课一等奖课件_第3页
C语言基本语法归纳市公开课金奖市赛课一等奖课件_第4页
C语言基本语法归纳市公开课金奖市赛课一等奖课件_第5页
已阅读5页,还剩257页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言基本语法归纳及实例介绍计算机教学中心李雪飞第1页提 纲C语言概况C程序结构数据类型、运算符与表示式最简单C程序设计次序程序设计选择结构程序设计循环控制数组函数指针第2页C语言概况C优点1)、高效2)、可移植3)、灵活C缺点可读性差,学习应用较难。第3页C语言概况-简单C程序 例1.1 main( ) printf(This is a C program.n); 该程序作用:在屏幕上输出一行信息: This is a C program. 1、main( ) 表示“主函数”,每一个C程序都必须有且只有一个主函数。 2、main函数体由大括号 括起来。3、语句后面有一个分号。.4、print

2、f( )是C语言输出函数。双引号内字符 被原样输出。5、“n”是换行符,即在输出This is a C program之后换行。第4页 例1.2求两数之和。 main( ) int a, b, sum; /*定义三个整型变量。(int = integer)。*/ a = 123;b = 456; /*把常数123赋给变量a,把常数456赋给变量b*/ sum = a + b; /*计算a、b之和,并把和值赋变量给sum*/ printf(“Sum is %dn”, sum);/*输出sum值*/ 程序输出信息为: sum is 579/* */中间内容表示“注释”。注释是程序员对程序某部分功效

3、和作用所做说明,是给人看,对编译和运行不起作用。%d表示输出数据类型是十进制整数类型。在输出时,该位置用对应变量sum值代替。第5页例1.3输入两个整数,输出其中最大值。int max(int x,int y) /*求两数最大值函数max*/ int z;if(xy) z=x;else z=y;return (z); /*将z值返回给主函数main*/ /*返回值经过函数名max带回main函数调用处*/ main ( ) /*主函数*/ int a,b,c;scanf(“%d,%d”,&a,&b); /*输入a,b值*/c=max(a,b); /*调用max函数,将实参a,b值给形参x,y*

4、/printf(“max=%d”,c); /*输出最大值*/第6页C程序结构、C 程序是由函数组成。一个C源程序最少包含一个函数(main函数:它代表程序开始执行起始位置),也能够包含一个main函数和若干其它函数。所以,函数是C程序基本单位。 第7页C程序中有三种类型函数:1).main():主函数,每一个C程序必须且只有一个main()函数。2).开发系统提供特殊函数,如printf( )、scanf( )等。 Turbo C开发系统提供三百多个函数。3).程序员自己设计函数,如例1.3中函数max()。 C函数相当于其它语言中子程序。用函数来实现特定功效。能够说C是函数式语言。程序全部工

5、作都是由函数来完成。C这种特征很轻易实现模块化。C程序结构第8页C程序结构、一个函数由两部分组成: ()函数说明部分。包含函数名、函数类型、函数属性、函数参数(形参)名、形式参数类型。如int max (int x, int y) 函数类型 函数名 函数参数类型 函数参数名 函数参数类型 函数参数名()函数体。即函数说明部分下面大括弧.内部分。假如一个函数内有多个大括弧,则最外层一对 为函数体范围。 第9页函数体普通包含: 变量定义。如例1.3中main函数中“int a,b,c;” 执行部分。由若干个语句组成。 当然,在一些情况下也能够没有变量定义部分(比如例1.1)。甚至能够既无变量定义也

6、无执行部分,如:dump() 它是一个空函数,什么也不干,但这是正当。C程序结构第10页、一个C程序总是从main函数开始执行,而不论main函数在整个程序中位置怎样(main函数能够放在程序最前头,也能够放在程序最终,或在一些函数之前在另一些函数之后)。 、 C程序书写格式自由,一行内能够写几个语句,一个语句能够分写在多行上。C程序没有行号,也不象fortran或cobol那样严格要求书写格式(语句必须从某一列开始书写)。 C程序结构第11页、每个语句和数据定义最终必须有一个分号。分号是C语句必要组成部分。比如:c=a+b; 分号不可少。即使是程序中最终一个语句也应包含分号(这是和pasca

7、l语言不一样)。、C语言本身没有输入输出语句。输入和输出操作是由库函数scanf和printf等函数来完成。C对输入输出实施“函数化”。、能够用/*/对C程序中任何部分作注释。能够增加程序可读性。 C程序结构第12页程序开发过程 C源代码编译程序目标代码链接程序可执行代码库C源代码编译程序目标代码第13页数据类型、运算符与表示式第14页3.1 信息在计算机中存放与表示计算机基本功效是进行数据计算和加工处理,程序和数据在计算机存放是用二进制形式表示。数与字符是自然信息与计算机二进制信息中转步骤。数制:就是用一组固定数字和一套统一规则来表示数据方法。日常使用十进制(逢十进一)机器内部二进制(逢二进

8、一)其它惯用数制:八进制,十六进制第15页不一样数制之间对应表示十进制decimal二进制binary八进制octal十六进制hexdecimal000011112102231133410044510155611066711177第16页十进制decimal二进制binary八进制octal十六进制hexdecimal810008910019101010111011121100131101141110151111161000010ABCDEF201011121314151617第17页数制间转换1.二、八、十六进制转换为十进制按权展开法。例:(101.11)2=122+021+120+12-1

9、+12-2 =(5.75) 10(127.4)8=182+281+780+42-1 =(87.5) 10第18页数制间转换2.十进制转换为二、八、十六进制整数部分:除R取余法(先余为低,后余为高)小数部分:乘R取整法(先整为高,后整为低)转换精度问题例:(4.6875)10=(?) 2 结果: (100.1011) 2 (87.5)10=(?) 8 结果: (127.47) 8 第19页数制间转换3.二进制与八、十六进制之间转换八、十六进制转换为二进制一分为三、一分为四例:(23.54)8=(010011.101100) 2 =(10011.1011) 2(13.B)16=(00010011.

10、1011) 2 =(10011.1011) 2二进制转换为八、十六进制合三为一、合四为一第20页3.2 C数据类型数据结构指是数据组织形式。 不一样计算机语言所允许定义和使用数据结构是不一样。处理同一类问题,假如数据结构不一样,算法也会不一样。所以,我们应该综合考虑算法和数据结构,选择最正确数据结构和算法。 数据结构+算法=程序对程序当中所用到全部数据都必须指定其数据类型。C语言数据结构是以数据类型形式出现。 第21页C数据类型以下:第22页3.2 常量与变量3.2.1 常量和符号常量3.2.2 变量第23页3.2.1 常量和符号常量在程序运行过程中,其值不能被改变量称为常量。常量分为: (1

11、)整型常量;如12,0,3等; (2)实型常量;如4.6,1.23等; (3)字符常量;如a,d等;(将在后面小节中详细讲解)常量普通从其字面形式即可判别,这种常量称为字面常量或直接常量。也能够用一个标识符代表一个常量。如例3.1第24页例 3.1 符号常量使用。#define PRICE 30main()int num,total; num=10; total=num*PRICE; printf(“total=%d”,total); 程序中用#define 命令行定义PRICE代表常量30,今后凡在本文件中出现PRICE都代表30,能够和常量一样进行运算。 程序运行结果为:total=300

12、第25页符号常量用一个标识符代表一个常量,称为符号常量,即标识符形式常量。注意:符号常量不一样于变量。符号常量值在其作用域(例3.1中即为main()函数)内不能被改变,也不能被再次赋值。如:在主函数main中再次用“PRICE=40”语句对PRICE赋值是错误。为了方便区分符号常量与变量,习惯上符号常量名大写,变量名小写。第26页使用符号常量好处(1)含义清楚。 定义符号常量名时应考虑“见名知意”,在一个规范程序中不提倡使用很多常数,如:sum=15*30*23.5*43.在检验程序时搞不清各个常数终究代表什么。应尽可能使用“见名知意”变量名和符号常量。(2)在需要改变一个常量时能够做到“一

13、改全改”。比如,在程序中多处用到某物品价格,假如价格用常数表示,则在价格进行调整时,需要在程序中作多处修改;若使用符号常量PRICE代表价格,则只需在定义该符号常量处作一次修改即可。如:#define PRICE=35 第27页3.2.2 变量其值能够改变量称为变量。一个变量应该有一个名字,在内存中占据一定存放单元。在该存放单元中存放该变量值。注意:变量名与变量值区分。 3a变量名(一个符号地址,在对程序编译时系统分配给它一个内存地址)变量值(在程序中对变量取值,实际上是经过变量名找到对应内存地址,从其存放单元中读取数据)存放单元第28页变量使用是程序设计中心步骤之一,应掌握: (1) 变量定

14、义:某一时刻值是确定,不一样时刻可能取不一样值,其改变是不连续。 (2) 变量两个要素 变量名:它是一个标识符,代表一定内存存放单元,存放单元有一个地址。C语言以“&变量名”表示变量地址。 变量值:它存放在对应存放单元中,C语言在使用变量名时,实际上是在使用存放单元中存放变量值。 第29页变量命名规则变量命名符合普通标识符(名字)命名规则 。(1)“字母数字串” ; 以字母开头,后边跟以字母或者数字,下划线等同于字母。(汉字看作字母,但编程时尽可能防止使用汉字,因为汉字兼容性不好) (2) 提议长度不超出8个字符(可移植性要求); (3) 区分大小写 (普通使用小写字母);(4) 尽可能做到“

15、见名知意”,防止使用代数符号(如a,b); (5) 不能有空格,不能有小数点。 第30页变量强制订义在C语言中,要求对全部用到变量作强制订义,就是“先定义,后使用”。这么做目标是:(1)凡是没有被事先定义,不作为变量名,这就能确保程序中变量名使用正确;(2)每一个变量被指定为一确定类型,在编译时就能为其分配对应存放单元;(3)制订每一变量属于一个类型,这就便于在编译时,据此检验该变量所进行运算是否正当。第31页3.3 整型数据3.3.1 整型常量表示方法3.3.2 整型变量3.3.3 整型常量类型 第32页3.3.1 整型常量表示方法整形常量即整常数。C整常数可用以下三种形式表示: (1)十进

16、制整数。如123、-456、0 (2)八进制整数。以0开头数是八进制数。如0123表示八进制数123,即(123)8,等于十进制数83)。-011表示八进制数-11,即十进制数-9。 (3)十六进制整数。以0 x开头数是16进制数。如0 x123,代表16进制数123。 第33页3.3.2 整型变量1.整型数据在内存中存放形式2.整型变量分类3.整型变量定义4.整型数据溢出第34页整型变量分类(1)基本型,以int表示。 (2)短整型,以short int表示,或以short表示。 (3)长整型,以long int表示,或以long表示。 (4)无符号型,以存放单元中

17、全部二进位(bit)存放数本身,而无须空出最高位作为符号位。无符号型中又分为无符号整型、无符号短整型和无符号长整型,分别以unsigned int, unsigned short, unsigned long表示。 假如整量在内存中占2个字节(16位),则int型变量数范围为-3276832767。而unsigned int型变量数范围为065535. 第35页各类数据所占内存字节数C标准没有详细要求以上各类数据所占内存字节数,只要求long型数据长度不短于int型,short型不长于int型。详细怎样实现,有各计算机系统自行决定。通常做法是:把long定为32位,把short定为16位,而i

18、nt能够是16位,也能够是32位。在微机上用long型能够得到大范围整数,但同时会降低运算速度,所以不要随便使用long型。第36页整型变量定义前面已提到,C要求在程序中全部用到变量都必须在程序中指定其类型,即“定义”。这和BASIC, FORTRAN不一样,而和PASCAL相类似。比如: int a,b;(指定变量a,b为整型)unsigned short c,d; (指定变量c,d为无符号短整型)long e,f (指定变量e,f为长整型)对变量定义,普通是放在一个函数开头部分申明部分,变量作用域是整个函数;也能够放在函数中某一分程序内,但变量作用域只限于该分程序内(这将在第8章介绍)。第

19、37页例3.2 整型变量定义与使用main() int a,b,c,d; /*指定a,b,c,d为整型变量*/ unsigned u; /*指定u为无符号整型变量*/ a=12;b=-24;u=10; c=a+u;d=b+u; printf(“a+u=%d,b+u=%dn”,c,d);运行结果为:a+u=22,b+u=-14 能够看到:不一样种类整型数据能够进行算术运算。在本例中是int型数据与unsigned int型数据进行加减运算。第38页3.4 实型数据3.4.1 实型常量表示方法3.4.2 实型变量3.4.3 实型常量类型第39页3.4.1 实型常量表示方法实数在C语句中又称为浮点数

20、。实数有两种表示形式: (1)十进制数形式。它由数字和小数点组成(注意必须有小数点)。0.123, .123, 123.0, 123., 0.0都是十进制数形式。 (2)指数形式。如123e3或123E3都代表123103 。但注意字母e(或E)之前必须有数字,且e后面指数必须为整数,如e3, 2.1e3.5, .e3, e等都不是正当指数形式。 第40页3.4.2 实型变量1. 实型数据在内存中存放形式2. 实型变量分类3. 实型数据舍入误差第41页3.4.2 实型变量1. 实型数据在内存中存放形式2. 实型变量分类3. 实型数据舍入误差第42页3.5 字符型数据3.5.1 字符常量3.5.

21、2 字符变量3.5.3 字符数据在内存中存放形式3.5.4 字符串常量第43页3.5.1 字符常量C字符常量是用单引号括起来一个字符。如a, D, ?等都是字符常量。注意,a和A是不一样字符常量。除了以上形式字符常量外,C还允许用一个特殊字符常,就是以一个“”开关字符序列。比如,前面已经碰到过,在printf函数中n,它代表一个“换行”符,这种非显示字符难以用普通形式字符表示,故要求用这种特殊形式表示。这类特殊字符称为“转义字符”。第44页转义字符a. 控制字符: t 水平制表(跳到下一个tab位置); r 回车; n 换行; b. 疑难字符: 单引号字符 反斜杠字符c. 指定ASCII码对应

22、字符:格式1: xhh:1到2位十六进制数ASCII码对应字符如:x42表示字符“B”;格式2:ddd: 1到3位八进制数ASCII码对应字符 如:102一样表示字符“B”;第45页3.5.2 字符变量字符型变量用来存放字符常量,注意只能放一个字符,不要认为在一个字符变量中能够放一个字符串(包含若干字符)。字符变量字义以下: char c1,c2; 它表示c1和c2为字符型变量,各能够放一个字符。所以能够用下面语句对c1,c2赋值: c1=a;c2=b 普通以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。 第46页3.5.3 字符数据在内存中存放形式将一个字符常量放到一个字符变

23、量中,并不是把该字符本身放到内存单元中,而是将该字符ASCII码放到存放单元中,而且以二进制形式存放。比如:执行赋值语句c1=a;c2=b;字符aASCII码为97,b为98,在内存中变量c1,c2值如图所表示:既然在内存中,字符数据以ASCII码存放,它存放形式就与整数存放类似,这使得字符型数据和整型数据之间能够通用。9798c1c20110000101100010c1c2第47页字符型数据和整型数据通用性一个字符数据既能够以字符形式输出,也能够以整数形式输出。两种通用形式输出;以字符形式输出时,需要先将存放单元中ASCII码转换成对应字符,然后输出;以整数形式输出时,直接将ASCII码作为

24、整数输出。对字符数据进行算术运算;相当于对它们ASCII码进行整数算术运算。相互赋值;字符数据与整型数据能够相互赋值。第48页两种通用形式输出 main() char c1,c2; c1=97;c2=98; (等价于c1=a;c2=b;) printf(“%c%cn”,c1,c2); printf(“%d%dn”,c1,c2); 将97和98两个整数直接存放到c1和c2内存单元中。 先将字符a 和b化成ASCII码97和98,然后放到内存单元中。二者作用和结果是完全相同程序输出以下:a b97 98第49页对字符数据进行算术运算例3.7 大小写字母转换。main()char c1,c2; c1

25、=a;c2=b; c1=c1-32;c2=c2-32; printf(“%c%c”,c1,c2);运行结果为: A BaASCII码为97,A为65;b为98,B为66。从ASCII代码表中能够发觉:每一个小写字母比它对应大写字母ASCII码大32。C语言允许字符数据与整数直接进行算术运算。第50页相互赋值字符数据与整型数据能够相互赋值。main()int i; char c; i=a; c=97; printf(“%c,%dn”,c,c); printf (“%c,%dn”,i,i);运行结果:a,97 a,97第51页3.5.4 字符串常量前面已提到,字符常量是由一对单引号括起来单个字符。

26、C语言除了允许使用字符常量外,还允许使用字符串常量。字符串常量是一对双引号括起来字符序列。如:“How do you do.”, “CHINA”, “$123.45”都是字符串常量。能够输出一个字符串,如printf(How do you do.); 第52页不要将字符常量与字符串常混同。a是字符常量,“a”是字符串常量,二者不一样。假设C被指定为字符变量: char c; c=a; 是正确; 而 c=“a”; 是错误。c=“CHINA”, 也是错误。不能把一个字符串赋给一个字符变量。 终究为何c=a就是正确,而c“a”就错了呢?第53页3.6 变量赋初值程序中常需要对一些变量预先设置初值。C

27、语言允许在定义变量同时使变量初始化。int a=3; /*指定a为整型变量,初值为3*/ float f=3.56; /*指定f为实型变量,初值为3.56*/ char c=a; /*指定c为字符变量,初值为a*/也能够使被定义变量一部分赋初值。 int a,b,c=5; /*指定a,b,c为整型变量,只对c初始化*/假如对几个变量赋予初值3,应写为:int a=3,b=3,c=3; 不能写成:int a=b=c=3 第54页初始化不是在编译阶段完成(只有在第8章中介绍静态存放变量和外部变量初始化时在编译阶段完成)。如:int a=3; 相当于:int a; /*指定a为整型变量*/ a=3;

28、 /*赋值语句,将3赋给a*/如:int a,b,c=5; 相当于:int a,b,c; /*指定a,b,c为整型变量*/ c=5; /*赋值语句,将5赋给c*/ 第55页3.7 算术运算符和算术表示式3.7.1 C运算符介绍3.7.2 算术运算符和算术表示式 1. 基本算术运算符 2. 算术表示式和运算符优先级与结合性 3. 强制类型转换运算符 4. 自增、自减运算符 5. 相关表示式使用中问题说明第56页3.7.1 C运算符介绍C语言是表示式语言,除了控制语句和输入输出外几乎都是表示式。如:赋值符“”作为赋值运算符,而方括号“”作为下标运算符等。C运算符有13类之多。 第57页C运算符1.

29、 算术运算符(+,-,*,/,%,即加,减,乘,除,求余)2. 关系运算符( ,=,=,!=)3. 逻辑运算符(!,&,|)4. 位运算符(,|,&)5. 赋值运算符(=及其扩展赋值运算符)6. 条件运算符(?,:)7. 逗号运算符(,)8. 指针运算符(*和&)9. 求字节数运算符(sizeof)10.强制类型转换运算符(类型)11.分量运算符(. )12.下标运算符( )13.其它(如函数调用运算符() 运算符详见本书附录III第58页基本算术运算符四则运算: (加法运算符,或正值运算符。如35、3) (减法运算符,或负值运算符。如52、2) *( 乘法运算符。如3*5) /(除法运算符。

30、如5/3) %(模运算符,或求余运算符,%两则应均为整型数据)说明:/运算假如除数或被除数中有一个为负数,则舍入方向是不固定。如5/3有机器上结果为1,有为2。但多数机器采取“向零取整”方法,即5/3=1,-5/3=-1,取整后向零靠拢。第59页算术表示式和运算符优先级与结合性用算术运算符和括号将运算对象(操作数)连接起来,符合C语法规则式子,称C算术表示式。运算对象包含常量、变量、函数。正当C算术表示式如:a*b/c-1.5+a 优先级:若运算对象两侧运算符优先级不一样,则先乘除后加减。 结合性:若一个运算对象两侧运算符优先级相同,则满足结合性规则,自左向右,左结合性(运算对象先与左面运算符

31、结合)。 第60页自增、自减运算符有前置和后置两种形式:前置形式: + +变量名 ,变量名后置形式: 变量名+ , 变量名 功效:对变量值进行自加1(自减1)运算。例:语句+a; 相当于执行a=a+1; 前置形式运算规则:先对表示式中含有前置自增(减)运算符变量进行自加(减)1,然后用这些变量新值参加表示式运算。后置形式运算规则:先用变量原值参加表示式运算,然后对含有后置自加(减)运算符变量进行自加(减)1运算。 第61页main() main()int j,i=3; int j,i=3; j=+i;(相当于i=i+1;j=i) j=i+;(相当于j=i;i=i+1) printf(“%d,%

32、d”,i,j); printf(“%d,%d”,i,j);运行结果:4,4 运行结果:4,3(1)自增运算符()和自减运算符(),只能用于变量,不能用于常量或表示式;(2)和结合方向为“自右至左”。 考虑:若i初值为3,那么print(“%d”,-i+)结果 应该为多少呢?第62页3.8 赋值运算符和赋值表示式1. 赋值运算符2. 类型转换3. 复合赋值运算符4. 赋值表示式第63页1. 赋值运算符赋值符号“”就是赋值运算符,作用是将一个数据赋给一个变量。如“a=3”作用是执行一次赋值操作(或称赋值运算),把常量3赋给变量a。也能够将一个表示式值赋给一个变量。如“a=3+5-8%5”,相当于把

33、结果值5赋给变量a(“a=5”)。第64页2. 类型转换假如赋值运算符两侧类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。第65页3. 复合赋值运算符在赋值符“”之前加上其它运算符,能够组成复合运算符。如:a+=3等价于a=a+3,x%=3等价于x=x%3。注意:赋值符“”右边看作一项。凡是二元运算符,都能够与赋值符一起组成复合赋值符。C语言要求了10种复合赋值运算符:+=,-=,*=,/=,%=,=,&=,=,|= 规则:(1)“=”后边先加括号; (2) “=”前边复制到“=”后边 ;第66页4. 赋值表示式由赋值运算符将一个变量和一个表示式连接起来式子称为“赋值表示式”。普通

34、形式为: 赋值表示式求解过程:将赋值运算符右侧“表示式”值赋给左侧变量。表示式值就是被赋值变量值。上述普通形式中“表示式”还能够是一个赋值表示式。如:a=(b=5)。所以,C语言允许连续赋值。第67页int a,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。第68页3.9

35、逗号运算符和逗号表示式逗号运算符(又称次序求值运算符):,逗号表示式:用逗号运算符把两个表示式连接起来表示式。普通形式为:表示式1,表示式2,.,表示式n逗号表示式值:表示式n值.如:逗号表示式“3+5,6+8”值为14。如:“a=3*5,a*4”,因为赋值运算符优先级高于逗号运算符(逗号运算符在全部运算符中级别最低),所以应先求解a=3*5,再求解a*4,得到逗号表示式值60。第69页一个逗号表示式又能够与另一个表示式组成一个新逗号表示式,如:(a=3*5,a*4),a+5,先计算出a值为15,因为a*4操作并没有改变a值,所以a+5值为20。所以,逗号表示式最终值为20。在许多情况下,使用

36、逗号表示式目标只是想分别得到各个表示式值。逗号表示式最惯用于循环(for)语句。注意:并不是任何地方出现逗号都作为逗号运算符。比如函数参数也是用逗号来间隔,如:printf(“%d,%d,%d”,a,b,c);第70页课堂作业:2.1 指出下面哪些是正当变量名: 123 abc a+b a_b pad ?12 Li_Li *P2.2 a在内存中占 个字节,“a”在在内存中占 个字节.2.3 写出下面程序运行结果: main() char ch; ch=B; /*Bascii码值为66*/ printf(“%c,%dn”,ch,ch) 1 2B 66第71页2.4 写出下面程序运行结果:main

37、() int a=10, b , c , d ; int b,c; a+=6; b = (c=20, 6, a+2 ); printf(a=%d,b=%d,c=%dn,a,b,c); 运行结果:a=16,b=18,c=20第72页2.5写出下面程序运行结果:main() int a=4; int b,c; c=a+(b=2); a+=a-=a*a; printf(%d,%d,%dn,a,b,c); 2.6 写出下面程序运行结果: main() int a,b,c=9; a=3,b=4; c%= a+b; printf(“%dn”,c) 运行结果:-24,2,6运行结果:2第73页2.7 写出下

38、面程序运行结果: main()int i,j,m,n;i=8;j=10;m=+i;n=j+;printf(%d,%d,%d,%dn,i,j,m,n);运行结果:9,11,9,10第74页2.8 写出下面程序运行结果: main()float x=5.4;int i;i=(int)x;printf(”x=%f,i=%dn,x,i);运行结果:x=5.400000,I=5第75页第四章 最简单C程序设计次序程序设计第76页4.1 C语句概述4.2 赋值语句4.3 数据输入输出概念及实现4.4 字符数据输入输出函数4.5 格式输入与输出4.6 次序结构程序设计举例第77页4.1 C语句概述与其它高级

39、语言一样,C语言语句用来向计算机系统发出操作指令。一个语句经编译后产生若干条机器指令。一个实际程序应该包含若干条语句。C语句都是用来完成一定操作任务;申明部分内容不应称为语句。如:int a;不是一个C语句,它不产生机器操作,而只是对变量定义。第78页C程序结构C程序源程序文件1源程序文件2源程序文件n预处理命令全局变量申明函数1函数n函数首部函数体局部变量申明执行语句.第79页C语句分类C语句能够分为以下5类: 1. 控制语句; 2. 函数调用语句; 3. 表示式语句; 4. 空语句; 5. 复合语句;第80页1. 控制语句完成一定控制功效。C只有9种控制语句: if()else (条件语句

40、) for() (循环语句) while() (循环语句) dowhile() (循环语句) continue (结束此次循环语句) break (中止switch或循环语句) switch (多分支选择语句) goto (转向语句) return (从函数返回语句) ( )表示条件,表示内嵌语句。第81页2. 函数调用语句由一次函数调用加一个分号组成一个语句。如:printf(“This is a C statement.”);一次函数调用分号第82页3. 表示式语句由一个表示式组成一个语句;最经典是,由赋值表示式组成一个赋值语句(表示式后面加分号即组成语句)。如:a=3是一个赋值表示式,而

41、a=3;是一个赋值语句。一个语句必须在最终出现分号。任何表示式都能够加上分号而成为语句。如:x+y;是语句,但没有意义(没有将相加之和赋给另一个变量)。表示式能组成语句是C语言一个主要特色。C中大多数语句是表示式语句(包含函数调用语句),所以有些人称C语言为“表示式语言”。第83页4. 空语句 空语句:仅包含一个分号语句,它什么都不做。有时用来做被转向点,或是循环语句中循环体(循环体是空语句,表示循环体什么也不做。) 如:;第84页5. 复合语句 由大括号 括起来语句序列,称为复合语句,或是分程序。 如: z = x + y; t = z / 100; printf(%f,t); 注意:复合语

42、句中最终一个语句最终分号不能忽略不写。 C语言允许一行写几个语句,也能够一个语句拆开写在几行上。第85页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条件不能包含赋值语句)第86页4.3 数据输入输出概念及实

43、现所谓输入输出是以计算机主机为主体而言。从计算机向外部输出设备(显屏,打印机)输出数据称为“输出”;从输入设备(键盘,磁盘)向计算机输入数据称为“输入”。C语言本身不提供输入输出语句,输入和输出操作是由函数来实现。在C标准函数库中提供了一些输入输出函数,比如,printf函数和scanf函数。在使用它们时,千万不要简单地认为它们是C语言“输入输出语句”。printf和scanf不是C语言关键字。完全能够不用printf和scanf这两个名字,而另外编两个函数,另用其它函数名。 第87页C提供函数以库形式存放在系统中,它们不是C语言文本中组成部分。所以各函数功效和名,在各种不一样计算机系统所不一

44、样。有些通用函数(如printf和scanf等),各种计算机系统都提供,成为各种计算机系统标准函数(标准输入输出库一部分)。在程序编译连接时,用户程序与标准文件相连,所以在程序中能够直接使用printf和scanf函数。 注意:在源程序中有printf函数,在编译时并不把它翻译成目标指令,而是在执行阶段中调用已被连接函数库中printf函数。第88页C语言函数库中有一批“标准输入输出函数”,它是以标准输入输出设备(普通为终端设备)为输入输出对象。其中有: putchar(输出字符) getchar(输入字符) printf(格式输出) scanf(格式输入) puts(输出字符串) gets(

45、输入字符串)第89页在使用标准I/O库函数时,要用预编译命令“#include”将“stdio.h”文件包含到用户源文件中。即#include “stdio.h”(或#include )。stdio.h是standart input & output缩写,它包含了标准I/O库相关变量定义和宏定义(相关预编译命令见第九章)。在需要使用标准I/O库中函数时,应在程序前使用上述预编译命令,但在用printf和scanf函数时,则能够不要(只有printf和scanf例外)。预编译命令“#include”都是放在程序开头,所以这类文件被称为“头文件”。第90页4.4 字符数据输入输出函数4.4.1 p

46、utchar函数(字符输出函数)4.4.2 getchar函数(字符输入函数)第91页4.4.1 putchar函数putchar函数作用是向终端输出一个字符。比如:putchar(c)输出字符串变量C值。C能够是字符型变量或整型变量。 例4.1:#include stdio.hmain()char a,b,c;a=B; b=O; c=Y;putchar(a); putchar(b); putchar(c);运行结果:BOY第92页也能够输出控制字符,如putchar(n)输出一个换行符。假如将例4.1程序最终一行改为:putchar(a);putchar(n);putchar(b);putc

47、har(n); putchar(c);putchar(n);则输出结果为:BOY第93页也能够输出其它转义字符,如:putchar(101) (输出字符A)putchar() (输出单引号字符)putchar(015)(输出回车,不换行,使输出 位置移到本行开头) 第94页4.4.2 getchar函数此函数作用是从终端(或系统隐含指定输入设备)输入一个字符。getchar函数没有参数,其普通形式为:getchar()函数值就是从输入设备得到字符。例4.2:#include stdio.h main() char c; c=getchar(); putchar(c); 在运行时,假如从键盘输入

48、字aa (输入a后,按“回车” 键,字符才送到内存)a (输出变量c值a)第95页请注意,getchar()只能接收一个字符。getchar函数得到字符能够赋给一个字符变量或整型变量,也能够不赋给任何变量,作为表示式一部分。比如,例4.2第4、5行能够用下面一行代替:putchar(getchar();也能够用printf函数:printf(%c,getchar();在函数中要用getchar函数,应该在函数前面(或本文件开头)用#include stdio.h”。因为在使用标准I/O库中函数时需要用到“stdio.h”文件中包含一些信息。 第96页4.5 格式输入与输出4.5.1 print

49、f函数(格式输出函数)4.5.2 scanf函数(格式输入函数)第97页4.5.1 printf函数1. printf函数普通格式2. 格式字符第98页printf函数普通格式printf函数作用是:向终端(或系统隐含指定输出设备)输出若干个任意类型数据。注意:putchar只能输出字符,而且只能是一个字符;而printf能够输出多个数据,且为任意类型。第99页普通格式:printf(格式控制,输出列表)如:printf(“%d , %c n” , i,c)格式说明:将数据转换为指定格式输出。普通字符:即需要原样输出字符(逗号,空格和换行符)输出列表:需要输出数据,能够是表示式。第100页例:

50、printf(“a=%d_b=%d”,a,b); 双引号中字符除了“%d”和“%d”以外,还有非格式说明普通字符“a=”、“b=”及空格“_”,它们按原样输出。若a=3,b=4,则输出为:a=3_b=4第101页格式字符对不一样类型数据用不一样格式字符。惯用有以下几个格式字符: (1) d格式符 (6) s格式符 (2) o格式符 (7) f格式符 (3) x格式符 (8) e格式符 (4) u格式符 (9) g格式符 (5) c格式符 第102页d格式符:输出十进制整数%d: 按整型数据实际长度 输出;%md: 输出m位(指定输出字段宽度); (数据位数小于m位时左端补空格,大于m位时按实际

51、长度输出); %ld,%mld:l表示输出“长整型”数据,也能够指定输出字段宽度;一个int型数据能够用%d或%ld格式输出; 注:%后面m(位数控制) 对于其它格式符也适用。第103页例、(表示空格)int i = 123; long j = 123456; printf(%d,%5d,%ld, %8ld ,i ,i , j, j); 输出:123,123,123456, 123456第104页c格式符:输出一个字符一个整数,只要它值在0255之间,也能够用字符形式输出。在输出前,系统会将该整数作为ASCII码转换成对应字符;反之,字符数据也能够用整数形式输出。 例:4.4 main() c

52、har c=a; int i=97; printf(%c,%dn,c,c); printf(%c,%dn,i,i); 能够指定输出字段宽度:printf(“%3c”,c);则输出:_a 输出: a,97 a,97 第105页s格式符:输出一个字符串(1)%s:原样输出字符串;如:printf(“%s”,“CHINA”)输出:CHINA(2)%ms:输出字符串占m列;m全输出m左补空格;(3)%-ms:输出字符串占m列;m,则m自动取n值,即确保n个字符正常输出。第106页例 4.5main() printf(%3s,%7.2s,%.4s,%-5.3sn,CHINA,CHINA,CHINA,CH

53、INA);输出: CHINA, CH,CHIN,CHI m自动取n值,即等价于:4.4s第107页f格式符:以小数形式输出实数(单/双精度)(1)%f:由系统自动指定字段宽度,使整数部分全部输出,并输出6位小数。(2)%m.nf:指定输出数据共占m列,其中由n位小数。若数值长度m,则左端补空格。(3)%-m.nf:同%m.nf,只是输出数值向左端靠,右端补空格。 注意:并非全部数字都是有效数字。 单精度实数有效位数普通为7位,而双精度实数有效位数普通为16位(小数6位)。第108页例4.6main()float x,y; x=111111.111;y=222222.222; printf(“%

54、f”,x+y);运行结果为:333333.328125显然,只有前7位数字是有效数字。第109页例4.7main()double x,y; x=1111111111111.111111111; y=2222222222222.222222222; printf(“%f”,x+y);运行结果为:3333333333333.333010能够看到,最终3位小数(超出16位)是无意义。第110页例: 4.8main() float f=123.456; printf(%f %10f %10.2f %.2f %-10.2fn,f,f,f,f,f); 输出: 123.455994 123.455994 1

55、23.46 123.46 123.46 按原样输出字符因为格式定义而输出字符第111页4.5.2 scanf函数getchar函数只能用来输入一个字符,用scanf函数能够用来输入任何类型多个数据。在前面已初步接触到了scanf函数,在本节中再作详细介绍。 1. 普通形式 2. 格式说明 3. 使用scanf函数时应注意问题第112页普通形式scanf(格式控制,地址表列)“格式控制”含义同printf函数。“地址表列”是由若干个地址组成表列,可能是变量地址,或字符串首地址。 第113页例4.9:用scanf函数输入数据main()int a,b,c;scanf(%d%d%d,&a,&b,&c

56、);printf(%d,%d,%dn,a,b,c);运行时按以下方式输入a,b,c值:3 4 5 (输入a,b,c值)3,4,5 (输出a,b,c值)&a,&b,&c中“&”是“地址运算符”,&a指a在内存中地址。上面scanf函数作用是:按照a,b,c在内存地址将a,b,c值存进去。 第114页见下列图,a,b,c地址是在定义a,b,c之后就确定(在编译阶段分配)。 354acb第115页%d%d%d表示按十进制整数形式输入数据。输入数据时,在两个数据之间以一个或多个空格间隔,也能够用回车键、跳格键tab。下面输入各法: 3 4 5 3 4 5 3(按tab键)4 5用“%d%d%d”格式输

57、入时,不能用逗号作为两个数据间分隔符,以下面输入不正当:3,4,5 第116页格式说明和printf函数中格式说明相同,以%开始,以一个字符结束,中间能够插入附加字符。 格式字符说明d,i用来输入有符号十进制整数。 u用来输入无符号十进制整数。o用来输入无符号八进制整数。x,Xc用来输入单个字符。s输入字符串,将字符串送到一个字符数组中,输入以非空白符开始,以第一个空白符结束,以0作为其最终一个字符。 f用来输入实数,能够用小数形式或指数形式输入。 e,E,g,G与f作用相同,e与f,g能够相互替换(大小写作用相同)。 用来输入无符号十六进制整数(大小写作用相同)。第117页scanf附加格式

58、说明字符字符lh域宽*说明用于输入长整型数据(可用%ld, % lo,%lx,%lu),以及double型数据(用%lf或%le)。 用于输入短整型数据(可用%hd,%ho,%hx)。 指定输入数据所占宽度(列数),域宽应为正整数表示本输入顶在读入后不赋给对应变量。 第118页4.6 次序结构程序设计举例例4.10 输入三角形三边长,计算其面积。第119页算法:问题求解方法与步骤.算法表示:1) 自然语言: Step1:输入a,b,c Step2:计算s=(a+b+c)/2 Step3:计算面积area Step4:输出面积area2) 传统流程图计算面积area输出面积area输入a、b、c

59、计算s结束开始第120页3) 结构化流程图(N-S图)4)伪代码 (1) (用英语描述) begin(算法开始) input a,b,c s(a+b+c)/2 area s(s-a)(s-b)(s-c) output area end5)计算机语言计算面积area输出面积area输入a、b、c计算s第121页1.设计算法、 设三边长a、b、c, 面积area算法是:2.画出流程图。求平方根函数sqrt() 在math.h中定义。计算面积area输出面积area输入a、b、c计算s结束开始第122页#include math.h main() float a,b,c,s,area; scanf(

60、%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.2fn,a,b,c); printf(area = %7.2fn,area); 运行情况以下: 3,4,6 a=3.00, b=4.00, c=6.00 area =5.33 第123页例4.11输入一个大写字母,改为小写字母输出。#includemain()char c1,c2; c1=getchar(); printf(“%c,%dn”,c1,c1); c2=c1+32; printf(

温馨提示

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

评论

0/150

提交评论