语言案例教程书稿套课件幻灯片完整版ppt教学教程最全电子讲义(最新)_第1页
语言案例教程书稿套课件幻灯片完整版ppt教学教程最全电子讲义(最新)_第2页
语言案例教程书稿套课件幻灯片完整版ppt教学教程最全电子讲义(最新)_第3页
语言案例教程书稿套课件幻灯片完整版ppt教学教程最全电子讲义(最新)_第4页
语言案例教程书稿套课件幻灯片完整版ppt教学教程最全电子讲义(最新)_第5页
已阅读5页,还剩313页未读 继续免费阅读

下载本文档

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

文档简介

1、第1章 C语言概述1.1 程序设计语言及其发展1.2 C语言的标准1.3 C语言的程序结构1.1 程序设计语言及其发展计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。1、机器语言 写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。机器语言,是第一代计算机语言。2、汇编语言 用一些简洁的英文字母、符号串来替代一个特定的指令的二进制串,比如,用“ADD”代表加法,“MOV”代表数据传递等等,这种程序设计语言就称为汇编语言,即第二代计算机语言。3、高级语言 高级语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用

2、。1.2 C语言的标准ANSI C / C89标准C99标准C11标准 (C语言的最新标准)1.3 C语言的程序结构例:要求在屏幕上输出Welcome to C world!#include /*预处理命令*/ void main( ) /*主函数*/printf(Welcome to C world!n); /*格式输出函数*/1.3.1 简单的C程序案例程序说明 (1)在程序的第二行main是C语言程序中的“主函数”的名字。 main前面的void 表示此函数是“空类型”,即执行此函数后不产生函数值。C语言中,每个程序都必须有一个main函数,它是每一个C语言程序的执行起始点(入口点)也是

3、程序执行的结束点。 (2)用括起来的是main的函数体。main函数中的所有操作(或:语句)都在这一对之间。也就是说main函数的所有操作都在main函数体中。#include /*预处理命令*/ void main( ) /*主函数*/ printf(Welcome to C world!n); /*格式输出函数*/ 程序说明 (3)本例主函数中只有一条语句,printf是C语言库函数中的格式输出函数,功能是把该语句中双撇号内的字符原样输出(显示在屏幕上),“n”是换行符,即在输出“Welcome to C world!.”后回车换行。语句最后必须有一个分号。 (4)在C语言中使用标准函数库

4、中的输入输出函数时,编译系统要求程序提供有关信息(即对这些输入输出函数的声明),程序第1行“#include ”的作用就是用来提供这些信息的,“stdio.h”是C编译系统提供的一个标准输入输出的库文件。include是文件包含命令。#include /*预处理命令*/ void main( ) /*主函数*/ printf(Welcome to C world!n); /*格式输出函数*/ 程序说明(5)“/* */”表示注释部分,注释可以用汉字或英文字符表示,可以出现在语句的后面,也可以单独成为一行。在程序编译和运行过程中,不起作用,只是便于别人读懂程序。#include /*预处理命令*

5、/ void main( ) /*主函数*/ printf(Welcome to C world!n); /*格式输出函数*/ 例 求两数中的最小值#include void main( ) /* 主函数 */ int a , b, c; /* 定义变量 */scanf(%d, %d, &a, &b); /* 输入数 */c=min(a, b); /* 调用函数 */printf(min=%dn, c); /* 输出 */ int min(int x, int y) /* 定义函数 */ int z; /* 定义局部变量 */ if (xy) z=y; else z=x; return(z);

6、 /* 返回z值*/ 经编译后运行如下: 14, 4 min=4再次运行: 6,29 min=6程序说明 (1)本程序包括两个函数:主函数main()和子函数min()。min函数的作用是将x,y中较小的数送给变量z,return语句的作用是将z的值返回给主函数main。返回值是通过函数名min带回给main中的调用处。 (2)主函数中的scanf()是系统给出的标准输入函数,通过它输入a和b的值,&a, &b中的“&”是取地址符,在此功能是将输入的值分别送入变量a和b的地址所标志的存储单元中,即输入给变量a和b。“%d, %d”是输入输出的格式字符串,用来指定输入输出数据的类型和格式。 (3

7、)main函数中第4行是调用min函数,在调用时将实际参数a,b的值送给min函数中的形式参数x和 y。在min函数后得到一个返回值(即min函数中的变量z的值),把这个值送给变量c,然后输出变量c的值。 通过上述两个例子我们可以看到:(1)C程序是由函数构成的。一个程序至少含有一个main主函数。也可以包含一个主函数和若干个子函数。函数是C语言的基本单位。被调用的子函数可以是系统给出的库函数,也可以是用自己定义的函数。(2)一个函数由两部分组成:函数的首部和函数体。(3)main函数通常位于程序之首,实际上它位于程序的开头、 最后及函数与函数之间均是合法的, 但不管在什么位置,一个C程序总是

