C语言学习文档03._第1页
C语言学习文档03._第2页
C语言学习文档03._第3页
C语言学习文档03._第4页
C语言学习文档03._第5页
已阅读5页,还剩115页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计 第3章 程序控制结构 本章主要内容:本章主要内容: C语言语句语言语句 关系运算和逻辑运算关系运算和逻辑运算 顺序结构程序设计顺序结构程序设计 选择结构程序设计选择结构程序设计 循环结构程序设计循环结构程序设计 一定要掌握一定要掌握C C语言的基本语句,如赋值语句,语言的基本语句,如赋值语句, 函数调用语句,分支语句和循环语句,并能灵活使函数调用语句,分支语句和循环语句,并能灵活使 用这些语句设计各种结构的程序。用这些语句设计各种结构的程序。 第3章 程序控制结构 实际问题的求解算法往往是复杂的,包括实际问题的求解算法往往是复杂的,包括顺序顺序 的计算步骤,以及许多的计算步骤,

2、以及许多不同计算路径不同计算路径和一些和一些重复重复的的 计算过程。这些计算路径的选择和计算过程的重复,计算过程。这些计算路径的选择和计算过程的重复, 需要某些条件的分析判断,因此,算法的流程是重需要某些条件的分析判断,因此,算法的流程是重 要的。算法即问题的求解过程,最终要用计算机程要的。算法即问题的求解过程,最终要用计算机程 序语言序语言(如如C语言语言)的程序来描述,也可以说需要用的程序来描述,也可以说需要用 程序语言的语句实现。编写程序的过程中,算法的程序语言的语句实现。编写程序的过程中,算法的 流程控制映射为程序的流程控制映射为程序的控制结构控制结构。 在在C语言中,程序的控制结构分

3、为顺序结构、语言中,程序的控制结构分为顺序结构、 选择结构和循环结构,任何复杂的程序都是由这三选择结构和循环结构,任何复杂的程序都是由这三 种基本结构组成的。通过本章的学习,理解并掌握种基本结构组成的。通过本章的学习,理解并掌握 C语言中的语句类型和实现三种结构程序的语句的语言中的语句类型和实现三种结构程序的语句的 使用方法使用方法 。 3.1 C语言语句 C语言语句可以看作计算机系统的操作指令,用来完语言语句可以看作计算机系统的操作指令,用来完 成一定的操作任务。成一定的操作任务。C语言语句可以分为以下语言语句可以分为以下5种类型。种类型。 1 1表达式语句表达式语句 表达式语句由表达式加上

4、分号表达式语句由表达式加上分号“;”组成。其一般形式组成。其一般形式 为:为: 表达式表达式; 例如:例如: x=y+z;/*赋值表达式加分号,赋值语句赋值表达式加分号,赋值语句*/ a=520; /*赋值表达式加分号,赋值语句赋值表达式加分号,赋值语句*/ y+z; /*合法语句,但无实际意义合法语句,但无实际意义*/ i+;+i; /*增增1语句,语句,i值增值增1*/ 分号是分号是C语言中语句的标志,一个语句必须以分号结语言中语句的标志,一个语句必须以分号结 束,没有分号,则不是语句。束,没有分号,则不是语句。 3.1 C语言语句 2 2函数调用语句函数调用语句 由函数调用加上分号由函数

5、调用加上分号“;”组成。其一般形式为:组成。其一般形式为: 函数名函数名( (参数列表参数列表);); 例如:例如: printf(n); 调用库函数调用库函数printf( ),输出换行字符。,输出换行字符。 3 3控制语句控制语句 C语言有语言有9个控制语句,用于完成选择、重复和跳转操个控制语句,用于完成选择、重复和跳转操 作等控制功能,以实现程序的各种控制结构。可分为三类:作等控制功能,以实现程序的各种控制结构。可分为三类: 分支语句:分支语句:if 、switch语句。语句。 循环语句:循环语句:for、while 、do-while语句。语句。 跳转语句:跳转语句:break、con

6、tinue、goto、return语句。 语句。 3.1 C语言语句 4 4复合语句复合语句 复合语句是用花括号将若干语句组合在一起,又称为复合语句是用花括号将若干语句组合在一起,又称为 分程序,语法上相当于一条语句。复合语句的一般形式:分程序,语法上相当于一条语句。复合语句的一般形式: 语句语句1;1;语句语句2;2; ;语句语句nn 例如:例如: i+; printf(%dn,i); 5 5空语句空语句 只有一个分号的语句称为空语句。它的一般形式是:只有一个分号的语句称为空语句。它的一般形式是: ; 空语句是什么也不做的语句。空语句是什么也不做的语句。 ifif、whilewhile、fo

