C语言程序设计(基础入门教程)

上传人:雅*** 文档编号:15528185 上传时间:2020-08-17 格式:PPT 页数:203 大小:2.80MB
收藏 版权申诉 举报 下载
C语言程序设计(基础入门教程)_第1页
第1页 / 共203页
C语言程序设计(基础入门教程)_第2页
第2页 / 共203页
C语言程序设计(基础入门教程)_第3页
第3页 / 共203页
资源描述:

《C语言程序设计(基础入门教程)》由会员分享,可在线阅读,更多相关《C语言程序设计(基础入门教程)(203页珍藏版)》请在装配图网上搜索。

1、C语言程序设计,主讲:高照艳,2020/8/17,2,第一章 C语言概述,主要内容: C语言的发展 C语言的特点 简单C程序介绍 算法 结构化程序设计 C程序的执行过程,2020/8/17,3,C语言出现的历史背景 (1)C语言的发展源于人们希望用高级语言编写操作系统。 ALGOL60(高级语言) 60 -CPL(剑桥大学推出 接近硬件 规模大 难实现) 63 -BCPL (剑桥大学 简化CPL) 67 -B 语言 (贝尔实验室用B写了UNIX操作系统) 70 -C 语言 (用C改写了UNIX 90%,即第5版) 7273 -标准C (K ,1. 3简单C程序介绍,2020/8/17,10,例

2、1.2 /*求两数之和*/ main( ) int a , b , sum ; /*定义变量*/ a=123 ; b=456 ; sum= a + b ; printf (“Sum is %dn”, sum) ; Sum is 579,2020/8/17,11,例1.3 求两数之最大值 main( ) int a , b , c ; scanf (”%d,%d”, ,2020/8/17,12,C程序结构,C程序 由函数构成 必须有,且只能有一个main(主函数) 总是从main函数开始执行 函数 由函数首部和函数体组成 函数首部指定函数名、函数参数、类型 函数体从 开始,到 结束 函数内有语句

3、,2020/8/17,13,C程序结构(续),语句 包括说明性语句、可执行语句 以 ;表示语句结束 注释 可以出现在程序的任何位置 用 /* 和 */ 括起来,必须成对出现 书写格式 C语言没有行的概念,书写格式自由。 习惯小写字母,缩进格式。,2020/8/17,14,1.4 程序的灵魂算法,程序包括两方面内容: 1.对数据的描述。数据元素及各元素之间的关系,即数据结构。 2.对操作的描述。即操作步骤,也就是算法。 程序 = 数据结构 + 算法 程序 =数据结构 + 算法 + 程序设计方法 + 语言工具环境 说明: 高级语言的数据结构是以数据类型来体现的。,2020/8/17,15,1.4.

4、1 算法,什么是算法 为解决某一应用问题而采用的解题步骤 算法的描述方式 用自然语言描述算法 用流程图描述算法 用N-S结构图描述算法 用计算机语言表示算法(即实现算法),例如:输出两个数中的最大数,2020/8/17,16,用自然语言描述算法,第一步:输入x和y的值 第二步:比较x和y的值,如果x大于y,则输出x的值,否则输出y的值。,例如当描述“输出10个数中最大数”的算法时,会冗长、难于理解,2020/8/17,17,图1.5 用流程图描述算法,用流程图描述算法,起止框,输入/输出框,判断框,处理框,流程线,2020/8/17,18,用N-S结构图描述算法,图1.7 用N-S结构图描述的

5、算法,2020/8/17,19,算法的特性,(1)有穷性。,(2)确定性。,(3)有效性。,(4)输入。,(5)输出。,2020/8/17,20,1.4.2结构化程序设计,程序的三种基本结构 顺序结构程序:按照书写顺序依次执行语句 选择结构程序:按照条件判断选择执行语句 循环结构程序:通过条件控制循环执行语句,三种基本结构的共同点: 都是只有一个入口和一个出口; 结构内的每一个框都有机会被执行; 结构内没有死循环。,2020/8/17,21,结构化程序设计的三种基本结构: 1) 顺序结构 传统流程图 N-S流程图,A,B,开始,结束,其中:A、B为操作框,可由一条或多条语句实现。,2020/8

6、/17,22,2) 选择结构(分支结构) 传统流程图 N-S流程图 入口 出口,A,B,P,T F,T F,其中:P为分支判断条件; A、B必有一个且只有一个被执行; A、B之一可是空操作,用 表示。,2020/8/17,23,3) 循环结构 当型循环先判断后循环,有可能一次也不循环。 入口 F T,P,A,当P为真 A,出口,其中:P为循环判断条件; A为要重复执行的操作,称为循环体;,2020/8/17,24,直到型循环先循环后判断,至少循环一次。 入口 F T,P,A,A 直到P为真,出口,其中:P为循环判断条件; A为要重复执行的操作,称为循环体;,2020/8/17,25,算法举例