8、从main函数开始执行的。(4)C程序书写格式自由,一行内可以写几个语句,一个语句可以分写在多行上。(5)C语言本身没有输入输出语句,输入输出都由函数实现,因此在程序的开始必须有头文件“include ”。 (6)可以用/* */对C程序中的任何部分作注释,程序中加入必要的注释可增加程序的可读性。(7)C语言程序中每一条语句结束后都必须加一个分号。分号是C语言语句的组成部分。 1.3.2 C程序的基本结构(1)C语言程序是由函数组成的。(2)源程序中可以有预处理命令,预处理命令通常放在源文件或源程序的最前面。(3)每一个语句都必须以分号结尾,但预处理命令、函数头和右花括号“”之后不加分号。(4

9、)注释不是程序的必须部分,在程序执行时注释不起任何作用。(5)在C语言中,虽然一行可写多个语句,一个语句也可占多行,但建议一行只写一个语句。(6)一般采用缩进格式书写程序,以提高程序的可读性和清晰性。1.3.3 集成开发环境(IDE) 集成开发环境提供编程时所必需的工具,这些工具有编辑器、编译器和调试器,它们集成在一个软件包内供程序员使用。在早前的DOS环境下主要的C语言集成开发环境有TC2.0、Turbo C3.0和Borland c。在Windows环境下主要使用Visual C 6.0,Visual C 6.0既可以对C进行编译,也可以对C进行编译。本书的示例程序均可在Visual C

10、6.0集成环境下进行编辑、编译和运行。第2章 C程序设计的基本知识2.1 数据类型2.2 标识符、常量和变量2.3 运算符和表达式2.1 数据类型2.2 标识符、常量和变量 标识符是起标识作用的一类符号。用来标识变量名、符号常量名、函数名、数组名、类型名等实体(程序对象)的有效字符序列。 在C语言中,一个合理的标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。例如:sum,average,_total,Class,day,stu_name,p4050为合法的标识符,M.D.John,$123,#33,3D64,ab为不合法的标识符。2.2.1 标识符使用标识符时需要注

11、意:(1)不能使用C语言中的关键字做为标识符。(2)标识符定义时不要太长。(3)大小写敏感。(4)见名知义。(5)标识符和关键字之间必须用空格分隔。2.2.2 常量和变量(1)整型常量 整型常量也称为整型常数或整数。按进制可分为十进制整数,八进制整数和十六进制整数。 十进制整数十进制数:与数学上的整数表示相同。如123,-456,0等。 八进制整数八进制数:以0开头,后面跟07的数字。如0123,054等。十六进制整数十六进制数:以0 x(或0X)开头,后面跟09和af(或AF)的数字。其中a代表10,b代表11,其余类推。如0 x123,0 x12af,0 xAE2。1、常量 整型常量按其值

12、所在的范围可分为短整型(short int)、基本型(int)和长整型(long int)和无符号型(unsigned)。 在整数后加u或U代表无符号整型数,如:56U,13u。加l或L代表长整型数,如23L,45l。(2)实型常量小数形式实数的小数形式是由数字,小数点组成(必须有小数点)。如123.456, -21.37。整数12用实数表示必须写成12.0或12.。 指数形式实数的指数形式也称为科学计数法。一个实数的指数形式分成尾数部分和指数部分。尾数部分可以是整数形式或小数形式,指数部分是一个字母“e”后跟一个整数。如123e+01,-456.78e-01, 0e0等。在书写时“e”与“E

13、”完全等价。“e”前面必须有数字,“e”后面必须是整数。规范化的指数形式。在字母e或E之前的小数部分,小数点左边应当有且只能有一位非0数字。用指数形式输出时,是按规范化的指数形式输出的。例如:2.3478e2、3.0999E5、6.46832e12都属于规范化的指数形式。(3)字符常量用单引号直接括起来可显示的字符常量,如a、x、D、? 、$等都是字符常量。用单引号括起来的由反斜杠()引导的转义字符,主要用于控制信息。(4)字符串常量 字符串常量是一对双引号括起来的字符序列,简称为字符串。字符的个数称为其长度。例如: how are you, C program都是字符串常量。2、变量 在程序