7、rfor和和do-whiledo-while控制的语句只能是一条且必须控制的语句只能是一条且必须 有一条,所以这些语句的内嵌语句一般是复合语句或空语句。有一条,所以这些语句的内嵌语句一般是复合语句或空语句。 3.2 顺序结构程序设计 顺序结构程序相对比较简单。这种程序中主要顺序结构程序相对比较简单。这种程序中主要 使用赋值语句及数据的输入和输出语句使用赋值语句及数据的输入和输出语句(函数函数)。 程序运行时,依书写顺序,每条语句执行一次。程序运行时,依书写顺序,每条语句执行一次。 l赋值语句赋值语句 l数据输出函数数据输出函数 l数据输入函数数据输入函数 A B 3.2.1 赋值语句 赋值语句

8、是一个应用十分普遍且简单的语句。赋值语赋值语句是一个应用十分普遍且简单的语句。赋值语 句的一般形式为:句的一般形式为: 。 赋值表达式;赋值表达式; 赋值语句是一种表达式语句,在赋值表达式的后面加赋值语句是一种表达式语句,在赋值表达式的后面加 上一个分号,就构成了赋值语句。上一个分号,就构成了赋值语句。 例如 例如: c=a+b*8 i+ j+=5 是赋值表达式,而是赋值表达式,而 c=a+b*8; i+; j+=5; 是赋值语句。是赋值语句。 前面我们已经学过了赋值表达式,要注意前面我们已经学过了赋值表达式,要注意 区分两者的不同点:区分两者的不同点: 小小 结结 (1)赋值表达式不能有分号

9、赋值表达式不能有分号“;”,而赋值语,而赋值语 句一定要有分号句一定要有分号“;”,这是最本质的区别。,这是最本质的区别。 (2)赋值表达式中的赋值号赋值表达式中的赋值号“=”可以连用,可以连用, 而赋值语句中的赋值号而赋值语句中的赋值号“=”不能连用。不能连用。 (3)赋值表达式可以包括在其他表达式之中。赋值表达式可以包括在其他表达式之中。 简单的程序结构。 void main() int x,y,z; /*定义三个整型变量,是定义三个整型变量,是C语言中的声明部分语言中的声明部分*/ x=123;y=234; /*以下语句是以下语句是C语言中的语句,是执行部分语言中的语句,是执行部分*/

10、z=x-y; printf(x-y=%dn,z); 请找出上程序段中的说明语句及执行语句(表达式语请找出上程序段中的说明语句及执行语句(表达式语 句及函数调用语句)。句及函数调用语句)。 分析下面程序结构 #include main() int a,b,c; scanf(%d,%d, c=a+b; printf(nc=%dn,c); 预处理语句预处理语句 变量变量a,b,c声明声明 输入变量输入变量a,b的值的值 赋值语句赋值语句c=a+b 输出变量输出变量c的值的值 分析 从上例可以看出,顺序结构的程序框架如下:从上例可以看出,顺序结构的程序框架如下: #开头的预编译处理命令行开头的预编译处

11、理命令行 main() 局部变量声明语句局部变量声明语句; 可执行语句序列可执行语句序列; 3.2.2 数据输出 一个完整的程序,通常要求具备输入和输出功能。数据离一个完整的程序,通常要求具备输入和输出功能。数据离 开主机称为开主机称为“输出输出”,数据进入主机称为,数据进入主机称为“输入输入”。如下图所。如下图所 示:示: C C语言本身没有输入输出语句,输入输出操作是通过调用语言本身没有输入输出语句,输入输出操作是通过调用 库函数来实现的。在库函数来实现的。在C C标准函数库中提供了这些函数,如标准函数库中提供了这些函数,如scanfscanf 和和printfprintf函数等。使用输入

12、函数等。使用输入/ /输出函数时,应在程序的开头写输出函数时,应在程序的开头写 上命令:上命令:#include #include 1 1字符输出函数字符输出函数 (putchar(putchar函数函数) ) 字符输出函数的一般形式为:字符输出函数的一般形式为: putchar(putchar(字符型或整型数据字符型或整型数据) ) 主主 机机 CPU 内存内存 外设:如外设:如 显示器、打印机、显示器、打印机、 键盘、扫描仪、键盘、扫描仪、 磁盘磁盘 输出输出 输入输入 3.2.2 数据输出 putchar()函数的功能是向终端函数的功能是向终端(显示器显示器)输出一个字符。输出一个字符。

13、 其中,函数的参数其中,函数的参数(圆括号中的数据圆括号中的数据)可以是字符常量、变量可以是字符常量、变量 或表达式,也可以是转义字符,还可以是整数。或表达式,也可以是转义字符,还可以是整数。 请看下面的程序:请看下面的程序: 【例例3-1】在屏幕上输出在屏幕上输出“BOY”。(演示)。(演示) #include stdio.h void main() char a,b,c; a=B;b=O;c=Y ; putchar(a);putchar(b);putchar(c); 程序运行结果:程序运行结果: BOY 3.2.2 数据输出 【例例3-2】输出换行字符。输出换行字符。 (演示)(演示) #

14、include stdio.h void 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 #include main() char x,y,z; x=a;y=+;z=b; putchar(x);putchar(y);putchar(z); putchar(n);putchar(132); 3.2.2 数据输出 2 2格式输出函数格式输出函数 (printf(printf函数函数) ) printf函

