语言专上升本教案.doc

上传人:sccc 文档编号:4670489 上传时间:2023-05-06 格式:DOC 页数:121 大小:1.08MB
返回 下载 相关 举报
语言专上升本教案.doc_第1页
第1页 / 共121页
语言专上升本教案.doc_第2页
第2页 / 共121页
语言专上升本教案.doc_第3页
第3页 / 共121页
语言专上升本教案.doc_第4页
第4页 / 共121页
语言专上升本教案.doc_第5页
第5页 / 共121页
点击查看更多>>
资源描述

《语言专上升本教案.doc》由会员分享,可在线阅读,更多相关《语言专上升本教案.doc(121页珍藏版)》请在三一办公上搜索。

1、 第一第一章 C 语言概述 C 程序的组成和形式 程序是由函数构成的 主函数 其他函数 一个函数由两部分组成 函数的首部 例 中 max 函数的首部为:int max (int x,int y)函数类型 函数名 函数参数类型 函数参数名 函数参数类型 函数参数名 函数体 声明部分 变量声明 函数声明 执行部分 一个程序总是从 main 函数开始执行。程序书写格式自由,一行可以写几个语句,一个语句可以写在多行上。每个语句和数据声明的最后必须有一个分号。语言的输入输出功能是通过函数完成的。可以用/*/对程序进行注释。运行程序的步骤:必不可少 参数说明可以省圆括号不能省 开 始 编 辑 编 译 连

2、执 行 有错?结果正确?结 束 有 源程序 file.c 目标程序 file.obj 库函数和其 他目标程序 可执行目 标程序 file.exe 无 正确 不正确 接 第第三三章 数据类型、运算符、与表达式 语言的数据类型 语言的数据类型:常量与变量 常量与符号常量 常量:在程序运行过程中,其值不能被改变的量 符号常量:用一个标识符代表一个常量的符号 使用符号常量的好处:含义清楚 能做到“一改全改”变量 变量:代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值,在程序运行期间,这些值是可以改变的。标识符:在语言中用来对变量、符号常量、函数、数组、类型等对象命名的有效字符序列

3、标识符的命名规则:只能由字母、数字和下划线种字符组成,且第一个字符必须为字母或下划线。大写和小写字母是不同的字符,也就是不同的标识符。标识符的最大长度 Tuobo C 规定为个字符,一般不超过个字符。标识符应做到“见名知义”标识符不能是关键字,如果是已经定义标识符,比如函数名,则相当于重新定义。变量必须“先定义,后使用”短整型short C 数 据 类 型 基本类型 构造类型 指针类型 空类型void 字符类型char 枚举类型enum 整 型 实型 单精度型float 双精度型double 数组 结构体struct 共用体union 长整型long 整型int 数据类型决定:1.数据占内存字

4、节数 2.数据取值范围 3.其上可进行的操作 例:判断下列标识符号合法性 sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$123 整型数据 整型常量 十进制整数:正负整数 八进制整数:以开头,08 是错误的用法 十六进制整数:以开头,例:0 x2a 是合法的 整型常量的类型 一个整型常数根据数据所在的范围可自动确定它的数据类型 一个整常量后面加一个字母 u 或 U,认为是 unsigned int 型 一个整常量后面加一个字母 l 或 L,认为是 long int 整型变量 整型数据在内存中的

5、存放形式:补码 正整数:该数的原码 负整数:该数的绝对值按位取反再加 例:的补码为 0000000000001010 -10 的补码为 1111111111110110 最高位是符号位,该位为表示正,该位为表示负。整型变量的分类:六种 有符号基本整型:signed int 2 -3276832767(-215215-1)无符号基本整型:unsigned int 2 065535(0216-1)有符号短整型:signed short int 2 -3276832767 无符号短整型:unsigned short int 2 065535 有符号长整型:signed long int 4 -214

6、7483648(-231231-1)无符号长整型:unsigned long int 4 04294967295(0232-1)整型数据的溢出 例整型数据的溢出#include void main()int a,b;a=32767;b=a+1;printf(%d,%dn,a,b);运行结果为:32767,-32768 浮点型数据 浮点型常量的表示方法 十进制小数形式:(必须有小数点)如 0.123,.123,123.0,0.0,123.指数形式:(e 或 E 之前必须有数字;指数必须为整数)如 12.3e3,123E2,1.23e4,e-5 ,1.2E-3.5 规范化的指数形式:在字母 e(或

7、 E)之前的小数部分中,小数点左边应有一位(且只能有一位非零的数字。浮点型变量 浮点型数据在内存中的存放形式:分成小数部分和指数部分两部分存放 例:3.14159 在内存中的形式如下(实际存储的是它的二进制数形式):a 和 b 在内存中的形式:0111111111111111 32767 1000000000000000 -32768 错误用法 符号 小数部分 指数部分 浮点型变量的分类 类 型 比特数 有效数字 数值范围 float -3.4*10-383.4*1038 double -1.7*10-3081.7*10308 ling double -1.2*10-49321.2*10493

8、2 浮点型变量也应先定义后使用 字符型数据 字符常量:用单撇号括起来的一个字符 转义字符:以一个“”开头的字符序列:例:转义字符的使用#include void main()main()printf(ab ct derftgn);printf(htibbj kn);运行结果应为:fab c gde h jik 字符变量 字符变量的定义及使用形式:char c1,c2;c1=a;c2=b;字符变量在内存中占一字节。字符数据在内存中的存储形式 以字符的 ASCII 码形式存放 可以和整型数据通用,可以互相赋值,可以以%d 或 c 式输出,字符型数据可以参加算术运算,但只能存放 0255(unsig

9、ned char)或-128127(signed char)之间的整数。314159 1 12位16进制数代表的字符 转义字符 含义 n r ddd t b f “xhh 转义字符 含义 换行 回车 单 引13位8进制数代表的字符 水平制表8 退格 换页 反斜线 双引号 实际运行结果为:f gde h j k*输出的制表符覆盖了原有字符 例向字符变量赋予整数#include void main()char c1;int c2;c1=97;c2=98;printf(%c%cn,c1,c2);printf(%d%dn,c1,c2);运行结果:a b 97 98 例大小写字母的转换#include

10、void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(%c%c,c1,c2);字符串常量:一对双撇号括起来的字符序列:“abc”a是字符常量,“a”是字符串常量 不能将一个字符串常量赋值给字符变量 系统自动在字符串常量的末尾加上0做结束标志 变量赋初值 变量赋初值:在定义变量的同时使变量初始化 例:int a=3;float f=3.56;char c=a;int i,j,k=5;int a,b,c=5;int a=b=c=5;各类数值型数据间的混合运算 各类数值型数据间的混合运算 整型、浮点型、字符型数据间可以混合运算 不同类型的数

11、据要先转换成同一类型,再进行运算 转换规则:h e l l o 0 例 字符串“hello”在内存中:例 空串“”在内存中 0 正确用法 错误用法 例:算术运算符和算术表达式 运算符简介 算术运算符和算术表达式 基本算术运算符:+,-,*,/,%(取余)结合方向:从左向右 优先级:-*/%+-(2)(3)(4)double float long unsigned int char,short 低 高 必定转换 运算对象类型不同时转换方向 10+a +I*f -d /e int i;float f;double d;long e;int int double double double doub