14、运行过程中其值可以变化的量我们称之为变量。每一个变量都对应计算机内存中相应的存储单元。在该单元中存放变量的值。在程序运行过程中其值可以变化的量我们称之为变量。每一个变量都对应计算机内存中相应的存储单元。在该单元中存放变量的值。(1)变量的定义常量可以直接使用,而变量则必须先定义后使用。(2)变量的初始化程序中常需要对一些变量预先设置初值。(3)基本变量类型数据长度和取值范围会随机器的CPU类型和C编译器的不同而不同。下表中列出了几种基本数据类型在不同实现环境中的字节长度和取值范围。基本数据类型、长度、值域对照表 定义整型变量可以有int,long int,sort int三种方法。在定义三种不

15、同整型变量时,都可以加上修饰符unsigned和signed,分别表示无符号数和有符号数。若不的指定则默认为有符号数,这样看,signed是可以省略的。归纳起来,在C语言中可以定义和使用以下6种整型变量。 signed int 有符号基本整型unsigned int 无符号基本整型signed short int 有符号短整型unsigned short int 无符号短整型signed long int 有符号长整型unsigned long int 无符号长整型 整型变量 有符号整数对于许多运算都是很重要的。但是它所能表达的最大数的绝对值只是无符号数的一半。因此在实际应用中,为了充分利用变

16、量的数值范围,对于只存入正数的变量(如学号、库存量、存款额等),在需要时可以将变量定义为“无符号”类型。这样比一般整型变量中正数的范围扩大一倍。 计算机中,数据都是以二进制形式存储的,整型变量也不例外,它是以补码方式存储。有符号数据的第一位为符号位,0表示正数,1表示负数,而无符号数据的第一位为数据位。例如:定义一个整型变量i=10,在内存中的存放方式如图。 计算机不论对正数和负数都按“补码”形式存放到存储单元。对于正数来说,补码就是该数的“原码”(即该数的二进制形式)。如10的原码为0,000000000001010,它的补码为0,000000000001010。负数的补码不是它的原码。而是

17、在“原码”的基础上取反加1。如:-10的原码为1,000000000001010。取反后变为1,111111111110101。 最后得到的反码基础上加1即为补码1,111111111110110。 实型变量分为单精度(float)、双精度(double)。单精度数据一般提供7位有效位数,双精度提供1516位有效位数。在内存中的存放形式与整数存储方式不同,实型数据是按照指数形式存储的。系统将实型数据分为小数部分和指数部分,分别存放。 实型变量 由于实型变量是用有限的存储单元存储的,因此提供的有效数字是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。实型数据存放示意图#include

18、 void main() float pi=3.141592612; printf(pi=%fn,pi);运行结果为:pi=3.141593 因为pi是单精度浮点型变量,只能提供7位有效数字,因此后面几位被忽略了。若要提高数据的精度,可以将变量定义为双精度类型,得到1516位有效位数,这样就不会使精度损失了。例:实型数据的舍入误差。 字符型变量是用来存放字符数据,同时只能存放一个字符。所有编译系统都规定以一个字节来存放一个字符,或者说,一个字符变量在内存中占一个字节。存储形式以字符的ASCII码存储,例如:字符a,它的ASCII码是97,它在内存中的存储形式为:01100001。可以看出字符数

19、据以ASCII码存储的形式与整数的存储形式类似,这使得字符型数据和整型数据之间可以通用(当作整型量)。 字符型变量 可以将整型量赋值给字符变量,也可以将字符量赋值给整型变量。 可以对字符数据进行算术运算,相当于对它们的ASCII码进行算术运算。 一个字符数据既可以以字符形式输出(ASCII码对应的字符),也可以以整数形式输出(直接输出ASCII码)。 注意:尽管字符型数据和整型数据之间可以通用,但是字符型只占1个字节,因此不能把一个大数存到字符变量中。具体表现为:#include void main() char c1,c2; c1=A; c2=B; c1=c1-32; c2=c2-32;pr

20、intf(%c=%d n,c1,c1);printf(%c=%d n,c2,c2);运行结果为:A=33B=34例:小写字母转换成大写字母。3、数据类型转换 显式类型转换也就是采用强制手段进行数据类型转化。强制类型转换是通过类型转换运算来实现的。其一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。(1)显式类型转化说明:在使用强制转换时应注意以下问题:类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。无论是强制转换或是隐式转换,都只是为了本次运算的需要