15、数可以输出多个任意类型的数据。它的功能是在终端函数可以输出多个任意类型的数据。它的功能是在终端 设备上按指定的格式输出数据。设备上按指定的格式输出数据。printf函数的一般形式为:函数的一般形式为: printf(格式控制串,输出项表格式控制串,输出项表) 例如:例如:printf( “x=%d,y=%dn ,x,y) 格式控制串通常由格式控制串通常由格式说明格式说明和和普通字符普通字符两种内容。两种内容。格式说明格式说明 由由“% %”和格式字符组成,如和格式字符组成,如%d%d、%f%f等,它指定所在位置输出数据的等,它指定所在位置输出数据的 格式,实际输出的数据在输出项中给出。格式,实

16、际输出的数据在输出项中给出。普通字符普通字符是希望原样输出是希望原样输出 的字符,其作用是说明、标注,使输出数据的意义更明确。如的字符,其作用是说明、标注,使输出数据的意义更明确。如x=x=、 y=y=、换行字符、换行字符nn等。等。 输出项表是用逗号分隔的若干个表达式输出项表是用逗号分隔的若干个表达式( (当然,也可以是常量当然,也可以是常量 或变量或变量) ),表达式的值将在对应的格式说明处输出,表达式的类型,表达式的值将在对应的格式说明处输出,表达式的类型 应与格式说明要求的数据类型对应一致。请看下面的程序应与格式说明要求的数据类型对应一致。请看下面的程序 格式格式控制串控制串输出项表输

17、出项表 3.2.2 数据输出 #include void main() int a=123,b=456,c; /*定义整型变量定义整型变量a,b,c并初始化并初始化a,b*/ c=a;a=b;b=c; /*将变量将变量a和和b的值交换的值交换*/ printf(a=%d, b=%dn, a , b); 程序的输出结果是:程序的输出结果是: a=456, b=123 分析:分析:printf()函数中的格式控制串是:函数中的格式控制串是:a=%d, b=%dn, 其含义是先输出其含义是先输出“a=”,然后在第一个格式说明,然后在第一个格式说明“%d”处按十进制整数处按十进制整数 格式输出第一个表

18、达式的值,再输出格式输出第一个表达式的值,再输出“, b=”后,在第二个格式说明后,在第二个格式说明 “%d”处按十进制整数格式输出第二个表达式的值,最后输出换行字符处按十进制整数格式输出第二个表达式的值,最后输出换行字符 “n”。格式说明与表达式的对应关系如下图所示:。格式说明与表达式的对应关系如下图所示: printf(a=%d, b=%dn, a , b); 3.2.2 数据输出 格式说明及其作用如下表所示格式说明及其作用如下表所示: : 格 式 说 明作 用 % c以 字 符 形 式 输 出 , 只 输 出 个 字 符 % d或 % i以 带 符 号 的 十 进 制 形 式 输 出 整

19、 型 数 % o以 八 进 制 无 符 号 形 式 输 出 整 数 (不 带 前 导0) % x或 % X以 十 六 进 制 无 符 号 形 式 输 出 整 数 (不 带 前 导0 x或0X) % u以 无 符 号 的 十 进 制 形 式 输 出 整 型 数 % f以 带 小 数 点 的 形 式 输 出 单 、 双 精 度 实 数 , 小 数 位 默 认 为6位 % e或 % E以 指 数 形 式 输 出 单 、 双 精 度 实 数 , 输 出6位 有 效 数 字 , 1位 非0整 数 % g或 %G由 系 统 自 动 选 用 % f或 % e格 式 , 不 输 出 无 意 义 的0, 以 使

20、 输 出 宽 度 最 小 % s输 出 字 符 串 中 的 字 符 , 直 至 遇 到 “ 0” % p输 出 变 量 的 内 存 地 址 % %输 出 一 个 % 3.2.2 数据输出 格式说明中还可以使用格式修饰符,其一般形式为:格式说明中还可以使用格式修饰符,其一般形式为: “%m.n%m.n格式字符格式字符” 如:如:printf(x=%5dprintf(x=%5d,y=%7.2fy=%7.2f,x x,y)y); 格式修饰符及其作用如下表所示:格式修饰符及其作用如下表所示: 格 式 修 饰 符意 义 字 母l或L用 于 长 整 型 数 据 的 输 出 , 可 用 在 格 式 字 符d

21、、 i、 o、 x、 X、 u前 m(正 整 数 ) 数 据 输 出 的 最 小 宽 度 , 当 数 据 实 际 宽 度 超 过m时 , 则 按 实 际 宽 度 输 出 如 实 际 宽 度 短 于m, 则 输 出 时 前 面 补0或 空 格 n(正 整 数 )对 于 实 数 , 表 示 输 出n位 小 数 ; 对 字 符 串 , 表 示 从 左 截 取 的 字 符 个 数 -输 出 的 字 符 或 数 字 在 域 内 向 左 对 齐 +输 出 的 数 字 前 带 有 正 负 号 0输 出 在 数 据 前 的 多 余 空 格 处 加 前 导0 #用 在 格 式 字 符o或x前 , 使 输 出 八