12、le double double C 运 算 符 算术运算符:(+-*/%+-)关系运算符:(=!=)逻辑运算符:(!&|)位运算符 :(|&)赋值运算符:(=及其扩展)条件运算符:(?:)逗号运算符:(,)指针运算符:(*&)求字节数 :(sizeof)强制类型转换:(类型)分量运算符:(.-)下标运算符:()其它 :(()-)说明:“-”可为单目运算符时,右结合性 两整数相除,结果为整数,遵守“向零取整”的原则%要求两侧均为整型数据 例:5/2=2 -5/2=-2 -5/2.0=-2.5 算术表达式:用算术运算符和括号将运算对象(操作数)连接起来,符合语法规则的式子。强制类型转换运算符 一

13、般形式:(类型名)(表达式)优先级:2 级 例:(int)(x+y)(int)x+y(double)(3/2)(int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变 自增、自减运算符+-作用:使变量值加 1 或减 1 种类:前置 +i,-i (先执行 i+1 或 i-1,再使用 i 值)后置 i+,i-(先使用 i 值,再执行 i+1 或 i-1)说明:+-只能用于变量,不能用于常量和表达式,如 5+(),(a+b)+()+-结合方向:自右向左 优先级:-,+,-*,/,%+,-(2)(3)(4)例:printf(“%d,%d”,i,i+);运行结果:,例:5%2=1 -5%2

14、=-1 1%10=1 5%1=0 5.5%2 ()例 main()float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i);结果:x=3.600000,i=3 较高类型向较低类型转换时可能发生 精度损失问题 例-i+-(i+)(同一优先级右结合性)i=3;printf(“%d”,-i+);/-3 例 j+k;(j+)+k;j=i+;printf(“%d,%d”,j,i);9 赋值运算符和赋值表达式 简单赋值运算符 符号:=格式:变量标识符=表达式 作用:将一个数据(常量或表达式)赋给一个变量 赋值时若变量和表达式的类型不一致将自动进行类型转换 例