21、而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。includevoid main()float f=5.75;printf(int)f=%d,f=%.2fn,(int)f,f); 运行结果为:(int)f=5,f=5.75本例表明,f虽强制转为int型,但只在运算中起作用,是临时的,而f本身的类型并不改变。因此,(int)f的值为5(删去了小数)而f的值仍为5.75。例:强制转换示例。 隐式转换发生在不同数据类型的混合运算时,由编译系统自动完成。自动转换遵循以下规则: (1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算。 (2)转换按数据长度增加的方向进行

22、,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。 (3)所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。 (4)char型和short型参与运算时,必须先转换成int型。 (5)在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。(2)隐式转换includevoid main()float pi=3.14159;int s,r=5;s=r*r*pi;print

23、f(s=%dn,s);运行结果为::s=78 本例程序中,pi为实型;s,r为整型。在执行s=r*r*pi语句时,r和pi都转换成double型计算,结果也为double型。但由于s为整型,故赋值结果仍为整型,舍去了小数部分。 例:隐式转换示例2.3 运算符和表达式1.基本运算符(1)加法运算符“+”,加法运算符为双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有右结合性。(2)减法运算符“-”,减法运算符为双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。(3)乘法运算符“*”,双目运算,具有左结合性。(4)除法运算符“/”,双目运算具有左结合性。

24、参与运算量均为整型时, 结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。(5)求余运算符(模运算符)“%”双目运算,具有左结合性。要求参与运算的量均为整型。求余运算的结果等于两数相除后的余数。一般情况,余数的符号与被除数符号相同。2.3.1 算数运算符和表达式includevoid main()printf(%d,%dn,20/7,-20/7);printf(%f,%fn,20.0/7,-20.0/7);运行结果为:2,-22.857143,-2.857143 本例中,20/7,-20/7的结果均为整型,小数全部舍去。而20.0/7和-20.0/7由于有实数参与运算,因此

25、结果也为实型。 例:除法运算符示例。includevoid main()printf(%d,%d,%d,%dn,7%4,7%-4,-7%4,-7%-4);运行结果为:3,3,-3,-3 本例说明参加求余运算左侧的数据为正则取余结果为正,左侧的数据为负则取余结果为负。 例:求余运算符示例。 *,/,%运算的优先级别相同,高于+,-运算;+, -优先级相同;同一优先级按从左到右顺序计算。要改变运算顺序只要加括号就可以了,括号全部为圆括号,必须注意括号的配对。例如:3+8%-3-2先计算8%-3结果为2,再计算3+2-2,按从左到右顺序计算结果为3。2.运算符优先级 它们的作用是使变量的值增加或减少

26、1,例如:i+ ,i- 在i参与运算后,i的值再自增(减)1。+i, -i 在 i参与运算前,i的值自增(减)1。 粗略的看,+i,i+的作用相当于i=i+1。但+i和i+不同之处在于+i是先执行i=i+1后,再使用i的值,而i+是先使用i的值后,再执行i=i+1。3.自增,自减运算符includevoid main()int i=8;printf(%dn,+i);printf(%dn,-i);printf(%dn,i+);printf(%dn,i-);printf(%dn,-i+);printf(%dn,-i-);printf(%dn,i); 例:自增、自减运算符示例。运行结果:988989

27、8 变量i变化过程为:i的初值为8,第2行i加1后输出故为9;第3行减1后输出故为8;第4行输出i为8之后再加1(为9);第5行输出i为9之后再减1(为8) ;第6行输出-8之后再加1(为9);第7行输出-9之后再减1(为8);第8行输出i值8. 例:自增、自减运算符示例。 算术表达式是由算术运算符和括号连接起来的、符合C语法规则的式子。运算对象包括常量、变量、函数等。单个的常量、变量、函数可以看做是表达式的特例。 例如:a+b (a*2)c (x+r)*8-(a+b)7 +i sin(x)+sin(y) 4算术表达式 1.赋值运算符及表达式 简单赋值运算符即“=”,又称为赋值号。由赋值运算符

28、组成的表达式称为赋值表达式。一般形式: 变量赋值符表达式 赋值表达式的求解过程:将赋值运算符右侧的表达式的值赋给左侧的变量,同时整个赋值表达式的值就是刚才所赋的值。2.3.2 赋值运算符和表达式 2.复合赋值运算符 在赋值符“=”之前加上某些运算符,可以构成复合赋值运算符,复合赋值运算符可以构成赋值表达式。C语言中许多双目运算符可以与赋值运算符一起构成复合运算符,即:+=,-=,*=,/=,%=,=,&=,|=,= 复合赋值表达式一般形式: =等价于:= 1.关系运算符 C语言提供6种关系运算符:2.3.3 关系运算符和表达式 关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低

29、于算术运算符,高于赋值运算符。 在六个关系运算符中,=的优先级相同,高于=和!=,=和!=的优先级相同。 例如: ca+b 等价于 c(a+b) ;关系运算符的优先级低于算术运算符 ab=c 等价于(ab)=c ;“”优先级高于“=” a=bc 等价于 a=(bc) ;“c 等价于 a=(bc) ;关系运算符的优先级高于赋值运算符。 2. 关系表达式 用关系运算符将两个表达式连接起来的式子,称为关系表达式。 关系表达式的一般形式为: 例如下面者是合法的关系表达式: a+bc-d x3/2 a+10的值为“真”,即为1。(a=3)(b=5)由于35不成立,故其值为假,即为0。 1.逻辑运算符 语

30、言中提供了三种逻辑运算符,优先级从高到低为: ! 非运算 & 与运算 | 或运算 运算符&和|均为双目运算符。具有左结合性。非运算符!为单目运算符,具有右结合性。2.3.4 逻辑运算符和表达式 逻辑运算的值也为“真”和“假”两种,用1和0 来表示。其求值规则如下: (1)与运算&参与运算的两个量都为真时,结果才为真,否则为假。 (2)或运算|参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。 (3)非运算!参与运算量为真时,结果为假;参与运算量为假时,结果为真。逻辑运算的真值表 2.逻辑表达式 用逻辑运算符将关系表达式或逻辑量连接起来的式就是是逻辑表达式。 逻辑表达式的一般

31、形式为: 1. 条件运算符和表达式 条件运算符是C语言中唯一具有三个操作数的运算符,它的表达式的一般形式是: ? : 其含义是:先求表达式1的值,如果为真(非零), 则求表达式2的值,并把它作为整个表达式的值;如表达式1的值为假(零), 则求表达式3的值, 并把它作为整个表达式的值。 2.3.5 其他运算符和表达式 2. 逗号运算符和表达式 语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。 其一般形式为: 表达式1,表达式2,表达式n 其求值过程是分别求n个表达式的值,并以表达式n的值作为整个逗号表达式的值。 对于逗号表达式还要说明两

32、点: (1)程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。 (2)并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。第3章 顺序结构3.1 C语言的语句3.2 数据输入、输出函数3.3 顺序结构3.1 C语言的语句在C语言中,根据语句的功能不同,可将语句划分为以下五类:1.表达式语句表达式语句由表达式加上分号“;”组成。执行表达式语句就是计算表达式的值。例如:x=y+z是赋值表达式,而x=y+z;是一个赋值语句。可以看到一个语句最后必须有一个分号,分号是语句不可缺少的一个部分。又例如:x+y;

33、是一个语句,作用是完成x+y的操作,是合法的,但并不是把x+y的和赋给另一个变量,因此它并没有实际意义。2.函数调用语句函数调用语句由一个函数调用加上分号组成。例如:printf(C Program);调用库函数,输出字符串。3.控制语句控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。4.复合语句把多个语句用括号括起来组成的一个语句称复合语句。在程中应把复合语句看成是单条语句,而不是多条语句,例如 x=y+z;a=b+c;printf(%d%d,x,a);是一条复合语句。复合语句内的各条语句都必须以分号“;”结尾。3.2 数据输入、输出函数1. printf函

34、数的一般形式为:printf(“格式控制字符串”,输出表列)如:printf(%d,%cn,i,c);3.2.1 格式输出函数 printf()括号内包含两部分:(1)“格式控制”是用双撇号括起来的字符串,用于指定输出格式。它由格式声明和普通字符两种信息组成。格式声明。格式声明是由%和格式字符组成,它的作用是将输出的数据转换为的指定的格式输出。如%d、%c等。普通字符。普通字符即需要原样输出的字符,在显示中起提示作用。例如上面printf函数中双撇号内的逗号和换行符。(2)“输出表列”是需要输出的一些数据,可以是常量、变量或表达式。下面是printf函数的例子:printf(a=%d b=%d

35、,a,b);格式声明 输出表列在此例中,双撇号内的字符,除有两个“d”以外,还有非格式声明的普通字符(如a=,b=),它们输出时全部原样输出。或a,b的值分别是3,6,则输出结果为: a=3 b=6例3.1:十进制、八进制、十六进制及无符号数据的输出。#includevoid main()int a=-1;printf(%d,%o,%x,%u,a,a,a,a);分析:-1的原码:1000,0000,0000,0001。在内存中的补码表示为: 1111,1111,1111,1111,输出为:-1,177777,ffff,65535-1是十进制,177777是八进制,ffff是十六进制,65535

36、为无符号整数。3.2.2 格式输入函数scanf()1.scanf函数的一般形式为:scanf(格式控制字符串,地址表列);“格式控制字符串”的含义与printf类似,它指定输入数据项的类型和格式。“地址列表”是由若干个地址组成的列表,可以是变量的地址(&变量名)或字符串的首地址。例3.5:输入、输出三个整数。#include void main()int a,b,c;scanf(%d%d%d,&a,&b,&c);printf(a=%d,b=%d,c=%d,a,b,c); 在本例中,&是地址运算符,&a指变量a的地址。scanf的作用是将键盘输入的数据保存到&a,&b,&c为地址的存储单元中,

37、即变量a,b,c中。 在“%d%d%d”表示要按十进制整数形式输入3个数据。输入数据时,在两个数据之间输入一个或多个的空格、制表符(Tab)或回车键作为间隔。如: 7 8 9 或7 89 或 7(按Tab键)8 93.2.3 字符输出函数putcharputchar 函数其一般形式为:putchar(字符型数据)功能:在显示器上输出单个字符。 例如:putchar(A);输出大写字母A。putchar(x);输出字符变量x的值putchar(n); 输出一个换行符,使输出的当前位置移到下一行的开头。 3.2.4 字符输入函数getchargetchar函数的一般形式为: getchar();功

38、能是从键盘上输入一个字符。如:c=getchar();从键盘输入A,则将A赋值给c。注意:getchar函数只能接受单个字符,输入数字也按字符处理。输入多于一个字符时,只接收第一个字符。3.2.4 字符输入函数getchar例3.6:输入输出字符。#include void main()char a,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar(n); 运行结果:DOG (连续输入DOG后,按回车键,字符才送到内存中的存储单元)DOG (输出变量a,b,c的值)3.3 顺序结构#

39、有了上面的基础,就可以顺利地编写具有顺序结构的程序了。在顺序结构中,程序的执行是按语句出现的先后顺序进行的,并且每条语句都会被执行到。如图3-1所示,其中A和B两个框是顺序执行的。即先执行A框所指的操作,再执行B框所指的操作。例3.7 输入三个小写字母,输出其ASCII码和对应的大写字母。分析:前面已经介绍如何把小写字母转换成大写字母(大写字母的ASCII码比小写字母的ASCII码小32),利用输入输出函数即可以解决该题。程序代码如下:#includevoid main()char a,b,c;scanf(%c%c%c,&a,&b,&c);printf(%d,%d,%dn%c,%c,%cn,a

40、,b,c,a-32,b-32,c-32);运行情况如下:a c e 97,99,101A,C,E第4章 选择结构4.1 用if语句实现选择结构4.2 switch语句4.1.1 if语句的基本形式1简单的if语句例4.1:编写程序,用来判断某一年是否为闰年。分析:前面在讲逻辑表达式时,我们已经给出判断闰年的表达式,即:(year%4=0&year%100!=0)|year%400=0如果表达式的值为真,则是闰年,输出“年为闰年”,否则不输出。这种程序的执行过程如图4-1,对于这种根据条件确定是否执行命令的问题,C语言提供了单分支结构解决这一问题。形式如下:真表达式语句假面具图41 if(表达式

41、) 语句执行过程:当表达式的值为真,则执行其后的语句,否则不执行该语句。说明:(1)if语句后的表达式一般为关系表达式或逻辑表达式,但不仅仅局限这两种,也可以是其它类型的表达式。只要表达式的值不为零,则执行下面的语句。(2)语句必须是单个语句,若想执行多条语句时,必须用括起来,变成一条复合语句。程序如下:#includevoid main() int year;printf(输入year:);scanf(%d,&year);if(year%4=0&year%100!=0)|year%400=0)printf(%d年是闰年n,year);例4.3:给定一个五位数,判断它是不是回文数。即12321

