C语言程序设计-S2-3-1_第1页
C语言程序设计-S2-3-1_第2页
C语言程序设计-S2-3-1_第3页
C语言程序设计-S2-3-1_第4页
C语言程序设计-S2-3-1_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章

算法2.1算法基本概念程序的构成:数据对数据的处理。计算机科学家沃思提出的公式:程序=数据结构+算法对数据的描述:数据的类型和数据的组织形式对操作的描述:操作的步骤

程序=数据结构+算法+程序设计方法

+语言工具和环境考虑程序设计方法和使用的语言及开发环境,表达为:简单算法举例

[例2.1]求1+2+3+∙∙∙+100第一种方法:

1+2,再加3,一直加到100,得到结果5050第二种方法:(1+99)+(2+98)+∙∙∙+(49+51)+50+100=49×100+50+100=5050第三种方法:2.2算法的特性

有穷性确定性有零个或多个输入有一个或多个输出有效性2.3算法的表示方法自然语言流程图

伪代码

计算机语言

第三章

数据类型、运算符与表达式3.1C语言的数据类型数据 程序加工处理的对象及其结果数据类型

数据在计算机内部的存储形式(占用的内存单元数量、编码方式、取值范围等)基本类型字符型char整型int浮点型单精度float双精度double指针类型构造类型数组结构struct联合union枚举enum空类型第三章C的数据类型C的数据类型在程序中用到的所有数据都必须指定其数据类型。本章主要介绍基本的数据类型,而链表、树、栈等复杂数据类型放到以后去仔细研究。3.2常量和变量3.2.1标识符一个字符序列。在C中,被用来标记常量、变量、数据类型、函数及程序的名字。构成标识符,必须符合下列语法规则:以字母(大小写均可)或下划线(_)中任一字符打头;在第一个字母之后,可以是任意的字母,下划线和数字组成的字符序列,可以是空串;标识符合法标识符:sum,average,class,day,month,student_name,_above,lotus_1_2_3,basic不合法的标识符:M.D.Jhon,$123,#33,3D64,a>b标识符的说明C中,大小写字母有不同含义 例如main和MAIN就不同标识符的长度在C语言中未统一规定,随不同开发系统而变标识符允许长度8允许长度32student_namestudent_number相同标识符不同标识符在C中,标识符可以分为三类:关键字,说明某一固定含义的字,不允许赋予其它含义(都是小写字母,共32个)特定字,具有特定含义的字,有define,undef,include,ifdef,ifndef,endif及line,主要用在预处理程序中一般标识符,用户根据标识符的构成规则定义的标识符标识符的说明3.2.2

常量(Constant)与符号常量常量:在程序运行过程中,其值不能被改变的量符号常量:代表常量的标识符(符号)[例3.1]#definePRICE30main(){

intnum,total;

num=10;

total=num*PRICE;

printf("total=%d",total);}用#define命令定义PRICE代表常量30,在主函数中出现的PRICE的值不变,恒为30,这里PRICE即为符号常量。变量:在程序运行过程中,其值可以被改变的量。在源程序中,变量用标识符表示变量在内存中占据一定的存储单元。变量名的类型表明存储单元的数量(例如整型变量int占2字节存储单元。单精度实数float占4字节)变量名表示存储单元的值可以用运算符&取得存储单元的地址3.2.3变量(Variable)程序设计中变量的命名:必须满足C语言的语法规定。(以字母、下划线开始,由....构成)。应该“见名知意”。C语言对变量的要求:“先定义、后使用”,因为:编译程序不能翻译未定义变量。编译程序在编译时根据变量类型确定存储单元的数量。编译程序在编译时根据变量类型进行语法检查。3.3整型数据3.3.1整型常量C语言中数值常量的表达方式:表达方式意义十进制值123十进制1230123(数字字符0开头)八进制830x123(0x开头)十六进制291八进制整数:1×82+2×81+3×80=83十六进制整数:1×162+2×161+3×160=2913.3.2整型变量整型数据在内存中的存放形式:以二进制形式存放微机上,一个整型变量占2个子节,即16位inti; /*定义i为整型变量*/i=10; /*给变量i赋以整数10*/0000000010二进制:1×23+0×22+

