最基础的C语言教程.ppt
C语言程序设计,主讲:高照艳,2,第一章 C语言概述,主要内容:C语言的发展C语言的特点简单C程序介绍算法结构化程序设计C程序的执行过程,3,C语言出现的历史背景(1)C语言的发展源于人们希望用高级语言编写操作系统。ALGOL60(高级语言)60-CPL(剑桥大学推出 接近硬件 规模大 难实现)63-BCPL(剑桥大学 简化CPL)67-B 语言(贝尔实验室用B写了UNIX操作系统)70-C 语言(用C改写了UNIX 90%,即第5版)7273-标准C(K&R The C Programming language)78-ANSI C 83(ANSI 美国国家标准化协会)-87 ANSI C-ISO C 90(ISO国际标准化组织)版本:Microsoft C、Turbo C、Borland C、Quick C(2)C语言既具有高级语言特性,又具有低级语言特性-中级语言。,1.1C语言的发展,4,1.2 C语言的特点,语言简洁,表达能力强,易于理解只有32个关键字,9种控制语句,32个关键字:(由系统定义,不能重作其它定义)auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort signed sizeof static structswitch typedef unsigned union voidvolatile while,5,9种控制语句:if()elsefor()while()dowhile()continuebreakswitchgotoreturn,6,运算符丰富34种运算符,运算能力强、效率高。算术运算符:+-*/%+-关系运算符:=!=逻辑运算符:!&|位运算符:|&赋值运算符:=及其扩展条件运算符:?:逗号运算符:,指针运算符:*&求字节数:sizeof强制类型转换:(类型)分量运算符:.-下标运算符:其它:()-,7,数据类型丰富,8,具有结构化的控制语句程序书写格式自由能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作语言生成的代码质量高,程序执行效率高可移植性好,9,例1.1编写程序,在屏幕上打印字符串“This is a C program.n”。main()printf(This is a C program.n);,1.3简单C程序介绍,10,例1.2/*求两数之和*/main()int a,b,sum;/*定义变量*/a=123;b=456;sum=a+b;printf(“Sum is%dn”,sum);Sum is 579,11,例1.3 求两数之最大值 main()int a,b,c;scanf(”%d,%d”,12,C程序结构,C程序由函数构成必须有,且只能有一个main(主函数)总是从main函数开始执行函数由函数首部和函数体组成函数首部指定函数名、函数参数、类型函数体从 开始,到 结束函数内有语句,13,C程序结构(续),语句包括说明性语句、可执行语句以;表示语句结束注释可以出现在程序的任何位置 用/*和*/括起来,必须成对出现书写格式C语言没有行的概念,书写格式自由。习惯小写字母,缩进格式。,14,1.4 程序的灵魂算法,程序包括两方面内容:1.对数据的描述。数据元素及各元素之间的关系,即数据结构。2.对操作的描述。即操作步骤,也就是算法。程序=数据结构+算法程序=数据结构+算法+程序设计方法+语言工具环境说明:高级语言的数据结构是以数据类型来体现的。,15,1.4.1 算法,什么是算法为解决某一应用问题而采用的解题步骤算法的描述方式 用自然语言描述算法 用流程图描述算法 用N-S结构图描述算法用计算机语言表示算法(即实现算法),例如:输出两个数中的最大数,16,用自然语言描述算法,第一步:输入x和y的值第二步:比较x和y的值,如果x大于y,则输出x的值,否则输出y的值。,例如当描述“输出10个数中最大数”的算法时,会冗长、难于理解,17,图1.5 用流程图描述算法,用流程图描述算法,起止框,输入/输出框,判断框,处理框,流程线,18,用N-S结构图描述算法,图1.7 用N-S结构图描述的算法,19,算法的特性,(1)有穷性。,(2)确定性。,(3)有效性。,(4)输入。,(5)输出。,20,1.4.2结构化程序设计,程序的三种基本结构顺序结构程序:按照书写顺序依次执行语句选择结构程序:按照条件判断选择执行语句循环结构程序:通过条件控制循环执行语句,三种基本结构的共同点:都是只有一个入口和一个出口;结构内的每一个框都有机会被执行;结构内没有死循环。,21,结构化程序设计的三种基本结构:1)顺序结构 传统流程图 N-S流程图,A,B,开始,结束,其中:A、B为操作框,可由一条或多条语句实现。,22,2)选择结构(分支结构)传统流程图 N-S流程图 入口 出口,A,B,P,T F,T F,其中:P为分支判断条件;A、B必有一个且只有一个被执行;A、B之一可是空操作,用 表示。,23,3)循环结构当型循环先判断后循环,有可能一次也不循环。入口 F T,P,A,当P为真 A,出口,其中:P为循环判断条件;A为要重复执行的操作,称为循环体;,24,直到型循环先循环后判断,至少循环一次。入口 F T,P,A,A直到P为真,出口,其中:P为循环判断条件;A为要重复执行的操作,称为循环体;,25,算法举例例:计算5!(12345),当型循环 直到型循环,26,结构化程序设计的基本原则:,结构化程序设计的基本原则:采用自顶向下、逐步细化的方法进行设计;采用模块化原则和方法进行设计。即将大型任务从上向下划分为多个功能模块,每个模块又可以划分为若干子模块,然后分别进行模块程序的编写;每个模块都是用结构化程序实现,即都只能由三种基本结构组成,并通过计算机语言的结构化语句实现。,27,1.5 C语言的上机操作步骤,一.上机过程:,编译,正确,正确,正确,有错误,有错误,编辑,运行,28,C程序的执行过程,1源程序文件的建立和编辑 编写源程序,形成.C文件需用编辑工具:tc.exe、记事本2编译 编译源程序,形成目标程序.Obj文件需用编译工具:tcc.exe3连接 连接OBJ文件和调用的库函数,形成运行程序.exe 文件需用连接工具:tlink.exe4运行.exe 文件,29,2.上机过程流程图:,30,3.编写、运行C程序时常用功能键,31,三、需要记住的TC中一些常用功能键,F1:帮助。F2:将当前文件存盘。F3:装载原有文件或给新文件命名。F4:程序运行到光标所在行。F5:放大或缩小活动窗口切换。F6:开或关活动窗口切换。F7:单步运行程序,跟踪进入函数内部运行。F8:单步运行程序,不跟踪进入函数内部。,32,实验报告,实验一实验目的实验内容和步骤1.设计算法,写出程序2.在TurboC下编辑,得到源程序(.c)3.编译,得到目标文件(.obj)4.连接,得到可执行文件(.exe)5.分析结果实验体会,C程序设计数据类型、运算符与表达式,34,2.1 数据类型2.2 常量与变量2.3 整型数据2.4 实型数据2.5 字符型数据2.6 变量赋初值2.7 混合运算2.8 运算符与表达式,数据类型、运算符与表达式 CHAPTER 2,35,数据类型、运算符与表达式 的数据类型,C语言提供的数据结构是以数据类型形式出现的数据在内存中存放的情况有数据类型决定 数据的操作要依靠运算符实现,而数据和运算符共同组成了表达式。,36,数据类型、运算符与表达式 的数据类型,37,3.2常量与变量,3.2.1常量和符号常量常量:在运行过程中,其值不能被改变的量称为常量。分类:整型实型字符字符串符号常量,用一个标识符代表的常量。习惯上,符号常量名用大写,变量用小写,以示区别。1,0,123为整型常量 4.6,1.23为实型常量 a,d 为字符常量#define PRICE 255 A=PRICE*A+6 C=PRICE+C/120PRICE是标识符,符号常量,38,3.2.2 变 量变量:在程序运行过程中,其值可以改变的量称为变量。标识符:用来标识变量名、符号常量名、函数名、类型名、数组名、文件名的有效字符序列称为标识符。由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。合法的变量名如:average,abd,a,s2,student_name,_init不合法的变量名:M.D.John,1a,#33,ab3.C 语言要求对变量“先定义,后使用”。,39,3.3 整型数据,3.3.1 整型常量由一系列数字组成。也可带有减号,但不使用加号。十进制整数:123,-456,0八进制整数:以0开头的数据,如:-011,0123十六进制整数:以0 x开头的数据,如:0 x123 整型常量的分类根据其值的范围而决定其类型,并可以赋值给类型相匹配的整型变量。,40,3.3.2 整型变量,1.整数数据在内存中的存放形式 数据在内存中是以二进制形式存放的。例如:3(0000000000000011)2要区别:3 和 3 方法是:将符号也数码化即:正的符号 用 0 表示 负的符号 用 1 表示 数值是以补码表示的。正数的补码和其原码的形式相同。负数的补码:将该数的绝对值的二进制形式,按位取反再加1。3()2,41,2.整型变量的分类 整型 int 在内存中以二进制形式存放,每一个整型变量在内存中占2个字节。短整型 以short int表示或以short表示,一般与int占有的内存相同。长整形以long int表示或以long表示,一般占有在内存中字节为int两倍。无符号型只能存放正整数,它的表示是在上述三种类型之前加上unsigned,42,3.整型变量的定义对变量的定义一般放在函数的开头部分。例2.1main()int a,b,c,d;unsigned 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,不同类型的数可以直接运算,43,4.整型数据的溢出main()int a,b;a=32767;b=a+1;printf(“%d,%d”,a,b);运行结果为 32767,-327683.3.3 整型常量的类型 一个整常量,其值在-215215-1内可认为是 int 型,并可赋值给 int 型和 long int 型变量;一个整常量,其值在 231 231-1 范围内则认为它是 long int 型,可赋值给一个 long int 型变量;常量中无 unsigned 型,但一个非负值的整常量可以赋给 unsigned 型整变量;,44,3.4 实型数据,3.4.1 实型常量1.十进制小数形式(日常记数形式)1.0+12.0-12.0 0.02.指数形式(科学记数形式)E(e)。例如3.0+5等。3.4.2 实型变量1类型:单精度:float,分配4 Byte双精度:double,分配 8 Byte2存储:,45,实型数据的类型及规定,实型常量不分float和double,根据范围赋值给相应的变量。如:float a;double b;a=111111.111;b=111111.111a中实际存储的是111111.1(7位有效)b中实际存储的是111111.111(全部有效),46,3.5 字符型数据,3.5.1字符常量1.定义用一对单引号括起来的单个字符,称为字符常量。例如,A、等。2.转义字符语言还允许使用一种特殊形式的字符常量,就是以反斜杠“”开头的字符序列。,47,3.5.2 字符型变量 字符变量的类型关键字为char,一般占用1字节内存单元。1.变量值的存储 将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。例如:char ch1,ch2;/*定义两个字符变量:ch1,ch2*/ch1=a;ch2=b;/*给字符变量赋值*/a、b的ASCII码为97、98。2.特性 1)字符数据在内存中存储的是字符的ASCII码;2)语言允许字符型数据与整型数据之间通用,可以互相赋值。3)字符数据也可以整数形式输出。,48,例1 字符变量的字符形式输出和整数形式输出。main()char c1,c2;c1=a;c2=b;printf(“c1=%c,c2=%cn”,c1,c2);printf(“c1=%d,c2=%dn”,c1,c2);程序运行结果:c1=a,c2=b c1=97,c2=98,49,例2 大小写字母的转换。main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“%c c2=%cn”,c1,c2);程序运行结果:A B,50,数据类型、运算符与表达式 字符型数据,3.5.3 字符串常量用双引号括起来的字符序列。如:“How do you do”,“CHINA”,“a”,“$123.34”等。字符串可以一次输出。如:printf(“How do you do”);C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。在内存中,对字符串常量是采用字符数组表示,即用一个字符型数组来存放一个字符串。注意:a是字符常量,“a”是字符串常量,二者不同。,51,综上所述,字符常量A与字符串常量A是两回事:(1)定界符不同:字符常量使用单引号,而字符串常量使用双引号;(2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是某个整数;(3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。,52,3.6 变量赋初值,在变量定义的同时可以为变量赋初值。如:int a=3;(相当于 int a;a=3;)float f=3.56;char c=a;int a,b,c=5;表示只给c赋初值。(相当于int a,b,c;c=5;),53,3.7 各类数值型数据间的混合运算不同类型的数据(整型、实型、字符型)可进行混合运算。如:10+a+1.5 8765.1234*b 必须首先将它们转换成同一类型的数值。转换原则是由低向高转换,运算结果为最高级别的类型。,54,数据类型、运算符与表达式 混合运算,55,例2-5:已知:float a=2.0;int b=6,c=3;求解:a*b/c-1.5+A+abs(-5)=?,12.0/3,4.0-1.5,2.5,+65(int),67.5,5,72.5,56,3.8 算术运算符和算术表达式1.基本的算术运算:、*、%是模运算,即求余运算,要求整数。如:7%4的结果是3。说明:5/3的结果仍是整数,小数部分被忽略。5.3/3或5/3.0的结果为double型。C编译系统将实型常量作为双精度来处理。如果参加、*、/运算的两个数中有一个数为实数,则结果是double型。2.算术表达式:用算术运算符将运算对象按C的语法规则连接起的式子。例如:a*b/c1.5+a优先级(算术运算):()*/%+在同一级别中,采取由左至右的结合方向。如:a-b+c 相当于(a-b)+c,57,3.强制类型转换运算符可将一个表达式转换成所需类型。其一般形式为:(类型名)(表达式)例如:(double)a(int)(x+y)(float)(5%3)在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。,58,练习,main()int i;float x;x=3.6;i=(int)x;printf(x=%f,i=%dn,x,i);,59,数据类型、运算符与表达式 运算符和表达式,4.自增、自减运算符使变量的值加1或减1。如:i,i 在使用i之前,先使i的值加(减)1 i,i 在使用i之后,再使i的值加(减)1例如:i的值为3,则 j=+i;j的值为4,i的值为4 j=i+;j的值为3,i的值为4又如:printf(“%d”,+i);输出结果为4 printf(“%d”,i+);输出结果为3单独使用时,i,i 等价,60,结合性:,自右向左,例:,i=2;j=-i+;,分析:(1)+、-、+、-是同级运算符,结合方向:自右向左。,(2)-i+等价于-(i+),(3)对于括号内的自增运算,要先使用i,再使i增加1。,运算结果:i的值为3,j的值为-2。,61,练习,a=1,b=2,c=3,d=4下列式子的值分别是多少?a*b/ca*b%c+1+a*b-c-,62,3.9 赋值运算符和赋值表达式1.赋值运算符:“=”。2.复合赋值运算:在赋值符号前加上其它运算符号。+=,-=,*=,/=,%=,=,,赋值运算符仅优先于“,”,且具有右结合性例如:a=b=b*c 等价于:a=(b=(b*c)赋值号与数学中的等号含义不同例如:数学中 a=b 等价于 b=a C语言中 a=b 不等价于 b=a,63,3.赋值运算中的类型转换,=小数部分自动补0=自动舍去实型表达式的小数部分(注意不进行四舍五入)=自动截取表达式值的低字节赋值,舍去高字节=自动给高字节补0 或补1,64,数据类型、运算符与表达式 运算符和表达式,4.赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。一般形式为:例如:int a=12;求下列运算的结果,aaa*a,aaa*a=12-12*12=-132),a-132,aa(-132)=(-132)+(-132)=-264,a=-264,65,练习,int i=1,j=2,k=3,m=4;计算下列式子的值i+=j+kj*=k=m+5,66,数据类型、运算符与表达式 运算符和表达式,3.10 逗号运算符和逗号表达式逗号运算符又称为“顺序求值运算符”,是所有运算符中级别最低的,它将两个表达式连接起来。一般形式为:表达式1,表达式2求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值。例如:a=3*5,a*4;a的值为15,表达式的值为60(a=3*5,a*4),a+5;a的值为15,表达式的值为20 又如:x=(a=3,6*3);x的值为18 x=a=3,6*a x的值为3,表达式的值为18,第4章 最简单的C程序设计 顺序程序设计,68,1 C语句概述2 赋值语句 3 数据的输入输出4 字符数据输入输出5 格式输入输出7 程序举例,69,4.1 C语句概述 用C语言编写的程序称为C语言源程序,简称C程序。C语言一般由一个或若干个函数组成,而这些函数可以保存在一个或几个源程序中,这些文件都以.C作为文件扩展名。,70,C语句分类 和其他高级语言一样,C语言的语句也是用来向计算机发出操作命令的。一条语句经过编译后生成若干条机器指令。在C语言中只有可执行语句,没有非执行语句。C语句有以下五类:控制语句,完成一定的控制功能;if()else(条件语句)for()(循环语句)while()(循环语句)do while()(循环语句)continue(结束本次循环语句)break(中止执行switch或循环语句)Switch(多分支选择语句)goto(转向语句)return(从函数返回语句),71,函数调用语句,由一次函数调用加一个分号构成一个语句,如:printf(“This is a C statement.”);表达式语句,由一个表达式构成一个语句,如:a=3(是表达式,不是语句)a=3;(是语句)空语句,只有一个分号,什么也不做;复合语句,用 把一些语句括起来成为复合语句。相当一条语句,哪里有语句,哪里就可用复合语句。if(ab)max=a;min=b;复合语句最后一个语句中最后的分号不能忽略不写。,72,4.2 赋值语句 赋值表达式后面加上分号,构成赋值语句。功能:将数据赋给变量。如:x=3.1;a=d+123+b/d;程序中基本的命令行必须是一个语句,表达式不能单独构成语句。例如:d+123+b/d 是一个表达式 a=d+123+b/d;是一个赋值语句 特点:C语言中的赋值号“=”作为赋值运算符;作为赋值表达式可以被包括在其他表达式之中;if(ab)0)t=a;赋值语句可以连接赋值;a=b=c=2;,73,4.3 数据输入输出的概念 1.所谓输入输出是以计算机主机为主体而言的。主机向外部设备“输出”,外部设备向主机“输入”。2.C语言本身不提供输入输出语句,输入和输出操作是由函数实现。C语言通过调用四个系统函数来实现输入输出。printf(),scanf(),getchar(),putchar()3.在使用C语言库函数时,要用到预编译命令“#include”将有关的“头文件包括到用户源文件中。在调用标准输入输出库函数时,文件开头应有以下预编译命令:#include 或#include”stdio.h”,74,4.4 字符数据的输入输出1.字符输出函数putchar()向终端输出一个字符。如:putchar(c);输出变量c的值,c可以是字符型变量或整型变量。,例3.1#include“stdio.h”main()char a,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);,BOY,75,也可以输出控制字符,如putchar(n)输出一个换行符。输出其它转义字符 putchar(101);输出 A;putchar();输出单引号 putchar(015);使输出回车,不换行,例3.2#include main()char a,b,c;a=B;b=O;c=Y;putchar(a);putchar(n);putchar(b);putchar(n);putchar(c);putchar(n);,BOY,76,2.字符输入函数getchar()从终端(或系统隐含指定的输入设备)输入一个字符。一般形式为:getchar();函数的值就是从输入设备得到的字符,例#include“stdio.h”main()char c;c=getchar();putchar(c);,a,a,77,例从键盘上输入一个大写字母,分别用大小写字母形式输出,同时输出它们的ascii码。#include“stdio.h”main()char c1,c2;c1=getchar();printf(“%c,%dn”,c1,c1);c2=c1+32;printf(“%c,%dn”,c2,c2);,A,A,65a,97,78,4.5格式输入与输出函数1.格式输出函数printf()按规定格式向终端输出若干个任意类型的数据。,一般格式:printf(控制格式,输出列表),被输出的数据,可以是常量、变量、表达式,用双引号括起的转换控制字符串,它包括两种信息:,格式说明,由%开始。如:%d,%f,%c,普通字符,要输出的字符,printf(“%d%d”,a,b)格式说明 输出列表,printf(“a=%d b=%d”,a,b);控制格式 输出列表,79,printf()格式字符,80,printf()附加格式说明字符,例如:%ld 输出十进制长整型数%m.nf 右对齐,m位域宽,n位小数或n个字符%-m.nf 左对齐,81,例1.main()int x1=123;long x2=123456;printf(x1=%d,x1=%5d,x1=%-5d,x1=%2dn,x1,x1,x1,x1);printf(x2=%ld,x2=%8ld,x2=%5ldn,x2,x2,x2);,程序运行结果如下:x1=123,x1=123,x1=123,x1=123x2=123456,x2=123456,x2=123456,82,例2.main()int m=-1;long n=123456789;printf(“m=%d,%o,%x,%un,m,m,m,m);printf(n=%dn,n);printf(n=%ldn,n);,程序输出:1122a=11,b=22m=-1,177777,ffff,65535n=-13035n=123456789,83,例3.main()float f=123.456;double d1,d2;d2=2222222222222.222222222;printf(%f,%12f,%12.2f,%-12.2f,%.2fn,f,f,f,f,f);printf(d1+d2=%fn,d1+d2);程序运行结果如下:123.456001,123.456001,123.46,123.46,123.46d1+d2=3333333333333.333010 对于实数,也可使用格式符%e,以标准指数形式输出:尾数中的整数部分占一位,小数点占一位,尾数中的小数部分占5位;指数部分占4位(如e-03),共计11位。也可使用格式符%g,让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。,84,最简单的C程序设计 数据输出,在使用printf()函数时要注意:有些系统要求格式字符必须用小写字母;2.格式控制符中,可包含转义字符;3.格式说明必须以“%”开头;欲输出字符%则应在“格式控制”字符串中用连续两个%表示。5.不同的系统在实现格式输出时,输出结果可能会有一些小的差别。,85,2.格式输入函数scanf()把从输入设备输入的数值按先后顺序存入在内存的地址中去。一般格式:scanf(格式控制,地址列表),例main()int a,b,c;scanf(“%d%d%d”,3 4 5,3,4,5,86,最简单的C程序设计 数据输入,scanf()格式字符,87,最简单的C程序设计 数据输入,scanf()附加格式说明字符,88,在使用scanf()函数时要注意:Scanf()函数中的“格式控制”后面应当是变量地址;如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符;在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入;在输入数据时,遇到以下情况时该数据认为结束:遇空格,或按回车;遇指定的宽度结束,如“3d”,只取3列;遇非法输入,89,3,4,6,a=3.00,b=4.00,c=6.00,s=6.50 area=5.33,4.6 顺序结构程序设计举例,第五章选择结构程序设计,关系运算符和关系表达式逻辑运算符和逻辑表达式If语句三种形式条件运算符Switch语句,91,5.1 关系运算符和关系表达式1.关系运算符关系运算实际上是两个量的比较,比较的结果只有两种可能:真(1)、假(0)。例如:a 3?当a=5时,比较的结果为真;当a=1时,结果为假。C语言提供6种关系运算符(大于)=(大于或等于)=相等!=不等,92,2.关系表达式用关系运算符或者等式运算符将两个表达式连接起来,叫关系表达式。合法的关系表达式:ab、a+bb+c、(a=3)(b=5)、(a=3)(b=5)、ab)(b=0的值为真(在计算机中记为1)。例:a=3,b=2,c=1,则:(1)ab的值为1(2)(ab)=c的值为真(即1)(3)b+cb中d的值为ab的值,为。(5)f=abc中f的值为c的值,为。,93,关系、等式和逻辑运算符,关于优先次序,=为同一级别,=和!=为同一级别。在同一级别中,采取由左至右的结合方向。,算术运算符,关系运算符,赋值运算符,高,低,例 ca+b c(a+b)ab!=c(ab)!=ca=bc a=(bc),等式运算符,94,5.2 逻辑运算符逻辑运算:产生真假值的运算。逻辑运算符:&逻辑与(AND)|逻辑或(OR)!逻辑非(NOT)“&”和“|”是双目运算符。“!”是一元运算符.如:a&b a,b同时为真,则表达式为真 a|b a,b只要有一个为真,表达式为真!a a为真,则表达式为假,95,关系、等式和逻辑运算符,96,逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。在C语言中,当判断一个量的真假时,一切非数均被当成真来处理。例如:若a=4,则!a的值为 若a=4,b=5,则a&b的值为 a|b的值为!a|b的值为 4&0|2 的值为区分下面的表达式中算术运算量,关系运算量和逻辑运算量:53&2|83是两个数值间的比较,结果为 1&2是两个非值(逻辑量)间的运算,结果为 1|84-!0,根据优先级,先计算!,结果为,97,例 判断某一年是否是闰年。条件是:能被4整除,但不能被100整除;能被4整除,又能被400整除。用year表示年份,判断闰年的逻辑表达式为:(year%4=0&year%100!=0)|(year%400=0)如果给year输入一个值,使上面的表达式的值为时,则year所代表的年份就是闰年。变换一下角度,如何判断year不是闰年?!(year%4=0&year%100!=0)|(year%400=0)当year的值使表达式的值为时,则year所代表的就不是闰年。,关系、等式和逻辑运算符,98,例如:如果输入的是正数,则打印出来。if(x0)printf(%d,x);,99,选择结构程序设计 if语句,例如:输出两个数中较大的一个。if(xy)printf(%d,x);else printf(%d,y);,100,选择结构程序设计 if语句,101,选择结构程序设计 if语句,例如:商场促销,购物500元以上,8折;购物300元以上,85折;购物100元以上,9折;购物50元以上,95折;购物50元以下,不打折。根据消费量,计算优惠率。设:消费量为 money;折扣为 cost;实际花费 priceif(money500)cost=0.2;else if(money300)cost=0.15;else if(money100)cost=0.1;else if(money50)cost=0.05;else cost=0;price=money-(money*cost);,102,选择结构程序设计 if语句,If 语句的嵌套嵌套的定义:在if 语句中又包含一个或多个if 语句。嵌套的一般形式:If()if()语句1 else 语句2Else if()语句3 else 语句4(注意!If 与else的配对关系。),103,例 比较两个整数的关系。#include main()int x,y;printf(Enter integer X and Y:);scanf(%d%d,104,例 输入两个数,按数值大小次序排列输出.main()float a,b,t;scanf(%f,%f,输入为 3.6,-3.2输出为-3.20,3.60,105,例 输入三个数,按由小到大次序排列并输出。main()flaot a,b,c,t;scanf(%f,%f,%f,输入为:3,7,1输出为:1.00,3.00,7.00,106,选择结构程序设计 程序举例,例 写一程序判断某一年是否是闰年.main()int year,leap;printf(输入年份:);scanf(%d,输入年份:20042004 is leap year,107,选择结构程序设计 if语句,条件运算符max=(ab)?a:b;条件表达式 当(ab)为真时,表达式取a的值 当(ab)为假时,表达式取b的值条件运算符是三目运算符 表达式1?表达式2:表达式 3条件运算符的结合方向为从右向左 例如:ab?a:cd?c:d 相当于 ab?a:(cd?c:d)如果a=1,b=2,c=3,d=4,则条件表达式的值为4。,108,选择结构程序设计 if语句,输入为:4输出为:x=4,y=1,109,例 输入一个字符,判断大小写,如是大写,则转换成小写,输出。main()char c;scanf(%c,printf(%c,c),选择结构程序设计 if语句,110,5.4 switch语句Switch语句是多分支选择语句,也叫开关语句或者选择语句。一般形式:switch(表达式)case常量表达式1:语句1;case常量表达式2:语句2;case常量表达式n:语句n;default:语句n+1;功能:1.计算表达式的值,与常量表达式的值比较,等于第i个值时,顺 序执行语句序列i、i+1、n+1 2.若与所有常量表达式值都不相等,执行语句序列n+1。,如:switch(a)case 5:printf(,如:switch(a)case 5:printf(,111,选择结构程序设计 switch语句,例 根据成绩等级打出成绩范围.main()char grade;printf(Enter your graden);scanf(%c,输入为 B输出为 7084,112,选择结构程序设计 switch语句,113,例:给出百分制成绩,要求输出等级 A,B,C,D,E。90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。main()int score,num;char grade;scanf(%d,输入为 76输出为 76 C,114,选择结构程序设计 switch语句,switch语句的说明条件表达式的类型和常量表达式的类型是整数、字符。当表达式的值与某一个 case 后面的常量表达式的值相等时,就执行此 case 后面的语句,若所有的 case 中的常量表达式的值都没有与表达式的值匹配,则执行 default 后面的语句。每一个 case 的常量表达式的值必须互不相同。case常量表达式只起语句标号作用;必须用break语句终止多个case连续执行,否则只要有一个case满足后,以下的语句全部无条件执行。多个case可共用一组执行语句。,115,1 概述2 goto语句3 while语句 4 do-while语句5 for语句6 循环的嵌套7 break语句和continue语句8 程序举例,循环控制,116,6.1 概述一般需要使用循环的情况是:有重复的动作(循环体)循环次数可以控制(循环条件)例如:1+2+3+.+100 在C语言中可以用下列语句实现循环:goto 和 if 结合 while do-while for,117,6.2 goto 语句Goto语句的一般形式:goto 语句标号;语句标号:语句;功能:无条件转向语句。Goto 语句的常用形式:1.与 if 语句构成循环;2.从循环体中转到循环体外。,例:求1+2+3+100。main()int i,sum=0;i=1;loop:if(i=100)sum=sum+i;i+;goto loop;printf(“%dn”,sum);,118,6.3 while语句一般形式:While(表达式)语句功能:实现“当型循环,先判断,后执行。表达式为真时(非0值),执行while语句的内嵌语句。说明:,可以是关系表达式、逻辑表达式或其它类型,表达式后不允许有分号结尾;语句可以是简单的,也可以是复合的;循环体中应有使循环趋向于结束的语句。,119,例 求1+2+3+.+100。,main()int i=1,sum=0;while(i=100)sum=sum+i;/累加器 i+;printf(%d,sum);,如果有一个以上的语句循环,则必须用 构成复合语句。要有修改循环变量的语句。,120,6.4 do-while语句,一般形式:do 循环语句while(表达式);功能:实现“当型循环结构。说明:,当 while 后面的表达式的第一次的值为真时,两种循环得到的结果相同。否则,二者结果不相同。do while 中的循环体至少执行一次,而 while 语句中的循环语句可能一次都不执行。,表达式,语句,非 0(真),0(假),121,例 求1+2+3+.+100。,main()int i,sum=0;i=1;do sum=sum+i;i+;while(i=100);printf(%d,sum);,122,6.5 for 语句在C语言中用 for 语句构成的循环最为灵活。一般形式:for(表达式1;表达式2;表达式3)语句执行过程:例:for(i=1;i=100;i+)sum=sum+i;,从图中可以看出FOR语句等价于下列程序:表达式