42、是回文数,个位与万位相同,十位与千位相同。分析:验证一个数是否是回文数,首先要从5位数中将每一位分解出来。根据除号运算符的特点两个整数相除,商为整数。可以用12321/10000得到万位数的“1”,结合取余运算得到其他位。a=x/10000; /*分解出万位*/b=x%10000/1000; /*分解出千位*/c=x%1000/100; /*分解出百位*/d=x%100/10; /*分解出十位*/e=x%10; /*分解出个位*/程序如下:include void main() long a,b,c,d, x; scanf(%ld,&x); a=x/10000; b=x%10000/1000;

43、 c=x%100/10; d=x%10; if (d= =a&c= =b) /*个位等于万位并且十位等于千位*/ printf(%ld是回文数n,x); else printf(%ld不是回文数n,x);运行结果:1232112321是回文数再次运行:1231212312不是回文数4.1.2if语句的嵌套例4.4: 判别键盘输入字符的是哪种字符(控制字符、数字字符、大写字母、小写字母还是数字字符)。分析:解此题的关键是写出判断字符的选择结构。该选择结构可以用嵌套的形式来实现,见图4-3。C语言提供的if语句中可以包括另一个if语句,这就是if语句的嵌套,可以用它实现嵌套的选择结构。其一般形式为