7、例:计算5! (12345),当型循环 直到型循环,2020/8/17,26,结构化程序设计的基本原则:,结构化程序设计的基本原则: 采用自顶向下、逐步细化的方法进行设计; 采用模块化原则和方法进行设计。即将大型任务从上向下划分为多个功能模块,每个模块又可以划分为若干子模块,然后分别进行模块程序的编写; 每个模块都是用结构化程序实现,即都只能由三种基本结构组成,并通过计算机语言的结构化语句实现。,2020/8/17,27,1.5 C语言的上机操作步骤,一. 上机过程:,编译,正确,正确,正确,有错误,有错误,编辑,运行,2020/8/17,28,C程序的执行过程,1源程序文件的建立和编辑 编写

8、源程序,形成 .C文件 需用编辑工具:tc.exe、记事本 2编译 编译源程序,形成目标程序 . Obj文件 需用编译工具 :tcc.exe 3连接 连接OBJ文件和调用的库函数,形成运行程序 .exe 文件 需用连接工具 :tlink.exe 4运行 .exe 文件,2020/8/17,29,2.上机过程流程图:,2020/8/17,30,3.编写、运行C程序时常用功能键,2020/8/17,31,三、需要记住的TC中一些常用功能键,F1:帮助。 F2:将当前文件存盘。 F3:装载原有文件或给新文件命名。 F4:程序运行到光标所在行。 F5:放大或缩小活动窗口切换。 F6:开或关活动窗口切换

9、。 F7:单步运行程序,跟踪进入函数内部运行。 F8:单步运行程序,不跟踪进入函数内部。,2020/8/17,32,实验报告,实验一 实验目的 实验内容和步骤 1.设计算法,写出程序 2.在TurboC下编辑,得到源程序(.c) 3.编译,得到目标文件(.obj) 4.连接,得到可执行文件(.exe) 5.分析结果 实验体会,C程序设计数据类型、运算符与表达式,2020/8/17,34,2.1 数据类型 2.2 常量与变量 2.3 整型数据 2.4 实型数据 2.5 字符型数据 2.6 变量赋初值 2.7 混合运算 2.8 运算符与表达式,数据类型、运算符与表达式 CHAPTER 2,2020

10、/8/17,35,数据类型、运算符与表达式 的数据类型,C语言提供的数据结构是以数据类型形式出现的 数据在内存中存放的情况有数据类型决定 数据的操作要依靠运算符实现,而数据和运算符共同组 成了表达式。,2020/8/17,36,数据类型、运算符与表达式 的数据类型,2020/8/17,37,3.2常量与变量,3.2.1常量和符号常量 常量:在运行过程中,其值不能被改变的量称为常量。 分类:整型实型字符字符串 符号常量,用一个标识符代表的常量。 习惯上,符号常量名用大写,变量用小写,以示区别。 1,0,123为整型常量 4.6, 1.23为实型常量 a, d 为字符常量 #define PRIC

11、E 255 A=PRICE*A+6 C=PRICE+C/120 PRICE是标识符,符号常量,2020/8/17,38,3.2.2 变 量 变量:在程序运行过程中,其值可以改变的量称为变量。 标识符:用来标识变量名、符号常量名、函数名、类型名、数组名、文件名的有效字符序列称为标识符。 由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 合法的变量名如: average,abd, a, s2, student_name, _init 不合法的变量名:M.D.John, 1a, #33, ab 3. C 语言要求对变量“先定义,后使用”。,2020/8/17,39,3.3 整型数据

12、,3.3.1 整型常量 由一系列数字组成。也可带有减号,但不使用加号。 十进制整数:123,-456,0 八进制整数:以0开头的数据,如:-011,0123 十六进制整数:以0 x开头的数据,如:0 x123 整型常量的分类根据其值的范围而决定其类型,并可以赋值给类型相匹配的整型变量。,2020/8/17,40,3.3.2 整型变量,1.整数数据在内存中的存放形式 数据在内存中是以二进制形式存放的。 例如:3 (0000000000000011)2 要区别:3 和 3 方法是:将符号也数码化 即:正的符号 用 0 表示 负的符号 用 1 表示 数值是以补码表示的。 正数的补码和其原码的形式相同

