版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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、continue、goto、return语句。
6、语句。3.1 C语言语句 4 4复合语句复合语句 复合语句是用花括号将若干语句组合在一起,又称为复合语句是用花括号将若干语句组合在一起,又称为分程序,语法上相当于一条语句。复合语句的一般形式:分程序,语法上相当于一条语句。复合语句的一般形式: 语句语句1;1;语句语句2;2; ;语句语句nn 例如:例如: i+; printf(%dn,i); 5 5空语句空语句 只有一个分号的语句称为空语句。它的一般形式是:只有一个分号的语句称为空语句。它的一般形式是: ; 空语句是什么也不做的语句。空语句是什么也不做的语句。 ifif、whilewhile、forfor和和do-whiledo-while控
7、制的语句只能是一条且必须控制的语句只能是一条且必须有一条,所以这些语句的内嵌语句一般是复合语句或空语句。有一条,所以这些语句的内嵌语句一般是复合语句或空语句。 3.2 顺序结构程序设计 顺序结构程序相对比较简单。这种程序中主要顺序结构程序相对比较简单。这种程序中主要使用赋值语句及数据的输入和输出语句使用赋值语句及数据的输入和输出语句(函数函数)。程序运行时,依书写顺序,每条语句执行一次。程序运行时,依书写顺序,每条语句执行一次。l赋值语句赋值语句l数据输出函数数据输出函数l数据输入函数数据输入函数 AB3.2.1 赋值语句 赋值语句是一个应用十分普遍且简单的语句。赋值语赋值语句是一个应用十分普
8、遍且简单的语句。赋值语句的一般形式为:句的一般形式为: 。 赋值表达式;赋值表达式; 赋值语句是一种表达式语句,在赋值表达式的后面加赋值语句是一种表达式语句,在赋值表达式的后面加上一个分号,就构成了赋值语句。上一个分号,就构成了赋值语句。 例如例如:c=a+b*8i+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语言中的语句,是执行部分语言中的语句,是执行部分*/ z=x-y; printf(x-y=%dn,z); 请找出上程序段中的说明语句及执行语句(表达式语请
10、找出上程序段中的说明语句及执行语句(表达式语句及函数调用语句)。句及函数调用语句)。分析下面程序结构#include main() int a,b,c; scanf(%d,%d,&a,&b); c=a+b; printf(nc=%dn,c);预处理语句预处理语句变量变量a,b,c声明声明输入变量输入变量a,b的值的值赋值语句赋值语句c=a+b输出变量输出变量c的值的值分析 从上例可以看出,顺序结构的程序框架如下:从上例可以看出,顺序结构的程序框架如下: #开头的预编译处理命令行开头的预编译处理命令行main() 局部变量声明语句局部变量声明语句; 可执行语句序列可执行语句序列;
11、3.2.2 数据输出 一个完整的程序,通常要求具备输入和输出功能。数据离一个完整的程序,通常要求具备输入和输出功能。数据离开主机称为开主机称为“输出输出”,数据进入主机称为,数据进入主机称为“输入输入”。如下图所。如下图所示:示:C C语言本身没有输入输出语句,输入输出操作是通过调用语言本身没有输入输出语句,输入输出操作是通过调用库函数来实现的。在库函数来实现的。在C C标准函数库中提供了这些函数,如标准函数库中提供了这些函数,如scanfscanf和和printfprintf函数等。使用输入函数等。使用输入/ /输出函数时,应在程序的开头写输出函数时,应在程序的开头写上命令:上命令:#inc
12、lude #include 1 1字符输出函数字符输出函数 ( (putcharputchar函数函数) )字符输出函数的一般形式为:字符输出函数的一般形式为: putcharputchar( (字符型或整型数据字符型或整型数据) )主主机机CPU内存内存外设:如外设:如显示器、打印机、显示器、打印机、键盘、扫描仪、键盘、扫描仪、磁盘磁盘输出输出输入输入3.2.2 数据输出 putchar()函数的功能是向终端函数的功能是向终端(显示器显示器)输出一个字符。输出一个字符。其中,函数的参数其中,函数的参数(圆括号中的数据圆括号中的数据)可以是字符常量、变量可以是字符常量、变量或表达式,也可以是转
13、义字符,还可以是整数。或表达式,也可以是转义字符,还可以是整数。请看下面的程序:请看下面的程序:【例例3-1】在屏幕上输出在屏幕上输出“BOY”。(演示)。(演示) #include stdio.hvoid main()char a,b,c; a=B;b=O;c=Y ; putchar(a);putchar(b);putchar(c);程序运行结果:程序运行结果:BOY3.2.2 数据输出【例例3-2】输出换行字符。输出换行字符。 (演示)(演示) #include stdio.hvoid main()char a,b,c; a=B;b=O;c=Y;putchar(a);putchar(n);
14、putchar(b);putchar(n);putchar(c); putchar(n);程序运行结果:程序运行结果:BOY#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格式输出函数格式输出函数 ( (printfprintf函数函数) )printf函数可以输出多个任意类型的数据。它的功能是在终端函数可以输出多个任意类型的数据。它的功能是在终端设备上按指定的格式输出数据。设备上按指定的格式输出数据。printf函数的
15、一般形式为:函数的一般形式为: printf(格式控制串,输出项表格式控制串,输出项表)例如:例如:printf( “x=%d,y=%dn ,x,y)格式控制串通常由格式控制串通常由格式说明格式说明和和普通字符普通字符两种内容。两种内容。格式说明格式说明由由“% %”和格式字符组成,如和格式字符组成,如%d%d、%f%f等,它指定所在位置输出数据的等,它指定所在位置输出数据的格式,实际输出的数据在输出项中给出。格式,实际输出的数据在输出项中给出。普通字符普通字符是希望原样输出是希望原样输出的字符,其作用是说明、标注,使输出数据的意义更明确。如的字符,其作用是说明、标注,使输出数据的意义更明确。
16、如x=x=、y=y=、换行字符、换行字符nn等。等。输出项表是用逗号分隔的若干个表达式输出项表是用逗号分隔的若干个表达式( (当然,也可以是常量当然,也可以是常量或变量或变量) ),表达式的值将在对应的格式说明处输出,表达式的类型,表达式的值将在对应的格式说明处输出,表达式的类型应与格式说明要求的数据类型对应一致。请看下面的程序应与格式说明要求的数据类型对应一致。请看下面的程序格式格式控制串控制串输出项表输出项表3.2.2 数据输出#include void main()int a=123,b=456,c; /*定义整型变量定义整型变量a,b,c并初始化并初始化a,b*/c=a;a=b;b=c
17、; /*将变量将变量a和和b的值交换的值交换*/ printf(a=%d, b=%dn, a , b); 程序的输出结果是:程序的输出结果是:a=456, b=123分析:分析:printf()函数中的格式控制串是:函数中的格式控制串是:a=%d, b=%dn,其含义是先输出其含义是先输出“a=”,然后在第一个格式说明,然后在第一个格式说明“%d”处按十进制整数处按十进制整数格式输出第一个表达式的值,再输出格式输出第一个表达式的值,再输出“, b=”后,在第二个格式说明后,在第二个格式说明“%d”处按十进制整数格式输出第二个表达式的值,最后输出换行字符处按十进制整数格式输出第二个表达式的值,最
18、后输出换行字符“n”。格式说明与表达式的对应关系如下图所示:。格式说明与表达式的对应关系如下图所示: printf(a=%d, b=%dn, a , b);3.2.2 数据输出格式说明及其作用如下表所示格式说明及其作用如下表所示:格 式 说 明作 用%c以 字 符 形 式 输 出 , 只 输 出 个 字 符%d或 %i以 带 符 号 的 十 进 制 形 式 输 出 整 型 数%o以 八 进 制 无 符 号 形 式 输 出 整 数 (不 带 前 导0)%x或 %X以 十 六 进 制 无 符 号 形 式 输 出 整 数 (不 带 前 导0 x或0X)%u以 无 符 号 的 十 进 制 形 式 输
19、出 整 型 数%f以 带 小 数 点 的 形 式 输 出 单 、 双 精 度 实 数 , 小 数 位 默 认 为6位%e或 %E以 指 数 形 式 输 出 单 、 双 精 度 实 数 , 输 出6位 有 效 数 字 , 1位 非0整 数%g或 %G由 系 统 自 动 选 用 %f或 %e格 式 , 不 输 出 无 意 义 的0, 以 使 输 出 宽 度 最 小%s输 出 字 符 串 中 的 字 符 , 直 至 遇 到 “ 0”%p输 出 变 量 的 内 存 地 址%输 出 一 个 %3.2.2 数据输出格式说明中还可以使用格式修饰符,其一般形式为:格式说明中还可以使用格式修饰符,其一般形式为:
20、 “% %m.nm.n格式字符格式字符”如:如:printf(xprintf(x=%5d=%5d,y=%7.2fy=%7.2f,x x,y)y);格式修饰符及其作用如下表所示:格式修饰符及其作用如下表所示:格式修饰符意 义字母l或L用于长整型 数据的输 出,可用在格 式字符d、i、o、x、X、u前m(正整数)数据输出的 最小宽度,当 数据实际 宽度超过m时,则按实际 宽度输出如实际宽度 短于m,则输出时前面 补0或空格n(正整数)对于实数,表示 输出n位小数;对字符 串,表示从左 截取的字 符个数-输出的字符 或数字在 域内向左 对齐+输出的数字 前带有正 负号0输出在数据 前的多余 空格处加
21、 前导0#用在格式字 符o或x前, 使输出八进制或十 六进制数 时输出前 缀0或0 x格式说明符 格式说明符由格式说明符由“% %”开头,以一个英文字母结开头,以一个英文字母结束,它表明输出数据的类型;其间还可以有一些束,它表明输出数据的类型;其间还可以有一些格式控制字符,用以说明数据输出的长度、位数、格式控制字符,用以说明数据输出的长度、位数、对齐方式等。在对齐方式等。在Turbo CTurbo C中格式说明符的一般形中格式说明符的一般形式为:式为: %标志标志输出最小宽度输出最小宽度m.精度精度n长度长度类型类型 其中:其中: :表示可选项。:表示可选项。 标志标志:是由字符构成的,它表示
22、数值输出时按:是由字符构成的,它表示数值输出时按某种格式,常用的字符有、某种格式,常用的字符有、0.输出最小宽度输出最小宽度m:m是十进制整数,它表示用十进是十进制整数,它表示用十进制输出的最少位数,当需要输出的数据长度超过制输出的最少位数,当需要输出的数据长度超过该数时,该选项不起作用,数据按实际位进行输该数时,该选项不起作用,数据按实际位进行输出,当需要输出的数据长度小于该数时,则在该出,当需要输出的数据长度小于该数时,则在该数的左边补空格或数的左边补空格或0。.精度精度n:是:是“.”加上十进制整数加上十进制整数n。其含义是:如。其含义是:如果输出的是数值,则该数表示小数位数,若实际果输
23、出的是数值,则该数表示小数位数,若实际位数大于所定义的精度,则截去超过部分;如果位数大于所定义的精度,则截去超过部分;如果输出的是字符,则表示输出字符的个数。输出的是字符,则表示输出字符的个数。数据长度数据长度:是字符,它有两种形式:是字符,它有两种形式:h、l。h表示表示按短整型量输出,按短整型量输出,l表示按长整型量输出。表示按长整型量输出。类型类型:是格式说明符中必须要有的,它表示输出列:是格式说明符中必须要有的,它表示输出列表里要输出的数据类型。表里要输出的数据类型。3.2.2 数据输出#include #include void main()void main() intint i=
24、-1; 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(iprintf(i=%=%d,id,i=%=%o,io,i=%=%x,ix,i=%=%un,i,i,i,iun,i,i,i,i);); printf(lprintf(l=%=%ld,lld,l=%=%lo,llo,l=%=%lx,llx,l=%=%lun,l,l,l,llun,l,l,l,l);); printf(uprintf(u=%=%
25、d,ud,u=%=%o,uo,u=%=%x,ux,u=%=%un,u,u,u,uun,u,u,u,u);); printf(fprintf(f=%=%f,ff,f=%7.2f,f=%-7.2fnf=%=%7.2f,f=%-7.2fnf=%e,fe,f=%=%gn,f,f,f,f,fgn,f,f,f,f,f);); printf(cprintf(c=%=%c,cc,c=%3c,c=%-3cn,c,c,c);=%3c,c=%-3cn,c,c,c); printf(sprintf(s=%=%s s, ,s s=%7.3s=%7.3s, ,s=s=, ,%-.3sn,12345,12345,12345
26、);%-.3sn,12345,12345,12345); printf(xprintf(x=%=%d,yd,y=%cn,a,65);=%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; c=a+b; printf(
27、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=%+gn,z,z,z);#incl
28、ude 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 数据输入数据输入指的是程序运行时,通过输入设备数据输入指的是程序运行时,通过输入设备(键盘键盘)为
29、程序提供数据。为程序提供数据。相应的,在程序中就要使用数据输入函数。与输出函数对应,常用的输入相应的,在程序中就要使用数据输入函数。与输出函数对应,常用的输入函数有:字符输入函数函数有:字符输入函数(getchar)和格式输入函数和格式输入函数(scanf)。1字符输入函数字符输入函数(getchar函数函数)getchar函数与函数与putchar函数的作用正好相反,它的功能是从输入函数的作用正好相反,它的功能是从输入终端设备终端设备(一般指键盘一般指键盘)上输入一个字符。上输入一个字符。getchar函数的一般形式为:函数的一般形式为: getchar();功能是从终端设备输入功能是从终端
30、设备输入(读取读取)一个字符,函数的值为输入的字符。可一个字符,函数的值为输入的字符。可以将这个值赋给一个字符以将这个值赋给一个字符(或整型或整型)变量,从而将这个字符保存起来。在程变量,从而将这个字符保存起来。在程序中的使用形式一般为:序中的使用形式一般为:int c;c=getchar();请看下面的程序:请看下面的程序:3.2.3 数据输入例例3-4 键盘输入一个小写字母,输出对应的大写字母。键盘输入一个小写字母,输出对应的大写字母。#include stdio.hvoid main()char c; c=getchar(); c=c+32; putchar(c);程序运行情况:程序运行
31、情况: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格式输入函数格式输入函数 ( (scanfscanf函数函数) )scanf函数可以通过键盘输入多个任意类型的数据。它的功能是按指函数可以通过键盘输入多个任意类型的数据。它的功能是按指定的格式从键盘上输入数据。定
32、的格式从键盘上输入数据。scanf函数的一般形式为:函数的一般形式为: scanf(格式控制串,地址表列格式控制串,地址表列);例如:例如:格式控制串的含义与格式控制串的含义与printfprintf函数中的基本相同,例中函数中的基本相同,例中%d%dd%d 表示要从表示要从键盘输入两个整数;键盘输入两个整数;&x&x和和&y&y是分配给变量是分配给变量x x和和y y存储空间的起始地址。该函存储空间的起始地址。该函数调用的作用是从键盘上输入数调用的作用是从键盘上输入2 2个整数个整数(%d(%d指定整数指定整数) ),将其存储在地址,将其存储在地址&x
33、&x和和&y&y所指定的存储区域中,可以理解为从键盘上输入所指定的存储区域中,可以理解为从键盘上输入2 2个整数,存储在变个整数,存储在变量量x x和和y y中。中。请看下面的示例请看下面的示例内存内存&x&yxyscanfscanf( ( %d%dd%d” , &x&x,&y&y) );格式字符串格式字符串地址表列项地址表列项%* *输入数据宽度输入数据宽度m长度长度 类型类型其中:其中: :表示可选项:表示可选项 * * :表示输入的数值不赋给相应的变量,即跳过:表示输入的数值不赋给相应的变量,即跳过该数据不读。该数据
34、不读。输入数据宽度输入数据宽度m:m是十进制正整数,表示按是十进制正整数,表示按m的宽度输入数据。的宽度输入数据。长度长度:长度格式符为:长度格式符为l和和h,l表示输入长整型数据表示输入长整型数据或双精度实型数据;或双精度实型数据;h表示输入短整型数据。表示输入短整型数据。类型类型:是格式说明符中必须要有的,其格式符的:是格式说明符中必须要有的,其格式符的意义与意义与printf函数基本相同。函数基本相同。格式说明符格式说明符scanfscanf函数常用类型格式符表函数常用类型格式符表格式字符格式字符格式字符含义格式字符含义d表示以十进制形式输入一个整数表示以十进制形式输入一个整数o表示以八
35、进制形式输入一个整数表示以八进制形式输入一个整数x表示以十六进制形式输入一个整数表示以十六进制形式输入一个整数u表示以十进制形式输入一个无符号的整数表示以十进制形式输入一个无符号的整数f或或e表示输入一个实数,可以是小数形式或指数形式表示输入一个实数,可以是小数形式或指数形式g与与f或或e的作用相同的作用相同c表示输入一个字符表示输入一个字符s表示输入一个字符串表示输入一个字符串3.2.3 数据输入例例3-5 输入矩形的两个边长,求矩形的面积。输入矩形的两个边长,求矩形的面积。#include void main() int w,h,a; /*变量定义变量定义*/ printf(“输入矩形的长
36、和宽:输入矩形的长和宽:”); /*输出提示信息输出提示信息*/ scanf(%d%d,&w,&h); /*从键盘输入从键盘输入2个整数个整数*/ printf(Area is %dn,w*h); /*输出结果输出结果*/程序运行如下:程序运行如下:6 8 (键盘输入键盘输入6 8后,按回车,数据之间用空格分隔后,按回车,数据之间用空格分隔)Area is 48程序运行时,当执行到程序运行时,当执行到scanf函数调用时,程序暂停运行,等待用户函数调用时,程序暂停运行,等待用户从键盘上输入数据,当用户按格式要求输入数据并按回车键后,数据将被从键盘上输入数据,当用户按格式要求输入
37、数据并按回车键后,数据将被保存在地址指定的存储区域中,或者说数据被赋值给保存在地址指定的存储区域中,或者说数据被赋值给“&”后的变量中。后的变量中。有关有关scanf函数的格式说明详见教材,下面是几点说明:函数的格式说明详见教材,下面是几点说明:3.2.3 数据输入地址表列是用地址表列是用逗号逗号分隔的若干个地址。分隔的若干个地址。程序运行时,若输入数据个数少于格式说明要求的数据程序运行时,若输入数据个数少于格式说明要求的数据个数时,程序将等待继续输入,直到满足要求;反之,多余数个数时,程序将等待继续输入,直到满足要求;反之,多余数据将作为下一个输入函数的输入数据。据将作为下一个输入函
38、数的输入数据。在格式控制串中,如果没有格式说明以外的字符,则输在格式控制串中,如果没有格式说明以外的字符,则输入的数据之间用入的数据之间用空格、空格、TAB(制表键制表键)或回车分隔或回车分隔。例如:。例如:scanf(%d%d%d,a,b,c);输入的数据可以有多种形式:输入的数据可以有多种形式:第第1种:种:10 20 30 第第2种:种:10 20 30 第第3中:中:1020(按按Tab键键)30 3.2.3 数据输入如果在格式说明中含有普通字符,输入数据时,这些普通字符不会如果在格式说明中含有普通字符,输入数据时,这些普通字符不会显示到屏幕上,而是要求将这些普通字符也原样输入。显示到
39、屏幕上,而是要求将这些普通字符也原样输入。例如例如: scanf(%d,%d,x,y);格式串中有一个逗号,输入的两个数据之间也要一个逗号,如:格式串中有一个逗号,输入的两个数据之间也要一个逗号,如:6,8又如又如: scanf(x=%d,y=%d,x,y);输入数据的形式应是:输入数据的形式应是:x=6,y=8再如再如: scanf(%d:%d:%d,&tt,&mm,&ss);输入数据的形式应是:输入数据的形式应是:15:25:50如果需要在屏幕上显示一些输入数据的提示信息,可以使用如果需要在屏幕上显示一些输入数据的提示信息,可以使用printf函函数,例如:数,例如
40、:printf(“P1ease input a,b,c:);scanf(%d,%d,%d“,a,b,c);可以指定输入数据的宽度,系统自动截取所需的数据长度,但不能可以指定输入数据的宽度,系统自动截取所需的数据长度,但不能指定实型数据的宽度。例如:指定实型数据的宽度。例如:scanf(%2d%3d,a,b);当输入当输入12345时,系统自动将时,系统自动将12赋给赋给a,将,将345赋给赋给b。而:。而:scanf(%6.3f,a);是错误的。;是错误的。3.2.3 数据输入使用使用“%c”格式输入字符时,输入的空格或转义字符都是有效格式输入字符时,输入的空格或转义字符都是有效的字符。例如的
41、字符。例如:scanf(%c%c%c,x,y,z);当输入当输入a b c时,系统将字符时,系统将字符a赋给赋给x,将第一个空格字符赋给,将第一个空格字符赋给y,将字符将字符b赋给赋给z。scanf函数从键盘输入数据时,若遇与格式要求不一致的字符,函数从键盘输入数据时,若遇与格式要求不一致的字符,则认为与该格式说明对应的数据结束。例如:则认为与该格式说明对应的数据结束。例如:scanf(%d%c%f,&a,&b,&c);执行该函数调用时,若输入执行该函数调用时,若输入1234a1234.5 格式控制串中的格式控制串中的%d要求输入连续的数字,在读取要求输入连续的数字,在
42、读取1234后遇字后遇字母母a,整数读取结束,将,整数读取结束,将1234保存在变量保存在变量a中;中;%c要求读取一个字要求读取一个字符,将字符符,将字符a保存在变量保存在变量b中;其后的中;其后的1234.5按按%f格式读取,保存格式读取,保存在变量在变量c中。若在中。若在1234和字母和字母a之间有一个空格,则读取并存储在变之间有一个空格,则读取并存储在变量量a,b,c的数据依次是:的数据依次是:1234、空格和、空格和0。3.2.4 程序举例例例3-6 输入三角形的三边长,求三角形的面积。输入三角形的三边长,求三角形的面积。分析:已知三角形的三边长度求三角形的面积,要使用海伦公式:分析
43、:已知三角形的三边长度求三角形的面积,要使用海伦公式:C语言源程序如下:语言源程序如下:#include math.hvoid main()float a,b,c,s,area; printf(输入三角形的三边长度:输入三角形的三边长度:); scanf(%f,%f,%f,&a,&b,&c); 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);printf(arae=%7.2fn, area);2)()(cbascsbsassarea其中:#include
44、 main() int a,b,c; scanf(%3d%3d%4d,&a,&b,&c ); printf(na=%d,b=%d,c=%dn,a,b,c);3.2.4 程序举例#include main() double a,b,c; scanf(%lf,%lf,&a,&b ); c=a*b; printf(na*b=%lf*%lf=%len,a,b,c);3.2.4 程序举例#include main() char str1,str2; scanf(%c%c,&str1,&str2); printf(n%c %cn,str1,str2)
45、; 3.2.4 程序举例#include main() int x,y; scanf(%2d%*3d%4d,&x,&y ); printf(nx=%d,y=%d n,x,y);3.2.4 程序举例#include main() int a; scanf(%d,&a ); 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=%
46、d,b=%dn,a,b); 35a3cb3.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
47、.4 程序举例分析下面程序的运行结果分析下面程序的运行结果#include main() int a,b; a=0103; b=+a; printf(%d,%dn,a-,-b); printf(%c,%cn,+a,b+); 07532 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、例、例3
48、-103.2.4 程序举例3.3 选择结构选择结构又称分支结构,是程序结构中重要的一种结构类选择结构又称分支结构,是程序结构中重要的一种结构类型。在程序设计时,当需要进行选择、判断处理时,就要用到型。在程序设计时,当需要进行选择、判断处理时,就要用到分支结构。分支结构。C语言中有两种实现选择控制的语句:语言中有两种实现选择控制的语句:l条件分支语句条件分支语句(if语句语句)l开关分支语句开关分支语句(switch语句语句)这两种语句各有其特点,前者用于两个分支的选择,后者这两种语句各有其特点,前者用于两个分支的选择,后者则适合于多分支选择。则适合于多分支选择。无论是无论是if语句,还是语句,
49、还是3.4节介绍的循环语句,都要使用控节介绍的循环语句,都要使用控制条件,在此先介绍用于描述条件的关系表达式和逻辑表达式。制条件,在此先介绍用于描述条件的关系表达式和逻辑表达式。3.3.1 关系运算符与关系表达式 1 1关系运算符关系运算符 在程序中经常需要比较两个量的大小关系,以决定程序下一步的工在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。作。比较两个量的运算符称为关系运算符。C语言中有语言中有6种关系运算符:种关系运算符: (大于大于)、=(大于或等于大于或等于)、(小于小于)、5 关系不成立,表达式的值为关系不成立,表达式的值为0(假假
50、) 5=3 关系成立,表达式的值为关系成立,表达式的值为1(真真) (35)=3) 关系成立,表达式的值为关系成立,表达式的值为1(真真) 10%2=0 关系成立关系成立,表达式的值为表达式的值为1(真真),说明说明10能被能被2整除整除 year%4=0 关系成立时,说明变量能被关系成立时,说明变量能被4整除整除任何非零的数值被认作任何非零的数值被认作“真真”任何任何0值都被认为假值都被认为假3.3.2 逻辑运算符与逻辑表达式1 1C C语言有三个逻辑运算符语言有三个逻辑运算符 !(逻辑非逻辑非) 、&(逻辑与逻辑与)、|(逻辑或逻辑或)逻辑非逻辑非、逻辑与逻辑与、逻辑或的含义可解释
51、为汉语中的否定逻辑或的含义可解释为汉语中的否定、并且并且、或者。或者。2 2逻辑表达式逻辑表达式由逻辑运算符及其操作数构成的表达式称为逻辑表达式。由这三个逻辑由逻辑运算符及其操作数构成的表达式称为逻辑表达式。由这三个逻辑运算符和操作数构成逻辑表达式的一般形式为:运算符和操作数构成逻辑表达式的一般形式为:!操作数操作数操作数操作数1&操作数操作数2操作数操作数1|操作数操作数2操作数可以是常量、变量、函数和表达式。无论操作数的值如何,均理操作数可以是常量、变量、函数和表达式。无论操作数的值如何,均理解为解为“真真”(非非0)和和“假假”(0)两个值。逻辑运算的运算规则如下表所示。两个值。
52、逻辑运算的运算规则如下表所示。操作数 l操作数 2!操作数 l操作数 l&操作数 2操作数 l|操作数 2001000非 0101非 00001非 0非 00113.3.2 逻辑运算符与逻辑表达式3.3.逻辑运算符及其优先次序逻辑运算符及其优先次序(1)& (1)& (逻辑与逻辑与) ) 相当于其他语言中的相当于其他语言中的ANDAND(2)| (2)| (逻辑或逻辑或) ) 相当于其他语言中的相当于其他语言中的OROR(3)! (3)! (逻辑非逻辑非) ) 相当于其他语言中的相当于其他语言中的NOTNOT例:例:a&ba&b 若若a,ba,b为真,则
53、为真,则a&ba&b为真。为真。 a|ba|b 若若a,ba,b之一为真,则之一为真,则a|ba|b为真。为真。 !a a 若若a a为真,则为真,则!a!a为假。为假。优先次序:优先次序:!(非非)-&()-|()逻辑运算符中的逻辑运算符中的“&”和和“|”低于关系运算符,低于关系运算符,“!”高于算高于算 术运算符术运算符3.3.2 逻辑运算符与逻辑表达式在程序中,逻辑表达式主要用来构成复杂条件。例如:在程序中,逻辑表达式主要用来构成复杂条件。例如:“x是非负偶数是非负偶数”的条件可表示为:的条件可表示为:x=0&x%2=0“某年某年y是闰年是闰年”
54、的条件可表示为:的条件可表示为: y%4=0&y%1000|y%400=0逻辑表达式求值时,若前面的操作数能够确定表达式的值,则后面的逻辑表达式求值时,若前面的操作数能够确定表达式的值,则后面的操作数将不再求值。把这种情况称为逻辑运算符的操作数将不再求值。把这种情况称为逻辑运算符的“短路现象短路现象”。设设x=1,y=2,z=3,则逻辑表达式,则逻辑表达式 (x=y)&(z+)的值为的值为0(假假),且,且z的值不变。这是因为关系表达式的值不变。这是因为关系表达式x=y的值为的值为0,根据逻辑与,根据逻辑与的运算特点将不再对表达式的运算特点将不再对表达式z+求值。若将表达式中的
55、逻辑与求值。若将表达式中的逻辑与(&)改为改为逻辑或逻辑或(|),请分析逻辑表达式的值和变量,请分析逻辑表达式的值和变量z的值。的值。练习:练习:设设m,n,a,b,c,d均为零,求解均为零,求解(m=a=b)|(n=c=d)后,后,m,n的值是的值是_ 0,0 0,1 1,0 1,1设设m,n,a,b,c,d均为均为1,求解,求解(m=ab)&(n=ab)后,后,m,n的值是的值是_ 0,0 0,1 1,0 1,1例:例:53&83&84-!0 自左向右运算自左向右运算 1&0逻辑值为逻辑值为083逻辑值为逻辑值为1表达式值为表达式值为03.3.2 逻
56、辑运算符与逻辑表达式 用逻辑表达式来表示闰年的条件用逻辑表达式来表示闰年的条件能被能被4整除,但不能被整除,但不能被100整除。整除。能被能被4整除,又能被整除,又能被400整除。整除。答答 (year%4=0&year%100!=0)|year%400=0案案 值为真值为真(1)是闰年,否则为非闰年是闰年,否则为非闰年。3.3.2 逻辑运算符与逻辑表达式分析下面程序段的运行结果分析下面程序段的运行结果 main() int a=14,b=15,x; char c=A; x=(a&b)&(c0单分支单分支if语句语句 双分支双分支if语句语句 多分支多分支if语句语句3
57、.3.3 if语句3.3.3 if语句if语句有下面语句有下面3中使用形式:中使用形式:1. if(表达式表达式) 语句语句控制过程如右图所示,如果表达式的值非控制过程如右图所示,如果表达式的值非0,则执行圆括号后的语句,否则继续执行则执行圆括号后的语句,否则继续执行if 语句的语句的下一条语句。下一条语句。例例3-7 输入一个整数,输出其绝对值。输入一个整数,输出其绝对值。main()int x; scanf(%d,&x); if(xy) printf(%dn,x); else printf(%dn,y);程序中的两条程序中的两条printf()函数调用语句,在函数调用语句,在程序的
58、一次执行中,只执行其中的一条。程序的一次执行中,只执行其中的一条。所以,所以,ifelse语句的功能是在两条被语句的功能是在两条被控制的语句中选择其中的一条执行。控制的语句中选择其中的一条执行。3.3.3 if语句3. if语句的嵌套形式语句的嵌套形式if语句控制的语句本身又是语句控制的语句本身又是if语句,这种情况称为语句,这种情况称为if语句的语句的嵌套。嵌套形式又可分为两种:嵌套。嵌套形式又可分为两种:规则嵌套规则嵌套和和任意嵌套任意嵌套。规则嵌套的一般形式规则嵌套的一般形式if(表达式表达式1) 语句语句1else if(表达式表达式2) 语句语句2else if(表达式表达式n) 语
59、句语句nelse 语句语句n+1被 嵌 套 的被 嵌 套 的 i f 语 句 固 定 在语 句 固 定 在else下,这种嵌套结构又称为下,这种嵌套结构又称为else if结构,控制过程如右图结构,控制过程如右图所示:所示:请看下面的应用示例:请看下面的应用示例:3.3.3 if语句例例3-9 输入一个四则运算符,即输入一个四则运算符,即+、-、*、/中的任意一个,输出中的任意一个,输出对应的英文单词:对应的英文单词:plus、minus、multiply、divide,若输入了其,若输入了其他字符,则输出三个问号。他字符,则输出三个问号。#include void main( )char c
60、;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);分段函数分段函数y=(x+1)/(x-2) x00 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总是与它前面的最近的总是与它前面的最近的ifif语句配对。语句配对。请分析下面请分析下面ifif语句语句的嵌套关系。的嵌套关系。if(if() ) if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 太阳能电池板热解特性及其金属资源回收
- 幼儿园一日工作计划
- 班级管理目标工作计划
- 湖北省襄阳市地理高考试题及解答参考
- 诗歌的拆解与重构的活动方案
- 高二英语备课组期末考试总结与分析
- 地下管线探测与施工方案
- 房地产开发项目契约化管理工作方案
- 怀化学院《场景设计》2021-2022学年第一学期期末试卷
- 2024电力施工合同
- 《中值定理应用》课件
- 六年级英语上册课件-Unit4 I have a pen pal 人教pep (共23张PPT)
- 糖尿病膳食计算课件
- 文化创意产品设计及案例PPT完整全套教学课件
- DB4208T74-2022《早春大棚西瓜生产技术规程》
- 急诊及创伤外科题库
- 人教版四年级上册数学大数的认识《改写和近似数》课件
- 幼儿园大班科学:《动物城破案》 课件
- 船用柴油机的发展与分类课件
- 初中生物试验小组活动记录
- 子宫正常解剖及超声图像课件
评论
0/150
提交评论