15、:int i;i=3.56;/*实际 i 值为*/例:float f;f=23;printf(“%fn”,f);结果为:23.000000 例:doule 赋值给 float 时,截取其前面位有效数字,取值范围超出时产生溢出错误。float f;double d=123.456789e100;f=d;/*出错*/例:字符赋给整型时:main()unsigned char c,d;int a,b;c=376;d=-125;a=c;b=d;printf(“%d,%d”,a,b);运行结果为:,main()char c;int a;c=376;a=c;printf(“%d”,a);运行结果为:例:m

16、ain()int i=289;char c;c=i;printf(“%d,%c”,c,c);运行结果为:,!例:将 int 赋值给 long int 处理方法同例 将 long int 赋值给 int 时截取低位 main()long b=65536;int a;a=b;printf(“%d”,a);无符号字符时,将原值存入整型数的低八位,高八位补零。有符号字符时,将原值存入整型数的低八位,高八位符号扩展。原值最高位为零则补零,为则补 int,short,long 赋值给字符型变量时,只将其低八位截取赋值 运行结果为:例:将 unsigned 赋给一个同字节数的 signed 型时,将原值保持

17、不变,超范围会产生溢出错误。例:main()unsigned int a=65535;int b;b=a;printf(“%d”,b);运行结果为:例:将 signed 赋给一个同字节数的 unsigned 型时,将原值保持不变 main()unsigned int a;int b=-1;a=b;printf(“%d”,a);运行结果为:复合赋值运算符 种类:+=-=*=/=%=&=|=含义:变量 op=表达式 变量=变量 op(表达式)赋值表达式 一般形式:变量表达式 赋值表达式的值与变量值相等,且可嵌套,但赋值号左边必须为变量 正确用法:a=b=c=5 a=(b=5)a=5+(c=6)a=

