版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章C语言概述
>c程序的组成和形式
•c程序是由函数构成网「主函数
t其他函!
♦一个函数由两部分组成
行函数的首部
例1.3中max函数的首部为
intmax(i
;I
函数类型函数名函数参数类型函数参数名函数参数类型函数参数名
声函数体「声明部分r变量声明
Vt函数声明
I执行部分
♦一个C程序总是从main函数开始执行。
♦C程序书写格式自由,一行可以写几个语句,一个语句可以写在多行上。
♦每个语句和数据声明的最后必须有一个分号。
♦C语言的输入输出功能是通过函数完成的。
♦可以用/*......*/对C程序进行注释。
第三章数据类型、运算符、与表达式
§3.1C语言的数据类型
>C语言的数据类型:整型r整型int
J短整型short
「长整型long
基本类型
单精度型float
实型’
双精度型double
C字符类型char数据类型决定:
数枚举类型enum1.数据占内存字节数
据2.数据取值范围
类结构体struct3.其上可进行的操作
型构造类型
共用体union
数组
指针类型
空类型void
§3.2常量与变量
>常量与符号常量
•常量:在程序运行过程中,其值不能被改变的量
•符号常量:用一个标识符代表一个常量的符号
*使用符号常量的好处:
①含义清楚
日能做到“一改全改”
>变量
♦变量:代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的
值,在程序运行期间,这些值是可以改变的。
*标识符:在C语言中用来对变量、符号常量、函数、数组、类型等对象命名的有效
字符序列
*标识符的命名规则:
b只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。
5大写和小写字母是不同的字符,也就是不同的标识符。
卡标识符的最大长度TuoboC规定为32个字符,一般不超过8个字符。
叱标识符应做到“见名知义”
叱标识符不能是关键字,如果是已经定义标识符,比如函数名,则相当于重新定义。
♦变量必须''先定义,后使用”
例:判断下列标识待号合法性
sumSumM.D.JohndayDate
3days
studentname#33lotus_l_2_3
chara>b_above$123
§3.3整型数据
>整型常量
♦十进制整数:正负整数
♦八进制整数:以0开头,08是错误的用法
♦十六进制整数:以0x开头,例:0x2a是合法的
>整型常量的类型
•一个整型常数根据数据所在的范围可自动确定它的数据类型
••个整常量后面加一个字母u或U,认为是unsignedint型
•一个整常量后面加一个字母1或L,认为是longint
整型变量
整型数据在内存中的存放形式:补码
正整数:该数的原码
负整数:该数的绝对值按位取反再加1
例:10的补码为0000000000001010
-10的补码为1111111111110110
最高位是符号位,该位为0表示正,该位为1表示负。
整型变量的分类:六种
,有符号基本整型:[signed]int2-32768~32767(-215-215-1)
・无符号基本整型:unsignedint20〜65535(0-291)
・有符号短整型:[signed]short[int]2-32768-32767
,无符号短整型:unsignedshort[int]20-65535
,有符号长整型:[signed]long[int]4-2147483648(-231-23|-1)
,无符号长整型:unsignedlong[int]40〜4294967295(0-232-1)
t整型数据的溢出
例3.3整型数据的溢出
//include<stdio.h>
voidmain()
{inta,b;
a=32767;
b=a+1;
printf("%d,%d\n",a,b);
a和b在内存中的形式:
运行结果为:0111111111111111___432767
32767,-327681000000000000000___4-32768
§3.4浮点型数据
A浮点型常量的表示方法
♦十进制小数形式:(必须有小数点)如0.123,.123,123.0,0.0,123.
*指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3,123E2,1.23e4,
e-5.1.2E-3.5
*规范化的指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且
只能有一位非零的数字。
浮点型变量
*浮点型数据在内存中的存放形式:分成小数部分和指数部分两部分存放
例:3.14159在内存中的形式如下(实际存储的是它的二进制数形式):
+3141591
符号小数部分指数部分
♦浮点型变量的分类
类比特数有效数字数值范围
型
float326〜7-3.4*10-38〜34*1()38
double6415〜16_]7*10-3。8〜17*1()308
lingdouble12818-19-1.2*10-4932〜1.2*1(/932
♦浮点型变量也应先定义后使用
§3.5字符型数据
>字符常量:
♦用单撇号括起来的一个字符
♦转义字符:以一个“\”开头的字符序列:
转义字符含义转义字符含义
\n换行\t水平制表8
\b退格\r回车
\\反斜线\f换页
\'单引双引号
\ddd1〜3位8进制数代表的字符\xhh1〜2位16进制数代表的字符
main()
{print"'abc\tde\rf\tg\n");
printf("h\ti\b\bjk\n");
}
运行结果应为:
fabcgde实际运行结果为:
hjikfgde
hjk
*输出的制表符覆盖了
>字符变量原有字符
*字符变量的定义及使用形式:
charcl,c2;
cl='a';c2='b';
*字符变量在内存中占一字节。
>字符数据在内存中的存储形式
♦以字符的ASCH码形式存放
♦可以和整型数据通用,可以互相赋值,可以以%d或c式输出,字符型数据可以参
加算术运算,但只能存放0〜255(unsignedchar)或-128〜127(signedchar)之间的整
数。
例3.6向字符变量赋予整数
#inchide<stdio.h>
voidmain()
{charcl;intc2;
cl=97;
c2=98;
prin氓"%c%c\nM,cl,c2);
printf("%d%d\nn,c1,c2);
}
运行结果:
ab
9798
例3.7大小写字母的转换
#include<stdio.h>
voidmain()
{charcl,c2;
cl=R;
c2=b;
cl=cl-32;
c2=c2-32;
printf("%c%cn,cl,c2);
}
>字符串常量:
♦一对双撇号括起来的字符序列:“abc”
*'a'是字符常量,“a”是字符串常量
♦不能将一个字符串常量赋值给字符变量
♦系统自动在字符串常量的末尾加上打结束号志
例字符串“hello”在内存中:he11o\0
例空串“”在内存中
§3.6变量赋初值
>变量赋初值:在定义变量的同时使变量初始化
例:inta=3;
floatf=3.56;
charc=,a,;
inti,j,k=5;
inta,b,c=5;
inta=b=c=5;
§3.7各类数值型数据间的混合运算
>各类数值型数据间的混合运算
*整型、浮点型、字符型数据间可以混合运算
*不同类型的数据要先转换成同一类型,再进行运算
♦转换规则:
double
§3.8算术运算符和算术表达式
>C运算符简介
算术运算符:(+-*/%++-)
关系运算符:(<<===>>=!=)
逻辑运算符:((!&&||)
位运算符:(“»〜|.&)
C赋值运算符:(=及其扩展)
运条件运算符:(?:)
算逗号运算符:(,)
符指针运算符:(*&)
求字节数:(sizeof)
强制类型转换:(类型)
分量运算符:(.-»
下标运算符:(□)
I其它:(()-)
>算术运算符和算术表达式
•基本算术运算符:+,*,/,%(取余)
卡结合方向:从左向右
5优先级:-―►*/%―►+-
(2)(3)(4)
•说明:
b可为单目运算符时,右结合性
面两整数相除,结果为整数,遵守“向零取整”的原则
b%要求两侧均为整型数据
1例:5%2=1~1
例:5/2=2
-5%2=-1
-5/2=-2
1%10=1
-5/2.0=-2.5
5%1=0
5.5%2(x)I
•算术表达式:用算术运算符和括号将运算对象(操作数)连接起来,符合C语法规
则的式子。
>强制类型转换运算符
•一般形式:(类型名)(表达式)
•优先级:2级
例:(int)(x+y)
(int)x+y
(double)(3/2)
(int)3.6
•说明:强制转换得到所需类型的中间变量,原变量类型不变
例main()
{floatx;
inti;
x=3.6;
i=(int)x;
printf("x=%f,i=%d”,x,i);
)
结果:x=3.600000,i=3
>自增、自减运算符++-
•作用:使变量值加1或减1
•种类:
b前置++i,-i(先执行i+1或i-1,再使用i值)
向后置i++,i-(先使用i值,再执行i+1或i-1)
•说明:
方++-只能用于变量,不能用于常量和表达式,如5++(x),(a+b)++(x)
5++-结合方向:自右向左
优先级:++,-----►*,/,%---►+,-
(2)(3)(4)
=i++
例:printf("%d,%d”,i,i++);1==>J>
运行结果:4,3printf("%d,%d”j,i);
例-i++6-(i++)(同一优先级右结合性)例j+++k;〈^"►(j++)+k;
i=3;printf(“%d”,-i++);//-3______________________________
§3.9赋值运算符和赋值表达式
>简单赋值运算符
•符号:=
•格式:变量标识符=表达式
•作用:将一个数据(常量或表达式)赋给一个变量
>赋值时若变量和表达式的类型不一致将自动进行类型转换
例1:inti;
i=3.56;/*实际i值为3*/
例2:floatf;
423;
printf(u%f\n,,,f);结果为:23.000000
例3:doule赋值给float时,截取其前面7位有效数字,取值范围超出时产生溢出错误。
floatf;
doubled=123.456789el00;
4d;/*出错*/
例4:字符赋给整型时:
main()
{unsignedcharc,d;
inta,b;
c='\376';d=-125;无符号字符时,将原值存入整
a=c;b=d;型数的低八位,高八位补零。
printf(t4%d,%d,,,a,b);}
运行结果为:254,131
main()
{charc;
inta;有符号字符时,将原值存入整型数
,,
c=\376;的低八位,高八位符号扩展。原值
a=c;最高位为零则补零,为1则补1
printff<%d,,,a);)
运行结果为:一2
例5:main()
{inti=289;int,short,long赋值给字符型变
charc;量时,只将其低八位截取赋值
c=i;
printf("%d,%c”,c,c);}
运行结果为:33,!
例6:将int赋值给longint处理方法同例4
将longint赋值给血时截取低16位
main()
{longb=65536;inta;
a=b;
printf("%d”,a);}
运行结果为:0
例7:将unsigned赋给•个同字节数的signed型时,将原值保持不变,超范围会产生溢出
错误。
例:main()
{unsignedinta=65535;
intb;
b=a;
printfC€%d,,,b);}
运行结果为:一1
例8:将signed赋给一个同字节数的unsigned型时,将原值保持不变
main()
{unsignedinta;
intb=・l;
a=b;
pr血f(“%d”,a);}
运行结果为:65535
>复合赋值运算符
•种类:+=-=*=/=%=«=»=&=A=|=
含义:变量op=表达式।——变量=变量op(表达式)
a+=3vaa=a+3
x*=y+8v>x=x*(y+8)
x%=3<c---->x=x%3
>赋值表达式
•一•般形式:变量=表达式
•赋值表达式的值与变量值相等,且可嵌套,但赋值号左边必须为变量
正确用法:
a=b=c=5
a=(b=5)
a=5+(c=6)
a=(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(64%d,,,a=b);
§3.10逗号运算符和逗号表达式
形式:表达式1,表达式2,……表达式n
结合性:从左向右
优先级低于赋值表达式
逗号表达式的值:等于表达式n的值
a=3*5,a*4/*a=15,表达式值60*/
a=3*5,a*4,a+5/*a=15,表达式值20*/
x=(a=3,6*3)/*赋值表达式,表达式值表,x=18*/
x=a=3,6*a/*逗号表达式,表达式值18,x=3*/
例a=l;b=2;c=3;
printf("%d,%d,%d”,a,b,c);/*1,2,3*/
printf("%d,%d,%d",(a,b,c)bc);/*3,2,3*/
>课堂练习:
分析下面程序的运行结果:
main()
{floatfl;inta;charc=,a';
f1=32.78;
c=c-(int)f1;
a=c%15;
printf(a%d,%f,%c\nw,a,fl,c);}
第一章与第三章练习题
1.一个c程序的执行是从一。
A)本程序的main函数开始,到main函数结束
B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C)本程序的main函数开始,到本程序文件的最后一个函数结束
D)本程序文件的第一个函数开始,到本程序main函数结束
2.以下叙述正确的是:
A)在C程序中,main函数必须位于程序的最前面
B)C程序的每行中只能写•条语句
0C语言本身没有输入输出语句
D)在对个C程序进行编译的过程中,可发现注释中的拼写错误
3.以下叙述不正确的是。
A)一个C源程序可由一个或多个函数组成
B)一个C源程序必须包含一个main函数
C)C程序的基本组成单位是函数
D)在C程序中,注释说明只能位于一条语句的后面
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)4B)16032D)52
7.假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是:
A)7B)8C)6D)2
8.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符
A)必须为字母B)必须为下划线
C)必须为字母或下划线D)可以是字母,数字和下划线中任一种字符
9.若有代数式3ae/bc,则不正确的C语言表达式是:
A)a/b/c*e*3B)3*a*e/b/c
C)3*a*e/b*cD)a*e/c/b*3
10.以下不正确的叙述是
A)在C程序中,逗号运算符的优先级最低
B)在C程序中,APH和aph是两个不同的变量
C)若a和b类型相同,在执行了赋值表达式a=b后b中的值将放人a中,而b中的值不变。
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型
数值。
11.以下正确的叙述是:
A)在C程序中,每行中只能写一条语句
B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
C)在C程序中,无论是整数还是实数,都能被准确无误地表示
D)在C程序中,%是只能用于整数运算的运算符
12.以下符合C语言语法的赋值表达式是
A)d=9+e+f=d+9B)d=9+e,f=d+9
C)d=9+e=e++,d+9D)d=9+e++=d+7
13.已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'十'6'一
'3';后,c2中的值为
A)DB)68C)不确定的值D)C
14.在C语言中,要求运算数必须是整型的运算符是。
A)/B)++c)!=D)%
15.若以下变量均是整型,且num=sum=7;则执行表达式sUM=num++,sllM++,++num后sum
的值为
A)7B)8C)9D)10
16.在C语言中,int、char和short种类型数据在内存中所占用的字节数
A)由用户自己定义B)均为2个字节
0是任意的D)山所用机器的机器字长决定
17.若有说明语句:charc='\72'则变量c
A)包含1个字符B)包含2个字符
C)包含3个字符D)说明不合法,c的值不确定
18.若有定义:inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是
A)2.500000B)2.750000c)3.500000D)0.000000«
19.sizeof(float)是:
A)一个双精度型表达式B)一个整型表达式
C)一种函数调用D)一个不合法的表达式
20.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为
A)intB)floatC)doubleD)不确定
21.在C语言中,char型数据在内存中的存储形式是:
A)补码B)反码C)原码D)ASCII码
22.表达式18/4*sqrt(4.0)/8值的数据类型为:
A)intB)floatC)doubleD)不确定
23.设C语言中,•个int型数据在内存中占2个字节,则unsignedint型数据的取值
范围为:
A)0—255B)0~32767C)0~65535D)0~2147483647
24.设有说明:charw;intx;floaty;doublez;则表达式w*x+z—y值的
数据类型为:
A)floatB)charC)intD)double
25.若有以下定义,则能使值为3的表达式是:
intk=7,x=12;
A)x%=(k%=5)B)x%=(k—k%5)
C)x%=k-k%5D)(x%=k)—(k%=5)
26.设以下变量均为int类型,则值不等于7的表达式是
A)(x=y=6,x+y,x+1)B)(x=y=6,x+y,y+1)
0(x=6,x+1,y=6,x+y)D)(y=6,y+1,x=y,x+1)
第四章顺序程序设计
§4.1C语句
>C语句分类
•程序控制语句(9种):
_Tif()~else~
分支
Lswitch
for()~
Jwhile()~
循环
।do~while()
continue
break
辅助控制
]goto
、return
•表达式语句:表达式加分号构成。
夕函数调用语句:函数名(实际参数表);
吠赋值语句:赋值表达式加一个分号
a=3;
i++;
吠其他表达式构成语句:表达式加一个分号
x+y;/*合法但无意义*/
•空语句:;
•复合语句:用{…}括起来的一组语句
它一般形式:{[数据说明部分;]
执行语句部分;
句说明:
❖“}”后不加分号
❖语法上和单一语句相同
复合语句可嵌套
§4.2字符数据的输入输出
>字符输出函数:
•格式:putchar(c)
•参数:c为字符常量、变量或表达式
•功能:把字符C输出到显示器上
ftinclude<stdio.h>
main()
{intc;
chara;
c=65;a=,B';
putchar(c);putchar('\n");putchar(a);
}
>字符输入函数
•格式:getchar()/*无参函数*/
•功能:从输入设备得到一个字符作为函数值赋值给一个字符变量
例:charc;
c=getchar();
putchar(getchar());
printf("%c”,getchar。);
§4.3格式输出printf函数
Aprintf函数
•一般格式:printf(“格式控制串”,输出表)
•功能:按指定格式向显示器输出数据
•输出表:要输出的数据(可以没有,多个时以“,”分隔)
•格式控制串:包含两种信息
卡格式说明:%[修饰符]格式字符,用于指定输出格式
曲普通字符或转义序列:原样输出
d,i十进制整数inta=567;printf("%d”,a);5677
x,X十六进制无符号整数inta=255;printf("%x”,a);fff
0八进制无符号整数inta=65;printfT%o”,a);1Al
4t,
u不带符号十进制整数inta=567;printfT%u\a);567
c单一字符chara=65;printfC4%c,\a);A
s字符串print.%”,“ABC”);AB
floata=567.789;printtVu%e,,,a);
e,E指数形式浮点小数5.677890e+02
tt,
f小数形式浮点小数floata=567.789;printfi[%f,a);567.789000
g-Ge和仲较短一种floata=567.789;printf(u%g,,,a);567.789
%%百分号本身printfC%%”);%
•说明
行格式字符要用小写(X,E,G除外)
①格式字符与输出项个数应相同,按先后顺序一一对应
#include<stdio.h>
voidmain()
{inta;
a=12;
printf("%d,%d”,a,13);
)
运行结果:12,13
修改:printf(〃%d,%d〃,a);
运行结果:12,0
修改:printf(〃%d〃,a,13);
运行结果:12
,输出转换:格式字符与输出项类型不一致,自动按指定格式输出(某种情况下可,某种
情况不能转换)
•附加格式说明符(修饰符)
修饰符功先巨
m输出数据域宽,数据长度vm,左补空格;否则按实际输出(用于整型、浮点、字待串)
对实数,指定小数点后位数(四舍五入)
.n
对字符串,指定实际从左端截取的字符的个数
-输出数据在域内左对齐(岐省右对齐)
在d,o,x,u前,指定输出精度为long型
1在e,f,g前,指定输出精度为double型(double型也可以直接用%f输出)
课堂练习:分析下列程序的运行结果:
例inta=1234;
floats123.456;
charch='a';
printfC4%8d,%2d\n,,,a,a);
printfr%f,%8f,%8.1f,%.2f,%.2e\n”,f,f,f,f,f);
printfC4%3c\n,,,ch);
运行结果:
1234,1234
123.456000,123.456000,123.5,123.46,1.23e+02
a
例:无符号数据的输出
#include<stdio.h>
voidmain()
{unsignedinta=65535;
intb=-2;
printf(na=%d,%o,%x,%u\nn,a,a,a,a);
printf(,,b=%d,%o,%x,%u\nn,b,b,b,b);
)
运行结果为:
a=-l,177777,ffff,65535
b=-2,l77776,ffife,65534
例:字符串的输出
#include<stdio.h>
voidmain()
{
printf("%3s,%7.2s,%.4s,%-5.3s\n”JCHINA”JCHINA","CHINA”,“CHINA");
|
运行结果:
CHINA,CHIN,CHI##
(#号代表空格)
例:输出实数时的有效位数(一般7位有效数字)
#include<stdio.h>
voidmain()
{floatx,y;
x=llllll.lll;y=222222.222;
printf(H%f,,x+y);
}
运行结果为:
333333.328125
例:输出双精度数时的有效位数(般16位有效数字)
#include<stdio.h>
voidmain()
{doublex,y;
111111111;
产2222222222222.222222222;
printf(M%f\x+y);
}
运行结果为:
3333333333333.333000
§4.4格式输入函数scanf()
Ascanf函数
•一般格式:scanf(“格式控制串”,地址表列)
•功能:按指定格式从键盘输入数据
•地址表列:由若干个地址组成的表列,可以是变量的地址,或字符串的首地址
•格式字符:d,i;o;x,X;u;c;s;f,e,E,g.,G
•附加格式说明符(修饰符)
修饰符功
h用于d,o,x前,指定输入为short.型整数
用于d,o,x,u前,指定输入为long型整数
1
用于e,f前,指定输入为double型实数
•输入数据时,遇以下情况认为该数据结束:
卡遇空格、TAB、或回车
e遇宽度结束
廿遇非法输入
#include<stdio.h>
voidmain()
{inta,b,c;
scanf(〃%d%d%d〃,&a,&b,&c);
printf("%d,%d,%d\n〃,a,b,c);
必,四田c,「菽赢以空格,回车键,Tab键分隔
输入数据:345------------一
运行结果:3,4,5————
以下输入方法均正确:①345
②3
45
③3(按Tab键)4
5
例scanf(a%d%o%xw,&a,&b,&c);
printf(<<a=%d,b=%d,c=%d\n,',a,b,c);
输入123123123J
输出a=123,b=83,c=291
例scanf("%4d%2d%2d”,&yy,&mm,&dd);
输入19991015J
则1999=>yy,10=>mm,15=>dd
例scanf("%2d%*3d%2d”,&a,&b);
输入1234567J
则12na,67nb
例scanf("%3d%*4d%f”,&k,&f);
输入12345678765.43J
贝1」123=>k,8765.43nf
例scanf("a=%d,b=%d,c=%dw,&a,&b,&c);
输入a=12,b=24,c=36J
例scanf(<<%d%c%f,),&a,&b,&c);
若输入1234al23o.26J
贝I」1234na,'a'=例intx;
例intx;charch;
scanf("%d",&x);
scanf("%c”,&.ch);
printf("x=%d,ch=%d\n>,,x,ch);
执行:123J
输出:x=123,ch=10
charch;
scanf("%d”,&x);
ch=getchar();
printf("x=%d,ch=%d\n”,x,ch);
执行:123」
输出:x=123,ch=10
例main()
{doublef;
scanf(a%lf",f);〃1不能省略
printf("%f",f);}
§4.6顺序结构程序设计举例
例4.10输入三角形的三个边长,求三角形的面积
分析:式假设输入的三个数可以构成一个三角形,则由三条边求三角形面积公式为:
s=2(〃+Z?+c)
area='sx(s-〃)x(s-b)x(s-c)
程序如下:
#include<math.h>
#include<stdio.h>
main()
{floata,b,c,s,area;
scanfC%f,%f,%f〃,&a,&b,&c);
s=l.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printfCa=%7.2f,b=%7.2f,c=%7,2f,s=%7,2f\n\a,b,c,s);
printf("area=%7.2f\n〃,area);
输入:3,4,6」
输出:a=3.00,b=4.00,c=6.00s=6.50
area=5.33
例求ox2+for+c=0方程的根,设人2一4ac>0
分析:一元二次方程的根为:
-b±^lh2-4ac
x=------------------
2a
#include<stdio.h>
#include<math.h>
main()
{floata,b,c,disc,xl,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);
xl=p+q;x2=p-q;
printf('\n\nxl=%5.2f\nx2=%5.2f\n〃,xl,x2);
)
输入:a=l,b=3,c=2J
输出:
xl=-1.00
x2=~2.00
第五章选择结构程序设计
§5.1关系运算符和关系表达式
>关系运算符
•种类:<<===>=>!=
•结合方向:自左向右
•优先级别:低于算术运算符,高于赋值运算符(算术-关系-赋值-逗号)
>优先级6(高)
L优先级7(低)
例c>a+b//c>(a+b)
a>b!=c//(a>b)!=c
a==b<c//a==(b<c)
a=b>c//a=(b>c)
•关系表达式的值:是逻辑值“真”或“假”,用1和0表示
例inta=3,b=2,c=l,d,f;
a>b〃表达式值1
(a>b)==c〃表达式值1
b+c<a〃表达式值0
d=a>b〃d=l
K=0,合法,但不要理解错含义
例inti=l,j=7,a;
a=i+(j%4!=0);
结果:a=2
例3>0结果为1
4^>100结果为0
例5>2>7>8在C中是允许的,
值为0
例注意区分与“=="
inta=0,b=1;
if(a=b)〃改为if(a==b)
printff'aequaltob");
else
printff'anotequaltob");
例应避免对实数作相等或不等的判断(有些系统可以)
如1.0/3.0*3.0==1.0有的系统结果为0,有的系统结果为1
可改写为:fabs(1.0/3.0*3.0-1.0)<le-6
§5.2逻辑运算符和逻辑表达式
>逻辑运算符和表达式
•逻辑运算符
句种类:&&(与)||(或)!(非)
的逻辑运算规则:
&&:两个操作数同时为真,其值为真,否则为假
||:两个操作数有一者为真则其值为真,全为假则为假
1:若操作数为真,则其值为假,若操作数为假,则其值为真。
吠优先级:!一►算术运算符—关系运算符—&&和||-►赋值—►逗号
高---------------------------------------------------►低
卡结合性:!:从右向左
&&:从左向右
||:从左向右
华说明:当逻辑运算的操作数为数值型值时,若该值为0则为假,非0则为真
例a<=x&&x<=b//(a<=x)&&(x<=b)
a>b&&x>y//(a>b)&&(x>y)
a==b||x==y//(a==b)||(x==y)
!a||a>b//(!a)||(a>b)
例a=4;b=5;
!a值为0
a&&b值为1
a||b值为1
!a||b值为1
4&&0||2值为1
5>3&&2||8<4-!0//(5>3)&&2||(8<(4-(!0)))值为1
'c'&&'d'值为1
•短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行
下一个逻辑运算符才能求出表达式的解时.,才执行该运算符
例a&&b&&c〃只在a为真时,才判别b的值;
只在a、b都为真时,才判别c的值
例a||b||c//只在a为假时,才判别b的值;
只在a、b都为假时,才判别c的值
例a=1;b=2;c=3;d=4;m=1;n=1;
(m=a>b)&&(n=c>d)〃结果m=0,n=l
§5.3if语句
>if语句的三种形式
•形式一:
格式:if(expression)
statement
▼执行过程:
V
=0
条件表达式
非0
语句
例:if(x>y)
printfC%d”,x);
•形式二:
好格式:if(expression)
statement1
else
statement?
例:if(x>y)max=x;
elsemax=y;
•形式三:
▼格式:
if(表达式1)语句1
elseif俵达式2)语句2
elseif(表达式3)语句3
[else语句n]
例:if(number>500)cost=0.15;
elseif(number>300)cost=0.1;
elseif(number>100)cost=0.075;
elseif(number>50)cost=0.05;
elsecost=0;
•说明:
bif后面的表达式类型任意,按表达式值为0还是非0区分真假,一般为逻辑或
关系表达式
b语句可以是复合语句
bif(x)oif(x!=0)例:if(3)为真;if(3)为真
if<!x)oif(x==0)
例51输入两个实数,按代数值由小到大的顺序输出这两个数
程序如下:
#include<stdio.h>
voidmain()
(
floata,b,t;
scanff%f,%F,&a,&b);
if(a>b)
{t=a;a=b;b=t;}
printf(n%5.2f,%5.2f\nn,a,b);
)
例52输入3个数a,b,c,要求按由小到大的顺序输出
程序如下:
#include<stdio.h>
voidmain()
floata,b,c,t;
scanf("%f,%f,%f',&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if{b>c)
{t=b;b=c;c=t;}
printfC%5.2f,%5.2f,%5.2f\n”,a,b,c);
}
•if语句嵌套:
团一般形式:(else总是与离它最近的if配对)
if(exprl)
if(e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论