




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基本类型数据及其运算C的数据类型数据类型基本类型整型字符型实型(浮点型)单精度型双精度型枚举类型构造类型数组类型结构体类型共用体类型指针类型空类型2.1C语言的数据类型
数据的值有两种不同的表现形式:常量和变量。
C语言提供了丰富的运算符和表达式,以完成各种数值计算和非数值计算。
2.1C语言的数据类型
本章将着重介绍基本数据类型中的整型、实型和字符型数据,数据的运算及输入输出。
2.1C语言的数据类型
2.2常量与变量
2.3整型数据
2.4实型数据
2.5字符型数据
2.2.1标识符
在C语言中,标识符就是常量、变量、数组、函数、类型和语句的名称,分为关键字、预定义标识符和用户标识符3种类型。2.2.1标识符
1.关键字ANSIC标准C共有32个关键字,1999年ISO推出的C99标准新增了5个关键字(见附录C)。
根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。1).数据类型关键字
(1)基本数据类型(5个)
void char int
float
double
(2)类型修饰关键字(4个)
short
long
signed
unsigned2.2.1标识符
(3)复杂类型关键字(5个)
struct
union
enum
typedef
sizeof
(4)存储级别关键字(6个)
auto
static
register
externconst
volatile2).流程控制关键字
(1)跳转结构(4个)
return
continue
break
goto
(2)分支结构(5个)
if
else
switch
case
default
(3)循环结构(3个)
for
do
while
C99新增5个关键字:
inline,restrict,_bool,_Complex,_Imaginary2.2.1标识符2.预定义标识符
预定义标识符通常包括C编译系统提供的标准库函数名(如printf、scanf等)和编译预处理命令名(如define、include等)。2.2.1标识符
在C语言中,预定义标识符也有特定的含义。虽然预定义标识符也可以作为用户标识符使用,但这样会失去系统规定的原意。3.用户标识符
C程序中用于标识变量、符号常量、数组、函数和数据类型等对象的一个字符序列,统称为用户定义标识符。
C语言规定用户标识符只能由字母、数字和下划线组成,且以字母或下划线开头。2.2.1标识符
2.2.1标识符
说明:
(1)C语言中同一字母的大小写,被认为是两个不同的字符。例如:
total、TOTAL、ToTaL、tOtAl不同的用户标识符。
(2)C语言的关键字不能用作用户标识符。例如:
int不合法
Int、INT、iNt合法(3)用户标识符的命名要见名知意。
例如:
name/xm(姓名)、sex/xb(性别)、
age/nl(年龄)。2.2.1标识符
(4)避免使用易混字符。
例如:
1、l、i;0、o、O;p、P;x、X;2、z、Z等。file6、stu_name、DeFault、_9、xandy正确6file、stu-name、default、-9、x&y不正确
在程序运行过程中,其值不能被改变的量称为常量。
常量分为直接常量和符号常量。2.2.2常量
直接常量的类型从字面上就能够区分出来,如:
125为整型常量,12.56为实型常量,
'a'为字符常量,"china"为字符串常量。1.直接常量
直接常量即常数,分为整型常量、实型常量、字符常量和字符串常量。
#include<stdio.h>#definePRICE100//定义符号常量voidmain(){ intsum; sum=PRICE*20; printf("%d\n",sum);}2.符号常量
#defineNUMBER10main(){ inttotal; NUMBER=20; total=0; total=total+number; printf(“%d,%d”,number,total);}有关常量的用法:习惯上,符号常量名用大写,变量名用小写。2.2.3变量
变量代表内存中具有特定属性的一个存储空间来放数据,其中的数据称为变量的值。在程序运行期间,变量值是可以改变的。
编译系统将对每一个变量根据它的类型分配相应字节的连续内存单元,称为变量存储空间。
每个变量都必须有一个名字,变量名实际上是以一个名字代表一个内存地址。
把这几个内存单元地址中较低的地址称为变量地址。变量地址可用“&变量名”求得。有关变量的用法:main(){ intx; y=‘a’; printf(“%d”,x);}在c语言中,要求对所用到的变量作强制定义,即“先定义,后使用”undeclaredidentifier2.2.3变量
变量名、变量地址、变量存储空间和变量值之间的关系:2.2.3变量
1.变量定义
在C语言中,要求对所有用到的变量必须先定义、后使用。
变量定义的一般格式如下:
类型说明符变量名1[,变量名2,…,变量名n];
例如:
inti,j,k;
floatx,y,z;2.2.3变量
2.变量赋值
变量赋值有如下几种方式。
(1)变量赋初值。定义变量时直接赋值,也称为变量的初始化。例如:
inta=10,b=9,c=6;
floatx=3.0,y=1.0,z=2.0;
注:不能将同初值的变量赋初值时写成以下形式:
inta=b=c=6;
只能写成:
inta=6,b=6,c=62.2.3变量
2.变量赋值
变量赋值有如下几种方式。
(2)用赋值语句赋值。例如:
floatx;
x=10.0;2.2.3变量
2.变量赋值
变量赋值有如下几种方式。
(3)从键盘输入数据给变量赋值。例如:
inta;
scanf("%d",&a);
2.2.3变量
2.变量赋值
变量赋值有如下几种方式。
(4)从磁盘文件读数据给变量赋值。2.1C语言的数据类型
2.2常量与变量
2.3整型数据
2.4实型数据
2.5字符型数据
整型数据整型常量整型变量2.3整型数据
2.3.1整型常量整型常量即整数,整型数据在C语言中可用三种形式表示:
(1)十进制。例如10、36。
(2)八进制(以数字0开头)。例如012,
0478则是非法的。
(3)十六进制(以数字0+字母x(X)开
头)。
例如0x36、-0X8aC。编码正数表示方法负数表示方法原码最高位为符号位(0-正数,1-负数)。其他位为此数绝对值的二进制表示。反码同原码最高位为符号位(1),其他位为原码表示的各位取反。补码同原码最高位为符号位(1),其他位为原码表示的各位取反再末位加1。2.3.2整型变量
1.整型数据存放形式
整型数据在内存中以二进制补码形式存放。
例如:求-10的补码表示(按16位存储)。-10的原码1000000000001010绝对值各位取反1111111111110101末位加11111111111110110则得到-10的二进制补码的表示。有关整型数据的用法:inti;i=5;inti;i=-5;0000000010100000原补码相同11111111110111112.3整型数据
2.整型变量的分类
根据占用内存字节数的不同,整型变量分为:
(1)基本整型(类型关键字为int)。
(2)短整型(类型关键字为short[int])。
(3)长整型(类型关键字为long[int])。
TurboC2.0和TurboC++3.0为short和int分配2个字节,为long分配4个字节;
VC++6.0为short分配2个字节,为int和long分配4个字节。
2.3整型数据
3.整型变量的符号属性
(1)有符号整型数据。
有符号整型数据的最高位为符号位,符号位为0表示正数,符号位为1表示负数。
有符号型又分为:
有符号基本整型([signed]int)
有符号短整型([signed]short[int])
有符号长整型([signed]long[int])
2.3整型数据
(2)无符号整型数据。
无符号整型数据表示的都是正数,其最高位不是符号位而是数值位。
无符号型又分为:
无符号基本整型(unsigned[int])
无符号短整型(unsignedshort[int])
无符号长整型(unsignedlong[int])
2.3整型数据
4.整型数据值域
整型数据所占字节数和数值范围:2.3整型数据
有符号和无符号整型数据在2个字节中存放形式#include<stdio.h>voidmain(){ inta,b; a=32767; b=a+1; printf("%d\n%d",a,b);}3278732768运行结果改为21474836472147483647-2147483648运行结果2.1C语言的数据类型
2.2常量与变量
2.3整型数据
2.4实型数据
2.5字符型数据
实型数据实型数据实型常量实型变量单精度浮点型双精度浮点型复数浮点型2.4实型数据
2.4.1实型常量
有两种表示形式:
1.小数形式
实型常量的小数形式由数字序列和小数点组成,小数点不能省略。
例如:
3.1415926、-0.15、0.15、.15、2.0、2.
2.4实型数据
2.指数形式实型常量的指数形式如:
123.456e2或123.456E2,相当于123.456×102
e或E前面必须有数字,后面的指数必须为整数。
0.235e4、24458.6e-4、5.7854e7合法125e4.5、e4、.e4、e不合法2.4实型数据
123.456可以写成:
123.456e0、12.3456e1、1.23456e2、
0.123456e3、1234.56e-1等。其中:
1.23456e2规范化的指数形式2.4实型数据
2.4.2实型变量1.实型数据的存放形式实数可以写成:N=±M×2E
其中:M称为N的尾数,E称为N的阶码,
M前面的正、负号称为数符。
系统把实型数据的数符、尾数和阶码分别存放。以float型为例,实型数据在其中存放形式:2.4实型数据
2.实型变量分类
C语言中实型变量有3种类型:
(1)单精度型。类型关键字为float。
(2)双精度型。类型关键字为double。
(3)长双精度型。类型关键字为longdouble。
实型数据所占字节数及数值范围:
实型数据的舍入误差2.1C语言的数据类型
2.2常量与变量
2.3整型数据
2.4实型数据
2.5字符型数据
2.5字符型数据1.普通字符能在屏幕上显示的字符称为普通字符,可直接将这类字符用单引号扩起来,例如:
'A'、'8'、'+'2.转义字符
以反斜杠“\”开头后跟规定的单个字符或数字的转义字符。注意:如果反斜杠、双引号或单引号本身作为字符常量,必须使用转义字符,即:
'\\'、'\"'、'\''
。2.5字符型数据
常用转义字符表:‘\40’表示空格字符,‘\101'表示字符‘A'‘\x20’表示空格字符,‘\x41'表示字符‘A'printf("\"A\102\x43\"");
输出结果:"ABC"2.5.2字符类型——变量变量值的存储以ASCII码存储,占一个字节charc1,c2;unsignedcharc1,c2;举例字符变量ch中存放字符'a',其ASCII码为97,在内存中以二进制形式存放,其格式如下:01100001ch字符型变量特性
字符数据在内存中存储的是字符的ASCII码──一个无符号整数,其形式与整数的存储形式一样,所以C语言允许字符型数据与整型数据之间通用。注意:字符型数据与整型数据在存储方式上的相似性使得两者之间可以通用。但字符型数据的表示范围是:0~255。(1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。
main()
{charch1;intch2;ch1='a';ch2=98;printf(“ch1=%c,ch2=%c\n”,ch1,ch2);
printf(“ch1=%d,ch2=%d\n”,ch1,ch2);
}
(2)允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。#include<stdio.h>voidmain()
{charch1,ch2;
ch1='a';ch2='B';
printf("ch1=%c,ch2=%c\n",ch1-32,ch2+32);
/*用字符形式输出一个大于256的数值*/ printf("ch1+256=%d\n",ch1+256);
printf("ch1+256=%c\n",ch1+256);
}
ch1=A,ch2=bch1+256=353ch1+256=a字符型数据和整型数据进行运算时,是其ASCII码值参与运算。‘A’+3//值为68,对应字符'D'‘5’-‘0’//值为55+‘0'//值为53,对应字符'5'2.5.3字符串常量字符串常量的概念和字符串长度
字符串常量是用一对双引号括起来的若干字符序列。 字符串中字符的个数称为字符串长度。长度为0的字符串(即一个字符都没有的字符串)称为空串,表示为“”(一对紧连的双引号)。字符串的存储
C语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个‘\0’作为字符串的结束标志。
不要将字符常量与字符串常量混淆。charc;c='a';c="a";字符串"CHINA",在内存中是:CHINA\0占用6字节而非5字节内存空间思考?1、字符串常量"Howdoyoudo."的长度是多少?2、字符串C:\msdos\v6.22和Isay:"Goodbye!"在C语言中的字符串常量形式如何表示?14"C:\\msdos\\v6.22"和"Isay:\"Goodbye!\""2.9顺序结构程序设计
2.6运算符与表达式
2.7数据的类型转换
2.8数据的输入与输出
2.6运算符与表达式
2.6.1运算符概述
理解和掌握以下C语言运算符的概念:
(1)运算符功能。
(2)运算符与运算对象(即操作数)的关系。①运算对象个数。
单目运算符、双目运算符和三目运算符。②运算对象类型。2.6运算符与表达式
所谓结合性是指当一个运算对象两侧的运算符具有相同的优先级时,该运算对象是先与左边的运算符结合,还是先与右边的运算符结合。自左至右的结合方向,称为左结合性,反之,称为右结合性。(3)运算符优先级
运算符优先级分为15个级别,从1-15
(4)运算符结合性
2.6运算符与表达式
2.6.2 表达式概述用运算符和括号将运算对象(常量、变量和函数等)连接起来并符合C语言语法规则的式子,称为表达式。
求表达式值时,从左往右逐步执行。如果一个运算对象两侧的运算符优先级不同,则按运算符的优先级高低次序执行。如果一个运算对象两侧的运算符优先级相同,则按结合性进行。2.6运算符与表达式
结合性是C语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。a–b*ca–b+c1、算术运算符+-*/%2、关系运算符><==>=<=!=
3、逻辑运算符!&&||4、位运算符<<>>~|^&5、赋值运算符=及其扩展赋值运算符6、条件运算符?:7、逗号运算符,8、指针运算符*&9、求字节数运算符sizeof10、强制类型转换运算符(类型)11、分量运算符.
12、下标运算符[]13、其他如函数调用运算符()分类运算符2.6.3算术运算符与算术表达式
1.算术运算符2.6.3算术运算符与算术表达式
除法运算符/
:当两个操作数均为整数时,运算结果为整数(即小数部分被舍弃),否则结果为实数。例如:5/2=2而5.0/2=2.5。求余数运算符%:求两个数相除的余数,要求两侧的运算对象必须为整型数据。例如:5%2=15%-2=1-5%2=-1-5%-2=-12.6.3算术运算符与算术表达式
2.算术表达式用算术运算符将运算对象连接起来的合法式子称为算术表达式。例如:3+6*9、(x+y)/3-1注意:
x2+3x+5写成C语言表达式为:
x*x+3*x+5。
2.6.3算术运算符与算术表达式
3.算术运算类型转换
如果一个运算符两侧的运算对象的数据类型不同,则系统首先将两侧数据自动转换成同一类型,然后在同一类型数据间进行运算。intunsignedlongdouble低高char,shortfloat必定的转换2.6.3算术运算符与算术表达式
例如:charch;inti;shorts;floatf;doubled;ch/s+f*i-dintintintintintdoubledoubledoubledoubledouble2.6.4赋值运算符和赋值表达式
1.赋值运算符(1)简单赋值运算符“=”
一般形式为:变量=表达式功能:先求“=”号右侧表达式的值,然后将这个值存入左侧变量所占的存储单元中,即给变量赋值。例如:
x=5//将常量5赋值给变量x。2.6.4赋值运算符和赋值表达式
(2)复合赋值运算符
C语言有10种复合赋值运算符:+=、-=、*=、/=、%=;//复合算术运算符&=、^=、|=、<<=、>>=、 //复合位运算符2.6.4赋值运算符和赋值表达式
一般形式为:
变量双目运算符=表达式└──┬──┘复合赋值运算符等价于:变量=变量双目运算符(表达式)例如:x+=3 //等价于x=x+3y*=x+6 //等价于y=y*(x+6)而不是:y=y*x+62.6.4赋值运算符和赋值表达式
例如:
a=5//a的值5就是赋值表达式a=5的值。赋值运算符的优先级为14,结合方向为自右至左。
a=b=8%3//表达式的值为2
2.赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子,称为赋值表达式。
被赋值变量的值就是赋值表达式的值。2.6.4赋值运算符和赋值表达式
inta=6a-=a*=a+4//等价于:a=a-(a=a*(a+4))其求解过程为:
(1)先运算a+4的值为10,a的值不变仍为6;
(2)再运算a=a*10,因此a=6*10,a的值为60;
(3)最后运算a=a-60,因此a=60-60,a的值为0注意:左值问题赋值运算符左侧的标识符称为“左值”。表达式和常量不能作为左值。凡是左值都可以做右值。a=3*5=4*32.6.4赋值运算符和赋值表达式
3.赋值类型的转换
转换规则如下:(1)整型数据与实型数据之间类型转换①整型数据赋给实型变量时,数值上不发生任何变化,但以浮点型数据存储到变量中。例如:
floatf=100;结果:100.0,再以指数形式存到f所占存储单元中。②实型数据赋给整型变量时,小数部分将被舍弃。例如:
inta=3.6415;结果:3。(2)实型数据之间类型转换①float数据赋给double变量时,数值不变,有效数据扩展到16位。②double数据赋给float变量时,截取前面7位有效数据。2.6.4赋值运算符和赋值表达式
(3)整型数据之间、整型数据与字符型数据之间类型转换①短的→长的变量需要进行符号位扩展。
将数据赋给变量的低字节,如果数据的符号位为0,则变量的高字节补0;反之,变量的高字节补1,以保持数值不改变。如图2-12所示。2.6.4赋值运算符和赋值表达式
2.6.4赋值运算符和赋值表达式
短的无符号→长的变量将数据赋给变量的低字节,高字节补0。2.6.4赋值运算符和赋值表达式
②长的→短的变量截取低字节数据。2.6.4赋值运算符和赋值表达式
③长度相同的变量,原样赋值。2.6.5自增、自减运算符
++、--是单目运算符,运算对象只能是变量,优先级为2,结合方向为自右至左。自增、自减运算符有两个功能:
(1)取由该运算符构成表达式的值
(2)实现变量(运算对象)自身的加1或减1运算2.6.5自增、自减运算符
自增、自减运算符都有两种用法:(1)前置运算──例如:++i、--i先加减、后求值。(2)后置运算──例如:i++、i--先求值、后加减。2.6.5自增、自减运算符
i=2;j=i++;//相当于:j=i;i=i+1;j=++i;//相当于:i=i+1;j=i;2.6.5自增、自减运算符
自增、自减运算符的用法#include<stdio.h>intmain(){intx=6,y;printf("x=%d\n",x); y=++x; printf("y=++x:x=%d,y=%d\n",x,y);y=x--; printf("y=x--:x=%d,y=%d\n",x,y); return0;}运行结果:x=6y=++x:x=7,y=7y=x--:x=6,y=72.6.5自增、自减运算符
说明:(1)C编译系统在处理表达式时,尽可能多地(自左而右)将若干个字符组成一个运算符
i+++j
(i++)+j(2)自增、自减运算符不能用于常量和表达式,例如:
5++、--(a+b)等都是非法的表达式。(3)最好避免这种用法,例如:(i++)+(i++)+(i++)
#include<stdio.h>intmain(){inti,j,k,a,b;i=j=k=0;a=(i++)+(++j);b=a+i+j-(k++);printf(“%d%d%d\n”,i,j,k);printf(“a=%db=%d\n”,a,b);return0;}2.6.6逗号运算符、逗号表达式
用逗号运算符“,”连接起来的式子,称为逗号表达式,一般形式为:
表达式1,表达式2,……,表达式n
逗号运算符的优先级为15,结合方向为自左至右。
逗号表达式求解过程为:自左至右,依次计算各表达式的值,“表达式n”的值作为整个逗号表达式的值。2.6.6逗号运算符、逗号表达式
a=3*5,a*4a=3,a*4,a++//逗号表达式的值为60。//逗号表达式的值为3。注意:并不是任何地方出现的逗号,都是逗号运算符。很多情况下,逗号仅用作分隔符,例如:printf("%d%d%d",a,b,c);
2.9顺序结构程序设计
2.6运算符与表达式
2.7数据的类型转换
2.8数据的输入与输出
2.7数据的类型转换
数据的类型转换有隐式类型转换和强制类型转换两种。
当出现下述情况时将进行隐式类型转换:
运算转换--不同类型数据混合运算时进行转换;
赋值转换--把一个值赋给与其类型不同的变量时进行转换;
输出转换--输出时转换成指定的输出格式2.7数据的类型转换
数据类型强制转换的一般格式为:
(数据类型)(表达式)例如:(double)a(float)5/2(float)(5/2)//将变量a的值转换成double型//将5转换成5.0,再除以2(=2.5)//将5整除2的结果(2)转换成浮点型(2.0)2.7数据的类型转换
注意:(1)强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化,例如:inta=3;(double)a;
(2)如果被转换表达式不是简单表达式时,外边的一对圆括号不能省,例如:
(int)(5.8+3.4)2.9顺序结构程序设计
2.6运算符与表达式
2.7数据的类型转换
2.8数据的输入与输出
2.8数据的输入/输出
输入是由输入设备向计算机主机输入数据。
输出是指由计算机主机向输出设备输出数据。
通常输入设备为键盘,输出设备为显示器。磁盘文件即是输入设备又是输出设备。2.8数据的输入/输出
在C语言中,没有专门的输入输出语句,所有的输入输出操作都是通过调用标准输入、输出库函数来完成的。在调用标准输入输出函数时需要用到头文件“stdio.h”,因此在程序开头应该有以下的预编译命令:
#include"stdio.h"或#include<stdio.h>//标准方式2.8.1格式化输出函数printf
printf一般格式为:
printf(格式控制,输出项列表)
例如:printf(”i=%d,c=%c\n”,i,c);格式声明2.8.1格式化输出函数printf
printf一般格式为:
printf(格式控制,输出项列表)
例如:printf(”i=%d,c=%c\n”,i,c);普通字符2.8.1格式化输出函数printf
printf一般格式为:
printf(格式控制,输出项列表)
例如:printf(”i=%d,c=%c\n”,i,c);可以是常量、变量或表达式2.8.1格式化输出函数printf
输出项与前面的“输出格式说明”必须由左至右一一对应,例如:2.8.1格式化输出函数printf
1.输出格式说明输出格式说明一般形式为:
%[<修饰符>]<格式字符>
格式控制是用双引号括起来的字符串,它包括两部分内容:
1.普通字符与转义字符
printf(”i=%d,c=%c\n”,i,c);2.输出格式说明,以“%”开始,后跟格式字符,(1)格式字符用于指定输出数据按何种形式输出。格式字符及其作用如表所示
2.8.1格式化输出函数printf
(2)修饰符。修饰符用于指定输出数据所占的宽度、对齐方式以及保留小数位数等,修饰符可以省略。2.8.1格式化输出函数printf
2.整型数据输出
1)d──以带符号的十进制整数形式输出。%d,按整型数据实际长度输出%mdm为指定的输出字段的宽度,如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出%-md
同上,但右端补空格。%ld:长整型数据%lld:双长整型#include<stdio.h>int
main(){intn1=123;
printf("n1=%d,n1=%5d,n1=%-5d,n1=%2d\n",
n1,n1,n1,n1);return0;}
程序运行结果如下:num1=123,num1=□□123,num1=123□□,num1=123 2.8.1格式化输出函数printf
整型数据可以用格式符d、u、o、x输出,例如:inta=-1;printf(“%d%u%o%x\n",a,a,a,a);运行结果:-1429496729537777777777ffffffff2.8.1格式化输出函数printf
说明:在VC++6.0中,给a分配4个字节,将-1的补码存储到a所占的存储单元中,存放形式如图所示。2.8.1格式化输出函数printf
3.字符型数据输出字符型数据即可按字符形式输出,也可按整数形式输出,例如:charc='A';printf("字符=%cASCII=%d",c,c);运行结果:字符=AASCII=652.8.1格式化输出函数printf
4.实型数据输出实型数据(float型和double型)即可用格式符f以小数形式输出,也可用格式符e以指数形式输出,例如:
floatf=12.3456789;printf("f=%f,f=%e\n",f,f);运行结果:
f=12.345679,f=1.234568e+001例如:类型转换字符f的使用。#include<stdio.h>intmain(){floatf=123.456;doubled1,d2;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n",f,f,f,f,f);printf("d1+d2=%f\n",d1+d2);return0;}
程序运行结果如下:
123.456001,□□123.456001,□□□□□□123.46,
123.46□□□□□□,123.46d1+d2=3333333333333.3330102.8.1格式化输出函数printf
2.8.1格式化输出函数printf
2.8.1格式化输出函数printf
8.输出转换注意:(1)较长型数据→短型数据,输出时其值不能超出短型数据允许的值范围。例如:
inta=65536;printf("%hd",a);在VC++6.0中,输出结果为0。2.8.1格式化输出函数printf
(2)输出的数据类型与输出格式不符时会产生错误的结果。例如,下面两例均输出错误的结果。
intd=9;printf("%f",d);或
floatc=3.2;printf("%d",c);
切记整型数据不能按实型数据输出,实型数据也不能按整型数据输出。2.8.2格式化输入函数scanf
函数scanf一般格式为:
scanf(格式控制,地址列表);
地址列表是若干输入项的地址,各地址之间用逗号“,”分隔。在变量名前加取地址运算符“&”表示该变量地址。2.8.2格式化输入函数scanf例如:
intm;floatx;scanf("%d%f",&m,&x);不能写成:
scanf("%d%f",m,x);2.8.2格式化输入函数scanf
格式控制用于指定数据的输入格式,是用双引号括起来的一个字符串,由格式说明和普通字符两部分组成。(1)格式说明格式说明规定了数据以何种类型的数据格式被输入。一般形式是:
%[<修饰符>]<格式字符>scanf中格式字符与printf中的格式字符相同。scanf中修饰符有:m、h、l2.8.2格式化输入函数scanf(2)普通字符格式控制字符串中的普通字符在输入数据时要照原样输入。例如:
inta,b;scanf("a=%d,b=%d",&a,&b);则输入应为:a=5,b=6↙输入数据时不能规定精度例如,scanf("%7.2f",&a)是不合法的。2.8.2格式化输入函数scanf1.输入数据的结束标志(1)空白字符:空格键、Enter键和Tab键例如:
intyear,month,day;scanf("%d%d%d",&year,&month,&day);可以输入为:
2012910↙也可以输入为:
2012↙910↙不能输入为:2012,9,102.8.2格式化输入函数scanf(2)指定数据宽度例如:
intyear,month,day;scanf("%4d%2d%2d",&year,&month,&day);可以输入为:
20121221↙则将2012→year,12→month,21→day。注意:也可以用空格、Enter键或Tab键作为分隔,即可以输入为:
20121221↙2.8.2格式化输入函数scanf(3)指定数据分隔符用普通字符作为输入数据的分隔符,例如:
scanf("%d-%d-%d",&year,&month,&day);
输入应为:
2012-12-12↙如果输入为:
2012,12,12则2012→year由于没有遇到“-”,scanf函数就结束执行,month和day的值不变。2.8.2格式化输入函数scanf(4)遇到非法字符,例如:
scanf("%d",&m);若输入:12o9↙由于12之后遇到字符'o',第1个数据到此结束,所以把12赋给m。2.8.2格式化输入函数scanf2.格式说明%c
格式说明%c用于输入单个字符,从键盘上输入的空白字符将作为有效字符读入,例如:
charch1,ch2,ch3;scanf("%c%c%c",&ch1,&ch2,&ch3);如果输入:
abc↙则将'a'赋给ch1,'b'赋给ch2,'c'赋给ch3。如果输入:
a↙bc↙则将'a'赋给ch1,'↙'赋给ch2,'b'赋给ch3。2.8.2格式化输入函数scanf3.格式说明的类型与输入项的类型必须匹配在scanf函数中,格式说明的类型必须与输入项的类型由左至右一一对应匹配,如果不匹配,输入项将不能得到正确的值.例如:
inta; floatm; scanf("%d%d",&a,&m);在程序中有3个scanf函数调用语句,要使a=5,b=10,m=4.5,n=-7.6,ch1='A',ch2='a'。#include<stdio.h>intmain(){ inta,b; floatm,n; charch1,ch2; scanf("%d%d",&a,&b);
scanf("m=%f,n=%f",&m,&n);
scanf("%c%c",&ch1,&ch2);
printf("a=%d,b=%d\n",a,b); printf("m=%f,n=%f\n",m,n);
printf("ch1=%c,ch2=%c\n",ch1,ch2); return0;}如果输入:510↙m=4.5,n=-7.6↙运行结果:a=5,b=10m=-107374176.000000,n=-107374176.000000ch1=,ch2=m2.8.2格式化输入函数scanf
若在程序中连续调用多个scanf函数,应消除前一行输入的“回车”符,解决办法是在下一个scanf函数的格式字符串中开始加一个空格符来抵消上一行输入的“回车”,即改为:scanf("m=%f,n=%f",&m,&n);
scanf("%c%c",&ch1,&ch2);注意:执行该程序时,也可以输入为:510m=4.5,n=-7.6Aa↙2.8.3字符输出函数putchar
功能:向屏幕上输出一个字符。其调用格式为:
putchar(ch)ch为输出项,可以是字符型表达式或整型表达式。例如:putchar('a');putchar(65);putchar('a'-32);putchar('\101');
2.8.4字符输入函数getchar
功能:从键盘输入一个字符。其调用格式为:
getchar();执行getchar()函数时,等待输入字符,直到按Enter键才结束。输入的第一个字符被getchar()函数接收,并作为该函数的返回值。输入一个字符,并将该字符输出#include"stdio.h" voidmain(){charch;printf("Pleaseinputtwocharacter:");ch=getchar(); //输入1个字符并赋给ch
putchar(ch);putchar('\n');putchar(getchar());//输入一个字符并输出
putchar('\n');} 输入:abc↙运行结果:ab
思考如果输入数据如下:a↙b↙会如何?程序运行情况如下:
Pleaseinputtwocharacters:a↙a↙↙2.9顺序结构程序设计
2.6运算符与表达式
2.7数据的类型转换
2.8数据的输入与输出
2.9简单程序设计——顺序结构程序设计
2.9.1C语句
C语句可以分为5类:控制语句、函数调用语句、表达式语句、空语句、复合语句。2.9简单程序设计——顺序结构程序设计
(1)控制语句。控制语句用于控制程序的执行流程,共有9种语句,可分为3类:选择语句,循环语句,辅助语句。
选择语句:if...else...、switch
循环语句:for...、while...、do...while
辅助语句:continue、break、goto、return例如:
if(x>y)z=x;elsez=y;2.9简单程序设计——顺序结构程序设计
(2)函数调用语句:由一个函数调用加一个分号构成,格式为:
函数名(参数表);例如:
printf("ThisisaCstaement.");2.9简单程序设计——顺序结构程序设计
(3)表达式语句:表达式后加一分号“;”,就构成表达式语句例如:
a=3和i=i+1是赋值表达式,但不是语句,而
a=3;和i=i+1;则是赋值语句。2.9简单程序设计——顺序结构程序设计
(4)空语句。只有一个分号的语句:
;常用在循环语句或函数体中。(5)复合语句。将多个语句用花括号括起来的语句,语法上作为一个语句,例如:if(a>b){t=a;a=b;b=t;}2.9.2顺序结构程序设计
一个C语言程序可由顺序、选择、循环三种基本控制结构组成。
顺序结构表示程序中的各个操作是按照它们出现的先后顺序执行的。2.9.2顺序结构程序设计
选择结构表示程序的处理步骤出现了分支,需要根据某一特定的条件选择其中的一个分支执行。
循环结构表示程序反复执行某个或某些操作,直到某条件为假(或为真)时才可终止循环。选择结构(分支结构)的处理过程为:先判断一个条件,然后根据条件是否成立,执行不同的代码。
选择结构程序设计C语言提供了作为判断条件的关系表达式和逻辑表达式,还有实现分支结构的if语句和switch语句。3.1关系运算符和关系表达式关系运算符:比较两个量的运算符关系表达式:用关系运算符将运算对象 连接起来的式子在C语言中,关系运算符有六种3.1.1关系运算符优先级相同
(高)①<
(小于)②<=(小于或等于)③>
(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)优先级相同
(低)运算符优先级的高低次序3.1.1关系运算符结合性为自左至右关系表达式是用关系运算符将运算对象连接起来的式子。
运算对象可以是常量、变量或表达式。3.1.2关系表达式例如:
3>7a<=ba%2==0a+b>=c-d关系表达式求解的结果:成立或不成立,即“真(true)”或“假(flase)”。
在C语言中,用“1”代表“真”,用“0”代表“假”。3.1.2关系表达式例如:
inta=7,b=4,c=1,d;a%2==0a%2==0的值为0a%b<a/ba%b<a/b的值为03.1.2关系表达式例如:
inta=7,b=4,c=1,d;d=a>bd=a>b的值为1(d=a)>b(d=a)>b的值为1d=a>b>cd=a>b>c的值为0注意:在C语言中要判断a大于b且b大于c时,写成逻辑表达式a>b&&b>c,其中&&是逻辑与运算符。3.2.1逻辑运算符
在C语言中,逻辑运算符有三种
3.2逻辑运算符和逻辑表达式运算符优先级的高低次序3.1.1关系运算符结合性为自右至左结合性为自左至右逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来的式子。
逻辑表达式的值是一个逻辑值,即“真”或“假”。
C语言中,以1表示“真”,以0表示“假”。3.2.2逻辑表达式逻辑运算的真值表3.2.2逻辑表达式
运算对象,可以是任意类型的数据,以非0表示真,以0表示假
运算结果,以1表示“真”,以0表示“假”逻辑量的真假判定──0和非0C语言用整数“1”表示“逻辑真”、用“0”表示“逻辑假”。但在判断一个数据的“真”或“假”时,却以0和非0为根据:如果为0,则判定为“逻辑假”;如果为非0,则判定为“逻辑真”。例如,假设num=12,则:!num的值,num>=1&&num<=31的值,num||num>31的值。011
注意!3.2.2逻辑表达式对于&&,如果其左侧表达式的值为假,则右侧表达式不进行求解(即不执行)。
对于||,如果其左侧表达式的值为真,则右侧表达式不进行求解。例如,假设n1、n2、n3、n4、x、y的值分别为1、2、3、4、1、1,则求解表达式“(x=n1>n2)&&(y=n3>n4)”后,x的值变为,而y的值等于!01C99所增加的一种数据类型类型标识符:_Boolstdbool.h头文件中,把bool定义为该类型的别名
#definebool
_Bool同时定义:#definetrue
1
#definefalse
0
【注】在不支持c99标准的编译器上(如VC++6.0)不能使用。#include<stdio.h>intmain(){
_Boolb; b=2000; printf("%d\n",b); return0;}13.3.1if语句的形式3.3if语句C语言中的if语句有三种基本形式。1.单分支if语句一般形式: if(表达式)
语句例如: if(x>y) printf("%d",x);表达式语句假真【例3-1】求x的绝对值。3.3.1if语句的形式思路:先求解表达式x<0的值,判断x是否为负数,如果结果为真,则执行内嵌的语句x=-x;,否则不执行该语句。掌握if语句的一般形式与求解过程。3.3.1if语句的形式【例3-1】求x的绝对值。#include<stdio.h>
intmain()
{ intx; scanf("%d",&x); if(x<0) x=-x;//if的内嵌语句 printf("|x|=%d\n",x); return0;}
运行一次,输入:-10运行结果:|x|=10再运行一次,输入:-10运行结果:|x|=10【例3-2】输入两个整数,按由小到大的顺序输出这两个数。3.3.1if语句的形式本题要点: 1.交换变量内容的方法 2.复合语句使用3.3.1if语句的形式【例3-2】输入两个整数,按由小到大的顺序输出这两个数。#include<stdio.h>
intmain()
{ intx,y,t; scanf("%d,%d",&x,&y); if(x>y) {t=x;x=y;y=t;}//复合语句 printf("%d,%d\n",x,y); return0;}
运行一次,输入:10,5运行结果:5,10思考:
去掉{},程序结果?xyt87878voidmain(){inta,b,c,temp;printf("Pleaseinputthreenumbers:");scanf("%d,%d,%d",&a,&b,&c);if(a>b){temp=a;a=b;b=temp;}if(b>c){temp=b;b=c;c=temp;}if(a>b){temp=a;a=b;b=temp;}printf("%d,%d,%d\n",a,b,c);} 输入任意三个数a、b、c,按从小到大的顺序排序输出。2.双分支if语句3.3.1if语句的形式一般形式: if(表达式)
语句1 else
语句2例如: if(x>0) printf("%d",x); else printf("%d",-x);表达式语句1语句2真假【例3-3】求两个数中较大者。3.3.1if语句的形式
使用双分支if语句实现。3.3.1if语句的形式【例3-3】求两个数中较大者。#include<stdio.h>
intmain()
{ intx,y,max; scanf("%d,%d",&x,&y); if(x>y) max=x;//if的内嵌语句 else max=y;//else的内嵌语句 printf("max=%d\n",max); return0;}
运行一次,输入:5,10运行结果:Max=10
注意!3.2.2逻辑表达式
else不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。例如: if(x>y) {x=y;y++;} else {y=x;x--;}如果写成: if(x>y) x=y;y++; else {y=x;x--;}语法错误3.多分支if语句3.3.1if语句的形式多分支if语句可以看成双分支if语句的扩展形式,即在双分支if语句中,else的内嵌语句是另一个双分支的if语句。一般形式: if(表达式1)语句1 elseif(表达式2)语句2 elseif(表达式3)语句3 …… else语句n多分支if语句的执行过程:3.3.1if语句的形式如果表达式1的值为真,则执行语句1,否则判断表达式2。如果表达式2的值为真,则执行语句2,否则判断表达式3,依次类推。如果所有表达式的值都为假,则执行语句n。【例3-4】输入一个百分制的分数,输出相应的等级。3.3.1if语句的形式要求如下:
成绩>=90,输出A 89>=成绩>=80,输出B 79>=成绩>=70,输出C 69>=成绩>=60,输出D
成绩<60,输出E本题要求使用多分枝if语句实现。3.3.1if语句的形式【例3-4】输入一个百分制的分数,输出相应的等级。#include<stdio.h>
intmain()
{ intscore; scanf("%d",&score); if(score>=90)printf("scoregradeisA\n");elseif(score>=80)printf("scoregradeisB\n");elseif(score>=70)printf("scoregradeisC\n");elseif(score>=60)printf("scoregradeisD\n");elseprintf("scoregradeisE\n");return0;}
运行一次,输入:85运行结果:scoregradeisB再运行一次,输入:55运行结果:scoregradeisE在if语句中,if和else的内嵌语句可以是任何语句,如果又是if语句,则称为if语句的嵌套。3.3.2if语句的嵌套3.3.2if语句的嵌套例如:if(a>b) if(b>c) printf("%disbiggest\n",a);elseprintf("%disnotbiggest\n",a);以上代码中else与哪个if配对?3.3.2if语句的嵌套C语言规定:else总是与它上面最近的未曾配对的if配对。即:if(a>b) if(b>c) printf("%disbiggest\n",a); else printf("%disnotbiggest\n",a);else与这个if配对if(a>b){ if(b>c) printf("%disbiggest\n",a);} else printf("%disnotbiggest\n",a);else与这个if配对3.3.2if语句的嵌套【例3-5】求三个数中最大者。本题使用嵌套if语句实现。3.3.1if语句的嵌套【例3-5】求三个数中最大者。#include<stdio.h>
intmain()
{ intx=4,y=5,z=2,max; max=x; if(z>y) {if(z>x) max=z; } else if(y>x) max=y; printf("max=%d",max); return0;}运行结果:max=5或者写为:……if(num1>num2)
max=num1;
else
max=num2;if(num3>max)
max=num3;……或者max=num1;if(num2>max)max=num2;3.4switch语句switch语句是专门用于处理多分支结构的条件选择语句,又称开关语句。一般形式为: switch(表达式) { case常量表达式1:语句1;[break;] case常量表达式2:语句2;[break;] ……. case常量表达式n:语句n;[break;] [default:语句n+1;[break;]] }3.4switch语句switch语句的执行过程:首先求解switch后面括号中表达式的值,然后用此值依次与各个case后面的常量表达式的值进行比较。
若括号中表达式的值与某个case后面的常量表达式的值相等,则执行此case后面的语句。语句执行后若遇到break语句或switch的结束符“}”就终止switch语句,否则就继续执行下一个case后面的语句,依次类推。
若括号中表达式的值与所有case后面的常量表达式都不相等,则执行default后面的语句n+1,然后终止switch语句,程序流程转向开关语句的下一条语句。3.4switch语句例如:执行以下程序代码intno;scanf("%d",&no);switch(no){case1:printf("first\n");break;case2:printf("second\n");case3:printf("third\n");}运行一次:输入:1运行结果:first再运行一次:输入:2运行结果:secondthird3.4switch语句说明:(1)case和常量表达式之间要有空格,常量表达式只起语句标号作用,跳出switch必须用break语句。如果每个case和default后面都有break语句,则它们出现的次序不影响执行结果。例如:switch(no){ default:printf("last\n");break; case2:printf("second\n");break; case1:printf("first\n");break; case3:printf("third\n");break;}3.4switch语句说明: (2)case后面常量表达式的值必须互不相同。(3)多个case可共用一组执行语句,case后可包含多个可执行语句,且不必加“{}”,进入某个case后,会顺序执行本case后面的所有语句。(4)default部分可以省略。如果省略,当switch后面括号中表达式的值与所有case后面的常量表达式的值都不相等时,则不执行任何一个分支直接退出switch语句。(5)switch语句可以嵌套。3.4switch语句【例3-6】将例3-4进行修改,用switch语句实现。输入一个百分制的分数,输出相应的等级。
比较switch语句与嵌套if语句
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 软件专业初级考试应考心态试题及答案
- 健康管理师考试报名及流程解析试题及答案
- 全媒体运营师案例分析试题及答案总结
- 二零二五年度市政道路施工安全责任免除协议
- 二零二五年度企业入驻文化旅游区合作协议
- 健康管理师职业要求试题及答案
- 2025年度轮车租赁与共享出行服务合同
- 2025年度高速道路安全防护栏定制与安装服务合同
- 二零二五年度外墙保温施工人工费支付保障合同
- 2025年度股权无偿转让与竞业禁止及保密协议
- 智能家居控制系统设计开题报告
- 冬天的艺术-完整版PPT
- 中国传统七夕节牛郎织女浪漫汇 课件(共31张ppt) 传统文化
- 消费者行为学课件
- 【小升初】部编版2022-2023学年四川省绵阳市语文升学分班考真题专项模拟试卷(04 现代文阅读)含解析
- 部编版八年级历史(下)全册教案
- 泌尿外科手术配合-ppt课件
- 第九-现场勘查课件
- 丽声英语百科分级读物第一级Legs课件
- 挖掘机配件名称大全
- 超市会计科目及核算流程
评论
0/150
提交评论