13、。 负数的补码:将该数的绝对值的二进制形式,按位取反再加1 。 3(11111111111111101 )2,2020/8/17,41,2.整型变量的分类 整型 int 在内存中以二进制形式存放,每一个整型变量在内存中占2个字节。 短整型 以short int表示或以short表示, 一般与int占有的内存相同。 长整形以long int表示或以long表示,一般占有在内存中字节为int两倍。 无符号型只能存放正整数,它的表示是在上述三种类型之前加上unsigned,2020/8/17,42,3. 整型变量的定义 对变量的定义一般放在函数的开头部分。 例2.1 main() int a,b,c

14、,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,不同类型的数可以直接运算,2020/8/17,43,4.整型数据的溢出 main() int a,b; a=32767; b=a+1; printf(“%d,%d”,a,b); 运行结果为 32767,-32768 3.3.3 整型常量的类型 一个整常量,其值在-215215-1内可认为是 int 型,并可赋值给 int 型和 long int 型变量; 一个整常

15、量,其值在 231 231-1 范围内则认为它是 long int 型,可赋值给一个 long int 型变量; 常量中无 unsigned 型,但一个非负值的整常量可以赋给 unsigned 型整变量;,2020/8/17,44,3.4 实型数据,3.4.1 实型常量 1.十进制小数形式(日常记数形式) 1.0 +12.0 -12.0 0.0 2.指数形式(科学记数形式) E(e)。例如3.0+5等。 3.4.2 实型变量 1类型: 单精度:float,分配4 Byte 双精度:double,分配 8 Byte 2存储:,2020/8/17,45,实型数据的类型及规定,实型常量不分float

16、和double,根据范围赋值给相应的变量。 如:float a;double b; a=111111.111; b=111111.111 a中实际存储的是111111.1 (7位有效) b中实际存储的是111111.111 (全部有效),2020/8/17,46,3.5 字符型数据,3.5.1字符常量 1. 定义 用一对单引号括起来的单个字符,称为字符常量。 例如,A、等。 2.转义字符 语言还允许使用一种特殊形式的字符常量,就是以反斜杠“ ”开头的字符序列。,2020/8/17,47,3.5.2 字符型变量 字符变量的类型关键字为char,一般占用1字节内存单元。 1.变量值的存储 将一个字

17、符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。 例如: char ch1, ch2; /*定义两个字符变量:ch1,ch2*/ ch1=a; ch2=b; /*给字符变量赋值*/ a、b的ASCII码为97、98 。 2.特性 1)字符数据在内存中存储的是字符的ASCII码; 2)语言允许字符型数据与整型数据之间通用,可以互相赋值。 3)字符数据也可以整数形式输出。,2020/8/17,48,例1 字符变量的字符形式输出和整数形式输出。 main() char c1,c2; c1=a; c2=b; printf(“c1=%c,c2=%cn”,c1,

18、c2); printf(“c1=%d,c2=%dn”,c1,c2); 程序运行结果: c1=a,c2=b c1=97,c2=98,2020/8/17,49,例2 大小写字母的转换。 main() char c1,c2; c1=a; c2=b; c1=c1-32;c2=c2-32; printf(“%c c2=%cn”,c1,c2); 程序运行结果: A B,2020/8/17,50,数据类型、运算符与表达式 字符型数据,3.5.3 字符串常量 用双引号括起来的字符序列。如: “How do you do”, “CHINA”, “a”, “$ 123.34” 等。 字符串可以一次输出。如: pr