18、(b=4)+(c=6)a=(b=10)/(c=2)错误用法:3=x-2*y;a+b=3;a=3*5=4*3 例:a=12;a+=a-=a*a /*a=-264 等价于 a=a+(a=a-(a*a)*/例:b=3;printf(“%d”,a=b);逗号运算符和逗号表达式 形式:表达式 1,表达式 2,表达式 n 结合性:从左向右 a+=3 a=a+3 x*=y+8 x=x*(y+8)x%=3 x=x%3 优先级低于赋值表达式 逗号表达式的值:等于表达式 n 的值 例 a=3*5,a*4 /*a=15,表达式值 60*/a=3*5,a*4,a+5 /*a=15,表达式值 20*/例 x=(a=3,

19、6*3)/*赋值表达式,表达式值 18,x=18*/x=a=3,6*a /*逗号表达式,表达式值 18,x=3*/例 a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);/*1,2,3*/printf(“%d,%d,%d”,(a,b,c),b,c);/*3,2,3*/课堂练习:分析下面程序的运行结果:main()float f1;int a;char c=a;f1=32.78;c=c-(int)f1;a=c%15;printf(“%d,%f,%cn”,a,f1,c);第一章与第三章练习题 1.一个 C 程序的执行是从_。A)本程序的 main 函数开始,到 main 函数

20、结束 B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C)本程序的 main 函数开始,到本程序文件的最后一个函数结束 D)本程序文件的第一个函数开始,到本程序 main 函数结束 2.以下叙述正确的是:A)在 C 程序中,main 函数必须位于程序的最前面 B)C 程序的每行中只能写一条语句 C)C 语言本身没有输入输出语句 D)在对一个 C 程序进行编译的过程中,可发现注释中的拼写错误 3.以下叙述不正确的是。A)一个 C 源程序可由一个或多个函数组成 B)一个 C 源程序必须包含一个 main 函数 C)C 程序的基本组成单位是函数 D)在 C 程序中,注释说明只能位于一

21、条语句的后面 4.C 语言规定:在一个源程序中,main 函数的位置。A)必须在最开始 B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后 5.一个 C 语言程序是由 A)一个主程序和若干子程序组成 B)函数组成 C)若干过程组成 D)若干子程序组成 6.若 x,i,j 和 k 都是 int 型变量,则执行下面表达式后 x 的值为 x=(i=4,j=16,k=32)A)4 B)16 C)32 D)52 7.假设所有变量均为整型,则表达式(a=2,b=5,b+,a+b)的值是:A)7 B)8 C)6 D)2 8.C 语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符 A

22、)必须为字母 B)必须为下划线 C)必须为字母或下划线 D)可以是字母,数字和下划线中任一种字符 9.若有代数式 3ae/bc,则不正确的 C 语言表达式是:A)a/b/c*e*3 B)3*a*e/b/c C)3*a*e/b*c D)a*e/c/b*3 10.以下不正确的叙述是 A)在 C 程序中,逗号运算符的优先级最低 B)在 C 程序中,APH 和 aph 是两个不同的变量 C)若a和b类型相同,在执行了赋值表达式a=b后b中的值将放人a中,而b中的值不变。D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。11.以下正确的叙述是:A)在 C 程序中,每行中

23、只能写一条语句 B)若 a 是实型变量,C 程序中允许赋值 a=10,因此实型变量中允许存放整型数 C)在 C 程序中,无论是整数还是实数,都能被准确无误地表示 D)在 C 程序中,%是只能用于整数运算的运算符 12.以下符合 C 语言语法的赋值表达式是 A)d=9+e+f=d+9 B)d=9+e,f=d+9 C)d=9+e=e+,d+9 D)d=9+e+=d+7 13.已知字母 A 的 ASCII 码为十进制数 65,且 c2 为字符型,则执行语句 c2=A十6一3;后,c2 中的值为 A)D B)68 C)不确定的值 D)C 14.在 C 语言中,要求运算数必须是整型的运算符是。A)/B)