22、 进 制 或 十 六 进 制 数 时 输 出 前 缀0或0 x 格式说明符 格式说明符由格式说明符由“% %”开头,以一个英文字母结开头,以一个英文字母结 束,它表明输出数据的类型;其间还可以有一些束,它表明输出数据的类型;其间还可以有一些 格式控制字符,用以说明数据输出的长度、位数、格式控制字符,用以说明数据输出的长度、位数、 对齐方式等。在对齐方式等。在Turbo CTurbo C中格式说明符的一般形中格式说明符的一般形 式为:式为: %标志标志输出最小宽度输出最小宽度m.精度 精度n长度长度类型类型 其中:其中: :表示可选项。:表示可选项。 标志标志:是由字符构成的,它表示数值输出时按

23、:是由字符构成的,它表示数值输出时按 某种格式,常用的字符有、某种格式,常用的字符有、0. 输出最小宽度输出最小宽度m:m是十进制整数,它表示用十进是十进制整数,它表示用十进 制输出的最少位数,当需要输出的数据长度超过制输出的最少位数,当需要输出的数据长度超过 该数时,该选项不起作用,数据按实际位进行输该数时,该选项不起作用,数据按实际位进行输 出,当需要输出的数据长度小于该数时,则在该出,当需要输出的数据长度小于该数时,则在该 数的左边补空格或数的左边补空格或0。 .精度精度n:是:是“.”加上十进制整数加上十进制整数n。其含义是:如。其含义是:如 果输出的是数值,则该数表示小数位数,若实际

24、果输出的是数值,则该数表示小数位数,若实际 位数大于所定义的精度,则截去超过部分;如果位数大于所定义的精度,则截去超过部分;如果 输出的是字符,则表示输出字符的个数。输出的是字符,则表示输出字符的个数。 数据长度数据长度:是字符,它有两种形式:是字符,它有两种形式:h、l。h表示表示 按短整型量输出,按短整型量输出,l表示按长整型量输出。表示按长整型量输出。 类型类型:是格式说明符中必须要有的,它表示输出列:是格式说明符中必须要有的,它表示输出列 表里要输出的数据类型。表里要输出的数据类型。 3.2.2 数据输出 #include #include void main()void main()

25、 int i=-1; int i=-1; long l=-1; long l=-1; unsigned u=65535; unsigned u=65535; float f=123.456; float f=123.456; char c=a; char c=a; printf(i=%d,i=%o,i=%x,i=%un,i,i,i,i); printf(i=%d,i=%o,i=%x,i=%un,i,i,i,i); printf(l=%ld,l=%lo,l=%lx,l=%lun,l,l,l,l); printf(l=%ld,l=%lo,l=%lx,l=%lun,l,l,l,l); printf(

26、u=%d,u=%o,u=%x,u=%un,u,u,u,u); printf(u=%d,u=%o,u=%x,u=%un,u,u,u,u); printf(f=%f,f=%7.2f,f=%-7.2fnf=%e,f=%gn,f,f,f,f,f);printf(f=%f,f=%7.2f,f=%-7.2fnf=%e,f=%gn,f,f,f,f,f); printf(c=%c,c=%3c,c=%-3cn,c,c,c); printf(c=%c,c=%3c,c=%-3cn,c,c,c); printf(s=%sprintf(s=%s, ,s=%7.3ss=%7.3s, ,s=s=, ,%-.3sn,1234

27、5,12345,12345);%-.3sn,12345,12345,12345); printf(x=%d,y=%cn,a,65); printf(x=%d,y=%cn,a,65); 演示书例演示书例3-33-3至至3-63-6 #include main() int a,b,c; a=10;b=20;c=-30; printf(a=%d, a=%o, a=%+dn,a,a,a); printf(b=%d, b=%x, b=%5dn,b,b,b); printf(c=%d, c=%5d, c=%+dn,c,c,c); #include main() int a,b,c; a=123;b=234

28、; c=a+b; printf(na+b=%d+%d=%d,a,b,c); printf(na+b=%hd+%hd=%hd,a,b,c); printf(na+b=%2d+%2d=%5d,a,b,c); printf(na+b=%02d+%02d=%05d,a,b,c); #include main() float x,y,z; x=123.234;y=0.000345;z=-98.567; printf(x=%.4f, x=%.2f, x=%+en,x,x,x); printf(y=%f, y=%8.4f, y=%10.3en,y,y,y); printf(z=%+f, z=%+e, z=%

29、+gn,z,z,z); #include main() double x,y,z; x=123.234;y=-0.000345;z=-98.567; printf(x=%lf, x=%.4lf, x=%2lf, x=%+e n,x,x,x,x); printf(y=%lf, y=%+lf, y=%len,y,y,y); printf(z=%fn,z); #include main() printf(n %c,a); /*输出单个字符输出单个字符*/ printf(n %s,abc); /*输出一个字符串输出一个字符串*/ 3.2.3 数据输入 数据输入指的是程序运行时,通过输入设备数据输入指的

