- 2.78 MB
- 2022-08-11 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
欢迎学习“C语言程序设计A”(秦友用)联系电话:15983649195QQ:812624014\n参考教材谭浩强《C程序设计》清华大学出版社\n预备知识计算机的组成与工作原理高级语言上机过程\nC语言结构化程序设计结构化程序设计方法C语言的结构特点C数据类型及其运算C语言的基本语句函数定义及调用指针及其应用编译预处理集成化开发环境的使用程序调试\n预备知识\n本讲主要内容计算机组成与工作原理高级语言的上机过程\n计算机组成与工作原理指令系统计算机组成—硬件系统程序的自动执行\n指令系统是计算机软件和硬件的界面指令的功能操作类指令转移类指令指令的格式操作码OP地址码AD计算机组成与工作原理—指令系统\n计算机组成与工作原理—硬件系统控制器外存储器内存储器运算器输入设备输出设备CPU主机数据、程序输出数据地址指令数据输入数据、程序\n计算机组成与工作原理—程序的执行过程启动地址→PC取指PC→地址寄存器指令→IR指令译码?程序结束形成转移地址→PC完成本条指令操作PC+1→PC停机指令转移指令非转移指令\n高级语言上机过程编辑源程序编译:产生目标程序(.OBJ)连接:产生可执行程序(.EXE)运行调试\nC语言结构化程序设计C语言的程序格式及结构特点数据类型算术运算符与算术表达式赋值运算符和赋值表达式逗号运算和逗号表达式逻辑运算与逻辑表达式赋值语句数据输入、输出简单程序举例\nC语言的程序格式实例main(){intx,y,z;x=2;y=3;z=x+y;printf("x+y=%d\n",z);}程序格式关键字及编译预处理命令用小写字母书写。由语句组成。以分号(;)作为语句的结束符,(不是分隔符)。没有行的概念,可任意书写。用大括号对{}表示程序的层次范围,一个完整的程序模块要用一对{}包括。不能在变量名、函数名、关键字中插入空格和空行。\nC语言的结构特点结构特点只有一个名字为main的函数,称主函数。除main函数外,其它函数都是在执行main函数时被调用执行的。函数的一般形式函数名(参数)参数说明;{数据说明部分;执行语句部分;}\n数据类型常量与变量整型数据实型数据字符型数据给变量赋初值不同类型的混合运算Page15\n数据类型——常量与变量#definePRICE30main(){intnum,total;floatv,r,h;num=10;total=num*PRICE;printf(total=%d,tatal);r=2.5;h=3.2;v=3.14159*r*r*h;printf(v=%f\n,v);}常量变量名:以字母或下划线开头,由数字、字母、下划线构成。最多31个字符,多余不识别.一般小写。变量变量先定义后使用符号常量名字常用大写Page16\n#definePRICE30main(){intnum,total;floatv,r,h;num=10;total=num*PRICE;printf(total=%d,tatal);r=2.5;h=3.2;v=3.14159*r*r*h;printf(v=%f\n,v);}数据类型——整型数据整型常量根据值的大小自动确定类型。无unsigined型,但非负数可对unsigned变量赋值。十进制:123,-456八进制:0开头十六进制:0x开头int、unsignedint2字节shortunsignedshort2字节longunsignedlong4字节整型变量整型变量定义Page17\n数据类型——整型数据的定义及取值范围类型定义符位数数值范围I/O格式符基本int16位-32768~32767%d短整short16同上%hd长整long32-231~(231-1)%ld无符号unsigned[int]160~65535%uunsignedshort16同上%huunsignedlong320~(232-1)%lu①C/C++规定int字长和机器字长相同;②操作系统字长和机器字长未必一致;③编译器根据操作系统字长来定义int字长;\n数据类型——实型数据#definePRICE30main(){intnum,total;floatv,r,h;num=10;total=num*PRICE;printf(total=%d,tatal);r=2.5;h=3.2;v=3.14159*r*r*h;printf(v=%f\n,v);}十进制形式指数形式:123E3(123×103)不区分单、双精度,赋值时截取有效长度。如:floata;a=111111.111;实型常量7位有效数字float4字节3.4×10±387位有效数字double8字节1.7×10±30815位有效数字实型变量Page19\n数据类型——字符型数据(一)字符常量单引号括起来的一个字符,如:'a','D','?','$'字符变量用来存放字符常量例:charc1,c2;c1='a';c2='A';字符数据在内存中的存储形式以ASCII码存储,占1字节,用7个二进制位Page20\n字符数据的使用方法字符数据和整型数据之间可以通用,可以按字符形式输出,也可以按整型输出。CHINA\0a\0aPage21数据类型——字符型数据(二)例1例3例2字符数据与整型数据可以互相赋值。字符串常量例:"CHINA""a"'a'所以:charc;c="a";\n例1main(){charc1,c2;c1=97;c2=98;printf("%c%c\n",c1,c2);}运行结果:ab\n例2运行结果:9798main(){charc1,c2;c1=97;c2=98;printf("%d%d\n",c1,c2);}\n例3运行结果:a,97a,97main(){inti;charc;i='a';c=97;printf("%c,%d\n",c,c);printf("%c,%d\n",i,i);}\n数据类型——变量赋初值例:inta=3;floatf=3.56;charc='a';inta,b,c=5;Page25\n数据类型—不同类型数据混合运算时的类型转换数据参加运算前必须进行下列转换:char,short→int,float→double混合运算时,数据类型由低级→高级:intunsignedlongdouble低高例:inti;floatf;doubled;longe;运算次序:10+'a'+i*f-d/e①10+97②转换为double④转换为double再相乘再相除107→double③⑤结果为doublePage26\n算术运算符与算术表达式C运算符简介基本算术运算符+-*/%(取余)(若整数相除,结果取整)优先级与结合性先乘除,后加减,同级自左至右强制类型转换例:(double)a,(int)(x+y),(float)(5%3)变量本身未变化++,--注意:P58Page27例4例5\n例4运行结果:x=3.600000,i=3main(){floatx;inti;x=3.6;i=(int)x;printf("x=%f,i=%d\n",x,i);}\n例5main(){inti,j,k1,k2,k3,k4,k5;i=3;k1=(i++)+(i++)+(i++);printf("k1=%d,%d\n",k1,i);i=3;k2=(++i)+(++i)+(++i);printf("k2=%d,%d\n",k2,i);i=3;j=4;\n例5(续)k3=i+++j;printf("k3=%d\n",k3);i=3;j=4;k4=(i++)+j;printf("k4=%d\n",k4);i=3;j=4;k5=i+(++j);printf("k5=%d\n",k5);i=3;printf("%d,%d\n",i,i++);}运行结果:k1=12,6k2=15,6k3=7k4=7k5=84,3\n赋值运算符和赋值表达式简单的赋值运算符“=”“=”两侧类型不一致时,要进行类型转换:整←实:截掉小数部分实(单、双精度)←整:数值不变,存为浮点整←char:整型低8位←char整型高8位←0或符号位扩展(因机器而不同)longint←int:符号位扩展int←longint:int←longint低16位longint←unsignedint:高位补0整型←(字节数相同的)unsigned整型:原样送入。若超过整型表示范围,会出错。unsigned←(字节数相同的)非unsigned整型:原样送入,符号位也作为数值Page31例6\n例6includemain(){unsigneda;intb=-1;a=b;printf("%u\n",a);}运行结果6553511111111111111111111111111111111ba符号位\n赋值运算符和赋值表达式复合的赋值运算符C语言中有10种复合运算符:+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=(位运算,以后讲)例:a+=3等价于a=a+3x*=y+8等价于x=x*(y+8)Page33\n赋值运算符和赋值表达式赋值表达式例:a=5表达式值为5a=b=c=5表达式值为5,a,b,c均为5a=5+(c=6)表达式值为11,a为11,c为6a=(b=4)+(c=6)表达式值为10,a为10,b为4,c为6a=(b=10)/(c=2)表达式值为5,a为5,b为10,c为2a+=a-=a*a相当于:a=a+(a=a-a*a)Page34\n逗号运算和逗号表达式格式:表达式1,表达式2求解顺序及结果:先求解1,再求解2,最终结果为表达式2的值例a=3*5,a*4最终结果为60Page35\n逻辑运算与逻辑表达式关系运算与关系表达式关系运算是比较简单的一种逻辑运算,其优先次序为:<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)优先级相同(高)优先级相同(低)关系表达式其值只能为真或假,在C语言中用整数1和0表示。逻辑运算府与逻辑表达式逻辑运算符:!(非)&&(与)||(或)优先次序:高→低逻辑表达式例如:(a>b)&&(x>y)\n赋值语句格式:赋值表达式;赋值语句与赋值表达式的区别:赋值表达式可以包含在其它表达式中,而赋值语句不可。例:if((a=b)>0)t=a;不可写为:if((a=b;)>0)t=a;Page37\n数据输入、输出C语言本身没有I/O语句,所有I/O都由函数来实现。C语言的标准库函数由编译系统提供的一系列子程序调用形式:函数名(参数表)Page38\n数据输入、输出——常用字符I/O函数putchar(参数)字符输出功能:把一字节代码写入标准输出文件(显示器)参数:int型返回值:正常时为写入的代码值,出错时为EOF(即-1),int型。Page39例7例8getchar()字符输入功能:从标准输入文件(键盘)读入一字节代码参数:无返回值:正常时为读到的代码值,出错时或遇结束(Ctrl+z)为EOF(即-1),int型。\n运行结果:BOY例7#includemain(){chara,b,c;a='B';b='O';c='Y';putchar(a);putchar(b);putchar(c);putchar('\n');}\n例8运行结果输入:d输出:d#includemain(){charc;c=getchar();putchar(c);putchar('\n');}\n数据输入、输出——常用格式I/O函数printf格式输出printf(格式控制,输出表)格式控制字符看书P36-41,上机实践scanf格式输入scanf(格式控制,地址表)Page42例9\n例9运行结果:输入:123456输出:123456main(){inta,b,c;scanf("%d%d%d",&a,&b,&c);printf("%d,%d,%d\n",a,b,c);}\nC语言程序的基本控制结构结构化程序设计if语句switch语句while语句do-while语句for语句break和continue语句\n结构化程序设计—结构化程序设计技术与方法模块化结构设计方法在程序设计中,将一个复杂的算法(或程序)分解成若干个相对独立、功能单一的模块,利用这些模块即可适当地组合成所需要的全局算法(或)程序。自顶向下结构设计方法从总体出发,居高临下,逐层分解和逐步细化。逐步求精结构设计方法实质上也是一种自顶向下的设计方法。首先抛开细节设计出抽象算法,然后把抽象数据和操作逐步具体化,直到可以由计算机具体实现为止。\nif(表达式)语句例:if(x>y)printf("%d",x);if(表达式)语句1else语句2例:if(x>y)printf("%d",x);elseprintf("%d",y);if(表达式1)语句1elseif(表达式2)语句2elseif(表达式2)语句3…else语句nif语句——三种形式\n一般形式if()if()语句1else语句2elseif()语句3else语句4注意语句1、2、3、4可以是复合语句每层的if与else配对,或用{}来确定层次关系if语句——嵌套\n条件运算符一般形式:表达式1?表达式2:表达式3执行顺序:先求解表达式1,若值为非0,则求解表达式2,表达式2的值为最终结果;若值为0,则求解表达式3,表达式3的值为最终结果。注意:条件运算符优级高于赋值运算符,低于关系运算符和算术运算符;结合方向为自右至左;只能取代简单的if语句:内嵌语句为赋值语句,且两个分支都给同一个变量赋值;表达式1、2、3的类型可以不同,条件表达式的最终类型为2和3中较高的类型。\n一般形式switch(表达式){case常量表达式1:语句1case常量表达式2:语句2┆case常量表达式n:语句ndefault:语句n+1}switch语句执行顺序以case中的常量表达式值为入口标号,由此开始顺序执行。因此,每个case分支最后应该加break语句。每个常量表达式的值不能相同,次序不影响执行结果。可以是多个语句,但不必用{}。可以是整型、字符型、枚举型\n使用switch语句应注意的问题case分支可包含多个语句,且不用{}表达式、判断值都是int型或char型若干分支执行内容相同可共用一组语句\nwhile语句形式while(表达式)语句可以是复合语句,其中必须含有改变条件表达式值的语句。执行顺序先判断表达式的值,非0再执行语句。——实现“当型”循环。\n类似于直到型循环,但不同。do-while语句一般形式do语句while(表达式)可以是复合语句,其中必须含有改变条件表达式值的语句。执行顺序先执行语句,后判断条件。表达式非0时,继续执行循环体。while语句与do-while语句的比较While语句执行顺序先判断表达式的值,非0再执行语句——实现“当型”循环。直到型循环是当条件表达式为“真”时,停止循环。\nfor语句形式for(表达式1;表达式2;表达式3)语句循环前先求解非0时执行循环体每次执行完循环体后求解流程图P118图6-6注意事项P119-P120\nbreak和continue语句break语句使程序从循环体和switch语句内跳出,继续执行逻辑上的下一条语句。不能用在别处。continue语句结束本次循环,接着进行是否执行下一次循环的判断。