24、+c)!=D)%15.若以下变量均是整型,且 num=sum=7;则执行表达式 sUM=num+,sUM+,+num 后 sum的值为 A)7 B)8 C)9 D)10 16.在 C 语言中,int、char 和 short 种类型数据在内存中所占用的字节数 A)由用户自己定义 B)均为 2 个字节 C)是任意的 D)由所用机器的机器字长决定 17.若有说明语句:char c=72则变量 c A)包含 1 个字符 B)包含 2 个字符 C)包含 3 个字符 D)说明不合法,c 的值不确定 18.若有定义:int a=7;float x=2.5,y=4.7;则表达式 x+a%3*(int)(x+

25、y)%2/4 的值是 A)2.500000 B)2.7500OO c)3.500000 D)0.000000。19.sizeof(float)是:A)一个双精度型表达式 B)一个整型表达式 C)一种函数调用 D)一个不合法的表达式 20.设变量 a 是整型,f 是实型,i 是双精度型,则表达式 10+a+i*f 值的数据类型为 A)int B)float C)double D)不确定 21.在 C 语言中,char 型数据在内存中的存储形式是:A)补码 B)反码 C)原码 D)ASCII 码 22.表达式 18/4*sqrt(4.0)/8 值的数据类型为:A)int B)float C)dou

26、ble D)不确定 23.设C语言中,一个int型数据在内存中占2个字节,则unsigned int型数据的取值范围为:A)0255 B)032767 C)065535 D)02147483647 24.设有说明:char w;int x;f1oat y;double z;则表达式 w*x+z 一 y 值的数据类型为:A)float B)char C)int D)double 25.若有以下定义,则能使值为 3 的表达式是:int k=7,x=12;A)x%=(k%=5)B)x%=(k 一 k%5)C)x%=k-k%5 D)(x%=k)一(k%=5)26.设以下变量均为 int 类型,则值不等

27、于 7 的表达式是 A)(x=y=6,x+y,x+1)B)(x=y=6,x+y,y+1)C)(x=6,x+1,y=6,x+y)D)(y=6,y+l,x=y,x+1)第第四四章 顺序程序设计 语句 C 语句分类 程序控制语句(9 种):表达式语句:表达式加分号构成。函数调用语句:函数名(实际参数表);赋值语句:赋值表达式加一个分号 a=3;i+;其他表达式构成语句:表达式加一个分号 x+y;/*合法但无意义*/空语句:;复合语句:用 括起来的一组语句 一般形式:数据说明部分;执行语句部分;if()else switch for()while()dowhile()continue break go

28、to return 分支 循环 辅助控制 说明:“”后不加分号 语法上和单一语句相同 复合语句可嵌套 字符数据的输入输出 字符输出函数:格式:putchar(c)参数:c 为字符常量、变量或表达式 功能:把字符 c 输出到显示器上#include main()int c;char a;c=65;a=B;putchar(c);putchar(n);putchar(a);字符输入函数 格式:getchar()/*无参函数*/功能:从输入设备得到一个字符作为函数值赋值给一个字符变量 例:char c;c=getchar();putchar(getchar();printf(“%c”,getchar(

29、);3 格式输出 printf 函数 printf 函数 一般格式:printf(“格式控制串”,输出表)功能:按指定格式向显示器输出数据 输出表:要输出的数据(可以没有,多个时以“,”分隔)格式控制串:包含两种信息 格式说明:%修饰符格式字符 ,用于指定输出格式 普通字符或转义序列:原样输出 d,i x,X o u c s e,E f g,G%格式字 十六进制无符号整数 不带符号十进制整数 十进制整数 指数形式浮点小数 单一字符 字符串 八进制无符号整数 小数形式浮点小数 e和f中较短一种 百分号本身 int a=567;printf(“%d”,a);int a=255;printf(“%x

30、”,a);int a=65;printf(“%o”,a);int a=567;printf(“%u”,a);char a=65;printf(“%c”,a);printf(“%s”,“ABC”);float a=567.789;printf(“%e”,a);float a=567.789;printf(“%f”,a);float a=567.789;printf(“%g”,a);printf(“%”);5677 fff 101 567 A ABC 5.677890e+0567.789000 567.789%说明 格式字符要用小写(,除外)格式字符与输出项个数应相同,按先后顺序一一对应#incl