19、intf(“How do you do”); C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。在内存中,对字符串常量是采用字符数组表示,即用一个字符型数组来存放一个字符串。 注意: a是字符常量,“a”是字符串常量,二者不同。,2020/8/17,51,综上所述,字符常量A与字符串常量A是两回事: (1)定界符不同:字符常量使用单引号,而字符串常量使用双引号; (2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是某个整数; (3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志0。

20、,2020/8/17,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;),2020/8/17,53,3.7 各类数值型数据间的混合运算 不同类型的数据(整型、实型、字符型)可进行混合运算。 如:10 + a + 1.5 8765.1234 * b 必须首先将它们转换成同一类型的数值。 转换原则是由低向高转换,运算结果为最高级别的类型。,2020/8/17,54,数据类型、运算

21、符与表达式 混合运算,2020/8/17,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,2020/8/17,56,3.8 算术运算符和算术表达式 1.基本的算术运算: 、*、% % 是模运算,即求余运算,要求整数。 如:7%4的结果是3。 说明: 5/3的结果仍是整数,小数部分被忽略。 5.3/3或5/3.0的结果为double型。 C编译系统将实型常量作为双精度来处理。如果参加、*、/ 运算的两个数中有一个数为实数,则

22、结果是double型。 2.算术表达式:用算术运算符将运算对象按C的语法规则连接起的式子。 例如:a * b/c1.5+a 优先级(算术运算): () * / % + 在同一级别中,采取由左至右的结合方向。 如:a-b+c 相当于 (a-b)+c,2020/8/17,57,3.强制类型转换运算符可将一个表达式转换成所需类型。其一般形式为:(类型名)(表达式) 例如:(double) a (int) (x+y) (float) (5%3) 在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。,2020/8/17,58,练习,main( ) int i; float x; x=

23、3.6; i=(int)x; printf( x=%f,i=%dn,x,i); ,2020/8/17,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 等价,2020/8/17,60,结合性:,自右向左,例:,i =

24、2; j = -i+;,分析: (1)+、-、+、-是同级运算符,结合方向:自右向左。,(2) -i+等价于 -(i+),(3) 对于括号内的自增运算,要先使用i,再使i增加1。,运算结果: i的值为3,j的值为-2。,2020/8/17,61,练习,a=1,b=2,c=3,d=4 下列式子的值分别是多少? a*b/c a*b%c+1 +a*b-c-,2020/8/17,62,3.9 赋值运算符和赋值表达式 1.赋值运算符:“=” 。 2.复合赋值运算:在赋值符号前加上其它运算符号。 +=,-=,*=,/=,%=,=,,赋值运算符仅优先于“,” ,且具有右结合性 例如: a= b= b*c 等

25、价于:a= (b=(b*c) ) 赋值号与数学中的等号含义不同 例如:数学中 a=b 等价于 b=a C语言中 a=b 不等价于 b=a,2020/8/17,63,3.赋值运算中的类型转换, = 小数部分自动补0 = 自动舍去实型表达式的小数部分(注意不进行四舍五入) = = 自动截取表达式值的低字节赋值,舍去高字节 = = 自动给高字节补0 或补1,2020/8/17,64,数据类型、运算符与表达式 运算符和表达式,4.赋值表达式: 由赋值运算符将一个变量和一个表达式连接起来的式子。 一般形式为: 例如:int a=12;求下列运算的结果,aaa * a,aaa * a=12-12 * 12

26、=-132),a-132,aa(-132)=(-132)+(-132)=-264,a=-264,2020/8/17,65,练习,int i=1,j=2,k=3,m=4; 计算下列式子的值 i+=j+k j*=k=m+5,2020/8/17,66,数据类型、运算符与表达式 运算符和表达式,3.10 逗号运算符和逗号表达式 逗号运算符又称为“顺序求值运算符”,是所有运算符中级别最低的,它将两个表达式连接起来。 一般形式为:表达式1,表达式2 求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值。 例如: a=3*5, a*4; a的值为15,表达式的值为60 (a=3*5,

27、 a*4), a+5; a的值为15, 表达式的值为20 又如: x=(a=3, 6*3); x的值为18 x=a=3, 6*a x的值为3, 表达式的值为18,第4章 最简单的C程序设计 顺序程序设计,2020/8/17,68,1 C语句概述 2 赋值语句 3 数据的输入输出 4 字符数据输入输出 5 格式输入输出 7 程序举例,2020/8/17,69,4.1 C语句概述 用C语言编写的程序称为C语言源程序,简称C程序。 C语言一般由一个或若干个函数组成,而这些函数可以保存在一个 或几个源程序中,这些文件都以.C作为文件扩展名。,2020/8/17,70,C语句分类 和其他高级语言一样,C

28、语言的语句也是用来向计算机发出操作命令的。一条语句经过编译后生成若干条机器指令。在C语言中只有可执行语句,没有非执行语句。 C语句有以下五类: 控制语句,完成一定的控制功能; if( ) else (条件语句) for( ) (循环语句) while( ) (循环语句) do while ( ) (循环语句) continue (结束本次循环语句) break (中止执行switch或循环语句) Switch (多分支选择语句) goto (转向语句) return (从函数返回语句),2020/8/17,71, 函数调用语句,由一次函数调用加一个分号构成一个语句, 如:printf (“Th

29、is is a C statement.”); 表达式语句,由一个表达式构成一个语句, 如: a=3 (是表达式,不是语句) a=3; (是语句) 空语句,只有一个分号,什么也不做; 复合语句,用 把一些语句括起来成为复合语句。相当一条语句,哪里有语句,哪里就可用复合语句。 if (ab) max=a; min=b; 复合语句最后一个语句中最后的分号不能忽略不写。,2020/8/17,72,4.2 赋值语句 赋值表达式后面加上分号,构成赋值语句。 功能:将数据赋给变量。 如: x=3.1; a=d+ 123 + b/d; 程序中基本的命令行必须是一个语句,表达式不能单独构成语句。 例如: d+