44、:if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 else if(表达式4) 语句4 else 语句5 说明:if语句嵌套时,必须注意if和else的配对关系,即else总是与它上面最近的未配对的if配对。程序如下:#includevoid main() char c;c=getchar();if(c=0&c=A&c=a&c=z)printf(这是一个小写字母n);elseprintf(这是一个其它字符n);运行情况如下:E这是一个大写字母除上面所讲的一种嵌套外,if语句嵌套还有很多形式, 在嵌套内的if语句可能又是if-else型的,这将会出

45、现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。例如:if(表达式1)if(表达式2)语句1;else 语句2;程序设计者把else写在与第一个if(外层if)同一列上,希望第一个else与第一个if对应,那么 else究竟是与哪一个if配对呢?是与if(表达式1) 配对,还是应理解为与if(表达式2) 配对?为了避免这种二义性,语言规定,else 总是与它前面最近的if配对,因此对上述例子应按后一种情况理解。即与if(表达式2) 配对。注意若编程要求上述语句else与if(表达式1) 配对时,可用一对大括号 将if(表达式2) 语句1括起来,则成为如下形式:if(

46、表达式1)if(表达式2)语句1 else 语句2此时else与if(表达式1) 配对。4.2 switch语句多分支可以使用嵌套的if语句处理,但如果分支较多,嵌套的if语句层数多,程序冗长,降低了程序的可读性,也给程序的书写带来一定的麻烦,因此,经常用多路分支选择来处理。即switch语句。其一般形式为:switch(表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default : 语句n+1执行过程:首先计算switch后面括号内的表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的

47、语句,然后不再进行判断,继续执行后面所有case后的语句。 如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。说明:(1)switch括号后面的表达式,允许为任何类型。(2)当“表达式”的值与某个case后面的常量表达式的值相等时,就执行此case后面的语句。如果表达式的值与所有case中的常量表达式都不匹配,就执行default后面的语句。(3)各个case的常量表达式的值必须互不相同,否则出现矛盾现象。(4)各个case,default出现的顺序不影响执行结果。(5)执行完一个case后面的语句后,流程控制转移到下一个case中的语句继续执行。此时,“cas

48、e 常量表达式”只是起到语句标号的作用,并不在此处进行条件判断。例.6:输入某年某月,输出该月的天数,要求用switch结构实现。分析:每年的1、3、5、7、8、10、12七个月的天数是一定的,为31天4、6、9、11四个月的天数也是固定的,为30天;2月的天数不固定,闰年为29天,平年为28天。设整型变量flag代表控制信息。flag1表示程序正确执行,输出给定月份数;flag0表示输入数据错误,输出提示信息。程序如下:#includevoid main()int days,month,year,flag;printf(nplease input year,month:n);scanf(%d

49、,%d,&year,&month);flag=1;switch(month) case 1: case 3:case 5:case 7:case 8:case 10case 11:days=30;break; case 2:if(year%400=0|(year%4=0&year%100!=0) /*判断是不是闰年*/days=29; else days=28;break;default:flag=0;if(!flag) printf(error input datan);else printf(days=%dn,days);运行结果:please input year,month:1997,

50、2days28第5章 循环结构程序设计5.1 While循环结构5.2 doWhile循环结构5.3 for循环结构5.4 循 环 嵌 套5.5 break和continue语句在循环体中的作用5.1 While循环结构while语句的一般形式为:while(表达式) 语句其中表达式是循环条件,语句为循环体。while语句的功能:计算表达式的值,当值为真(非0)时, 执行循环体语句。 例 用while语句求 ,即123100。#include void main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%dn,sum);5.

51、2 doWhile循环结构do-while语句的一般形式为: do 语句while(表达式);其中语句是循环体,表达式是循环条件。do-while语句的功能是:先执行循环体语句一次,再判别表达式的值,若为真(非0)则继续循环,否则终止循环。 例 用do-while语句求 ,即123100#includevoid main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(%dn,sum);5.3 for循环结构其一般形式为: for(表达式1;表达式2;表达式3) 语句 for语句的执行过程如下:(1)首先计算表达式1的值。(

52、2)再计算表达式2的值,若值为真(非0)则执行循环体一次,然后执行第(3)步。若为“假”,则结束循环,转到第(5)步。 (3)求解表达式3。(4)转回上面第(2)步骤继续执行。(5)循环结束,执行for下面的语句。例 用for语句求 ,即123100。#includevoid main() int i,sum=0;for(i=0;i=100;i+)sum+=i; printf(%dn,sum);5.4 循 环 嵌 套一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。例5.7 编程序,输出以下图形。 * *#includevoid main( )