31、ude void main()int a;a=12;printf(%d,%d,a,13);运行结果:12,13 修改:printf(%d,%d,a);运行结果:12,0 修改:printf(%d,a,13);运行结果:12 输出转换输出转换:格式字符与输出项类型不一致格式字符与输出项类型不一致,自动按指定格式输出自动按指定格式输出(某种情况下可,某种某种情况下可,某种情况不能转情况不能转换换)附加格式说明符(修饰符)课堂练习:分析下列程序的运行结果:例 int a=1234;float f=123.456;char ch=a;printf(“%8d,%2dn”,a,a);printf(“%f,

32、%8f,%8.1f,%.2f,%.2en”,f,f,f,f,f);printf(“%3cn”,ch);运行结果:1234,1234 123.456000,123.456000,123.5,123.46,1.23e+02 a 例:无符号数据的输出#include void main()unsigned int a=65535;.n 对实数,指定小数点后位数(四舍五入)对字符串,指定实际从左端截取的字符的个数 修饰符 功 能 m 输出数据域宽,数据长度m,左补空格;否则按实际输出(用于整型、浮点、字符串)输出数据在域内左对齐(缺省右对齐)-在d,o,x,u前,指定输出精度为long型 在e,f,g

33、前,指定输出精度为double型(double型也可以直接用%f输出)l int b=-2;printf(a=%d,%o,%x,%un,a,a,a,a);printf(b=%d,%o,%x,%un,b,b,b,b);运行结果为:a=-1,177777,ffff,65535 b=-2,177776,fffe,65534 例:字符串的输出#include void main()printf(%3s,%7.2s,%.4s,%-5.3sn,CHINA,CHINA,CHINA,CHINA);运行结果:CHINA,#CH,CHIN,CHI#(#号代表空格)例:输出实数时的有效位数(一般 7 位有效数字)#

34、include void main()float x,y;x=111111.111;y=222222.222;printf(%f,x+y);运行结果为:333333.328125 例:输出双精度数时的有效位数(一般 16 位有效数字)#include void main()double x,y;x=1111111111111.111111111;y=2222222222222.222222222;printf(%f,x+y);运行结果为:3333333333333.333000 4 格式输入函数 scanf()scanf 函数 一般格式:scanf(“格式控制串”,地址表列)功能:按指定格式从

35、键盘输入数据 地址表列:由若干个地址组成的表列,可以是变量的地址,或字符串的首地址 格式字符:d,i;o;x,X;u;c;s;f,e,E,g.,G 附加格式说明符(修饰符)l 修饰符 功 h m 用于d,o,x前,指定输入为short型整数 用于d,o,x,u前,指定输入为long型整数 用于e,f前,指定输入为double型实数 指定输入数据宽度,应为正整数 输入数据时,遇以下情况认为该数据结束:遇空格、TAB、或回车 遇宽度结束 遇非法输入#include void main()int a,b,c;scanf(%d%d%d,&a,&b,&c);printf(%d,%d,%dn,a,b,c)

36、;输入数据:3 4 5 运行结果:3,4,5 以下输入方法均正确:3 4 5 3 4 5 3(按 Tab 键)4 5 例 scanf(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%dn”,a,b,c);输入 123 123 123 输出 a=123,b=83,c=291 例 scanf(“%4d%2d%2d”,&yy,&mm,&dd);输入 19991015 则 1999yy,10 mm,15 dd 例 scanf(“%2d%*3d%2d”,&a,&b);输入 1234567 则 12a,67b 例 scanf(“%3d%*4d%f”,&k,&f);输入 12

37、345678765.43 则 123k,8765.43f 例 scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);输入 a=12,b=24,c=36 例 scanf(“%d%c%f”,&a,&b,&c);若输入 1234a123o.26 则 1234 a,a b,123 c 例 int x;输入时可以空格,回车键,Tab 键分隔 例 int x;char ch;scanf(“%d”,&x);scanf(“%c”,&ch);printf(“x=%d,ch=%dn”,x,ch);执行:123 输出:x=123,ch=10 char ch;scanf(“%d”,&x);ch=getch