1×21+0×20=1000001010补码

事实上,数据是以补码形式存放的正数的补码和其原码相同负数的补码:将该数的绝对值按位取反,再加1

例如求-10的补码10的原码0000000001010000取反1111111110101111加11111111101101111补码符号位正数0负数1有符号无符号基本型(简称整型)intunsignedint短整型short或shortintunsignedshort长整型long或longintunsignedlong整型变量的分类基本类型符int整型变量的分类01111111signedint1111111111111111unsignedint符号位数据位11111111C语言标准没有规定整型变量在计算机内存中所占的字节数,它与具体的机器和操作系统有关:IBMPC所占位数数的范围int16-32768~+32767short16-32768~+32767long32-2147483648~+2147483647unsignedint160~65535unsignedshort160~65535unsignedlong320~4294967295整型变量的定义inta,b;

/*指定变量a、b为整型*/unsignedshortc,d;

/*指定变量c、d为无符号短整型*/longe,f;

/*指定变量e、f为长整型*/程序中在函数的开头部分定义变量。

整型变量的定义[例3.2]

main()

{

inta,b,c,d;

unsignedu;

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf("a+u=%d,b+u=%d\n",c,d);

}[例3.2]

main()

{

inta,b,c,d;/*指定变量a、b、c、d为整型*/

unsignedu;/*指定变量u为无符号整型*/

a=12;b=-24;u=10;

c=a+u;d=b+u;

printf("a+u=%d,b+u=%d\n",c,d);

}

程序运行显示:a+u=22,b+u=-14整型常量的类型整型常量的值在-32768~+32767范围内,编译器认为是int类型整型常量的值超过上述范围,而在-2147483648~+2147483647范围内,编译器认为是long类型在整型常量的值后面加字母L(大写L或小写l),则告诉编译器,把该整型常量作为long类型处理。例:123L、0L常量无unsigned型整型数据的溢出超过一个int型变量的最大允许值,称为溢出,表现形式是数据错误。例如32767+1应得到32768却得到-32768327671111111011111111-3276800000001000000003.4实型数据3.4.1实型常量实数(real)又称为浮点数(float),有两种表达方式:0.123、.123、123.0、123.、0.0(必须有小数点)123e3或123E3、123E-23.4.2实型变量实型数据在内存中的存放形式:以二进制形式存放以指数形式存储微机上,一个整型变量占4个子节,即32位符号+.1234565小数部分指数+.123456×105=12345.6实型变量的分类类型位数有效数字数值范围float326~710-37~1038double6415~1610-307~10308longdouble8018~1910-4931~104932实型变量的定义floatx,y;

/*指定x、y为单精度实型变量*/doublez;

/*指定z为双精度实型变量*/

实型常量不分float和double。实型变量的舍入误差有限的有效数字位数必然带来误差. main()

{

floata,b;/*指定变量a、b为实型*/

a=123456.789e5;

b=a+20;

printf(“%f”,b);

}程序运行显示:12345678868.0000003.5字符型数据3.5.1字符型常量用单引号(撇号)括起来的一个字符。如:'a'、'x'、'D'、'?'、'$'。以“\”开头的字符序列,称为“转义序列”,“\”使其后面的字符变为另外的意义。转义序列主要用来控制打印机和屏幕输出。例:printf("\nsumis%d\n\n",sum);3.5.2字符型变量字符型变量用来存放字符型常量例如:

charc1,c2; /*定义c1、c2为字符变量*/ c1='a';c2='b';

字符型变量只能存放一个字符字符变量在内存中占一字节字符型数据在内存中的存放形式

字符在内存中以二进制存放