30、是程序运行时,通过输入设备(键盘键盘)为程序提供数据。为程序提供数据。 相应的,在程序中就要使用数据输入函数。与输出函数对应,常用的输入相应的,在程序中就要使用数据输入函数。与输出函数对应,常用的输入 函数有:字符输入函数函数有:字符输入函数(getchar)和格式输入函数和格式输入函数(scanf)。 1字符输入函数字符输入函数(getchar函数函数) getchar函数与函数与putchar函数的作用正好相反,它的功能是从输入函数的作用正好相反,它的功能是从输入 终端设备终端设备(一般指键盘一般指键盘)上输入一个字符。上输入一个字符。 getchar函数的一般形式为:函数的一般形式为:

31、getchar(); 功能是从终端设备输入功能是从终端设备输入(读取读取)一个字符,函数的值为输入的字符。可一个字符,函数的值为输入的字符。可 以将这个值赋给一个字符以将这个值赋给一个字符(或整型或整型)变量,从而将这个字符保存起来。在程变量,从而将这个字符保存起来。在程 序中的使用形式一般为:序中的使用形式一般为: int c; c=getchar(); 请看下面的程序:请看下面的程序: 3.2.3 数据输入 例例3-4 键盘输入一个小写字母,输出对应的大写字母。键盘输入一个小写字母,输出对应的大写字母。 #include stdio.h void main() char c; c=getc

32、har(); c=c+32; putchar(c); 程序运行情况:程序运行情况: a (键盘输入键盘输入) A (程序输入程序输入) #include main() char str1,str2; str1=getchar(); str2=getchar(); printf(n%c,%cn,str1,str2); #include main() int str; str=getchar(); printf(n%d,%cn,str,str); 3.2.3 数据输入 2 2格式输入函数格式输入函数 (scanf(scanf函数函数) ) scanf函数可以通过键盘输入多个任意类型的数据。它的功能

33、是按指函数可以通过键盘输入多个任意类型的数据。它的功能是按指 定的格式从键盘上输入数据。定的格式从键盘上输入数据。 scanf函数的一般形式为:函数的一般形式为: scanf(格式控制串,地址表列格式控制串,地址表列); 例如:例如: 格式控制串的含义与格式控制串的含义与printfprintf函数中的基本相同,例中函数中的基本相同,例中%d%d%d%d表示要从表示要从 键盘输入两个整数;键盘输入两个整数; /*变量定义变量定义*/ printf(“输入矩形的长和宽:输入矩形的长和宽:”); /*输出提示信息输出提示信息*/ scanf(%d%d, /*从键盘输入从键盘输入2个整数个整数*/

34、printf(Area is %dn,w*h); /*输出结果输出结果*/ 程序运行如下:程序运行如下: 6 8 (键盘输入键盘输入6 8后,按回车,数据之间用空格分隔后,按回车,数据之间用空格分隔) Area is 48 程序运行时,当执行到程序运行时,当执行到scanf函数调用时,程序暂停运行,等待用户函数调用时,程序暂停运行,等待用户 从键盘上输入数据,当用户按格式要求输入数据并按回车键后,数据将被从键盘上输入数据,当用户按格式要求输入数据并按回车键后,数据将被 保存在地址指定的存储区域中,或者说数据被赋值给保存在地址指定的存储区域中,或者说数据被赋值给“ 执行该函数调用时,若输入执行该

35、函数调用时,若输入 1234a1234.5 格式控制串中的格式控制串中的%d要求输入连续的数字,在读取要求输入连续的数字,在读取1234后遇字后遇字 母母a,整数读取结束,将,整数读取结束,将1234保存在变量保存在变量a中;中;%c要求读取一个字要求读取一个字 符,将字符符,将字符a保存在变量保存在变量b中;其后的中;其后的1234.5按按%f格式读取,保存格式读取,保存 在变量在变量c中。若在中。若在1234和字母和字母a之间有一个空格,则读取并存储在变之间有一个空格,则读取并存储在变 量量a,b,c的数据依次是:的数据依次是:1234、空格和、空格和0。 3.2.4 程序举例 例例3-6

36、 输入三角形的三边长,求三角形的面积。输入三角形的三边长,求三角形的面积。 分析:已知三角形的三边长度求三角形的面积,要使用海伦公式:分析:已知三角形的三边长度求三角形的面积,要使用海伦公式: C语言源程序如下:语言源程序如下: #include math.h void main() float a,b,c,s,area; printf(输入三角形的三边长度:输入三角形的三边长度:); scanf(%f,%f,%f, s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(a=%7.2f,b=%7.2f,c=%7.2fn,a,b,c); print

37、f(arae=%7.2fn, area); 2 )()( cba scsbsassarea 其中: #include main() int a,b,c; scanf(%3d%3d%4d, printf(na=%d,b=%d,c=%dn,a,b,c); 3.2.4 程序举例 #include main() double a,b,c; scanf(%lf,%lf, c=a*b; printf(na*b=%lf*%lf=%len,a,b,c); 3.2.4 程序举例 #include main() char str1,str2; scanf(%c%c, printf(n%c %cn,str1,str

38、2); 3.2.4 程序举例 #include main() int x,y; scanf(%2d%*3d%4d, printf(nx=%d,y=%d n,x,y); 3.2.4 程序举例 #include main() int a; scanf(%d, printf(na=%ldn,a); 3.2.4 程序举例 从键盘上输入两个整数放入变量从键盘上输入两个整数放入变量a,b中,编程将这两个变量中中,编程将这两个变量中 的数据交换。的数据交换。 #include main() int a,b,c; a=3;b=5; c=a;a=b;b=c; printf(a=%d,b=%dn,a,b); 3