38、ar();printf(“x=%d,ch=%dn”,x,ch);执行:123 输出:x=123,ch=10 例 main()double f;scanf(“%lf”,f);/l 不能省略 printf(“%f”,f);顺序结构程序设计举例 例输入三角形的三个边长,求三角形的面积 分析:若假设输入的三个数可以构成一个三角形,则由三条边求三角形面积公式为:程序如下:#include#include main()float a,b,c,s,area;scanf(%f,%f,%f,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);print

39、f(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn,a,b,c,s);printf(area=%7.2fn,area);分析:一元二次方程的根为:#include#include main()float a,b,c,disc,x1,x2,p,q;scanf(a=%f,b=%f,c=%f,&a,&b,&c);disc=b*b-4*a*c;p=-b/(2*a);q=sqrt(disc)/(2*a);x1=p+q;x2=p-q;printf(nnx1=%5.2fnx2=%5.2fn,x1,x2);)()()()(2 1 c s b s a s s area c b a s 0 4

40、0 2 2 ac b c bx ax 方程的根,设 例求 a ac b b x 2 4 2 输入:3,4,6 输出:a=3.00,b=4.00,c=6.00 s=6.50 area=5.33 输入:a=1,b=3,c=2 输出:x1=-1.00 x2=-2.00 第第五五章 选择结构程序设计 关系运算符和关系表达式 关系运算符 种类:=!=结合方向:自左向右 优先级别:低于算术运算符,高于赋值运算符(算术-关系-赋值-逗号)例 ca+b /c(a+b)ab!=c /(ab)!=c a=bc /a=(bc /a=(bc)关系表达式的值:是逻辑值“真”或“假”,用 1 和 0 表示 例 int a

41、=3,b=2,c=1,d,f;ab (ab)=c b+cb f=abc 例 int i=1,j=7,a;a=i+(j%4!=0);结果:a=2 例 a0 结果为 1 A100 结果为 0 例 5278 在 C 中是允许的,值为 0 例 注意区分“=”与“=”int a=0,b=1;if(a=b)/改为 if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);=!=优先级6(高)优先级7(低)/表达式值1/表达式值1/表达式值0/d=1/f=0,合法,但不要理解错含义 例 应避免对实数作相等或不等的判断(有些系统可以)如 1.0

42、/3.0*3.0=1.0 有的系统结果为 0,有的系统结果为 1 可改写为:fabs(1.0/3.0*3.0-1.0)1e-6 逻辑运算符和逻辑表达式 逻辑运算符和表达式 逻辑运算符 种类:&(与)|(或)!(非)逻辑运算规则:两个操作数同时为真,其值为真,否则为假|:两个操作数有一者为真则其值为真,全为假则为假!:若操作数为真,则其值为假,若操作数为假,则其值为真。优先级:!算术运算符 关系运算符 和|赋值 逗号 高 低 结合性:!:从右向左&:从左向右|:从左向右 说明:当逻辑运算的操作数为数值型值时,若该值为则为假,非则为真 例 a=x&x=b /(a=x)&(xb&xy /(ab)&(

43、xy)a=b|x=y /(a=b)|(x=y)!a|ab /(!a)|(ab)例 a=4;b=5;!a 值为 0 a&b 值为 1 a|b 值为 1 !a|b 值为 1 4&0|2 值为 1 53&2|83)&2|(8b)&(n=cd)/结果 m=0,n=1 if 语句 if 语句的三种形式 形式一:格式:if(expression)statement 执行过程:例:if(xy)printf(“%d”,x);形式二:格式:if(expression)statement1 else statement2 执行过程:例:if(xy)max=x;else max=y;形式三:格式:if(表达式 1)