将字符对应的ASCII码存放到内存里字符ASCII'A'0x40(64)'B'0x41(65)'a'0x61(97)‘b'0x62(98)'0'0x30(48)'1'0x31(49)字符型数据和整数[例3.3]main(){charc1,c2;

c1=97;c2=98;

printf("%c%c",c1,c2);}

字符以ASCII码存储,其存储方式与整数类似。从而,C语言允许字符和整数之间进行运算。[例3.4]main(){charc1,c2;

c1='a';c2='b';

c1=c1-32;c2=c2-32;

printf("%c%c",c1,c2);}

程序运行显示AB字符串常量字符常量:单引号括起来的一个字符。字符串常量:双引号括起来的字符序列(0~N个字符)。 如:"Howdoyoudo.","CHINA","a","$123.45"字符串常量字符串常量在内存中的存放:每一个字符均以其ASCII码存放,且最后添加一个“空字符”(二进制00000000,记为NULL或\0。字符‘0’在内存中存0x30即00100000)。例:字符串常量“CHINA”存放在内存中的情况是:(6字节存储器,不是5字节) CHINA\0C语言基本数据类型有四种:字符型整型单精度浮点型双精度浮点型charintfloatdouble类型说明符基本数据类型小结C语言有四种类型修饰符:短长有符号无符号shortlongsignedunsigned类型修饰符类型修饰符可以与类型说明符配合在一起使用也可单独使用C语言采用类型说明符说明不同的数据类型

类型占用内存单元取值范围数据存储格式

char1(8位)0~255ASCII码

int2(16位)-32768~32767二进制补码

float4(32位)±10-37~±10387位有效数字

double8(64位)±10-307~±1030815位有效数字保存字符对应的ASCII码-2151000,0000,0000,0000215-10111,1111,1111,1111基本数据类型的数据表示与取值范围3.6各类数据混合运算整型、实型(包括单、双精度)、字符型数据可以混合运算。例、10+'a'+1.5-8765.1234*'b'混合运算时,先转换成同一种类型,然后进行运算。转换规则如下:例:inti;floatf;doubled;longe;10+'a'+i*f-d/e10+'a'+i*f-d/e上式的运算次序是:①进行10+'a'运算。先将'a'转换为整数97,运算结果为整数107。②进行i*f运算。先将i和f均转换为double类型(实运算过程总是使用double类型,仅在把结果存入存储器时,才可能使用float类型),运算结果是double类型。10+'a'+i*f-d/e③整数107与i*f的积相加。先将整数107转换为double类型(107.0),运算结果是double类型。④进行d/e运算。先将longe转换为double类型,运算结果是double类型。⑤进行③-④运算,结果为double类型。3.7算术运算符和算术表达式C的运算符算术运算符+、-、*、/、%关系运算符>、<、==、>=、<=、!=逻辑运算符!、&&、||位运算符<<、>>、~、|、∧、&赋值运算符=条件运算符?、:逗号运算符,指针运算符*、&求字节数运算符sizeof强制类型转换运算符(类型)分量运算符.(点)、→下标运算符[]其他函数调用运算符()3.7.1算术运算符基本的算术运算符+加法运算符,如3+5

正值运算符,如+3-减法运算符,如5-2负值运算符,如-3*

乘法运算符,如3*5/

除法运算符,如5/3%模运算符(或称求余运算符),如7%43.7.2算术表达式算术表达式:用算术运算符和括号将运算对象(如常量、变量、函数等)连接起来、符合C语法规则的式子。如:

a*b/c-1.5+'a'运算符的优先级与结合性运算符的优先级:先乘除、后加减;先括号。运算符的结合性:运算对象两侧的运算符优先级相同时,运算符的结合方向(左、右)。左结合性:结合方向为从左至右(先左后右,简称左结合)。算术运算符为左结合。 例:a-b+c

由于算术运算符为左结合,故先执行a-b,再执行加c的运算。右结合性:结合方向为从右至左(先右后左,简称右结合)。赋值运算符=为右结合。例:a=b+c