39、5 a 3 c b 3.2.4 程序举例 从键盘上输入一个英文小写字母,编程输出该字母所对应从键盘上输入一个英文小写字母,编程输出该字母所对应 的的ASCIIASCII码和所对应的大写字母。码和所对应的大写字母。 #include main() char s1,s2; s1=getchar(); s2=s1-32; printf(%d,%cn,s1,s1); putchar(s2); 3.2.4 程序举例 分析下面程序的运行结果。分析下面程序的运行结果。 #include main() int x=1,y=5; printf(x=%d,y=%d,x,y); 3.2.4 程序举例 3.2.4 程

40、序举例 分析下面程序的运行结果分析下面程序的运行结果 #include main() int a,b; a=0103; b=+a; printf(%d,%dn,a-,-b); printf(%c,%cn,+a,b+); 0753 2 xx编程求方程的解编程求方程的解 #include #include main() float a,b,c,d,x1,x2; a=3;b=-5;c=-7; d=b*b-4*a*c; x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a); printf(x1=%.4f , x2=%.4fn,x1,x2); 演示书例演示书例3-9、例、例

41、3-10 3.2.4 程序举例 3.3 选择结构 选择结构又称分支结构,是程序结构中重要的一种结构类选择结构又称分支结构,是程序结构中重要的一种结构类 型。在程序设计时,当需要进行选择、判断处理时,就要用到型。在程序设计时,当需要进行选择、判断处理时,就要用到 分支结构。分支结构。C语言中有两种实现选择控制的语句:语言中有两种实现选择控制的语句: l条件分支语句条件分支语句(if语句语句) l开关分支语句开关分支语句(switch语句语句) 这两种语句各有其特点,前者用于两个分支的选择,后者这两种语句各有其特点,前者用于两个分支的选择,后者 则适合于多分支选择。则适合于多分支选择。 无论是无论

42、是if语句,还是语句,还是3.4节介绍的循环语句,都要使用控节介绍的循环语句,都要使用控 制条件,在此先介绍用于描述条件的关系表达式和逻辑表达式。制条件,在此先介绍用于描述条件的关系表达式和逻辑表达式。 3.3.1 关系运算符与关系表达式 1 1关系运算符关系运算符 在程序中经常需要比较两个量的大小关系,以决定程序下一步的工在程序中经常需要比较两个量的大小关系,以决定程序下一步的工 作。比较两个量的运算符称为关系运算符。作。比较两个量的运算符称为关系运算符。C语言中有语言中有6种关系运算符:种关系运算符: (大于大于)、=(大于或等于大于或等于)、(小于 小于)、5 关系不成立,表达式的值为关