53、int i,j,k;for(i=1;i=3;i+)for(j=1;j=3-i+5;j+) printf( );for(k=1;k=2*i-1+5;k+)if(k=5) printf( );else printf(*);printf(n);5.5 break和continue语句在循环体中的作用break语句的一般形式为:break; 说明:(1)break语句只用于循环语句或switch语句中。在循环语句中,break常常和if语句一起使用,表示当条件满足时,立即终止循环。注意break不是跳出if语句,而是循环结构。(2)循环语句可以嵌套使用,break语句只能跳出(终止)其所在的循环,而不

54、能一下子跳出多层循环。例 输入一个整数m,判断它是否为素数(只能被1和它本身整除的数)。#includevoid main()int m,i;scanf(%d,&m);for(i=2;im-1) printf(%d是素数n,m); elseprintf(%d不是素数n,m);5.5 break和continue语句在循环体中的作用continue语句一般形式为:continue;其作用为:结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环条件的判断与执行。例:把100200之间能被3和5同时整除的数输出。#includevoid main()int n; for(

55、n=100;n=200;n+) if(!(n%3=0&n%5=0) continue; printf(%4d,n); 第6章 编译预处理6.1宏定义6.2 文件包含6.1宏定义6.1.1 无参宏定义无参宏定义的一般格式为:#define 标识符 语言符号字符串其中:“#”表示这是一条预处理命令;“define”为宏定义命令;“标识符”为所定义的宏名,通常用大写字母表示,以便于与变量区别;“语言符号字符串”可以是常数、表达式、格式串等。例6.2#include #define M (a*a+3*b)void main() int s; s=3*M+4*M+5*M; printf(s=%dn,s)

56、;对于宏定义还要说明以下几点:(1)宏名一般用大写字母表示,以示与变量区别,但这并非是规定。 (2)宏定义不是语句,所以不能在行尾加分号。否则,宏展开时,会将分号作为字符串的1个字符,用于替换宏名。6.1.2带参数的宏定义带参宏定义的一般形式为:#define 宏名(形参表) 字符串 带参宏调用的一般形式为:宏名(实参表); 例6.3#include #define MAX(a,b) (ab)?a:bvoid main() int x,y,max; printf(input two numbers: ); scanf(%d%d,&x,&y); max=MAX(x,y); printf(max=

57、%dn,max);对于带参的宏定义有以下问题需要说明:(1) 带参宏定义中,宏名和形参表之间不能有空格出现。(2) 在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。(3)在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。6.2 文件包含文件包含处理命令的格式:include “包含文件名” 或 include 其功能是把指定的文件插入该命令行位置取代该命令行, 从而把指定的文件和当前的源程序文件连成一个源文件。对文件包含命令还要说明以下几点:(1)包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。例如以下写法都是允许的:#include stdio.h#includ