由于赋值运算符=为右结合,先执行右边的b+c,再赋值给a。3.7.3强制类型转换运算符两侧的数据类型不同时,先自动进行类型转换,再运算。程序员可以强制进行某种转换。强制类型转换的一般形式是:

(类型名)(表达式)例如(double)a;/*将a转换为double类型*/(int)(x+y);/*将x+y的值转换为int类型*/(float)(5%3);/*将5%3的值转换为float类型*/注意:(int)(x+y);/*将x+y的值转换为int类型*/(int)x+y; /*将x的值转换为int类型,再与y相加*/(int)(x);(int)x;(表达式仅为一个变量时,括号可以省略)

说明:强制类型转换时,得到一个所需类型的中间变量,原来变量的类型不发生变化。例、floatx; (int)x;

得到整型变量x,而x

的类型不发生变化。3.7.4自增、自减运算符++

自增运算符,使变量的值加1--

自减运算符,使变量的值减1inti;++i;i++; 在使用i之前使i加1在使用i之后使i加1自增、自减运算符inti,j;i=3;j=++i; /*先使i加1,再赋给j执行后:j=4,i=4*/j=i++; /*先把i赋给j,再使i加1执行后:j=3,i=4*/printf(“%d”,++i); /*先使i加1,再输出执行后输出4*/printf(“%d”,i++); /*先输出,再使i加1执行后输出3*/

注意:++和--只能用于变量,不能用于常量和表达式。例、以下是不合法的5++;(a+b)++;#defineONE1;ONE++;++和--的结合方向为“右结合”。例:-i++负值运算符-和自增运算符优先级相同(-i)++-(i++)3.7.5有关表达式使用中的问题说明在表达式中使用++或--,容易出错。i=3;k=(i++)+(i++)+(i++)k值等于9。i++:先使用i,再加1。

执行后:k=3+3+3=9。i=6。k=(i++)+(i++)+(i++)k值等于12。每求出一个括号后,i加1连续3次使i加1后,i的值等于6

出现多个运算符时,编译器在处理时尽可能多的(从左到右)将若干个字符组合成一个运算符。例、i+++j;应理解成(i++)+j而不是i+(++j)

调用函数时,实际参数的处理顺序是从右到左例:i=3;printf("%d,%d",i,i++);先右:i++,先使用i(3),再使i加1。后左:i(现在值为4)。因此,输出结果:4,33.8赋值运算符和赋值表达式3.8.1赋值运算符:

=作用:将一个表达式的值赋给变量。例、a=3; /*常数3赋给变量a。常数是特殊的表达式*/a=b+c+1;3.8.2赋值时的类型转换当赋值运算符两侧的类型不同时,在赋值前进行类型转换。float、double赋给int:舍弃小数(截断)。int赋给float、double:值不变,变为浮点数形式存储double赋给float:截取前7位有效数字float赋给double:有效数字扩展到16位char(1字节)赋给int(2字节)(1)(unsignedchar)int:赋给int的低8位,int的高8位补0。

(2)(signedchar)int:赋给int的低8位,若signedchar的最高位是0,则int的高8位全为0;若signedchar的最高位是1,则int的高8位全为1。(称为“符号扩展”)

intlong赋给int(符号扩展)unsignedint赋给int非unsigned数据赋给位数相同的unsigned数据65535-165535-13.8.3复合的赋值运算符C共有10种复合运算符:+=,-=,*=,/+=,%+=,<<=,>>=,&=,^=,|=采用目的:简化程序,提高编译效率复合赋值运算符例子语句等价语句+=a+=3;a=a+3;*=x*=y+8;x=x*(y+8)%=x%=3;x=x%3;3.8.4赋值表达式由赋值运算符将变量和表达式连接起来的式子。一般形式:

<变量><赋值运算符><表达式>例: 赋值表达式:a=5

赋值语句:a=5;

赋值表达式赋值表达式中的“表达式”也可以是赋值表达式。例:a=(b=5)/*b的值等于5,表达式b=5的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论