30、 123 + b/d 是一个表达式 a =d+ 123 + b/d;是一个赋值语句 特点: C语言中的赋值号“ = ”作为赋值运算符; 作为赋值表达式可以被包括在其他表达式之中; if(ab)0) t=a; 赋值语句可以连接赋值; a=b=c=2;,2020/8/17,73,4.3 数据输入输出的概念 1. 所谓输入输出是以计算机主机为主体而言的。主机向外部设备 “输出” ,外部设备向主机“输入”。 2.C语言本身不提供输入输出语句,输入和输出操作是由函数实现。 C语言通过调用四个系统函数来实现输入输出。 printf(),scanf(),getchar(), putchar() 3.在使用C

31、语言库函数时,要用到预编译命令“#include”将有关的“头文件包括到用户源文件中。 在调用标准输入输出库函数时,文件开头应有以下预编译命令: #include 或 #include”stdio.h”,2020/8/17,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,2020/

32、8/17,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); ,B O Y,2020/8/17,76,2.字符输入函数getchar() 从终端(或系统隐含指定的输入设备)输入一个字符。 一般形式为: ge

33、tchar(); 函数的值就是从输入设备得到的字符,例 #include “stdio.h” main() char c; c=getchar(); putchar(c); ,a,a,2020/8/17,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 ,65 a ,97,2020/8/17,78,4.5格式输入与输出函数 1.

34、格式输出函数printf() 按规定格式向终端输出若干个任意类型的数据。,一般格式: printf(控制格式,输出列表),被输出的数据,可以 是常量、变量、表达式,用双引号括起的转换控制字 符串,它包括两种信息:,格式说明, 由%开始。如:%d,%f,%c,普通字符,要输出的字符,printf(“%d %d”,a,b) 格式说明 输出列表,printf(“ a=%d b=%d”,a,b); 控制格式 输出列表,2020/8/17,79,printf()格式字符,2020/8/17,80,printf()附加格式说明字符,例如: %ld 输出十进制长整型数 %m.nf 右对齐,m位域宽,n位小数

35、或n个字符 %-m.nf 左对齐,2020/8/17,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=123 x2=123456,x2=123456,x2=123456,2020/8/17,82,例2. main( ) int m=-1; long n=123456789; printf(“m= %d, %

36、o, %x, %un,m,m,m,m); printf(n=%dn,n); printf(n=%ldn,n); ,程序输出: 1122 a=11, b=22 m= -1, 177777, ffff, 65535 n=-13035 n=123456789,2020/8/17,83,例3. main( ) float f=123.456; double d1,d2; d1=1111111111111.111111111; d2=2222222222222.222222222; printf(%f,%12f,%12.2f,%-12.2f,%.2fn,f,f,f,f,f); printf(d1+d2=

37、%fn,d1+d2); 程序运行结果如下: 123.456001,123.456001,123.46,123.46,123.46 d1+d2=3333333333333.333010 对于实数,也可使用格式符%e,以标准指数形式输出:尾数中的整数部分占一位,小数点占一位,尾数中的小数部分占5位;指数部分占4位(如e-03),共计11位。 也可使用格式符%g,让系统根据数值的大小,自动选择%f或%e格式、且不输出无意义的零。,2020/8/17,84,最简单的C程序设计 数据输出,在使用printf()函数时要注意: 有些系统要求格式字符必须用小写字母; 2. 格式控制符中,可包含转义字符; 3

