




已阅读5页,还剩71页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章 顺序结构与分支结构程序设计,学习目标,熟悉C语言程序的格式; 熟悉赋值语句的使用方法; 理解数据输入输出的概念; 掌握字符数据的输入输出方法; 掌握格式化输入输出数据的方法; 能够用C语言编写简单的顺序结构程序。,2019年7月25日5时17分,1/75,一、C语言程序的格式,一个C语言程序的格式如下: 预处理部分; 宏定义部分 常量定义部分 函数说明部分; 类型 main(参数) 语句; 函数定义; ,2019年7月25日5时17分,2/75,二、 C语句分类,1. 控制语句,2019年7月25日5时17分,3/75,C语句分类,2.函数调用语句,由函数调用表达式后跟一个分号组成,格式:,函数名 (参数列表);,分类:,标准库函数,用户定义函数,标准库函数调用原则:,(1) 要在程序中包含相应的头文件,(2) 调用的一般形式:函数名(参数列表);,2019年7月25日5时17分,4/75,标准函数调用的目的,(1)如数学函数,为了得到函数的返回值。,这类函数的调用一般出现在表达式中,作为表达式语句的一部分。,一般不作为函数调用语句。,(2)为了完成某项任务,而不是为了得到返回值。,在表达式中调用函数,实际上是转去执行一段预先设计好的程序,求出结果后返回调用点。所以函数的值又叫函数的返回值。,调用这类函数时,就直接用函数调用语句。,例:,scanf(“%f“,,printf(“%f“,x);,2019年7月25日5时17分,5/75,C语句分类,3.赋值语句 例如sum = 0;在赋值表达式后面加分号构成表达式语句。 由于在赋值符“=”右边的表达式也可以又是一个赋 值表达式 例如:a = b = c = d = e = 5;按照赋值运算符的右接合性,因此实际上等效于: e = 5; d = e; c = d; b = c; a = b;,2019年7月25日5时17分,6/75,C语句分类,4.空语句,空语句就是一个分号。,格式:,;,功能:,执行该语句不做任何操作,;,2019年7月25日5时17分,7/75,int x = 123,g, s, b; g = x % 10; s = x / 10 %10; b = x / 100; ,C语句分类,5. 复合语句,包含三条语句的复合语句 完成了提取一个数的 个位、十位和百位,由花括弧 括起来的语句序列,表示控制的范围。例,2019年7月25日5时17分,8/75,注意:,(1) 在复合语句中的“内部数据描述语句”中定义的变量,是局部变量, 仅在复合语句中有效。,(2) 复合语句结束的“ ”之后,不需要分号。,(3) 复合语句可以出现在任何数据操作语句可以出现的地方。,2019年7月25日5时17分,9/75,复合语句示例:,#include “stdio.h“ void main() int a = 11, b = 21, c = 31; printf(“a = %dtb = %dtc = %dn“, a, b, c); int b = 22; float c = 3.3; printf(“a = %dtb = %dtc = %fn“, a, b, c); a = b; printf(“a = %dtb = %dtc = %dn“, a, b, c); ,程序运行结果 a = 11 b = 21 c = 31 a = 11 b = 22 c = 3.300000 a = 22 b = 21 c = 31,2019年7月25日5时17分,10/75,三、 基本输入输出操作的实现,C语言本身不提供输入/输出语句。,C语言的输入/输出功能由C语言的标准I/O库函数提供。,C语言的输入/输出库函数名称不是保留字(或称关键字)。如putchar,printf,getchar,scanf。,2019年7月25日5时17分,11/75,(1)函数其调用格式为,putchar(int);,函数的名称,函数的参数,(2)函数功能,向标准输出设备(一般为显示器)输出一个字符,并返回输出字符的ASCII码值。,1. 字符输出函数,2019年7月25日5时17分,12/75,【例3-1】字符输出函数举例,#include ,程序运行结果为: AAAAA,void main() char ch; ch = A; putchar(A); putchar(ch); putchar(x41); putchar(65); putchar (101); ,包含函数putchar的头文件,2019年7月25日5时17分,13/75,(1)函数原型,getchar(void);,函数的名称,无参数,(2)函数功能,从标准输入设备(一般为键盘)读入一个字符,返回该字符的ASCII码值,并且将敲入的字符“回显”到屏幕上。,2. 字符输入函数,2019年7月25日5时17分,14/75,【例3-2】字符输入输出函数举例:,#include /*说明函数getchar的原型包含在哪个文件中*/,void main() putchar(getchar(); ,从键盘输入字符后马上输出,程序运行结果: c c,2019年7月25日5时17分,15/75,注意:,调用函数getchar时,程序执行被中断,等待用户从键盘输入数据。当用户键入字符并敲回车键以后,程序继续运行。若用户输入字符后未按回车键,则键入的内容一直保留在键盘缓冲区中,只有用户键入回车键后,字符输入函数getchar才进行处理。,函数getchar将回车键作为一个字符读入。如果程序中有两个以上函数getchar时,应该一次性输入所需字符,最后再按回车键,如课本31页思考题所示。,无论输入的是英文字母或标点符号还是数字,都是作为字符输入 。,2019年7月25日5时17分,16/75,3. 格式化输出函数,(1)函数原型,printf(char *format ,argument,.);,(2)函数功能,函数printf将一组参数,由format给定的格式规定输出格式,把数据格式化并且输出到标准输出设备。,若出错,则返回负数。,可以有多个参数,2019年7月25日5时17分,17/75,函数调用的一般形式:,printf(“格式控制字符串“,输出项列表);,2019年7月25日5时17分,18/75,(3)格式控制字符:,(i)组成:,普通字符、转义字符、格式说明。,普通字符:,按原样输出,主要用于输出提示信息。,转义字符:,指明特定的操作。,格式说明:,由“ % “ 和“格式字符串“组成:%格式字符串。 它表示按规定的格式输出数据。,2019年7月25日5时17分,19/75,例:,#include “stdio.h“ void main() int a = 97, b = 98; printf(“1: %d %dn“, a, b); /*普通字符,原样输出*/ printf(“2: %d,%dn“, a, b); /*a,b以十进制整数形式输出*/ printf(“3: %c,%cn“, a, b); /*a,b以字符形式输出*/ printf(“4: a = %d,b = %d“, a, b); ,程序运行结果为: 1: 97 98 2: 87,98 3: a,b 4: a = 97,b = 98,2019年7月25日5时17分,20/75,(ii)格式说明的形式:,%flagswidth.precF|N|h|Ltype,方括号表示该项可有可无,可选的标志字符 -:左对齐输出,缺省为右对齐输出 +:正数输出加号(+),负数输出减号(-) 空格:正数输出空格代替加号(+),负数输 出减号(-) 如:+d,-d, d。,十进制整数,指定输出宽度。 指定宽度实际宽度,补空格。 指定宽度实际宽度,按实际输出。 不指定宽度,按实际输出。 如:10d,输出精度指示符。 对整数,表示至少要输出的数字个数,不足补数字,多出则原样输出。 对实数,表示小数点后至多输出的数字个数,不足补数字,多出则舍入处理。 对字符串,表示最多输出的字符个数,不足补空格,多出则丢弃。,输出长度修饰符: F:输出远指针存放的地址。 N:输出近指针存放的地址。 H或h:输出短整型数据的值。 L或l:输出长整型或双精度值。,格式字符,用来进行格式转换。 (重点掌握),2019年7月25日5时17分,21/75,(iii)格式字符(type)一览表,2019年7月25日5时17分,22/75,注意: 使用函数printf时要注意一个问题,那就是输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右,也可从右到左。 Dev C+中为从右到左,2019年7月25日5时17分,23/75,#include “stdio.h“ int main() int a = 3, b = 4; printf(“%dn“, (a = b, b, a + 3); /*输出序列是一个逗号表达式*/ printf(“%dn“, a = b, b, a + 3); /*输出第一个参数变量a的值*/ ,例:,输出结果为: 7 4,2019年7月25日5时17分,逗号表达式作为一个整体,按从左往右顺序逐个计算表达式,值为最后一个表达式(也即表达式n)的值,24/75,注意:,实数运算中的误差不可避免。 double比float精度高。 float实数(单精度)的有效位数是7位,double实数(双精度)的有效位数是16位,超过有效位数的输出和输入均无意义。 e格式符:以指数形式输出实数。%e输出13位,其中:1位整数,1位小数点,6位小数,5位指数(含字符e和指数的符号)。%m.ne%-m.ne 与f格式符中的类似。 g格式符:根据数值的值和精度自动选择f或e格式输出。,2019年7月25日5时17分,25/75,4. 格式化输入函数,(1)函数原型,scanf(char *format ,argument,.);,(2)函数功能,按规定格式从键盘输入若干任何类型的数据给argument所指的单元; 返回读入并赋给argument的数据个数; 遇文件结束返回EOF;出错返回0。,可以有多个参数,2019年7月25日5时17分,26/75,(3)函数调用的一般形式:,scanf(“格式控制字符串“,地址列表);,2019年7月25日5时17分,27/75,(4)格式控制字符:,(i)组成:,普通字符、格式说明。,普通字符:,格式说明:,键盘输入时,要按原样输入,一般起分隔或提示作用。,但分隔或提示作用若由用户输入,就失去了本来的意义,一般采用printf来实现。,% * width F|N h|l type,2019年7月25日5时17分,28/75,(ii)格式说明的形式:,% * width F|N h|l type,输入赋值抑制字符: 表示该格式说明要求输入数据,但不赋值,即在地址列表中没有对应有地址项。,宽度指示符: 表示该输入项最多可输入的字符个数。 如遇空格或不可转换的字符,读入的字符将减少。,地址大小修饰符: F:表示地址列表项中对应的地址为远指针; N:表示地址列表项中对应的地址为近指针。,数据输入类型: h:短整型 l:长整型或双精度类型,必需的格式字符,表示输入数据转换后的数据类型。,2019年7月25日5时17分,29/75,(iii)格式字符(type)一览表:,2019年7月25日5时17分,30/75,scanf (“i=%d“,&i);printf (“i=%d“,i);,scanf (“%d%d%d“, &a,&b,&c);,&:取地址运算符。 表示将所输入后的数据放入对应地址的存储单元中。,2019年7月25日5时17分,31/75,例:,#include “stdio.h“ void main() int a, b; printf(“input a,b:“); scanf(“%d%d“, ,input a,b: 78 a = 7, b = 8,2019年7月25日5时17分,32/75,(iv)注意事项:,scanf()的格式控制字符串中没有转义字符。如scanf (“%dn”, &a);是错误的。,scanf()的格式控制字符串中的普通字符不是用来显示的, 而是输入时要求照普通字符输入的。,scanf()中参数的第二部分一定是地址列表,不能是表达式。,2019年7月25日5时17分,33/75,小结,了解C语句的分类 掌握C中最基本的四个输入输出操作函数的实现 putchar( )和getchar( )是C标准I/O函数库中简单的,也是最容易理解的字符输入输出函数 printf函数( )和 scanf( ) 函数提供了灵活多样的格式化输出和输入,细节规定非常繁琐,在刚开始学习时重点掌握一些常用规则即可。,2019年7月25日5时17分,34/75,学习目标,掌握关系运算符和逻辑运算符的使用方法。 理解选择结构的概念。 掌握如何用if语句构成选择结构。 掌握如何用switch语句和break语句构成多分支选择结构。,2019年7月25日5时17分,35/75,引言,计算分段函数:,y=,3-x x0,2/x x0,C语言用来设计条件选择结构程序的选择语句有两种:if语句、switch语句。,2019年7月25日5时17分,36/75,一、关系运算符和关系表达式,关系运算:比较运算,比较两个操作数,看是否满足给定的关系。,1、关系运算符,:小于 ,53, 35,=:小于等于,1=3,3=1,与数学上()不同,:大于,13,31,=:大于等于,1 =3,3 =1 ,与数学上()不同,=:等于,1=3 ,与数学上(=)不同,!=:不等于,1!=3 ,与数学上()不同,2019年7月25日5时17分,37/75,2、关系表达式,用关系运算符将表达式连接起来的式子,优先级, =,高 低,= !=,结合方向,自左向右,表达式的值,关系成立,即为真,结果为1;,关系不成立,即为假,结果为0;,算术 运算符,高 低,C语言中,真:非0值,假:0值,高 低,=,2019年7月25日5时17分,38/75,二、 逻辑运算符与逻辑表达式,1、逻辑运算符,!:逻辑非,一元运算符,运算规则:取反,真,假,假,真,&:逻辑与 。又称逻辑乘,运算规则:两个操作数均为真,结果为真。,|:逻辑或 。又称逻辑加,运算规则:只要两个操作数有一个为真,结果为真。,2019年7月25日5时17分,39/75,2、逻辑量或逻辑表达式的值,非0 值:真,0值:假,整型 实型 字符型 指针类型,0 0.0 0 NULL,2019年7月25日5时17分,40/75,3、逻辑表达式,用逻辑运算符将表达式连接起来的式子。,优先级,关系 运算符,高 低,& 逻辑与,算术 运算符,高 低,! 逻辑非,高 低,高 低,| 逻辑或,结合性,!:自右向左,&、|:自左向右,高 低,=,2019年7月25日5时17分,41/75,例:,int a = 5; float b = 3.5;,!a,0,!b,0,a&b,1,a|b,1,!a&!b,0,2019年7月25日5时17分,42/75,4、注意,编译器在求解逻辑表达式的值时,采用“非完全求解”的方法,并不是所有的逻辑运算符都被执行,只有在需要执行下一个逻辑运算才能求出表达式的解时,才继续运算。,2019年7月25日5时17分,43/75,非完全求解举例,如果已有定义 :int x = 1, y = 1, z = 1;对如下的逻辑表达式: (x = 0) & ( y = 2) &(z = 3),表达式的结果是0,x的值被赋值为0, y,z的值保持不变。 (x = 5) & ( y = 0) &(z = 3),表达式的结果是0,x、 y的值赋值为5和0,z的值保持不变。 (x=5)| ( y=2) | (z=3) ,表达式的结果是1,x的值被赋值为5, y,z的值保持不变。 (!x)| ( y=0) | (z=3) ,表达式的结果是1,x, y,z的值为1,0,3。,2019年7月25日5时17分,44/75,三、条件语句,1、单分支选择if语句,if语句有三种形式:单分支选择if语句、双分支面具选择if语句、多分支选择if语句。,语句形式:,if (表达式) 语句;,语句执行流程:,1、if语句的三种形式,2019年7月25日5时17分,45/75,【例4-1】利用单分支选择if语句,实现输入两个整数,输出其中的大数。,#include void main() int a, b, max; printf(“n input two numbers: “); scanf(“%d%d“, ,输入a,b,maxb,max=a,max=b,输出max,真,假,2019年7月25日5时17分,46/75,注意:,1) if语句中表达式形式很灵活,可以是常量、变量、任何类型表达式、函数、指针等。只要表达式的值为非零值,条件就为真,反之条件为假。,2) 在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。,3) 在if语句的三种形式中,if语句自动结合一个语句,如果想在满足条件时执行一组(多个)语句,则必须把这一组语句用 括起来组成一个复合语句。,2019年7月25日5时17分,47/75,2、双分支选择if语句,语句形式:,if (表达式) 语句1; else 语句2 ;,语句执行流程:,表达式,语句1,真(非0),假(0),语句2,2019年7月25日5时17分,48/75,【例4-2】利用双分支选择if语句,实现输入两个整数,输出其中的大数。,输入a,b,ab,输出a,结束,真,假,输出b,#include void main() int a, b; printf(“input two numbers:“); scanf(“%d %d“, ,2019年7月25日5时17分,49/75,注意:,if和else语句之间只能有一个语句,当ifelse之间的语句不只一句时,应用一对将语句括起。,if(ab) a+;b+; else a=0;b=10;,2019年7月25日5时17分,50/75,3、多分支选择if语句,语句形式:,if (表达式1) 语句1; else if (表达式2)语句2; else if (表达式n)语句n; else 语句n+1;,2019年7月25日5时17分,51/75,语句执行流程图:,2019年7月25日5时17分,52/75,例:计算分段函数。,2019年7月25日5时17分,53/75,#include ,void main() float x, y; printf(“enter x:“); scanf(“%f“, ,else if (x=1) y=x+5; else if (x10) y=2*x; else y=3/(x-10);,printf(“x=%.2f,y=%.2fn“,x,y); ,if(x=10) printf(“not define x.n“);,计算分段函数程序:,2019年7月25日5时17分,54/75,注意:,(1)当if语句中出现多个“if”与“else”的时候,要特别注意它们之间的匹配关系,否则就可能导致程序逻辑错误; “else”与“if”的匹配原则是“就近一致原则”: 即else与同一层最接近它,而又没有其它else语句与之相匹配的if语句配对。,(2)if语句中条件的写法应尽量简单。,2019年7月25日5时17分,55/75,【例4-3】从键盘输入一个字符,判别它的类别,由ASCII码表可知: ASCII值小于32的为控制字符 ASCII值在“0”和“9”之间的为数字 ASCII值在“A”和“Z”之间为大写字母 ASCII值在“a”和“z”之间为小写字母 其余则为其它字符,2019年7月25日5时17分,56/75,程序:,#include void main() char c; printf(“Input a character: “); c=getchar(); if(c=0 ,2019年7月25日5时17分,57/75,语句含义:,语句形式:,当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。,4、 if语句的嵌套,if ( 表达式) if 语句;,if ( 表达式) if 语句; else if 语句;,2019年7月25日5时17分,58/75,语句执行流程:,else与if的配对原则:,就近一致原则:,2019年7月25日5时17分,59/75,四、 多分支选择语句,1、语句一般形式:,switch (表达式) case 常量1: 语句1; case 常量2: 语句2; case 常量3: 语句3; . case 常量n: 语句n; default : 语句n+1; ,根据表达式的不同值,选择不同的程序分支,又称开关语句。,数值型 或 字符型,常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。,2019年7月25日5时17分,60/75,其执行流程为:,计算表达式的值 然后逐个与其后的常量表达式值相比较 当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。 如果表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。,2019年7月25日5时17分,61/75,【例4-6】输入一个数字,输出对应的星期几的英文单词。,#include void main() int a; printf(“input integer number: “); scanf(“%d“, ,程序运行结果: input integer number: 5 Friday Saturday Sunday error,思考: 为什么出现这种运行结果?,2019年7月25日5时17分,62/75,在“switch”语句中,“case 常量表达式”只相当于一个语句标号,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,因此会继续执行所有后面语句的情况。,为此,语言提供了一种break语句,其功能是可以跳出它所在的switch语句。,运行结果分析:,2019年7月25日5时17分,63/75,2、break语句在多分支选择结构中的应用,switch语句通常和break语句联合使用。 在case的语句后加上break语句,这样,每当执行到break语句时,立即跳出switch语句体,使switch语句真正起到分支的作用。,2019年7月25日5时17分,64/75,将上面的例4-6修改如下:,#include “stdio.h“ void main() int a; printf(“input integer number: “); scanf(“%d“, ,程序运行结果: 5 Friday,2019年7月25日5时17分,65/75,【例4-7】学生分数成绩转换为相应的等级成绩,程序流程图:,2019年7月25日5时17分,66/75,程序源代码及运行结果,#include void main( ) int s; printf(“Input a score:“); scanf(“%d“, ,程序运行结果: Input a score:65 Your score: 65 D,2019年7月25日5时17分,67/75,注意:,多个case语句可以共用一组执行语句。,switch(grade) case A: case B: case C:printf(“grade=60n“);break; default: printf(“grade60“); ,各case和default子句的先后顺序可以变动,而不会影响程序执行结果。,2019年7月25日5时17分,68/75,default语句可以省略不用。,case和default与其后面的常量表达式间至少有一个空格。,switch语句可以嵌套,break语句只跳出它所在的switch语句。,例如case 10,不能写成case10, 这时编译系统会把case10当成一个标识符来对待。,2019年7月25日5时17分,69/75,五、应用举例,【例4-8】输入三个整数,输出最大
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国非快充纯电动客车行业发展监测及发展趋势预测报告
- 2025至2030中国消毒蒸馏水器行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国注射给药行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国沼气净化器市场未来趋势及应用前景建议报告
- 2025至2030中国油库汽油蒸汽收集系统行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国汽车散热器风扇罩行业发展趋势分析与未来投资战略咨询研究报告
- 2025至2030中国板式家具机械市场产业运行态势及投资规划深度研究报告
- 2025年消防安全知识培训考试题库(消防安全管理体系)消防安全管理制度检测
- GB/T 45709-2025聚对苯二甲酸乙二醇酯纤维及切片绝对分子质量及其分布的测定高效聚合物色谱-多角度激光光散射法(APC-MALLS)
- GB/T 45818-2025温室气体产品碳足迹量化方法与要求照明产品
- 方解石采购合同范本
- 辽宁省大连市甘井子区2023-2024学年八年级下学期期末考试物理试题
- 专升本合同范本
- 老年人体检分析报告及改进措施
- SAG超级抗原 细胞免疫抗衰
- GB/T 13077-2024铝合金无缝气瓶定期检验与评定
- SY-T 6966-2023 输油气管道工程安全仪表系统设计规范
- 身份证知识课件
- GB/T 43780-2024制造装备智能化通用技术要求
- 实验10乙醇乙酸的主要性质
- 医疗环境表面清洁与消毒课件
评论
0/150
提交评论