43、系不成立,表达式的值为0(假 假) 5=3 关系成立,表达式的值为关系成立,表达式的值为1(真 真) (35)=3) 关系成立,表达式的值为关系成立,表达式的值为1(真 真) 10%2=0 关系成立关系成立,表达式的值为表达式的值为1(真真),说明说明10能被能被2整除整除 year%4=0 关系成立时,说明变量能被关系成立时,说明变量能被4整除整除 任何非零的数值被认作任何非零的数值被认作“真真” 任何任何0值都被认为假值都被认为假 3.3.2 逻辑运算符与逻辑表达式 1 1C C语言有三个逻辑运算符语言有三个逻辑运算符 !(逻辑非逻辑非) 、 char c=A; x=(a scanf(%d

44、, if(xy) printf(%dn,x); else printf(%dn,y); 程序中的两条程序中的两条printf()函数调用语句,在函数调用语句,在 程序的一次执行中,只执行其中的一条。程序的一次执行中,只执行其中的一条。 所以,所以,ifelse语句的功能是在两条被语句的功能是在两条被 控制的语句中选择其中的一条执行。控制的语句中选择其中的一条执行。 3.3.3 if语句 3. if语句的嵌套形式语句的嵌套形式 if语句控制的语句本身又是语句控制的语句本身又是 if语句,这种情况称为语句,这种情况称为if语句的语句的 嵌套。嵌套形式又可分为两种:嵌套。嵌套形式又可分为两种: 规则

45、嵌套规则嵌套和和任意嵌套任意嵌套。 规则嵌套的一般形式规则嵌套的一般形式 if(表达式表达式1) 语句 语句1 else if(表达式表达式2) 语句语句2 else if(表达式表达式n) 语句语句n else 语句语句n+1 被 嵌 套 的被 嵌 套 的 i f 语 句 固 定 在语 句 固 定 在 else下,这种嵌套结构又称为下,这种嵌套结构又称为 else if结构,控制过程如右图结构,控制过程如右图 所示:所示: 请看下面的应用示例:请看下面的应用示例: 3.3.3 if语句 例例3-9 输入一个四则运算符,即输入一个四则运算符,即+、-、*、/中的任意一个,输出中的任意一个,输出

46、 对应的英文单词:对应的英文单词:plus、minus、multiply、divide,若输入了其,若输入了其 他字符,则输出三个问号。他字符,则输出三个问号。 #include void main( ) char c; printf(Enter a character:); c=getchar( ); if(c=+) printf(nPlus!n); else if(c=-) printf(nMinus!n); else if(c=*) printf(nMultiply!n); else if(c=/) printf(nDivide!n); else printf(n?n); 分段函数分段函

47、数 y= (x+1)/(x-2) x0 0 x=0或或x=2 (x-1)/(x-2) x0) y=(x+1)/(x-2); else y=(x-1)/(x-2); printf(y=%f,y); 输入输入-10-10 输入输入 0 0 输入输入1010 3.3.3 if语句 3.3.3 if语句 任意嵌套的一般形式任意嵌套的一般形式 内嵌的内嵌的ifif语句可以是前面语句可以是前面 介绍的介绍的3 3中形式之一,如果内嵌中形式之一,如果内嵌 的的ifif语句没有语句没有elseelse部分,则特部分,则特 别要注意别要注意ifif与与elseelse的配对关系,的配对关系, elseelse总

48、是与它前面的最近的总是与它前面的最近的ifif 语句配对。语句配对。请分析下面请分析下面ifif语句语句 的嵌套关系。的嵌套关系。 if(if() ) if(if() ) 语句语句1 1 else else 语句语句2 2 else else if(if() ) 语句语句3 3 else else 语句语句4 4 内嵌的内嵌的if 内嵌的内嵌的if 注意:书写格式不决定控制关系。如果程序员希望第一个注意:书写格式不决定控制关系。如果程序员希望第一个ifif与第一与第一 个个elseelse配对,则应写成:配对,则应写成: if(if() ) if(if() ) 语句语句1 1 else els

49、e if(if() ) 语句语句3 3 else else 语句语句4 4 嵌套关系是嵌套关系是 if(if() ) if(if() ) 语句语句1 1 else else if(if() ) 语句语句3 3 else else 语句语句4 4 3.3.3 if语句 if(if() ) if(if() ) 语句语句1 1 else else if(if() ) 语句语句3 3 else else 语句语句4 4 使用花括号将内嵌的使用花括号将内嵌的if语句括起来,限定内嵌语句括起来,限定内嵌if语句的范围。语句的范围。 请看下面的应用示例:请看下面的应用示例: 注意! 1. if语句的条件表达

50、式一般是逻辑表达式或关系表达式,但语句的条件表达式一般是逻辑表达式或关系表达式,但 也可以是其它任何类型的表达式,如赋值表达式等,甚也可以是其它任何类型的表达式,如赋值表达式等,甚 至也可以是一个变量。只要表达式的值非至也可以是一个变量。只要表达式的值非0,即为,即为“真真” ;表达式值为;表达式值为0,即为,即为“假假”。 如如:if(a=5printf(“%dn”,a); 表达式表达式a=5的值永远为非的值永远为非0,条件永远为真。这种情况,条件永远为真。这种情况 在程序中一般不会出现。在程序中一般不会出现。 2. 初学者经常会将符号混淆,尤其是将赋值运算符初学者经常会将符号混淆,尤其是将

51、赋值运算符“=”和关和关 系运算符中的相等运算符系运算符中的相等运算符“= =”混淆。混淆。 例如:判断例如:判断a的的 值是否等于值是否等于2,应写为:,应写为:a = 2,初学者经常会在这里写,初学者经常会在这里写 为:为:a = 2。这样,不管。这样,不管a的值原来为多少,现在给的值原来为多少,现在给a赋值赋值 为为2,表达式的值为,表达式的值为2,永远为真。,永远为真。 3.3.3 if语句 例例3-10 3-10 输入一个字符,判断其是否是输入一个字符,判断其是否是A(Abort)A(Abort)、R(Retry)R(Retry)或或 F(Fail)F(Fail),并输出相应的信息。

52、,并输出相应的信息。 #include stdio.h void main() char c; printf(Abort,Retry,Fail?); c=getchar(); if(c=A else if(c=r|c=R) printf(Retry!n); else if(c=f|c=F) printf(Fail!n); else printf(Other letter!n); else printf(%c is not a lette!n,c); 例:输入两个十进制整数,输出这两个数的关系。如若输入例:输入两个十进制整数,输出这两个数的关系。如若输入 的数据为的数据为2,3,则输出结果为,则

53、输出结果为22,若输入数据为,若输入数据为3,3,则输出结果,则输出结果 为为3=3。 #include main() int a,b; printf(input the two numbers: ); scanf(%d,%d, if(a=b) if(ab) printf(%d%dn,a,b); else printf(%d=%dn,a,b); else printf(%d%dn,a,b); 3.3.3 if语句 例:输入一个字符,判别它是否大写字母,如果是例:输入一个字符,判别它是否大写字母,如果是 ,将它转换成小写字母;如果不是,不转换。然,将它转换成小写字母;如果不是,不转换。然 后输出

54、最后得到的字符。后输出最后得到的字符。 #include #include void main ( ) void main ( ) char ch; char ch; scanf(%c, scanf(%c, ch=(ch=Abreak; 3.3.5 程序举例 例例3-12 写程序,判断某年是否是闰年。写程序,判断某年是否是闰年。 分析:用变量分析:用变量y存储年号,存储年号,leap存储闰年信息。若是闰年,使存储闰年信息。若是闰年,使 leap=1,否则,否则leap=0,最后判断,最后判断leap的值,输出是否是闰年的信息。的值,输出是否是闰年的信息。 #include stdio.h vo

55、id main() int y,leap; printf(输入年号:输入年号:); scanf(%d, leap=(y%4=0) if(leap) printf(%d年年是闰年是闰年n,y); else printf(%d年不年不是闰年是闰年n,y); 3.3.5 程序举例 例例3-13 3-13 写程序,求键盘输入的形式为:写程序,求键盘输入的形式为:xopy xopy 的算术表达式的值。的算术表达式的值。 其中:其中:x x、y y是整数,是整数,opop是一个算术运算符,例如,输入:是一个算术运算符,例如,输入:100+200100+200,则,则 输出:输出:100+200=30010

56、0+200=300。 #include stdio.h void main() int x,y; char op; printf(输入一个算术式:输入一个算术式:); scanf(%d%c%d, /*注意格式串注意格式串*/ switch(op) case +: printf(%d+%d=%dn,x,y,x+y); case -: printf(%d-%d=%dn,x,y,x-y); case *: printf(%d*%d=%dn,x,y,x*y); case/:if(y!=0)printf(%d/%d=%dn,x,y,x/y); else printf(除数为除数为0n); default

57、 : printf(输入的个算术式错误输入的个算术式错误n); #include main() int a; scanf(%d, switch(a) case 1:printf(Mondayn); break; case 2:printf(Tuesdayn); break; case 3:printf(Wednesdayn); break; case 4:printf(Thursdayn); break; case 5:printf(Fridayn); break; case 6:printf(Saturdayn); break; case 7:printf(Sundayn); break;

58、default: printf(Errorn); 例:输入一个十进制数,根据输入的数输出所对应的英文星期例:输入一个十进制数,根据输入的数输出所对应的英文星期 单词,若所输入的数小于单词,若所输入的数小于1或大与或大与7,则输出,则输出“Error” 【问题问题】如何计算如何计算1+2+3+4+100 1 23 100 11+21+2+31+2+3+100 i s s = s + i; /* 投入 投入i 枚硬币到枚硬币到s中中*/ i = i + 1; /* 计算下次投币数 计算下次投币数 */ 3.4 循环结构 #include void main() int s=0, i=1;/* 盒子

59、开始为空盒子开始为空 第第1次投币次投币*/ while(i=0) s=s+x; scanf(%d, printf(sum=%dn,s); /*注意循环结束的条件注意循环结束的条件*/ 3.4.1 while循环语句 例例3-15 求:求:1+3+5+99。 void main() int n,s=0; n=1; /*为为n赋初值赋初值*/ while(n=A i=i-1; 3.4.1 while循环语句 3.4.2 dowhile循环语句 dowhile语句的一般形式为:语句的一般形式为: do 语句语句 while(表达式表达式); 控制过程如右图所示。控制过程如右图所示。 例例3-17

60、求一系列非负整数的累加和。求一系列非负整数的累加和。 #include void main() int x,s=0; do scanf(%d, /*输入一个数输入一个数*/ s=s+x; /*累加累加*/ while(x=0); /*不要丢失分号不要丢失分号*/ printf(sum=%dn,s); 请与例请与例3-14程序比较,有什么区别?用哪一种循环更合适?程序比较,有什么区别?用哪一种循环更合适? 表达式表达式 语句语句 假假(0)(0) 真真( (非非0)0) 3.4.2 dowhile循环语句 例例3-18 求:求:1+2+3+100。 分析:用变量分析:用变量s s保存和值,初值为

温馨提示

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

评论

0/150

提交评论