44、语句 1 else if(表达式 2)语句 2 else if(表达式 3)语句 3.else 语句 n 条件表达式 语句 非0=0 表达式 语句1 语句2 非0=0 例:if(number500)cost=0.15;else if(number300)cost=0.1;else if(number100)cost=0.075;else if(number50)cost=0.05;else cost=0;说明:if 后面的表达式类型任意,按表达式值为 0 还是非 0 区分真假,一般为逻辑或关系表达式 语句可以是复合语句 if(x)if(x!=0)例:if(3)为真;if(a)为真 if(!x)

45、if(x=0)例:5.1 输入两个实数,按代数值由小到大的顺序输出这两个数 程序如下:#include void main()float a,b,t;scanf(%f,%f,&a,&b);if(ab)t=a;a=b;b=t;printf(%5.2f,%5.2fn,a,b);例:5.2 输入 3 个数 a,b,c,要求按由小到大的顺序输出 程序如下:#include void main()表达式1 语句1 非0 0 表达式2 表达式3 语句4 语句3 语句2 非0 非0=0=0 float a,b,c,t;scanf(%f,%f,%f,&a,&b,&c);if(ab)t=a;a=b;b=t;if

46、(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;printf(%5.2f,%5.2f,%5.2fn,a,b,c);if 语句嵌套:一般形式:(else 总是与离它最近的 if 配对)if(expr1)if(expr2)statement1 内嵌 if else statement2 if(expr1)statement1 else if(expr3)statement3 内嵌 if else statement4 if(expr1)if(expr2)statement1 内嵌 if else statement2 else if(expr3)statement3 内嵌 if

47、 else statement4 例:5.3 有一函数 -1 (x0)程序如下:#include void main()if(expr1)if(expr2)statement1 else statement2 内嵌if int x,y;scanf(%d,&x);if(xb?a:cd?c:d ab?a:(cd?c:d)表达式类型的说明 表达式 1 与表达式 2 和表达式 3 类型可不同 表达式 2 和表达式 3 还可以是赋值表达式或函数调用表达式 如:ab?printf(“%d”,a):printf(“%d”,b)当表达式 2 与表达式 3 类型不同时,值取较高的类型 例 x?a:b /x=0,

48、表达式值为b;x0,表达式值为a xy?1:1.5 /xy ,值为 1.0;xy ,值为 1.5 例 5.4 输入一个字符,判断它是否大定字母,如果是,将它转换成小写字母,如果不是,不转换,然后输出最后得到的字母。程序如下:#include void main()char ch;scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(%cn,ch);4switch 语句 一般形式:表达式1值为表达式2 值为表达式3 非0=0 switch(表达式)case 常量表达式 1:语句组 1;break;case 常量表达式 2:语句组 2;break;.case

49、 常量表达式 n:语句组 n;break;default:语句组 n+1;说明:常量表达式的值必须互不相同 case 后可包含多个可执行语句,且不必加 执行完一个 case 后的语句组后,续继执行下一个 case 后的语句组直到结束。若只想执行一个必须用 break 跳出,多个 case 可共用一个语句组。如:switch(grade)caseA:printf(“85-100n”);break;caseB:printf(“70-84n”);break;caseC:printf(“60-69n”);break;caseD:printf(“60n”);break;.各个 case 和 defaul

50、t 的顺序不影响执行结果(有 break 的情况下)5 程序举例 例:5.5 写程序,判断某一年是否为闰年 Year 被 4 整除 真 假 Year 被 100 整除 真 假 Year 被 400 整除 真 假 Leap=1 leap=0 leap=1 leap=0 leap 真 假 输出“闰年”输出“非闰年”程序如下:#include void main()int year,leap;scanf(%d,&year);if(year%4=0)if(year%100=0)if(year%400=0)leap=1;else leap=0;else leap=1;else leap=0;if(lea

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号