gets中空格在内存中以什么二进制形式存储储

C语言的基本类型在内存中怎么储存的?_百度知道
C语言的基本类型在内存中怎么储存的?
只知道float是16位,但不知道具体哪些位表示整数部分,哪些表示小数部分能有达人讲解一下吗?谢谢
我有更好的答案
基本类型在内存中都是以字节,也就是二进制的方式储存的。不同的类型,所占的字节数不同。普遍来说,字节数越大,该类型所表示的数据范围越大,精度越高。以double和float类型举例说明在内存中怎么储存的:从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。任何数据在内存中都是以二进制(0或1)顺序存储的,每一个1或0被称为1位,而在x86CPU上一个字节是8位。比如一个16位(2 字节)的short int型变量的值是1000,那么它的二进制表达就是:01000。由于Intel CPU的架构原因,它是按字节倒 序存储的,那么就因该是这样:00011,这就是定点数1000在内存中的结构。目前C/C++编译器标准都遵照IEEE制定的浮点数表示法来进行float,double运算。这种结构是一种科学计数法,用符号、指数和 尾数来表示,底数定为2——即把一个浮点数表示为尾数乘以2的指数次方再添上符号。下面是具体的规格:类型&&&&& 符号位 阶码& 尾数& 长度float&&&&&& 1&&&&& 8&&&& 23&&& 32double&&& 1&&&& 11&&& 52&&& 64临时数&&&& 1&&&& 15&&& 64&&& 80由于通常C编译器默认浮点数是double型的,下面以double为例: 共计64位,折合8字节。由最高到最低位分别是第63、62、61、……、0位: 最高位63位是符号位,1表示该数为负,0正; 62-52位,一共11位是指数位; 51-0位,一共52位是尾数位。按照IEEE浮点数表示法,下面将把double型浮点数38414.4转换为十六进制代码。把整数部和小数部分开处理:整数部直接化十六进制:960E。小数的处理: 0.4=0.5*0+0.25*1+0.125*1+0.0625*0+…… 实际上这永远算不完!这就是著名的浮点数精度问题。所以直到加上前面的整数部分算够53位就行了(隐藏位技术:最高位的1 不写入内存)。如果你够耐心,手工算到53位那么因该是:)=)科学记数法为:1.001……乘以2的15次方。指数为15! 于是来看阶码,一共11位,可以表示范围是-1024 ~ 1023。因为指数可以为负,为了便于计算,规定都先加上1023,在这里, 15+。二进制表示为:100
符号位:正—— 0 ! 合在一起(尾数二进制最高位的1不要): 01 01 10101 按字节倒序存储的十六进制数就是: 55 55 55 55 CD C1 E2 40。
采纳率:74%
来自团队:
老谭的书上有:实型数据一般占4个字节(32位)内存空间。按指数形式存储。实数3.14159在内存中的存放形式如下:+ .314159
指数其中: 小数部分占的位(bit)数愈多,数的有效数字愈多,精度愈高。指数部分占的位数愈多,则能表示的数值范围愈大。基础加强哟。
本回答被提问者采纳
float是单精度浮点型,这种数据类型占4字节(即32位不是16位哦)的内存空间,取值范围约位10负38次方到10的38次方,提供7位有效数字。有效数字就是从第一位不是0的数字算起的数字个数,因此小数点后取多少位有效数字也是不一定的。这是比较官方的说法。实际上编译器不一样,有些会比这个有效数字要大。
在C语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。 1.基本数据类型 基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。 对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改变的量称为常量,取值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先说明后使用。 整型量 整型量包括整型常量、整型变量。 整型常量 整型常量就是整常数。在C语言中,使用的整常数有八进制、十六进制和十进制三种。 1.八进制整常数
八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。八进制数通常是无符号数。以下各数是合法的八进制数: 015(十进制为13) 0101(十进制为65) 0177777(十进制为65535) 以下各数不是合法的八进制数: 256(无前缀0) 03A2(包含了非八进制数码) -0127(出现了负号) 2.十六进制整常数
十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。以下各数是合法的十六进制整常数: 0X2A(十进制为42)
0XA0 (十进制为160)
0XFFFF (十进制为65535) 以下各数不是合法的十六进制整常数: 5A (无前缀0X)
0X3H (含有非十六进制数码)3.十进制整常数
十进制整常数没有前缀。其数码为0~9。以下各数是合法的十进制整常数: 237 -568
以下各数不是合法的十进制整常数: 023 (不能有前导0) 23D (含有非十进制数码) 在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果不正确。4.整型常数的后缀在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制无符号整常数的范围为0~65535,有符号数为-32768~+32767。八进制无符号数的表示范围为0~0177777。十六进制无符号数的表示范围为0X0~0XFFFF或0x0~0xFFFF。如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀“L”或“l”来表示的。例如:十进制长整常数 158L (十进制为158) 358000L (十进制为-358000) 八进制长整常数 012L (十进制为10) 077L (十进制为63) 0200000L (十进制为65536) 十六进制长整常数 0X15L (十进制为21) 0XA5L (十进制为165) 0X10000L (十进制为65536) 长整数158L和基本整常数158 在数值上并无区别。但对158L,因为是长整型量,C编译系统将为它分配4个字节存储空间。而对158,因为是基本整型,只分配2 个字节的存储空间。因此在运算和输出格式上要予以注意,避免出错。无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。例如: 358u,0x38Au,235Lu 均为无符号数。前缀,后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无符号长整数A5,其十进制为165。整型变量 整型变量可分为以下几类:1.基本型
类型说明符为int,在内存中占2个字节,其取值为基本整常数。 2.短整量
类型说明符为short int或short'C110F1。所占字节和取值范围均与基本型相同。 3.长整型
类型说明符为long int或long ,在内存中占4个字节,其取值为长整常数。 4.无符号型
类型说明符为unsigned。无符号型又可与上述三种类型匹配而构成: (1)无符号基本型 类型说明符为unsigned int或unsigned。 (2)无符号短整型 类型说明符为unsigned short (3)无符号长整型 类型说明符为unsigned long 各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。 在书写变量说明时,应注意以下几点: 1.允许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。 2.最后一个变量名之后必须以“;”号结尾。 3.变量说明必须放在变量使用之前。一般放在函数体的开头部分。实型量 包括实型常量和实型变量。 实型常量 实型常量也称为实数或者浮点数。在C语言中,实数只采用十进制。它有二种形式: 十进制数形式指数形式 1.十进制数形式由数码0~ 9和小数点组成。例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均为合法的实数。 2.指数形式由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。其一般形式为a E n (a为十进制数,n为十进制整数)其值为 a*10,n 如: 2.1E5 (等于2.1*10,5), 3.7E-2 (等于3.7*10,)-2*) 0.5E7 (等于0.5*10,7), -2.8E-2 (等于-2.8*10,)-2*)以下不是合法的实数 345 (无小数点) E7 (阶码标志E之前无数字)
-5 (无阶码标志) 53.-E3 (负号位置不对) 2.7E (无阶码) 标准C允许浮点数使用后缀。后缀为“f”或“F”即表示该数为浮点数。如356f和356.是等价的。下例说明了这种情况: void main() { printf(&%f\n%f\n&,356.,356f); } void 指明main不返回任何值 利用printf显示结果 结束实型变量 实型变量分为两类:单精度型和双精度型.其类型说明符为float 单精度说明符,double 双精度说明符。在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,只能提供七位有效数字。双精度型占8 个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308,可提供16位有效数字。实型变量说明的格式和书写规则与整型相同。 例如: float x,y; (x,y为单精度实型量)
double a,b,c; (a,b,c为双精度实型量) 实型常数不分单、双精度,都按双精度double型处理。 字符型量 字符型量包括字符常量和字符变量。 字符常量 字符常量是用单引号括起来的一个字符。例如'a','b','=','+','?'都是合法字符常量。在C语言中,字符常量有以下特点: 1.字符常量只能用单引号括起来,不能用双引号或其它括号。 2.字符常量只能是单个字符,不能是字符串。 3.字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如'5'和5 是不同的。'5'是字符常量,不能参与运算。 转义字符 转义字符也是一种特殊的字符常量。转义字符以反斜线&\&开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。常用的转义字符及其含义 \n
回车换行 \t
横向跳到下一制表位置 \v
竖向跳格 \b
退格 \r
回车 \f
走纸换页 \\
反斜线符&\& \'
单引号符 \a
鸣铃 \ddd
1~3位八进制数所代表的字符 \xhh
1~2位十六进制数所代表的字符 广义地讲,C语言字符集中的任何一个字符均可用转义字符来表示。 字符变量 字符变量的取值是字符常量,即单个字符。字符变量的类型说明符是char。字符变量类型说明的格式和书写规则都与整型变量相同。字符串常量是由一对双引号括起的字符序列。例如: &CHINA& ,&C program: , &$12.5& 等都是合法的字符串常量。字符串常量和字符常量是不同的量。它们之间主要有以下区别: 1.字符常量由单引号括起来,字符串常量由双引号括起来。 2.字符常量只能是单个字符,字符串常量则可以含一个或多个字符。 3.可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。这是与BASIC 语言不同的。但是可以用一个字符数组来存放一个字符串常量。在数组一章内予以介绍。 4.字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符&\0&(ASCII码为0)。这是字符串结束的标志。例如,字符串 &C program&在内存中所占的字节为:C program\0。字符常量'a'和字符串常量&a&虽然都只有一个字符,但在内存中的情况是不同的。 'a'在内存中占一个字节,可表示为:a &a&在内存中占二个字节,可表示为:a\0符号常量 符号常量 在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。 符号常量在使用之前必须先定义,其一般形式为: #define 标识符 常量 其中#define也是一条预处理命令(预处理命令都?#&开头),称为宏定义命令(在第九章预处理程序中将进一步介绍),其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方均代之以该常量值。习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。 #define PI 3.14159 void main(){ float s,r; r=5; s=PI*r*r; printf(&s=%f\n&,s); } 由宏定义命令定义PI 为3.14159 s,r定义为实数 5-&r PI*r*r-&s 显示程序结果 float s,r; r=5; s=PI*r*r; 本程序在主函数之前由宏定义命令定义PI 为3.14159,在程序中即以该值代替PI 。s=PI*r*r等效于s=3.14159*r*r。应该注意的是,符号常量不是变量,它所代表的值在整个作用域内不能再改变。也就是说,在程序中,不能再用赋值语句对它重新赋值。 2.构造数据类型 是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造类型有以下几种: ·数组类型 ·结构类型 ·联合类型 3.指针类型 指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。 4.空类型 在调用函数值时,通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数说明中给以说明,但是,也有一类函数,调用后并不需要向调用者返回函数值, 这种函数可以定义为“空类型”。其类型说明符为void。
找一下,计算机原理的书看一下吧。里面有一个IEEE标准
其他2条回答
为您推荐:
其他类似问题
您可能关注的内容
内存的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。删除a.txt中空格和换行另存为文件b.txt (C语言)
[问题点数:25分]
本版专家分:0
CSDN今日推荐
本版专家分:57129
2011年4月 C/C++大版内专家分月排行榜第一
2012年8月 C/C++大版内专家分月排行榜第三2012年7月 C/C++大版内专家分月排行榜第三
本版专家分:650
本版专家分:44381
2018年6月 C/C++大版内专家分月排行榜第二2018年1月 C/C++大版内专家分月排行榜第二2017年12月 C/C++大版内专家分月排行榜第二2017年8月 C/C++大版内专家分月排行榜第二
2018年5月 C/C++大版内专家分月排行榜第三2018年4月 C/C++大版内专家分月排行榜第三2018年3月 C/C++大版内专家分月排行榜第三2018年2月 C/C++大版内专家分月排行榜第三2017年11月 C/C++大版内专家分月排行榜第三2017年10月 C/C++大版内专家分月排行榜第三2017年9月 C/C++大版内专家分月排行榜第三2017年6月 C/C++大版内专家分月排行榜第三2017年5月 C/C++大版内专家分月排行榜第三2017年4月 C/C++大版内专家分月排行榜第三2017年3月 C/C++大版内专家分月排行榜第三
本版专家分:503
本版专家分:368287
2017年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本版专家分:368287
2017年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
CSDN今日推荐puts/gets 和 scanf/printf 用法上的区别..._百度知道
puts/gets 和 scanf/printf 用法上的区别...
我有更好的答案
printf()函数 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf(&&格式化字符串&&, &参量表&); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以&%&开始, 后跟一个或几个规定字符,用来确定输出内容格式。 scanf()函数 scanf()函数是格式化输入函数, 它从标准输入设备(键盘) 读取输入的信息。其调用格式为: scanf(&&格式化字符串&&, &地址表&); 格式化字符串包括以下三类不同的字符; 1. 格式化说明符: 格式化说明符与printf()函数中的格式说明符基本相同。 2. 空白字符: 空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。 3. 非空白字符: 一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。 地址表是需要读入的所有变量的地址, 而不是变量本身。这与printf()函数完全不同, 要特别注意。各个变量的地址之间同&,&分开。 puts()函数 puts()函数用来向标准输出设备(屏幕)写字符串并换行, 其调用格式为:
puts(s); 其中s为字符串变量(字符串数组名或字符串指针)。 puts()函数的作用与语printf(&%s\n&, s)相同。 gets()函数 gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符不属于这个字符串。其调用格式为: gets(s); 其中s为字符串变量(字符串数组名或字符串指针)。 gets(s)函数与scanf(&%s&, &s)相似, 但不完全相同, 使用scanf(&%s&, &s)函数输入字符串时存在一个问题, 就是如果输入了空格会认为输入字符串结束,空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符串直到回车为止。printf scanf是格式化输入输出函数:更清晰标准puts gets是非格式化输入输出函数 :编译后代码少, 相对占用内存也小, 从而提高了速度, 同时使用也比较方便。下面分别进行介绍。
采纳率:52%
1. 字符串输入函数gets()调用gets()函数实现字符串的输入,其调用形式为:gets(字符数组);功能:从终端输入一个字符串(包括空格)赋给从字符数组起始的存储单元中,直到读入一个回车符为止。回车符读入后,不作为字符串的内容,系统将自动用’\0’替换,作为字符串结束的标志。如:char c[20];gets(c);执行上面的语句,如果输入:How are you!&CR& 则将读入的12个字符依次存入到c[0]开始的存储单元中,并在其后自动加入一个字符串结束标志’\0’。2.字符串输出函数puts() 调用puts()函数实现字符串的输出,其调用形式为:puts(字符数组);功能:将字符数组起始地址开始的一个字符串(以’\0’结束的字符序列)输出到终端,并将字符串结束标志’\0’转化成’\n’,自动输出一个换行符。如:char c[ ]= &How\nare\nyou!&;puts(c);输出结果:Howareyou!printf和scanf是标准的C输出输入语句,在C语言标准的头文件stdio.h中定义。但在C++中,它们也能够被使用。一、 printf输出    printf语句的一般形式如下:   printf( &格式字符串&, 表达式, ... );   该语句将&表达式&按照&格式字符串&给定的格式,显示在屏幕上。&格式字符串&包括文本字符、转义字符和格式说明符。   如果我们只要打印简单的信息,并不需要包括&表达式&,例如,要打印信息:&今天是星期二&,可以使用下面的printf语句:   printf(&Today is Thursday&);   这个语句执行的结果为: Today is ThursdayPress any key to continue    需要注意的是:输出的信息与系统提示连在一起。为了解决这个问题,可以使用转义字符,常用的转义字符参见2.4.3节的内容。二、 scanf输入   scanf语句的一般格式如下:   scanf(&格式字符串&, 地址,…);   scanf语句用&格式字符串&控制键盘读入的方式。&格式字符串&中一般只包括格式说明符,它们与printf语句中的一样,而&地址&是指变量在内存中的位置。我们看看下面的程序实例,它定义了一个int、float、char和char []变量,并使用了格式说明符:#include &stdio.h&#define MAX_WORD 20void main(){    char ch,  char word[MAX_WORD]; printf(&Enter an integer: &);  scanf(&%d&, &x); printf(&Enter a float: &);  scanf(&%f&, &a); fflush(stdin); // 清空输入缓冲区  printf(&Enter a character: &);  scanf(&%c&, &ch); printf(&Enter a string: &);  scanf(&%s&, word); printf(&Your integer was: %d\n&, x);  printf(&Your float was: %f\n&, a);  printf(&Your character was: %c\n&, ch);  printf(&Your word was: %s\n&, word);}
为您推荐:
其他类似问题
scanf的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。浮点型常量不分float和double
时间: 22:13:50
教材、参考书与课时安排?教材C程序设计 (第二版) 谭浩强编著 清华大学出版社?参考书C语言程序设计教程 C高级实用程序设计 C程序设计试题汇编 谭浩强 王士元 谭浩强 高等教育出版社 清华大学出版社 清华大学出版社?课时安排64学时&&&&课程目的§熟记C语言的基本概念 §熟悉Turbo C的上机操作环境 §会读、会编、会调试C程序学习要点熟记C语言的语法 学会算法分析与算法设计&&&&课程要求?课前请做好预习 ?保持课堂安静,头脑清醒,思维活跃 ?认真、独立、按时完成并提交作业 ?重视上机实践,有效利用宝贵的上机时间&&&&第1章 第2章 第3章 第4章 第5章 第6章 第7章目录C语言概述 程序的灵魂—算法 数据类型、运算符与表达式 最简单的C程序设计—顺序程序设计 选择结构程序设计 循环控制 第8章 函数 数组 第9章 预处理命令 第10章 指针 第11章 结构体与共用体 第12章 位运算 第13章 文件&&&&C语言程序设计第一章 C语言概述第1章 C语言概述C语言发展历史 C语言的特点简单的C程序介绍C程序的上机步骤&&&&C语言程序设计第一章 C语言概述§1.1 C语言发展历史?程序设计语言的发展机 器 语 言汇 编 语 言高 级 语 言面向过程面向对象用助记符号描述的指令系统,可进行地址、位操作 可读性,移植性好,编写应用程序 CPU指令系统,由0、1序列构成的指令码组成 C语言兼有高级和低级语言的功能 面向机器的语言 如 ADD A, 一般较难实现汇编语言的某些功能 如:B 加 适合写系统软件和应用软件 编写系统软件,直接对硬件操作,可读性,移植性差 如:地址和位的操作
减 又称中级语言 & &&&&&C语言程序设计第一章 C语言概述?C语言发展过程?产生背景? ALGOL 60→CPL语言→BCPL→B语言,写UNIX系统?产生过程? 时间: ? 地点:美国贝尔实验室 ? 目的:UNIX操作系统 ? 设计人: Ken.Thompson和Dennis.M.Ritchie?C标准? 标准C: 1978年 K&R合著《The C Programming Language》 ? ANSI C: 1983年 ? 87 ANSI C: 1987年 ? 1990年国际标准的ANSI C ,1994年再次修订。?C版本 ? Microsoft C 或称 MS-C ? Turbo C 或称 TC&&&&&&C语言程序设计第一章 C语言概述§1.2 C语言的特点?语言简洁、紧凑、灵活 & & ?运算符丰富 & ?数据结构、数据类型丰富 &?链表、树、栈 &?程序设计结构化、模块化?结构化控制语句:if…else、while、 switch、for ?函数作为模块单位?语法不严格、程序设计自由度大 ?可以访问内存地址、进行位运算 ?生成目标代码质量高 ?可移植性好& &&&&&C语言程序设计第一章 C语言概述C语言简洁、紧凑,使用方便、灵活。 ANSI C一共只有32个关键字,见365页 附录B 32个关键字:(由系统定义,不能重作其它定义) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef unsigned union void volatile whileTurbo C扩充了11个关键字: asm _cs _ds _es _ss cdecl far huge interrupt near pascal 注意:在C语言中,关键字都是小写的。&&&&&C语言程序设计第一章 C语言概述C语言有 9 种控制语 句,程序书写形式自 由,主要用小写字母 表示,压缩了一切不 必要的成分。9种控制语句: if( )~else~ for( )~ while( )~ do~while( ) continue break switch goto return&&&&&C语言程序设计第一章 C语言概述表1.1 C语言与Pascal语言比较C语言 PASCAL语言 含义{}BEGIN ?ENDIF (e) THEN S; VAR i :INTEGER; VAR a:ARRAY[1..10] OF INTEGER; FUNCTION f():INTEGER; VAR P: INTEGER; i=i+2;函数体、分程序、复合语句条件语句 定义i为整形变量 定义a为一维数组 定义f为返回整形值函数; p为指向整形变量的指针变量; 赋值语句,使i+2赋给I i自增值1,i加1赋给Iif(e) S; int a[10]; int f(); int *p; i+=2;i++, ++I;i=i+1;通过表1.1 我们可以得出结论:C比 Pascal 简练,因此源程序更短,编程效率高。&&&&&C语言程序设计第一章 C语言概述C语言运算符丰富(附录C)34种运算符: 算术运算符:+ - * / % ++ -关系运算符:& &= == & &= != 逻辑运算符:! && || 位运算符 :&& && ~ | ^ & 赋值运算符:= 及其扩展 条件运算符:?: 逗号运算符:, 指针运算符:* & 求字节数 :sizeof 强制类型转换:(类型) 分量运算符:. -& 下标运算符:[] 其它 :( ) &注意:各种运算符混合使用,其优先级与结 合方法是难点,可先预习。&&&&C语言程序设计第一章 C语言概述C语言数据结构丰富数值类型 基本类型 字符类型char短整型short整 型 整型int 长整型long 单精度型float 浮点型 双精度型double数组C 数 据 类 型 结构体struct 构造类型 共用体union枚举类型enum指针类型 空类型void&定义类型typedef&&&&C语言程序设计第一章 C语言概述§1.3 简单的C程序介绍例1.1 第一个程序This is a c program . /* example1.1 The first C Program*/ #include &stdio.h& 编译预处理 void main() 主函数 { printf(“This is a c program.\n”); } 输出: This is a c program. 注释语句printf语句中的“\n‖是换行符&&&&&&C语言程序设计第一章 C语言概述例1.2 求 俩 个 数 的 和/* example1.1 calculate the sum of a and b*/ #include &stdio.h& 预处理命令 /* This is the main program */ void main() 注释 { int a,b, /*定义变量*/ 函数 a=10; b=24; 语句 sum=add(a,b); printf(”sum= %d\n&,sum); } printf语句中的“ %d ‖是表示“十进制整数类型”&&/* This function calculates the sum of x and y */ int add(int x,int y) { z=x+y; 运行结果: return(z); sum=34 }&&&&C语言程序设计第一章 C语言概述例1.3 从键盘输入两个整数,输出其中较大的数 #include &stdio.h& 声明部分,定义变量 void main() 输入:10,20 ? { int max(int x,int y) 输出:max = 20 int a,b,c; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(& max = %d&,c); scanf语句中“&a‖的含 } 义是“取地址” int max(int x,int y) { 调用max函数,返回值赋给c 定义max子函数,函数值 if(x&y) z=x; 、形参x、y为整型 else z=y; return(z); } 通过max函数将z值带回调用处 &&&&&&C语言程序设计第一章 C语言概述?C语言格式特点?习惯用小写字母,大小写敏感 main( ?不使用行号,无程序行概念 main( ) ) { { ………………. ?可使用空行和空格 int i , j , ……………… ?常用锯齿形书写格式 sum=0; ………….. for(i=1; i&10;i++) ………….. { 优秀程序员的素质之一: ……… for(j=1;j&10;j++) ? 使用TAB缩进 ………. { …………… ? {}对齐 sum+=i* ? 有足够的注释 ……………. } ? 有合适的空行 ………………. } ……………….. } printf(―%d\n‖,sum); } & &&&&&C语言程序设计第一章 C语言概述?C语言结构特点?函数与主函数? 程序由一个或多个函数组成 ? 必须有且只能有一个主函数main(),可以放在程序中任一 位臵 ? 程序执行从main开始,在main中结束,其它函数通过嵌 套调用得以执行。?程序语句? C程序由语句组成 ? 用?;?作为语句终止符?注释? /* */为注释,不能嵌套 ? 不产生编译代码?编译预处理命令 & &非法例: /*This is the main /* of example1.1*/ */&&&&C语言程序设计第一章 C语言概述§1.4 C程序的上机步骤?C程序开发步骤开 始编 辑 源程序 file.c 编 译编辑 编译 链接 执行程序代码的录入, 生成源程序*.c 语法分析查错,翻译 生成目标程序*.obj有 有错? 无 可执 行 目标 程 序 连 接目标程 序 file.obj与其它目标程序或库 链接装配,生成可执行 程序*.exe库函数和 执 行 其它目标 程序file.exe不正确 结果正确? 正确 结 束&&源程序 目标程序 可执行程序 内容 程序设计语言 机器语言 机器语言 可执行 不可以 不可以 可以 文件名后缀 .c或.cpp .obj .exe&&&&C语言程序设计第一章 C语言概述?Turbo C集成开发环境?配臵要求? UNIX,PC-DOS,MS-DOS,UCDOS操作系统 ? 硬盘容量约2M,448K RAM运行空间?安装Turbo C? 创建子目录 ? Install ? 若不是可安装盘,将文件拷贝到对应的目录下TC*.* *.*INCLUDE SYSLIB *.*&&&&&&C语言程序设计第一章 C语言概述?进入Turbo C? D:\TC&TC.exe? ? 主控菜单 ?文件操作FILE :New Load Save Write to ?编辑操作EDIT:插入/修改 块 查找/替换 ?编译链接COMPILE LINK MAKE ?执行RUN?退出Turbo C? Alt +x ? Alt+F ,Q?帮助Help? F1 ? Ctrl+F1&&&&&&C语言程序设计第一章 C语言概述?常用热键 基本操作:F10-----调用主菜单 F2------存盘 F3------打开 F1------帮助信息 Alt+F9------Compile Ctrl+F9------Run Alt+F5------User Screen Alt+X ------退出Tc文本编辑:????-------移动光标 PgUp,PgDn------上下翻页 Ctrl+PgUp,Ctrl+PgDn------文件首尾 Home行首 End行尾 Ddelete Insert Bkspace块操作:Ctrl+KB-------块开始标记 Ctrl+KK--------块结束标记 F5-----窗口缩放 Ctrl+KC-------块拷贝 Ctrl+KV--------块移动 F6-----窗口切换 Ctrl+KY-------块删除 Ctrl+KH--------块隐藏窗口操作:程序调试: & &F8-----Step over F7-------Trace into F4-----Goto Cursor Ctrl+F7--------Add Watch Ctrl+F8------Toggle Breakpoint Ctrl+F2--------Program Reset&&&&C语言程序设计第一章 C语言概述§课后作业?预习?题解与上机指导?一书中?P181~199页的14.3~14.10节 ?P236页实验1?教材P12: 1.5、 1.6、 1.7、 1.8题。 注意:有关设计程序的作业,必须经过上机 调试!&&&&&&C语言程序设计第二章 程序的灵魂——算法第2章 程序的灵魂——算法算法的概念 简单算法举例算法的特性 怎样表示一个算法结构化程序设计方法&&&&C语言程序设计第二章 程序的灵魂——算法?程序包括的内容:?数据结构:数据的类型和组织形式 ?算法:操作步骤的描述Nikiklaus Wirth提出:程序=数据结构+算法教材认为:程序 =算法+数据结构+程序设计方法+语言工具和环境灵魂加工对象 工具&&&&&&C语言程序设计第二章 程序的灵魂——算法§2.1 算法的概念?为解决一个问题而采取的方法和步骤,就成 为算法。例如:歌曲的乐谱,建造房子等。 ?算法核心是解决?做什么?和?怎么做?的 问题。?P15页的例2.1,求1……5之积。 ?可以有多种方法,一般采用简单和运算步骤少 的。准确、高效?计算机算法类别?数值运算算法 ?非数值运算算法&&&&&&C语言程序设计第二章 程序的灵魂——算法§2.2 简单算法举例?例2.1?方法1:累乘 ?方法2:用循环结构解决,灵活、通用。?例2.2?通过循环选择打印?例2.3?判断闰年课后认真思考,加 深什么是算法的概 念?例2.4?累加求级数的和,循环改变正负号和分母加1。?例2.5?判断素数 & &&&&&C语言程序设计第二章 程序的灵魂——算法§2.3 算法的特性?有穷性—在合理范围内可完成 ?确定性—无歧义性 ?有零个或多个输入—从外界得到信息 ?有一个或多个输出—问题的答案 ?有效性—每步有确定的结果&&&&&&C语言程序设计第二章 程序的灵魂——算法§2.4 怎样表示一个算法?自然语言表示?2.2节例。易懂,文字冗长,易歧义性?流程图表示?用流程图符号构成,直观,易懂? N-S流程图表示?伪代码表示 ?计算机语言表示? ? ?顺序结构 选择结构 循环结构&&&&&&C语言程序设计第二章 程序的灵魂——算法传统流程图流向混乱、可读性差,所以应该 采用结构化流程图。?结构化程序设计? 基本思想:任何程序都可以用三种基本结构表示, 限制使用无条件转移语句(goto) ? 结构化程序:由三种基本结构反复嵌套构成的程序 ? 优点:结构清晰,易读,提高程序设计质量和效率?三种基本结构? 顺序结构A B A B N-S图流程图&&&&&&C语言程序设计第二章 程序的灵魂——算法?选择结构 ?二分支选择结构真P假 真 BP假AABk k=k1 k=k2 A2 ... k=kn k=ki Ai ... An?多分支选择结构A1&&&&&&C语言程序设计第二章 程序的灵魂——算法?循环结构假 P 真 A当P为真 A?当型循环结构?直到型循环结构A 假 P 真 A 直到P为真注:A,B,A1….An可以是一个简 单语句,也可以是一个基本结构 & &&&&&C语言程序设计第二章 程序的灵魂——算法三种基本结构的共同特点:?只有一个入口; ?只有一个出口; ?结构内的每一部分都有机会被执行到; ?结构内不存在?死循环?。&&&&&&C语言程序设计第二章 程序的灵魂——算法§2.5 结构化程序设计方法?结构化程序:用三种基本结构组成的程序 ?基本设计思路:?复杂问题分解成 几个最基本问题,再分别处理。?采用的方法:?自顶向下; ?逐步细化; ?模块化设计:复杂问题按功能分成多个子模块 ?结构化编码:正确采用三种基本结构实现&&&&&&C语言程序设计第二章 程序的灵魂——算法§课后作业?P36页习题:?2.4、2.8(结合实验指导读懂答案) ?用N-S图表示2.4题中⑴⑵⑹ ?用传统流程图求解以下问题:将一个16进制数 转化为10进制数?复习二进制的基本概念??计算机文化基础?一书中P27~33页&&&&&&C语言程序设计第三章 程序的灵魂——算法第3章 数据类型、运算符与表达式C的数据类型 常量与变量 整型数据 变量赋初值 各种数值型数据间的混合运算 算术运算符和算术表达式实型数据 字符型数据赋值运算符和赋值表达式 逗号运算符和逗号表达式&&&&C语言程序设计第三章 程序的灵魂——算法§3.1 C的数据类型整 型短整型 short 整型 int 长整型 long 单精度型 float 双精度型 double基本类型实 型(浮点型)字符型 charC 数 据 类 型枚举类型 enum 数组类型 构造类型结构体类型共用体类型指针类型&&空类型 void数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 可以进行的操作&&&&C语言程序设计第三章 程序的灵魂——算法§3.2 常量与变量?常量和符号常量?定义:程序运行过程中,其值不能被改变的量(常数) ?分类:直接常量、符号常量 类型 整型常量 示例12 、 0 、 -3实型常量字符常量 符号常量4.6 、 -1.23?a‘ 、 ‘b‘ PRICE 、 PAI&&&&&&C语言程序设计第三章 程序的灵魂——算法?符号常量:用标识符代表常量 ?一般用大写字母: PRICE 、 PI?定义格式:#define符号常量常量?其值在作用域内不能改变和再赋值。 例3.1 符号常量举例 运行结果: #define PRICE 30 total=300 #include &stdio.h& void main() { 符号常量的优点是: int num, 见名知意、一改全 num=10; 改 total=num*PRICE; printf(&total=%d\n&,total); }&&&&&&C语言程序设计第三章 程序的灵魂——算法?变量? 定义:其值可以改变的量。 ? 定义格式:数据类型 变量名; ? 变量应该有名字,并在内存中占据一定的存储单元。 ? 变量名和变量值有不同的含义? 变量名实为一个符号地址&&例 变量的使用 main() { a=3; printf(―a=%d&,a); }a变量名3变量值存储单元&&&&C语言程序设计第三章 程序的灵魂——算法?标识符?定义:标识变量名、符号常量名、函数名、数组名、 文件名的字符串序列——名字。 ?命名规则: ?只能由字母、数字、下划线组成,且第一个字 这些标识符合法吗? 符必须是字母或下划线 1A、M.D.John、¥123、#33、 ?大小写字母含义不同,一般用小写 Tatol、int、max ?不能使用关键字 ?TC允许最长32个字符,建议长度不超过8个字符 ?使用:先定义、后使用标识符应该“见名知意”,如 total , max 标识符应该“不宜混淆”,如 l与1 , O与0&&&&&&C语言程序设计第三章 程序的灵魂——算法§3.3 整型数据?整型常量(整常数)的三种表示方法 ?十进制整数:由数字0~9和正负号表示.如 123,-456,0?八进制整数:由数字0开头,后跟数字0~7表示.如 ?十六进制整数:由0x开头,后跟0~9,a~f,A~F表示.如 0x123,0xff&&&&&&C语言程序设计第三章 程序的灵魂——算法§ 补充知识:?字节和位7 6 5 4 3 2 1 0?内存以字节为单元组成 ?每个字节有一个地址 ?一个字节一般由8个二进制位 组成 ?每个二进位的值是0或17 6 5 4 3 2 10 1 2 3 4 5 6 7 8 9 10 ……...&&&&&&C语言程序设计第三章 程序的灵魂——算法?数值的表示方法——原码、反码和补码?原码:最高位为符号位,其余各位为数值本身的绝对值 ?反码:? 正数:反码与原码相同 ? 负数:符号位为1,其余位对原码取反?补码:? 正数:原码、反码、补码相同 ? 负数:最高位为1,其余位为原码取反,再对整个数加1 12 1 11 10 2 3 8 4 7 9-5=4 9+7=16=(14)129&&65&&&&C语言程序设计第三章 程序的灵魂——算法(用一字节表示数) 原码 反码 补码+7-7 +数的范围111 (-127~+127)00 (-127~+127)00 (-128~+127)?负数补码转换成十进制数:最高位不动,其余位取反加1例 补码: 取反: 加1: &&&&&&C语言程序设计第三章 程序的灵魂——算法?整型变量?整型数据在内存中的存放形式? 数据在内存中以二进制补码形式存放 ? 每一个整型变量在内存中占2个字节10的原码 反码 补码 -10的原码 取绝对值 反码 补码00 00 00 00 00 00 10 00 00 00 11 11 11
00 00 00 00 00 00 00 00 00 00 00 00 11 11 11 11 11
00 10 10 00 10 10 00 10 10 00 10 10 11 01 01 11 01 10&&整数的最左二进 制位是符号位, 0正、1负&&&&C语言程序设计第三章 程序的灵魂——算法?整型变量的分类? 三类整型变量 有符号 无符号基本型(简称整型) 短整型 长整型? 整数类型和取值范围 TURBO C int short long unsigned int unsigned short unsigned longint short或short int long或long intunsigned int unsigned short unsigned long&&所占位数 最小取值范围 -3 16 16 --3 ~+ 47 0~~~ 32&&&&C语言程序设计第三章 程序的灵魂——算法?整型变量的定义? 先定义后使用——强制类型定义 int a,b; ( 指定变量a、b为整型 ) 定义放在函数开 unsigned 头的声明部分 short c, (指定变量c、d为无符号短整型 ) 指定abcd为整型变量 long e,f; ( 指定变量e、f为长整型)00 00int 型 00 00 例3.2 整型变量的定义与使用 00 00 11 01符号位00
00 00 00short 00 00 #include &stdio.h& 00 00 11 0100 00 void 00 00 00 00 main() 00 00 00 00 00 00型指定u为无符号整型变量00 11 long 型作用域 00 00 00结果:a+u=22,b+u= -14 & &{int a,b,c,d; 00 11 01 unsigned int 型 定义与赋值同时进行: 00 00 00 11 01 unsigned int 型 a=12;b=-24;u=10; int a=12; 00 00 00 00 00 00 00 00 00 00 00 11 01 c=a+u;d=b+u; unsigned long 型 printf(―a+u=%d,b+u=%d\n&,c,d); }不同类型混合运算, 类型自动转换&&&&C语言程序设计第三章 程序的灵魂——算法?整型数据的溢出 整型变量最大值32767 加1后是 –32768的补码形式01 11 10 00 11 11 11 11 11 11 00 00 00 00 00 00例3.3 整型数据的溢出 改为:long b; #include &stdio.h& void main( ) 结果是什么? { int a , 运行结果: a= 3 , -32768 b= a+1; printf(&%d , %d \n &,a,b); } & &? 此情况称为?溢出?,运行时不报错,编程时要注 意&&&&C语言程序设计第三章 程序的灵魂——算法?整型常量的类型?整型常量的值在-3范围内,编译器认 为是int类型 ?整型常量的值超过上述范围,而在- ~ +范围内,编译器认为是long类型 ?当系统定义short int与int占内存长度相同,则 两种类型常量均可以赋给 int和short int型变量 ?在整型常量后面加大写L或小写l,则告诉编译器, 把该整型常量作为long类型处理。例:123L、0L ?在整型常量后面加u,则按无符号整型方式存放, 负数转换成补码再按无符号整型方式存放。&&&&&&C语言程序设计第三章 程序的灵魂——算法§3.4 浮点型数据?浮点型常量的表示方法?浮点数(float)又称为实数(real) ?两种表示方法: ?十进制小数形式:必须有小数点 如 0.123 、.123 、123.0 、0.0 、123. ? 指数形式:e或E之前后必须有数字;指数必须为整数如 123.456e0、12.3456e1 、1.23456e2 、0. 、0. 等?规范化指数形式& & ?是指数的输出形式6.28e-2 表示6.28× 10 -2?只有一位非零整数的指数形式-3.0824e4 表示 –3.0824× 10 4&&&&C语言程序设计第三章 程序的灵魂——算法?浮点型变量?浮点型数据在内存中的存放形式? 浮点型数据在内存中占4个字节(32位) ? 在内存中分成3部分,指数为2的幂次+ .数符小数部分指数?浮点型变量的分类类 型 位数 32位 64位 128位 有效数字 单精度 float 双精度 double 型 长双精度long double型6~715~16 18~19&&float x,y; long double t;(指定x、y为单精度浮点型变量) (指定z为双精度浮点型变量) (指定t为长双精度浮点型变量)&&&&C语言程序设计第三章 程序的灵魂——算法?浮点型数据的舍入误差? 数据超过有效位数,则产生误差 ? 要避免一个很大的数与一个很小的数加减例3.4 浮点型数据的舍入误差 #include &stdio.h& void main( ) { float a , a= e5; b= a+20; printf(&%f \n&,b); }运行结果: .000000舍入误差使1.0/3*3 的 结果并不等于1 !?浮点型常量的类型& &? 浮点型常量一般按双精度64位处理,数后加F或f按单精度 ? 浮点型常量不分float和double&&&&C语言程序设计第三章 程序的灵魂——算法§3.5 字符型数据?字符常量?定义:用单引号括起来的单个字符或转义字符 如 ‘a? ?A? ?\n? ?\t ??字符常量的值:该字符的ASCII码值 如 ‘a‘——97 ,‘A‘——65 ?\n‘——10, ?\t‘——9 ?定义格式:char 变量名 = 值 char ch=65 与 char ch=‘A‘ 与char=?\101‘是等效的 ?转义字符:反斜线后面跟一个字符或一个代码值表示&&&&&&C语言程序设计第三章 程序的灵魂——算法表3.3 转义字符及其含义转义字符 \n 含义 换行 垂直制表 回车(不换行) 转义字符 \t \b \f \\ \― \xhh 含义 水平制表(右移8格) 退格 换页 反斜线 双引号 2位16进制数代表的字符 显示结果: f h gde jk\v\r \a \? \ddd&响铃 单引号 3位8进制数代表的字符打印结果: fab h gde jik&&例3.5 转义字符的使用 #include &stdio.h& void main( ) { printf(― ab c\t de\rf\tg\n‖); printf(―h\ti\b\bj k‖); }&&&&C语言程序设计第三章 程序的灵魂——算法?字符变量?存放字符常量,占用一个字节,存放一个字符 ?定义形式: 赋值: char c1,c2; c1=?a‘;c2=?b‘;?字符数据在内存中的存储形式及其使用方法?以二进制存放字符的ASCII码值(0~255整数) ?与整数的存储形式类似 例3.6 向字符变量赋整数 ?以字符或整数形式输出 #include &stdio.h& void main( ) 输出形式取决于printf函数中的格式符 { char c1,c2 ; c1=97 ; 格式符为“%c‖时输出的变量值为字 c2=98 ; 符 printf(―%c %c \n&,c1,c2); 格式符为“%d&时输出的变量值为整 a b 运行结果: printf(―%d %d \n&,c1,c2); 数 97 98 & & }&&&&C语言程序设计第三章 程序的灵魂——算法?对字符数据进行算术运算? 实质是对其ASCII值进行算术运算例3.7 大小写字母的转换 #include &stdio.h& void main( ) {char c1,c2 ; c1=?a‘ ; c2=?b‘ ; c1=c1-32; c2=c2-32; printf(―%c %c &,c1,c2); } 运行结果: A & &?字符型与整型间互相赋值小写字母比大写字母的 例: 互相赋值 ASCII码大(32)10 #include &stdio.h&Bvoid main( ) {int c1; char c2 ; c1=?a‘ ; c2=98 ; c1=c1-32; c2=c2-32; printf(―%c %c &,c1,c2); }&&&&C语言程序设计第三章 程序的灵魂——算法?字符串常量?定义:用双引号(― ‖)括起来的字符序列?How do you do‖ , ―CHINA‖ , ―a‖ , ―$123.45‖?存储:每个字符串尾自动加一个 ‘\0’ 作为字 符串结束标志 例 字符串“hello‖在内存中 h e l l o \0例 空串 “”\0?字符常量与字符串常量不同例 ‘a‘ a―a‖a没有字符串变量, \0 只能用字符数组存放例:& & ch=?A‘; ch=―A‖;&&&&C语言程序设计第三章 程序的灵魂——算法§3.6 变量赋初值?变量的使用:先定义,后使用 ?变量定义位臵:一般放在函数开头 ?变量初始化:可以在定义时赋初值错!int a=b=c=3 int a=1, b=-3,c; 例: int a=1,b= -3,c; 地址 float data=3.67; 1 2字节 a char ch=?A‘; 地址 int x=1,y=1,z=1; b 2字节 -3 int x=y=1;(× )…... 地址 编译程序根据变量定义为其 分配指定字节的内存单元c??…...2字节&&内存随机数&&&&C语言程序设计第三章 程序的灵魂——算法§3.7 各类数值型数据间的混合运算?整型、实型、字符型数据间可以混合运算?自动转换?什么情况下发生? 运算转换------不同类型数据混合运算时 ? 赋值转换------把一个值赋给与其类型不同的变量时 ? 输出转换------输出时转换成指定的输出格式 ? 函数调用转换------实参与形参类型不一致时转换?运算转换规则:不同类型数据运算时先自动转换 成同一类型&&&&&&C语言程序设计第三章 程序的灵魂——算法高doublefloat说明: 必定的转换long运算对象类型不同时转换unsigned低 例 ch/i int intintchar,short例10+?a‘ +i*f int int d/l+ f*d - (f+i) double double double doubledouble double double doubledoubledouble double&&double&&&&C语言程序设计第三章 程序的灵魂——算法?强制转换(见P56强制类型转换运算符部分)?一般形式:(类型名)(表达式) 例3.8 例:(int)(x+y) 表达式仅一个 #include &stdio& (int)x+y 变量时,括号 main() 可以省略 强制类型转 (double)(3/2) { 换运算符 (int)3.6 ?说明:强制转换得到 x=3.6; 所需类型的中间变量, i=(int)x; printf(―x=%f,i=%d‖,x,i); 原变量类型不变 } 结果:x=3.600000,i=3 精度损失问题 & &较高类型向较低类型转换时可能发生&&&&C语言程序设计第三章 程序的灵魂——算法§3.8 算术运算符和算术表达式算术运算符:(+ - * / % ++ --) 关系运算符:(& &= == & &= !=) 逻辑运算符:((! && ||) 位运算符 :(&& && ~ | ^ &) 赋值运算符:(= 及其扩展) 条件运算符:(?:) ?学习运算符应注意: 逗号运算符:(,) ?运算符功能 指针运算符:(* &) 求字节数 :(sizeof) ?与运算量关系 ? 要求运算量个数 强制类型转换:(类型) ? 要求运算量类型 分量运算符:(. -&) 下标运算符:([]) ?运算符优先级别 其它 :(( ) -) ?结合方向 ?结果的类型C 运 算 符&&&&&&C语言程序设计第三章 程序的灵魂——算法?算术运算符和算术表达式?基本算术运算符: + - * / %? 结合方向:从左向右 ? 优先级: - ----&* / % -----& + (2) (3) (4)说明:? ?-?可为单目运算符时,右结合性 ? 两整数相除,结果为整数 ? %要求两侧均为整型数据 ? + - * / 运算的两个数中有一个数为实数, 结果是double型例 例5/2 = 2 5/2 = -5/2.0 ==-2.5 -5/2.0例 例&&5%2 5%2 -5%2 -5%2 1%10 1%10 5%1 5%1 5.5%2 5.5%2= = 1 = = -1 = = 1 = = 0 (?)&&&&C语言程序设计第三章 程序的灵魂——算法?自增、自减运算符++ --? 作用:使变量值加1或减1 ? 种类: ?前臵 ++i, --i (先执行i+1或i-1,再使用i值) ?后臵 i++,i-(先使用i值,再执行i+1或i-1)例j=3; k=++j; j=3; k=j++; j=3; printf(―%d‖,++j); j=3; printf(―%d‖,j++); a=3;b=5;c=(++a)*b; a=3;b=5;c=(a++)*b;//k=4,j=4 //k=3,j=4 //4,j=4 //3,j=4 //c=20,a=4 //c=15,a=4&&&&&&C语言程序设计第三章 程序的灵魂——算法? 几点说明:?++ -- 不能用于常量和表达式,如 5++,(a+b)++ ?++ -- 结合方向: 自右向左 ?优先级:- ++ -- ------&* / % -----&+ (2) (3) (4) ?该运算符常用于循环语句中,使循环变量加减1例 -i++ i=3;?-(i++)printf(―%d‖,-i++); //-3?有关表达式使用中的问题说明? 不同系统对运算符和表达式的处理次序不同,尽可能 写通用性强的语句 ? 不要写有歧义和不知系统如何执行的程序&&&&&&C语言程序设计第三章 程序的灵魂——算法§3.9 赋值运算符和赋值表达式?简单赋值运算符? 符号: = ? 格式: 变量标识符=表达式 ? 作用:将一个数据(常量或表达式)赋给一个变量 ? 左侧必须是变量,不能是常量或表达式例 a=3; 例 3=x-2*y; ?类型转换d=func();c=d+2;a+b=3; (×)? 赋值转换规则:使赋值号右边表达式值自动转换成其 左边变量的类型 例 int i=10; f=i; 则 f=10.0&&例 i=2.56;//结果i=2;&&&&?复合赋值运算符? 种类:+= -= *= /= %= 《= 》= &= ^= |= ? 含义: exp1 op= exp2 ? exp1 = exp1 op exp2a+=3a=a+3x*=y+8x%=3x=x*(y+8)x=x%3&&&&C语言程序设计第三章 程序的灵魂——算法?赋值表达式? 形式:&变量& &赋值运算符& &表达式& ? 赋值表达式的值与变量值相等,且可嵌套例:a=b=c=5 //表达式值为5,a,b,c值为5 a=(b=5) // b=5;a=5 //表达式值11,c=6,a=11 a=5+(c=6) a=(b=4)+(c=6) //表达式值10,a=10,b=4,c=6 a=(b=10)/(c=2) //表达式值5,a=5,b=10,c=2&&&&&&C语言程序设计第三章 程序的灵魂——算法§3.10 逗号运算符和逗号表达式?形式:表达式1,表达式2,……表达式n ?结合性:从左向右 ?优先级: 15,级别最低 ?逗号表达式的值:等于表达式n的值 ?用途:常用于循环for语句中 //a=15,表达式值60 例 a=3*5,a*4 //a=15,表达式值20 a=3*5,a*4,a+5 例 x=(a=3,6*3) //赋值表达式,表达式值18,x=18 x=a=3,6*a //逗号表达式,表达式值18,x=3 例 a=1;b=2;c=3; //1,2,3 printf(―%d,%d,%d‖,a,b,c); printf(―%d,%d,%d‖,(a,b,c),b,c); //3,2,3 & &&&&&C语言程序设计第三章 程序的灵魂——算法例: 逗号表达式使用 main() { int x,y=7; float z=4; x=(y=y+6,y/z); printf(&x=%d\n&,x); }运行结果: X=3本章的内容散乱而复杂,但却是 程序设计的基础,要认真看书,通过 编程序才可以深入理解。&&&&&&C语言程序设计第三章 程序的灵魂——算法§课后作业?P66~68页习题:?3.2, 3.5(思考) ?3.3, 3.4, 3.9, 3.12(写出答案) ?3.6, 3.10(上机验证)?上机:实验教材:实验2(做好上机准备) ?预习第四、第五章&&&&&&C语言程序设计第四章 顺序程序设计第4章 最简单的C程序设计—— 顺序程序设计C语言概述 赋值语句数据输入输出的概念及在C语言中的实现 字符数据的输入输出 格式输入与输出 顺序结构程序设计举例&&&&C语言程序设计第四章 顺序程序设计§4.1 C语句概述?C程序结构:?一个C程序可以由多个源程序文件构成 ?一个源程序文件由若干函数、预编译命令及全局变量声明部 分构成 ?函数包括数据定义部分和执行部分,执行部分是C语言语句, 完成对数据的操作C程序源程序文件1源程序文件2源程序文件n预处理命令全局变量声明函数1函数n函数首部函数体&&局部变量声明执行语句&&&&C语言程序设计第四章 顺序程序设计?C语句分为5类?控制语句:共9种? 完成一定的控制功能,这些语句能够根据一定的测试条件 决定某些语句是否被执行,如分支、循环、跳转等语句。if( )~else~ for( )~ while( )~ do~while( ) continue switch break goto return & &(条件语句) (循环语句) (结束本次循环语句) (多分支选择语句) (终止switch或循环语句) (转向语句) (从函数返回语句)&&&&C语言程序设计第四章 顺序程序设计? 函数调用语句:由函数加? ; ‖组 成 printf(―This is a C program‖);? 表达式语句:由表达式加? ; ‖组成? 典型的是赋值语句,由赋值表达式加分号构成,如:y=x+1 是表达式,而y=x+1;则是赋值语句。实际上函数调用语句也 属于表达式语句。a=3 ; i++ ;? 空语句:只有一个? ; ‖,什么也不做 for(i=0;i&100;i++) { ; }& &&&&&C语言程序设计第四章 顺序程序设计?复合语句:? 用 {…}括起来的一组语句,也称作程序块。 ? 一般形式:int i=0,sum=0; while(i&=100) { sum=sum+i; i=i+1; }? 说明 ?复合语句? } ‖后不加分号 ?语法上和其它语句相同 ?复合语句可嵌套&&&&&&C语言程序设计第四章 顺序程序设计§4.2 赋值语句?基本格式:赋值表达式 + ; ? 赋值表达式可以包含在其它表达式中,而赋值语句不 可以。例:if ((a=b)&0) t=a; 不可写为:if ((a=b;)&0) t=a;&&&&&&C语言程序设计第四章 顺序程序设计表达式中允许出现运算符号、变量、数值、函数序号 1 2 3 语句 a=5 S=pi*r*r average=(a+b)/2 x=l*cos(q) i=0x30+255 ch=ch- ?A‘ m=a[1]+a[2] x=*px++ 求圆面积 求平均数 求横坐标 含义 常量 变量、乘号 变量、常数、括号 变量、函数 右侧表达式包括4 56 7 8十进制、十六进制变量、字符常量 数组变量 指针变量、增1运算&&&&&&C语言程序设计第四章 顺序程序设计?另一种形式的赋值语句 &变量&&运算符& = &表达式&;我们可以理解为:&变量&=&变量&&运算符&&表达式&;示例 a+ = 表达式 a - = 表达式含义a= a + (表达式) a= a - (表达式)a * = 表达式a / = 表达式 a % = 表达式a= a * (表达式)a= a / (表达式) a= a %(表达式)&&只适合于 整型变量&&&&C语言程序设计第四章 顺序程序设计?连续赋值语句int a , b , a=b=c=1 ;int a=b=c=1 ;步骤: 连续赋值语句应“从右向左”计算a=b=c=1 ; 等价于: a=(b=(c=1) ); 1. 把常数 1 赋给变量c,表达式(c=1) 的值为1; 2. 把表达式(c=1)赋给变量b,表达式 (b=(c=1) )的值为1; 3. 将右侧表达式的值1赋给a , a =1 。&&&&&&C语言程序设计第四章 顺序程序设计§4.3 数据输入输出的概念及在C语言中的实现?所谓数据的输入输出是从计算机角度出发的。 ?C语言本身没有I/O语句,所有I/O都由函数来实现。 ?C语言的标准库函数? 由编译系统提供的一系列函数,以库形式存放在系统中,不是 常用头文件: C语言文本的组成部分。 stdio.h 定义输入输出函数 ? 库函数已编译成目标文件(.obj),在连接阶段才与源程序 编译成的目标文件相连接,生成可执行文件。 string.h 定义字符串操作函数 ? 调用形式: math.h 定义sin、cos等数学函数 函数名(参数表) Turbo C 2.0可以 ? 注意在调用C语言库函数时,需要使用编译预处理命令 不加#include命令 #include &相关的头文件&,使相应的头文件包含到用户源程 序中。?标准输入输出函数 #include &stdio.h& & &putchar 输出字符, scanf 格式输入,puts 输出字符串 或 #include 格式输出,gets 输入字符串 getchar 输入字符, printf‖stdio.h‖&&&&C语言程序设计第四章 顺序程序设计§4.4 字符数据的输入输出?putchar 函数(单字符输出函数)格式: putchar( ?字符’); 或 putchar( 字符变量);强调:被输出的单个字符必须被‘ ’括起 来 ?输出一个字符: /* 例 4.1 putchar(?字符’)*/) */ 4.1 putchar(字符变量 #include &stdio.h& 运行结果:BOY void main() #include &stdio.h& { char a,b,c; void main() { a='B'; b=?O'; c=?Y'; 结果当然还是一样的! putchar('B'); putchar('O'); putchar('Y'); putchar(a); putchar(b); putchar(c); } & & }&&&&C语言程序设计第四章 顺序程序设计?输出控制字符 /* 例 putchar(?控制字符’) */ #include &stdio.h& void main() { char a,b; a=?O'; b=?k'; putchar(a); putchar(?\n‘); putchar(b); } ?输出转义字符 运行结果:AB 运行结果:O k/*例 putchar( ) 含有转义符* / #include &stdio.h& void main() { a='B'; putchar('\101'); putchar(a); }&&&&&&C语言程序设计第四章 顺序程序设计?getchar 函数(单字符输入函数) 。格式: getchar( ) ; 强调:输入单个字符后,必须按一次回车, 计算机才接受输入的字符。/*例4.2 */ #include &stdio.h& void main() { c=getchar( ); putchar(c); } & &运行结果: a? a# include &stdio.h&不能少!&&&&C语言程序设计第四章 顺序程序设计§4.5 格式输入与输出?printf函数(格式输出函数)?printf函数的一般格式 格式: printf( 格式控制,输出表列);? 格式控制:用双引号括起来的字符串,包含两种信息 ?格式说明:%[修饰符]格式字符,指定输出格式 ?普通字符:原样输出 ? 输出表列:要输出的数据,可以是变量或表达式,可以 格式说明 转义字符 普通字符 输出表列 没有,多个时以?,?分隔)例: printf( ―%d %d‖,a,b); printf( ―a=%d b= %d\n‖,a,b); & &&&&&C语言程序设计第四章 顺序程序设计/*从最简单的学起 */ #include &stdio.h& void main() { printf(―Hello World !‖ ); }运行结果: Hello World!调用 printf( ) 时可以省略# include 命令!&&&&&&C语言程序设计第四章 顺序程序设计?格式字符?d格式符:输出十进制整数,有3种用法? %d格式:按数据实际长度输出,数据范围 -。/* %d 格式的 printf( ) 函数使用 */ #include &stdio.h& void main() { int a=3 , b=4; printf(―%d %d\n ‖,a,b); printf(―a=%d , b=%d\n‖,a,b); } 格式说明决定最终输出的格式运行结果: 3 4 a=3, b=4格式说明应与输出列表项个数相同,顺序一致&&格式说明通常用小写字母表示&&&&C语言程序设计第四章 顺序程序设计? %md格式:m指定输出字段的宽度 ?数据位数小于m,左端补空格,反之按实际输出。int a=123 , b=12345 ; printf(―%4d %4d ‖, a , b);? %ld格式:输出长整型数据 ?可以用%mld格式指定输出列宽123 12345long c=135790 printf(―%ld \n‖, c); printf(―%8ld ‖, c); & 32767 ( int 型数据的最大值)&&&&&&C语言程序设计第四章 顺序程序设计?o格式符:八进制输出整数? 是将内存中的二进制位整个按八进制输出,所以输出 值没有符号。 ? 可以指定输出宽度%mo,长整型可以用%lo格式输出。?x格式符:十六进制输出整数? 同o格式符,无符号,即无负十六进制数。 ? 可以指定输出宽度%mx ,长整型可以用%lx格式输出。int a= -1; printf(―%d , %o , %8o , %x ‖, a , a , a , a); 输出: -1,177777,_ _177777,ffff11 11 11 11 11 11 11 11&&-1在内存的存放形式(补码)&&&&C语言程序设计第四章 顺序程序设计?u格式符:十进制输出unsigned型数据? int型可以用%u格式输出,unsigned型也可以用%d、 %o和%x格式输出。例4.3 无符号数据的输出 #include &stdio.h& void main() { unsigned int a=65535; int b= -2; printf(―a=%d , %o , %x , %u\n ‖,a,a,a,a); printf(―b=%d , %o , %x , %u\n‖ ,b,b,b,b); } 运行结果: a= - 1 , 177777 , ffff , 65535 b= - 2 , 177776 , fffe , 65534 & &&&&&C语言程序设计第四章 顺序程序设计?c格式符:输出一个字符? 值在0~255的整数,可以用%c形式输出为字符例4.4 字符数据的输出 #include &stdio.h& void main() { char c=?a‘; int i=97; printf(―%c , %d\n ‖,c,c); printf(―%c , %d\n‖ ,i ,i); }运行结果: a , 97 a , 97&&&&&&C语言程序设计第四章 顺序程序设计?s格式符:输出一个字符串? 有%s,%ms,% -ms,%m.ns,% -m.ns五种用法例4.5 字符串的输出 #include &stdio.h& void main() { printf(―%3s , %7.2s , %.4s , %-5.3d\n ‖, ―CHINA‖, ―CHINA‖, ―CHINA‖, ―CHINA‖); }m自动=n运行结果: CHINA , _ _ _ _ _CH , CHIN , CHI _ _ & &&&&&C语言程序设计第四章 顺序程序设计?f格式符:输出实数? %f格式:整数部分全部输出,小数6位。可以有非有 效数字输出,因为单精度有效位7位,双精度16位。 ? %m.nf格式:占m列,其中n位小数,左补空格。 ? % -m.nf格式:右补空格例4.6 %f格式输出实数时的有效位数 例4.8例4.7 %f格式输出双精度实数时的有效位数 %f格式输出实数时指定小数位数 #include #include &stdio.h& #include &stdio.h& &stdio.h& void void main() void main() main() { flot x,y; double x,y; { flot{f=123.456; x=;y=; a=1.; printf(―%f %10f %10.2f %.2f %-10.2f\n‖,f,f,f,f,f); printf(―%f\n‖,x+y); b=2.; } } printf(―%f\n‖,x+y); 运行结果: } 123.456001_ _123.456001_ _ _ _ _ _123.46_ _123.46_ _123.46_ _ _ _ 运行结果: 125 3.333010 & &&&&&C语言程序设计第四章 顺序程序设计?e格式符:指数形式输出实数? %e格式:不指定m和n,小数6位,指数部分共5位, 其中e和指数符号各1位,指数值3位。 ? %m.ne和% -m.ne格式:m、n、-的含义同前面。 没有n时,自动=6?g格式符:输出实数? 可以自动根据数值大小选择 f 或 e 格式(选列少的) ? 不输出无意义的零&&&&&&C语言程序设计第四章 顺序程序设计? 格式字符表d x,X o u c s e,E f g,G %%十进制整数十六进制无符号整数 八进制无符号整数 不带符号十进制整数 单一字符 字符串 指数形式浮点小数 小数形式浮点小数 e和f中较短一种 百分号本身int a=100;printf ( ―%d‖,a);int a=255;printf(―%x‖,a); int a=8;printf(―%o‖,a); int a=100;printf(―%u‖,a); char a=65;printf(―%c‖,a);100ff 10 100 A ABC 5.2 567..789printf(―%s‖,―ABC‖);float a=567.789;printf(―%e‖,a); float a=567.789;printf(―%f‖,a); float a=567.789;printf(―%g‖,a);printf(―%%‖);%&&&&&&C语言程序设计第四章 顺序程序设计?scanf 函数(格式输入函数)?一般形式 格式: scanf(格式控制,地址表列 ) ;? 功能:按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束? 格式控制:含义同printf函数 ? 地址表列:变量地址或字符串地址,地址间?,?分 隔。 ? 强调:地址列表中每一项必须以取地址运算符&开头。输入:3_4_5? 输出:3,4,5&&例4.9 用scanf函数输入数据 #include &stdio.h& voidmain() { int a , b , scanf(―%d%d%d‖,&a,&b,&c) ; printf(―%d, %d, %d\n‖,a,b,c) ; }&&&&C语言程序设计第四章 顺序程序设计例 scanf(―%4d%2d%2d‖,&yy,&mm,&dd); 输入
? 则 1999?yy, 10 ?mm, 15 ?dd例 scanf(―%3d%*4d%f‖,&k,&f); 输入 .43? 则 123?k, 8765.43?f 例 scanf(―%2d? *3d? 2d‖,&a,&b); % % 输入 12?45?7? 3 6 则 12?a, 67?b&&例 scanf(―%3c%2c‖,&c1,&c2); 输入 abcde ? 则 ‘a‘?c1, ?d‘ ?c2&&&&C语言程序设计第四章 顺序程序设计?输入分隔符的指定? 一般以空格、TAB或回车键作为分隔符 ? 输入数据时,遇非法输入则认为数据结束 ? 其它字符做分隔符:格式串中两个格式符间有其它字 符,则输入时对应位臵也要有相同的字符。例 scanf(―%d:%d:%d‖,&h,&m,&s); 输入 12:30:45? 则12 ?h, 30 ?m, 45 ?s 例 scanf(―%d%c%f‖,&a,&b,&c); 输入 ? 则 1234 ?a, ?a‘ ?b, 123 ?c& & 非法字符&&&&C语言程序设计第四章 顺序程序设计§4.6 顺序结构程序举例例4.10 输入三角形边长,求面积 #include &math.h& 文件包含预处理命令 #include &stdio.h& void main() { float a,b,c,s, 变量定义 scanf(&%f,%f,%f&,&a,&b,&c); 输入数据 s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(&a=%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= area= 5.334.00, c=6.00 s=6.50&&&&C语言程序设计第四章 顺序程序设计例4.11 从键盘输入大写字母,用小写字母输出#include &stdio.h& void main() { char c1,c2; c1=getchar(); printf(&%c,%d\n&,c1,c1); c2=c1+32; printf(&%c,%d\n&,c2,c2); }输入:A ? 输出:A,65 a,97&&&&&&C语言程序设计第四章 顺序程序设计#include &stdio.h& #include &math.h& void 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(&\n\nx1=%5.2f\nx2=%5.2f\n&,x1,x2); } 输入:a=1,b=3,c=2 ? 输出:x1=-1.00 x2=-2.00&&&&&&C语言程序设计第四章 顺序程序设计§本章要求?程序的三种基本结构及其特点。 ?数据输入输出函数及其格式控制。 ?熟悉Turbo C环境的使用,头文件和帮助系统的 使用(ctrl+F1)§课后作业?P86~90页习题:?4.7,4.10(思考) ?4.4,4.5,4.6,4.8,4.9(答案写在作业本上) ?4.4,4.8,4.9(上机验证)?上机:实验教材:实验3(做好上机准备) ?预习第五、六章& &&&&&C语言程序设计第五章 选择结构程序设计第5章 选择结构程序设计关系运算符和关系表达式逻辑运算符和逻辑表达式if语句 switch语句 程序举例&&&&C语言程序设计第五章 选择结构程序设计选择结构是三种基本结构之一,其作用是,根据 指定的条件所满足的情况转而执行相应的操作。 C语言用关系表达式和逻辑表达式通过if语句实现 双分支选择,用switch语句实现多分支选择。§5.1 关系运算符和关系表达式??关系运算?即?比较运算,是对两个值进行 比较,比较的结果是得到真假两种值。 关系运算符A&3关系表达式 & &&&&&C语言程序设计第五章 选择结构程序设计?关系运算符及其优先次序?C语言提供6种关系运算符? 种类:& &= == &= & != ? 结合方向:自左向右 ? 优先级别:算术运算符高关系运算符赋值运算符 低& &= & &=(小于) (小于等于) 优先级6(高) (大于) (大于等于)优先级7(低)= = (等于) ! = (不等于)c&a+b a&b!=c a==b&c a=b&c// // // //c&(a+b) (a&b)!=c a==(b&c) a=(b&c)&&&&&&C语言程序设计第五章 选择结构程序设计?关系表达式?用关系运算符将两个表达式连接起来的式子a&b , (a+b)&(b+c) , 5==3?关系表达式的值:是逻辑值?真?或?假?,用1和0 表示int a=3,b=2,c=1,d,f; a&b //表达式值1 (a&b)==c //表达式值1 b+c&a //表达式值0 d=a&b //d=1 f=a&b&c //f=0&&&&&&C语言程序设计第五章 选择结构程序设计?关系运算几点注意:例 5&2&7&8在C中是允许的, 值为 0例 int i=1, j=7,a; a=i+(j%4!=0); 则a= 21 结果为 结果为0&结合方向 自左至右例 ‘a‘&0 ‘A‘&100&&用ASCII值 比较&&&&C语言程序设计第五章 选择结构程序设计?关系运算中应该注意 应避免对实数作相等或不等于0的判断 如 1.0/3.0*3.0==1.0 可改写为: fabs(1.0/3.0*3.0-1.0)&1e-6 注意区分“ = ‖与“ = = ‖ int a = 0,b =1; if(a = b) printf(―a equal to b‖); else printf(―a not equal to b‖);&&&&&&C语言程序设计第五章 选择结构程序设计§5.2 逻辑运算符和逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来 的式子就是逻辑表达式。 ?逻辑运算符: C语言提供3种逻辑运算符运算符 && || ! 名称 逻辑与 示例 a && b a || b !a含义若a 、 b同时为真,则a && b为真 若a 、 b之一为真,则a || b为真 若a为真,则!a为假;a为假,则!a为真逻辑或逻辑非―&&‖和“ ||‖是双目运算符 “!”是单目运算符&&&&&&C语言程序设计第五章 选择结构程序设计?逻辑运算真值表a 真 b 真 !a 假 !b 假 a&&b 真 a||b 真真 假 假假 真 假假 真 真真 假 真假 假 假真 真 假?逻辑运算符的优先次序 !(非) , &&(与),优先次序:高(2) 结合方向:从右向左 (11) 从左向右||(或)(12)低 从左向右&&例:优先次序 (a&b)&&(x&y) //写成 a&b&&x&y (a==b)||(x==y) //写成 a==b||x==y (!a)||(a&b) //写成 !a||a&b&&&&C语言程序设计第五章 选择结构程序设计?逻辑表达式C语言中, 运算量: ?假?, 0表示?假?,运算结果: 0表示 非0表示?真?, 1表示?真?, 例 a=4;b=5; !a a&&b a||b !a||b 4&&0||2 5&3&&2||8&4-!0 ?c‘&&?d‘值为0 值为1 值为1 值为1 值为1 //(5&3)&&2||(8&(4-(!0))) 值为1 值为1&&&&&&C语言程序设计第五章 选择结构程序设计?逻辑运算中的注意点:短路特性:逻辑表达式求解时,并非所有的逻辑运算符 都被执行,只是在必须执行下一个逻辑运算符才能求 出表达式的解时,才执行该运算符。a&&b&&c a||b||c//只在a为真时,才判别b的值; 只在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=1 & &&&&&C语言程序设计第五章 选择结构程序设计?复杂逻辑条件的表述判断某一年year是否为闰年判别闰年的条件(int year): 能被4整除: year%4==0 能被4整除但不能被100整除: (year%4==0)&&(year%100!=0) 能被400整除: year%400==0 综合起来: ((year%4==0)&&(year%100!=0))||year%400==0 优化语句: 此表达式为真时是闰年 (year%4==0&&year%100!=0)||year%400==0 & &&&&&C语言程序设计第五章 选择结构程序设计§5.3 if 语句(条件选择语句)?If语句的三种形式?形式一:? 格式:if (表达式) 语句 ? 执行过程:表达式=0非0语句main() { int x , x=20 ; 没有 y=10 ; “;” if (x&y) printf(―%d‖,x); }&&&&&&C语言程序设计第五章 选择结构程序设计?形式二:? 格式:if (表达式) 语句1 else 语句2 ? 执行过程:非0表达式=0语句1语句2main() { int x , x=20 ; y=10 ; if (x&y) printf(―%d‖,x); else printf(―%d‖,y); }&&&&&&C语言程序设计第五章 选择结构程序设计?形式三:表达式1=0表达式2非0=0表达式3非0=0非0 语句1 语句2 语句3 语句n? 格式:if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 …… else if (表达式m) 语句m else 语句n ? 执行过程:&&例:if (number&500) else if (number&300) else if (number&100) else if (number&50) elsecost=0.15 ; cost=0.1 ; cost=0.075 ; cost=0.05 ; cost=0 ;必须有 ? ; ?&&&&C语言程序设计第五章 选择结构程序设计?几点说明:? if后面的表达式类型任意if(a = =b&&x= =y) printf(―a=b,x=y‖); if(3) printf(―OK‖); if(?a‘) printf(―%d‖,a);? if 后面的语句可以是复合语句,必须要加{ }&&考虑下面程序的输出结果: { }后没有 main() { int x,y; ? ;? scanf(―%d,%d‖,&x,&y); if(x&y) x=y; y=x; else Compile Error! x++; y++; printf(―%d,%d\n‖,x,y); }&&&&C语言程序设计第五章 选择结构程序设计例:输入两个数并判断两数是否相等#include &stdio.h& void main() { int a,b; printf(&Enter integer a:&); scanf(&%d&,&a); printf(&Enter integer b:&); scanf(&%d&,&b); 运行:Enter if(a= =b) Enter printf(&a==b\n&); a==b else printf(&a!=b\n&); 运行:Enter } Enter & & a!=binteger a:12? integer b:12?integer a:12? integer b:9?&&&&C语言程序设计第五章 选择结构程序设计例:判断输入字符种类#include&stdio.h& void main() { printf(&Enter a character:&); c=getchar(); if(c&32) printf(&The character is a control character\n&); else if(c&='0'&&c&='9') printf(&The character is a digit\n&); else if(c&='A'&&c&='Z') printf(&The character is a capital letter\n&); else if(c&='a'&&c&='z') printf(&The character is a lower letter\n&); else printf(&The character is other character\n&); }&&运行:Enter a character:8?D? 运行:Enter a aacharacter: ?h? ? 运行: Enter character: 运行: Enter acharacter: 运行: Enter character:F1 The character is a aother letter The character isis adigit character The character isa control character The character is capital letter The character lower&&&&C语言程序设计第五章 选择结构程序设计例5.1:输入两个实数,按由小到大的次序输出两数#include &stdio.h& void main() { float a,b, scanf(&%f,%f&,&a,&b); if(a&b) {t=a;a=b;b=t;} printf(&%5.2f,%5.2f&,a,b); } 输入:3.6, -3.2 ? 输出:-3.20, 3.60& &&&&&C语言程序设计第五章 选择结构程序设计例5.2:输入三个数,按由小到大的次序输出&&#include &stdio.h& void main() { float a,b,c, scanf(&%f,%f,%f&,&a,&b,&c); if(a&b) {t=a;a=b;b=t;} 输入:3,7,1 ? if(a&c) 输出:1.00,3.00,7.00 {t=a;a=c;c=t;} if(b&c) {t=b;b=c;c=t;} printf(―%5.2f,%5.2f,%5.2f‖,a,b,c); }&&&&C语言程序设计第五章 选择结构程序设计?If 语句的嵌套? If语句中又包含一个或多个if语句称为if语句的嵌套。 ? 实际上只要将前述if语句的形式1和2中的内嵌语句用 一个if语句代替,即成为if语句的嵌套。 ? 嵌套的if语句还可以嵌套另一个if语句,形成多重嵌套。?一般形式: if (条件1) if (条件2) else else if(条件3) else 语句1 语句2内嵌if语句3 语句4内嵌if&&&&&&C语言程序设计第五章 选择结构程序设计?if 嵌套的几种变形是这样吗?if (条件1) if (条件1) 语句1 if (条件2) 语句1 else else 必要时用{ }限定 if (条件2) 语句2 内嵌if范围 if (条件3) 语句2 内嵌if else 语句3 else 语句3 if (条件1) if (条件2) 语句1 else 语句2 else 语句3 & &内嵌if内嵌if 内嵌if内嵌ifif (条件1) {if (条件2) 语句1} 内嵌if else if (条件3) 语句2 内嵌if else 语句3注意:else 总是与前面最近的if 配对。&&&&C语言程序设计第五章 选择结构程序设计例:输入两个数并判断其大小关系#include &stdio.h& void main() { int x,y; printf(&Enter integer x,y:&); scanf(&%d,%d&,&x,&y); if(x!=y) if(x&y) printf(&X&Y\n&); else printf(&X&Y\n&); else printf(&X==Y\n&); }& &Enter integer x,y:12,23? X&Y Enter integer x,y:12,6? X&Y Enter integer x,y:12,12? X==Y&&&&C语言程序设计第五章 选择结构程序设计?if ~ else 配对原则:缺省{ }时,else总是和它上面离它最近的未配对的if 配对。if(……) if(……) if(……) else…... else…... else…...例 考虑下面程序的输出结果结果:-1 & &main() { int x=100,a=10,b=20; int v1=5,v2=0; if(a&b) if(b!=15) if(!v1) x=1; else if(v2) x=10; x= -1; printf(―%d‖,x); }&&&&C语言程序设计第五章 选择结构程序设计例5.3 有一函数 -1 (x&0) y= 0 (x=0) 1 (x&0) 请考虑: 编一程序,输入一个x值,输出y值。 y=1或y=0时,if语句应 程序3: 程序2: 程序3改: 程序1: 该如何写?&&main( ) { }什么情况下可以不要? { int x,y; scanf(―%d‖,&x); if(x&=0); y= -1; y= -1; if(x&0) if(x&0) if(x!=0) =0) y=0;输入 :-2 else if(x= y=1; if(x&0)y=1; {else y=0; if(x&0) y=1;} 得到:x=-2,y=0 else y=1; else y=0; else y=0; y= -1 printf(―x=%d,y=%d\n‖,x,y); } printf(―x=%d,y=%d\n‖,x,y); }&&&&C语言程序设计第五章 选择结构程序设计?条件运算符if语句中,当表达式为?真?和?假?时,都只执行一个 赋值语句给同一个变量赋值时,可以用条件运算符处理。if (a&b) max=a; else max=b;max=(a&b)? a:b;表达式1 ? 表达式2 : 表达式3非0 =0表达式1条件运算符是 C 语言中唯一的 三目运算符 & &表达式2值表达式3值&&&&C语言程序设计第五章 选择结构程序设计?条件运算符练习 例 求 a+|b| (a==b)?‘Y‘:‘N‘ printf(―a+|b|=%d\n‖,b&0?a+b:a-b); (x%2==1)?1:0 (x&=0)?x:-x (c&=?a‘ && c&=?z‘)?c-‘a‘+‘A‘:c ?条件运算符几点说明:? 条件运算符可嵌套 嵌套:x&0?1:(x&0?-1:0) ? 优先级: 13 ? 结合方向:自右向左 ? 表达式1?表达式2:表达式3 类型可以不同,表达式 值取表达式2和表达式3中较高的类型x??a‘:?b‘ //x=0,表达式值为‘b‘; x≠0,表达式值为‘a‘ max=(a&b)? a:b; //max=a&b? a:b; a&b?a:c&d?c:d ? a&b?a:(c& d?c:d) x&y?1:1.5 //x&y ,值为1.0; x&y ,值为1.5 & &&&&&C语言程序设计第五章 选择结构程序设计例5.4 输入一个字母,大写转小写,然后输出字母#include &stdio.h& void main() { scanf(&%c&,&ch); ch=(ch&=?A‘ && ch&=?Z‘)? (ch+32) : printf(―%c―,ch); }输入:A 输出:a&&&&&&C语言程序设计第五章 选择结构程序设计§5.4 switch语句(多分支选择语句)?一般形式:switch(表达式e) { case C1: ?执行过程 语句1; case C2: switch 语句2; ……. 表达式 case Cn: case 语句n; C1 C2 Cn default [default:语句n+1;] 语句组1 语句组2 …... 语句组n 语句组 }& &需要跳出switch 语句时使用&&&&C语言程序设计第五章 选择结构程序设计?switch几点说明? C1,C2,…Cn是常量表达式,且值必须互不相同 ? 常量表达式起语句标号作用,必须用break跳出 ? case后可包含多个可执行语句,且不必加{ } ? switch可嵌套 ? 多个case可共用一组执行语句&&#include &stdio.h& A?A? 如: …… main() 85~100 85~1 { case ?A‘: 70~84 00 grade =getchar(); 60~69 switch(grade) case ?B‘: &60 { case ?A‘ : printf(―85~100 \n‖); Error case ?B‘ : printf(―70~84 \n‖); case ?C‘: case ?C‘ : printf(―60~69 \n‖); printf(―score&60\n‖); case ?D‘ : printf(―&60 \n‖); default : printf(―Error \n‖); } 缺少 break; } ……..&&&&C语言程序设计第五章 选择结构程序设计例 switch嵌套 #include &stdio.h& void main( ) { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; case 1: b++; } case 2: a++;b++; case 3: a++;b++; } printf(―\na=%d,b=%d‖,a,b); } & & a=2 , b=1&&&&C语言程序设计第五章 选择结构程序设计§5.5 程序举例例5.5 判断某一年是否闰年#include &stdio.h& ② ① ③使用逻辑表达式 #include void main() &stdio.h& { int void main() year, scanf(―Enter year:%d‖,&year); { int year, if(year%4!=0) if(year%4==0) scanf(―Enter year:%d‖,&year); { leap=0; if(year%100==0) if((year%4==0&&year%100!=0)||(year%400==0)) else if(year%100!=0) leap=1; { if(year%400==0) leap=1; leap=1; else leap=0; else leap=0;} { }能省略吗? else if(year%400!=0) else leap=1;} if(leap) printf(―%d is‖,year); leap=0; else leap=0; else printf(―%d is not‖,year); else leap=1; printf(―aif(leap) printf(―%d is‖,year); leap year.\n‖); if(leap) printf(―%d is‖,year); else printf(―%d is not‖,year); } else printf(―%d is not‖,year); printf(―a leap year.\n‖); } printf(―a leap year.\n‖); & & }&&&&C语言程序设计第五章 选择结构程序设计例 根据输入的字母输出相应的字符串#include &stdio.h& void main() { printf(&Enter m or n or h or other:&); c=getchar(); switch(c) { case 'm': printf(& Good morning!\n&); case 'n': printf(& Good night!\n&); case 'h': printf(& Hello!\n&); default : printf(& ????????\n&); } } m? Good morning!&&&&&&C语言程序设计第五章 选择结构程序设计例5.6 求ax2+bx+c=0方程的解#include &stdio.h& #include&math.h& void main() { float a,b,c,d,disc,x1,x2,realpart, scanf(―%f,%f,%f‖,&a,&b,&c); printf(―The equation‖); if(fabs(a)&=1e-6) printf(―is not a quadratie‖); else {disc=b*b-4*a*c; if(fabs(disc)&=1e-6) printf(―has two equal roots:%8.4f\n‖,-b/(2*a)); else if(disc&1e-6) {x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf(―has has distinct real roots:%8.4f and %8.4f\n‖,x1,x2);} else { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(―has complex roots:\n‖); printf(―%8.4f + %8.4fi\n‖,realpart,imagpart); printf(―%8.4f + %8.4fi\n‖,realpart,imagpart); }}}&&&&&&C语言程序设计第五章 选择结构程序设计例5.7 计算运费 #include &stdio.h& void main() { int c,s; float p,w,d,f; scanf(―%f,%f,%d‖,&p,&w,&s); if(s&=3000) c=12; else c=s/250; switch(c) { case 0: d=0; case 1: d=2; case 2: case 3: d=5; case 4: case 5: case 6: & &case 7: d=8; case 8: case 9: case 10: case 11: d=10; case 12: d=15; } f=p*w*s*(1-d/100.0); printf(―freight=%15.4f‖,f); }&&&&C语言程序设计第五章 选择结构程序设计§本章要求?关系运算符、逻辑运算符,运算符的优先级。 ?if语句、switch语句的概念及其应用。§课后作业?P111~112页习题:?5.2(思考) ?5.3,5.5,5.6,5.8,5.9(答案写在作业本上) ?参考实验4分别用if和switch实现5.5,5.6(上机 验证)?上机:?本章例题和作业程序的调试 ?实验教材:实验4(做好上机准备)?预习第六章& &&&&&C语言程序设计第五章 选择结构程序设计§ 补充习题? 编程实现:输入整数a和b,若a2+b2大于100,则 输出a2+b2百位以上的数字,否则输出a+b之和。 ? 编程实现:输入一个整数,判断它能否被3、5、 7整除,并输出以下信息之一: 1. 能同时被3、5、7整除; 2. 能被其中两数(要指出哪两个)整除; 3. 能被其中一个数(要指出哪一个)个整除; 4. 不能被3、5、7任一个整除。&&&&&&C语言程序设计第六章 循环控制第6章 循环控制概述 goto语句以及用goto语句构成循环 while语句do-while语句 for语句循环的嵌套 几种循环的比较break语句和continue语句 程序举例&&&&C语言程序设计第六章 循环控制§6.1 概述程序中凡涉及求阶乘、累加、排序等问题都要 用循环解决,因为程序中的某一程序段要重复执行 若干次。 C语言实现循环的语句: ?goto 和if组合 ?while语句 ?do while语句 重点 ?for语句&&&&&&C语言程序设计第六章 循环控制§6.2 goto语句以及用goto语句构成循环?作用:无条件地转移到语句标号指向的语句去执行。 ?一般格式: goto 语句标号; ….….. 标号:语句; ?说明:? 语句标号由字母、数字和下划线组成,定名规则同变 量名,不能用数字开头。 ( √ )goto 100;(×)&&? 与循环语句配合使用时,可从循环体内跳到循环体外, 而不能从循环体外跳到循环体内。 ? goto语句转移的方向可前可后。 ? 与if语句配合使用时可构成循环。 ? goto 语句违背结构化程序设计的原则,因此应限制 使用。&&&&C语言程序设计第六章 循环控制例6.1 用if 和goto语句构成循环,求循环初值循环变量增值&&#include &stdio.h& void main( ) { int i,sum=0; i=1; loop: if(i&=100) { sum+=i; i++; } printf(&%d&,sum); }循环终值循环条件循环体 sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 …… sum=0&&&&C语言程序设计第六章 循环控制例 从键盘输入一组数据,以0结束输入,求数据和。#include &stdio.h& void main() { int number,sum=0; read_loop: scanf(&%d&,&number); if(!number) goto print_ sum+= goto read_ print_sum: printf(&The total sum is %d\n&,sum); }& &&&&&C语言程序设计第六章 循环控制§6.3 while语句while语句实现?当型?循环结构。 没有 “;” ?一般形式: while(表达式) 循环体语句;?功能:先判断表达式,若为真则执行循环体, 再判断表达式,重复上述过程,直到表达式为 假时退出循环。 i=1;sum=0 ?求 i=1;sum=0i≤100真 假当i≤100 sum=sum+i i=i+1sum=sum+i i=i+1&&&&&&C语言程序设计第六章 循环控制例6.2 用while语句构成循环,求循环初值循环变量增值#include &stdio.h& void main( ) { int i,sum=0; i=1; while(i&=100) { sum=sum+i; i++; } printf(&%d&,sum); }循环终值循环条件 循环体&&&&&&C语言程序设计

我要回帖

更多关于 内存占用的数据形式 的文章

 

随机推荐