38、. 格式说明必须以“ % ”开头; 欲输出字符 % 则应在“格式控制”字符串中用连续两个 % 表示。 5. 不同的系统在实现格式输出时,输出结果可能会有一些小的差别。,2020/8/17,85,2.格式输入函数scanf() 把从输入设备输入的数值按先后顺序存入在内存的地址中去。 一般格式: scanf(格式控制,地址列表),例 main() int a,b,c; scanf(“%d%d%d”, ,3 4 5,3,4,5,2020/8/17,86,最简单的C程序设计 数据输入,scanf()格式字符,2020/8/17,87,最简单的C程序设计 数据输入,scanf()附加格式说明字符,202

39、0/8/17,88,在使用scanf()函数时要注意: Scanf()函数中的“格式控制”后面应当是变量地址; 如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时应输入与这些字符相同的字符; 在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入; 在输入数据时,遇到以下情况时该数据认为结束: 遇空格,或按回车; 遇指定的宽度结束,如“3d”,只取3列; 遇非法输入,2020/8/17,89,3,4,6 ,a= 3.00, b= 4.00, c= 6.00, s= 6.50 area= 5.33,4.6 顺序结构程序设计举例,第五章选择结构程序设计,关系运算符

40、和关系表达式 逻辑运算符和逻辑表达式 If语句三种形式 条件运算符 Switch语句,2020/8/17,91,5.1 关系运算符和关系表达式 1.关系运算符 关系运算实际上是两个量的比较,比较的结果只有两种可能:真(1)、假(0)。 例如: a 3 ? 当a=5时,比较的结果为真; 当a=1时,结果为假。 C语言提供6种关系运算符 (大于) = (大于或等于) = 相等 != 不等,2020/8/17,92,2.关系表达式 用关系运算符或者等式运算符将两个表达式连接起来,叫关系表达式。 合法的关系表达式: ab、 a+bb+c、 (a=3)(b=5)、 (a=3)(b=5)、 ab)(b=0

41、的值为真(在计算机中记为1)。 例:a=3, b=2, c=1, 则: (1)ab的值为1 (2)(ab)=c的值为真(即1) (3)b+cb中d的值为ab的值,为。 (5)f=abc中f的值为c的值,为。,2020/8/17,93,关系、等式和逻辑运算符,关于优先次序 ,=为同一级别, =和!=为同一级别。 在同一级别中,采取由左至右的结合方向。,算术运算符,关系运算符,赋值运算符,高,低,例 ca+b c(a+b) ab!=c (ab)!=c a=bc a = (bc),等式运算符,2020/8/17,94,5.2 逻辑运算符 逻辑运算:产生真假值的运算。 逻辑运算符: ,2020/8/1

42、7,99,选择结构程序设计 if语句,例如:输出两个数中较大的一个。 if (xy) printf(%d,x) ; else printf(%d,y);,2020/8/17,100,选择结构程序设计 if语句,2020/8/17,101,选择结构程序设计 if语句,例如:商场促销,购物500元以上,8折;购物300元以上,85折;购物100元以上,9折;购物50元以上,95折;购物50元以下,不打折。根据消费量,计算优惠率。 设:消费量为 money; 折扣为 cost; 实际花费 price if (money500) cost=0.2; else if (money300) cost=0.

43、15; else if (money100) cost=0.1; else if (money50) cost=0.05; else cost=0; price=money-(money*cost);,2020/8/17,102,选择结构程序设计 if语句,If 语句的嵌套 嵌套的定义:在if 语句中又包含一个或多个if 语句。 嵌套的一般形式: If ( ) if ( ) 语句1 else 语句2 Else if ( ) 语句3 else 语句4 (注意! If 与else的配对关系。),2020/8/17,103,例 比较两个整数的关系。 #include main( ) int x, y

44、; printf (Enter integer X and Y:); scanf (%d%d, ,2020/8/17,104,例 输入两个数,按数值大小次序排列输出. main() float a,b,t; scanf(%f,%f, ,输入为 3.6, -3.2 输出为 -3.20, 3.60,2020/8/17,105,例 输入三个数,按由小到大次序排列并输出。 main() flaot a,b,c,t; scanf(%f,%f,%f, ,输入为: 3,7,1 输出为: 1.00, 3.00, 7.00,2020/8/17,106,选择结构程序设计 程序举例,例 写一程序判断某一年是否是闰年

45、. main() int year,leap; printf(输入年份:); scanf(%d, ,输入年份:2004 2004 is leap year,2020/8/17,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。,2020/8/17,108,选择结构程序设计

46、 if语句,输入为: 4 输出为: x=4, y=1,2020/8/17,109,例 输入一个字符,判断大小写,如是大写,则转换成小写,输出。 main() char c; scanf(%c, printf(%c,c) ,选择结构程序设计 if语句,2020/8/17,110,5.4 switch语句 Switch语句是多分支选择语句,也叫开关语句或者选择语句。 一般形式: switch (表达式) case常量表达式1: 语句1; case常量表达式2: 语句2; case常量表达式n: 语句n; default: 语句n+1; 功能:1.计算表达式的值,与常量表达式的值比较,等于第i个值时

47、,顺 序执行语句序列i、i+1、 、 n+1 2.若与所有常量表达式值都不相等,执行语句序列n+1。,如:switch (a) case 5: printf( ,如:switch (a) case 5: printf( ,2020/8/17,111,选择结构程序设计 switch语句,例 根据成绩等级打出成绩范围. main() char grade; printf(Enter your graden); scanf(%c, ,输入为 B 输出为 7084,2020/8/17,112,选择结构程序设计 switch语句,2020/8/17,113,例:给出百分制成绩,要求输出等级 A,B,C,

48、D,E。 90分以上为A, 8089分为B,7079分为C,6069分为D,60分以下为E。 main() int score,num; char grade; scanf(%d, ,输入为 76 输出为 76 C,2020/8/17,114,选择结构程序设计 switch语句,switch语句的说明 条件表达式的类型和常量表达式的类型是整数、字符。 当表达式的值与某一个 case 后面的常量表达式的值相等时,就执行此 case 后面的语句,若所有的 case 中的常量表达式的值都没有与表达式的值匹配,则执行 default 后面的语句。 每一个 case 的常量表达式的值必须互不相同。 ca

49、se常量表达式只起语句标号作用;必须用break语句终止多个case连续执行,否则只要有一个case满足后,以下的语句全部无条件执行。 多个case可共用一组执行语句。,2020/8/17,115,1 概述 2 goto语句 3 while语句 4 do-while语句 5 for语句 6 循环的嵌套 7 break语句和continue语句 8 程序举例,循环控制,2020/8/17,116,6.1 概述 一般需要使用循环的情况是: 有重复的动作(循环体) 循环次数可以控制(循环条件) 例如: 1+2+3+.+100 在C语言中可以用下列语句实现循环: goto 和 if 结合 while

50、do-while for,2020/8/17,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); ,2020/8/17,118,6.3 while语句 一般形式: While (表达式) 语句 功能:实现“当型循环,先判断,后执行。表达式为

51、真时(非0值),执行while语句的内嵌语句。 说明:, 可以是关系表达式、逻辑表达式或其它类型,表达式后不允许有分号结尾; 语句可以是简单的,也可以是复合的; 循环体中应有使循环趋向于结束的语句。,2020/8/17,119,例 求1+2+3+.+100 。,main() int i=1,sum=0; while (i=100) sum=sum+i; /累加器 i+; printf(%d,sum); ,如果有一个以上的语句循环,则必须用 构成复合语句。 要有修改循环变量的语句。,2020/8/17,120,6.4 do-while语句,一般形式: do 循环语句 while(表达式); 功能

52、: 实现“当型循环结构。 说明:, 当 while 后面的表达式的第一次的值为真时,两种循环得到的结果相同。否则,二者结果不相同。 do while 中的循环体至少执行一次,而 while 语句中的循环语句可能一次都不执行。,表达式,语句,非 0(真),0 (假),2020/8/17,121,例 求1+2+3+.+100 。,main() int i,sum=0; i=1; do sum=sum+i; i+; while (i=100); printf(%d,sum); ,2020/8/17,122,6.5 for 语句 在C语言中用 for 语句构成的循环最为灵活。 一般形式: for(表达

53、式1;表达式2;表达式3)语句 执行过程: 例:for (i=1;i=100;i+) sum=sum+i;,从图中可以看出FOR语句等价于下列程序: 表达式1; While (表达式2) 语句 表达式3; ,2020/8/17,123,说明: 语句的一般形式中的表达式1可以省略,此时应在语句之前给循环变量赋初值(注意!省略表达式1时,其后的分号不能省略); 如:for (; i=100;i+) sum=sum+i; 如果表达式2省略,即不判断循环条件,循环无终止地进行下去; 如:for (i=1; ; i+) sum=sum+1; 表达式3也可以省略,但此时应另外设法保证循环能正常结束; 如:

54、for (i=1;i=100; ) sum=sum+i; i+ 可以省略表达式1和表达式3,只有表达式2,即只给循环条件; 如:for ( ;i=100; ) sum=sum+i; i+ for (; ;) 表示无限循环,相当于while (1)语句;,2020/8/17,124,循环控制 for语句,说明: 循环终止条件的种类: (逻辑)关系表达式: 如:for (; ab 由以上说明可以看出,C语言中 for 语句的功能比其它语言中的 for 语句功能要强、要灵活,它能替代 while 语句。,例求n!=1 2 3 n,main() double s=1; int k; for(k=1;k

55、=100;k+) s=s*k; printf( s=%f ,s); 整数连乘结果一定是整数,而本例中结果数值相当大,用long型都无法存放,因此将存放累乘结果的变量s定义为double型。,2020/8/17,126,6.6 循环的嵌套 嵌套的概念:一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。, while( ) while( ) ,(2) for( ; ; ) for ( ; ; ) ,(3) for( ; ; ) while( ) ,2020/8/17,127,break语句 用来从循环体里退出,中止循环 Continue语句 用来跳过剩下的语句,回到循环开始,6.7 brea

56、k语句和continue语句,2020/8/17,128,例把100200之间不能被3整除的数输出。,main() int n; for (n=100; n=200; n+) if (n%3=0) continue; printf(%d,n); ,2020/8/17,129,例 判断m是否是素数。,操作:用2m-1依次去除m, 若其中有任意一个数被除尽,则没有必要再判断下去,它肯定不是素数,跳出循环;若所有数都不能被除尽,则循环可以自然完成。,#include math.h main() int m, i, k; scanf(%d,2020/8/17,130,例 打印出100到200之间所有的

57、素数。,#include math.h main() int m, i, k,n=0; for (m=101;mk) printf(%d n,m); n=n+1; if(n%10=0) printf(“n”); printf(“n”); ,2020/8/17,131,例 用/41-1/3+1/5-1/7+的公式求的近似值,直到最后一项的绝对值小于10-6为止。,#include math.h main() int s; float n, t, pi; t=1; pi=0; n=1.0; s=1; while (fabs(t)=1e-6) pi=pi+t; n=n+2; s=-s; t=s/n;

58、 pi=pi*4; printf(pi=%10.6fn,pi); ,2020/8/17,132,例 裴波那契数列的第1、2项分别为1、1,从第3个数开始,该数是其前面两项之和。即1,1,2,3,5,8,13,求前40项菲波那契数。 分析:f1-第一个数 f2-第二个数 f1=f1+f2 第三个数 f2=f2+f1 第四个数 main() long f1=1, f2=1; int i; for(k=3;k=20;k+) printf( %12ld%12ld, f1,f2); if(k%2=0) printf( n ); f1=f1+f2; f2=f2+f1; ,2020/8/17,133,循环控

59、制 本章总结,三种循环语句:while, do-while 和 for 建立循环通常有以下情况: 1. 给定次数, for比较适用 for(i=1;ia for (i=1; i=4; i+) for (j=1; j=i; j+) printf( ); for (j=1;j=8-(2*i-1);j+) printf(*); printf(n); ,思考: 如何输出10行图形? 输出图形向右平移20个字符位置,应如何修改程序?,2020/8/17,136,总结,for(; ) while( ) do while( ) continue break goto,2020/8/17,137,例 打印图形

60、。,分析: 行的控制 i:14 *的个数与当前行的关系j=2*i-1 *前面的空格k与行的关系: 开始时,第一行有3个空格 每多一行,少一个空格k=4-i while (i=4) for (k=1,k=4-i,k+) 输出空格; for (j=1,j=2*i-1 ,k+) 输出*; ,* * * *,main() int i,j,k; for(i=1;i=4;i+) for(j=1;j=4-i;j+) printf( ); for(j=1;j=2*i-1;j+) printf(*); printf(n); for(i=1;i=3;i+) for(j=1;j=i;j+) printf( ); f

61、or(j=1;j=7-2*I;j+) ,2020/8/17,138,例 输入若干字母,将它们变成其后的第四个字母,A-E, W-A,非字母字符忽略。,思路: 1.建立循环, 循环结束以输入回车符为准 ; while (c=getchar()!=n) 2.判断输入是否是字符,否则忽略; if (c=a 4. 若变换后超出z时,要轮回. if (cZ while (c=getchar()!=n) if (c=a ,abdEgW efhIkA,2020/8/17,139,6.1 一维数组的定义和引用 6.2 二维数组的定义和引用 6.3 字符数组,第七章数组,2020/8/17,140,在c语言中,

62、除了前面介绍的基本类型之外,还有另外一些数据类型-构造类型。其中数组就属于构造类型中的一种。 数组是有序数据的集合。数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确定数组中的元素。 7.1一维数组的定义和引用 一、定义 一般形式:类型说明符 数组名常量表达式; 例如: int a10;,2020/8/17,141,二、一维数组元素的引用 数组元素的引用形式: 数组名下标 每次可引用一个数组元素,不能引用整个数组 一个数组元素就如同一个简单变量 例 main() int i, a10; for (i=0;i=0;i-) printf(%d,ai); ,9 8 7 6 5 4 3 2 1 0,2020/8/17,142,数组 一维数组的定义和引用,一维数组的初始化 初始化方法:从数组的第一个元素开始依次

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!