58、e 这两种形式是有区别的:使用尖括号表示在包含文件目录中去查找(包含目录是由用户在设置环境时设置的), 而不在源文件目录去查找; 使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找。 用户编程时可根据自己文件所在的目录来选择某一种命令形式。(2) 一个include命令只能指定一个被包含文件, 若有多个文件要包含,则需用多个include命令。(3)文件包含允许嵌套,即在一个被包含的文件中又可以包含另一个文件。第7章 函 数 7.1 函数的定义 7.2函数调用7.3 函数的返回值7.4 函数的说明7.1 函数的定义 1.无参函数的定义形式类型标识符 函数名()声明部分

59、语句其中类型标识符和函数名称为函数头。类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。 该类型标识符与前面介绍的各种说明符相同。函数名是由用户定义的标识符,函数名后有一个空括号,其中无参数,但括号不可少。2.有参函数的定义形式函数类型 函数名( 数据类型 参数,数据类型 参数2 ) 声明部分 语句 return (表达式) 或return 表达式 有参函数比无参函数多了一个内容,即参数表列。在参数表中给出的参数称为形式参数,它们可以是各种类型的变量,各参数之间用逗号间隔。例 定义一个函数,用于求两个数中的大数。#include int max(int a,int b) if(

60、ab) return a; else return b;void main() int max(int a,int b); int x,y,z; printf(input two numbers:n); scanf(%d%d,&x,&y); z=max(x,y); printf(maxmum=%d,z);例 用do-while语句求 ,即123100#includevoid main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(%dn,sum);对函数的几点说明:(1)函数定义不允许嵌套。在语言中,所有函数(包括主函数m

温馨提示

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

评论

0/150

提交评论