第3章最简单的C程序设计——顺序程序设计.ppt

上传人:sccc 文档编号:5637053 上传时间:2023-08-04 格式:PPT 页数:95 大小:898.51KB
返回 下载 相关 举报
第3章最简单的C程序设计——顺序程序设计.ppt_第1页
第1页 / 共95页
第3章最简单的C程序设计——顺序程序设计.ppt_第2页
第2页 / 共95页
第3章最简单的C程序设计——顺序程序设计.ppt_第3页
第3页 / 共95页
第3章最简单的C程序设计——顺序程序设计.ppt_第4页
第4页 / 共95页
第3章最简单的C程序设计——顺序程序设计.ppt_第5页
第5页 / 共95页
点击查看更多>>
资源描述

《第3章最简单的C程序设计——顺序程序设计.ppt》由会员分享,可在线阅读,更多相关《第3章最简单的C程序设计——顺序程序设计.ppt(95页珍藏版)》请在三一办公上搜索。

1、C 程序设计,数据类型,运算符和表达式,数据类型、常量,变量的定义运算符的种类、优先级和结合方向表达式的类型和求值简单的C程序设计及基本输入输出,C的数据类型(Data Types),基本类型整型、字符型、浮点型(实型)、枚举类型构造类型数组类型、结构体类型、共用体类型指针类型空类型,数据类型、常量和变量,一个程序的算法设计必须考虑数据结构数据结构是各种类型数据的组织形式C语言的数据有常量和变量之分常量和变量都分别属于某一数据类型程序中用到的所有数据都具有一定类型,常量(Constants),常量程序运行过程中,其值不能被改变的量例如:12、-6.7、a符号常量(Symbolic Consta

2、nts)用一个标识符代表的常量,相当于用标识符把一个常量 替换下来习惯上符号常量名用大写字母优点:含义清楚直观;修改时一改全改,#define PRICE 30#define NUM 12int main().total=NUM*PRICE;total2=84*PRICE2;printf(total=%d,total);.,常量示例,不会被替换,=total=12*30;,常量,符号常量,变量(Variables),其值可以改变的量称为变量变量有一个名字,即标识符变量在存储器中占据一定的存储单元变量占据存储空间的大小由其类型决定程序中的变量参与计算时,从这个变量所占据的存储单元里取出存储的数据

3、的值变量要“先定义,后使用”,标识符(Identifier),标识符变量名、符号常量名、函数名、类型名标识符命名规范由字母、数字、下划线(Underscore,_)组成第一个字符必须为字母或下划线C语言标识符是大小写敏感的标识符的名称一般应具有一定的含义不要与C语言关键字(Keywords)重复一般不要使用以下划线开头的标识符,ANSI C共有32个关键字,标识符示例,正确的标识符student、num1、_SUM、_1_2_3MyName、myname、my_name错误的标识符room3-1包含了其他字符(减号)2men以数字开头long与关键字重复Mr.Zhu包含了其他字符(小数点),变

4、量的存储,变量名,存储单元(地址),变量值,整型(Integer),整型常量的表示方法整型变量整型数据在内存中的存放形式整型变量的类型整型变量的定义整型数据的溢出整型常量的类型,整型常量的表示方法,十进制(Decimal)例如,123、-456、0八进制(Octal)以0开头,不得含有8或9例如,0123、-0456错例,0138、-0912十六进制(Hexadecimal)以0 x或0X开头,用af或AF表示1015例如,0 x123、-0X45、0 x3AB、-0 xabc,整型数据在内存中的存放方式,二进制形式举例,int i=50;/*int类型占2字节*/补码(Complement)

5、正数:与原码一致,首位为0负数:绝对值取反加一,首位为1零:各位全为0,补码举例,举例int i=-50;/*int类型占2字节*/,50的原码,-50的补码,整型变量的分类,按占用存储空间的大小划分基本整型int短整型short int长整型long int按有无符号划分有符号signed无符号unsigned上述两种分类方式组合,可得到6种类型,整数的长度,整数的类型与长度 教材p43short:占2字节(16bit)long:占4字节(32bit)int:占2或4字节(16或32bit)2Bytes=short int long=4Bytes若需要精确的长度,可选用short或long举

6、例BC3.1:int长度为2Bytesgcc:int长度为4Bytes数据长度由编译器指定,而编译器的设计受处理器的限制。,有符号数与无符号数,有符号数二进制补码表示,首位为符号位指定signed或缺省情况,即为有符号数无符号数没有符号位,只能表示非负数无符号数类型必须指定为unsigned若把负数赋值给无符号数,则把该负数的补码当作无符号数进行处理,有符号数与无符号数举例,int main()int i;unsigned j;i=j=-50;i=i/2;/*-25*/j=j/2;/*32743*/*除以2相当于右移1位*/,整型数据的取值范围,整型变量的定义(Definition),定义形式

7、int a,b;unsigned c;long d;unsigned short e;变量的定义一般放在一个函数开头的声明部分,关于变量定义的具体内容在以后相关章节里详细介绍,整型变量的定义与使用举例,int main()int a;/*定义有符号基本整型变量a*/unsigned b;/*定义无符号基本整型变量b*/long c;/*定义有符号长整型变量c*/a=-23;/*a的值为-23*/b=45;/*b的值为45*/c=a+b;/*c的值为22*/,整型数据的溢出(Overflow),溢出数据超出了变量能够存储的范围,造成数据丢失或数值改变等举例(假定int类型数据用16位表示):,i

8、nt main()int a=32767;a+;/*32768?*/,32767的补码,-32768的补码,整型常量的类型,常量的类型后缀(Suffix)l、L表示常量是一个长整型u、U表示常量是一个无符号整型数两种后缀可以一起使用举例123l长整型常数123456U无符号整型常数456789ul无符号长整型常数789101Lu无符号长整型常数101,整型常量使用中的类型问题,对整型变量赋值常量的值不要超过变量的取值范围直接使用常量带有l、L、u、U等后缀的整型常量一般用于函数调用不带有后缀的整型常量的类型,是根据其数值大小所处的范围来确定的,浮点型(Floating Point),浮点型常量

9、的表示方法浮点型变量浮点型数据在内存中的存放形式浮点型变量的类型浮点型数据的舍入误差浮点型常数的类型,浮点型常量的表示方法,十进制小数形式由符号、数字和小数点(必须)组成整数和小数部分都可省略,但不能同时省略举例,12.3、-.123、123.、0.、.0指数形式由整数(或小数)、e(或E)、整数顺序组成e或E之前必须有数字,之后必须是整数举例,123.4e-5表示123.410-5错例,e1、12e、1.2e3.4、.e5、e,规范化指数形式,规范化指数形式类似于“科学计数法”e或E之前的小数中,小数点前面有且仅有一个非零数字举例,123.456规范化形式,1.23456e2、1.23456

10、E+002非规范化形式,123.456、12.3456e1、12345.6e-2、0.123456e3、12345600e-5,浮点型数据在内存中的存放方式,二进制规范化指数形式小数部分长度与能表示的精度有关指数部分长度与能表示的数值范围有关,浮点型变量的类型,分类单精度 float双精度 double长双精度 long double长度和取值范围,浮点型数据的舍入误差,由于浮点型变量能够表示的有效数字有限,将有效位以外的数字舍去造成误差举例,float a=123456.789e5,b;b=a+20;/*b=12345678920?*/printf(a=%fnb=%fn,a,b);,运行结果

11、 a=12345678848.000000 b=12345678848.000000,浮点型常量的类型,类型后缀f、F表示常量是一个单精度型浮点数l、L表示常量是一个长双精度型浮点数无任何后缀的浮点型常量视作双精度型对浮点型变量赋值一个浮点型常量可以赋值给任何类型的浮点型变量根据变量类型截取常量的相应有效数字注意防止出现溢出,字符型(Character),字符型常量字符型变量字符型数据在内存中的存放形式字符型数据的使用方法字符串常量,字符型常量,单引号括起来的一个字符举例,a、A、1、?错例,abc、我转义字符以开头的特殊字符ddd 1到3位8进制数ASCII码代表的字符xhh 1到2位16进

12、制数ASCII码代表的字符举例,n、t、123、x3A,字符型变量,字符型变量只能存放一个字符定义与使用:,int main()char c1,c2;/*定义字符型变量c1和c2*/c1=a;/*c1的值为a*/c2=2;/*c2的值为2*/,一个字符型数据占一个字节的空间字符型数据以其ASCII码(P.364)形式存放字符型数据的存放形式与只占一个字节长度的整型数据完全相同,字符型数据在内存中的存放形式,字符型数据的使用方法,可以把字符型数据视作一种长度为1字节的整型数据处理当使用字符型数据时,与使用这个字符的ASCII码(一个8位整数)是完全一样的字符型数据的用法与整型数据完全一样,包括运

13、算、赋值、输入、输出等字符型数据使用过程中,同样需要注意溢出、符号等问题是字符还是整数,只有在输出时才有意义,字符型数据使用举例,int main()char c;int i,j;c=97;/*同 c=a*/i=c+20;/*同 i=117*/j=2;/*同 j=50*/printf(%c,%dn,c,c);/*a,97*/,字符型变量的符号,字符型变量与整型变量一样,也分为有符号数与无符号数无符号字符unsigned char c;举例,表示一个班级的人数(256)赋值和使用中需要注意的问题,与整型变量相同,字符串(String)常量,表示形式一对双引号括起来的字符序列引号内可以包括0个、1

14、个或多个字符字符序列中的特殊字符用转义字符表示举例,abc、a、我举例,12.4、$#*!、C:HOME字符常量和字符串常量是不同类型的数据例如,a与a是不同的不能把一个字符串赋值给一个字符型变量,字符串在内存中的存放方式,在内存中每个字符按顺序存放字符串结尾有一个空字符(ASCII=0,0)作为字符串结束标志字符串结束标志0是不能显示的,在字符串常量中,也不用显式写出来举例TESTa,变量赋初值(Initialization),在定义变量的同时对变量赋值(初始化)举例int a=1;/*相当于 int a;a=1;*/int a,b=3;/*对b赋初值,a没有初值*/int b,c,a=b=

15、c=100;/*对三个变量赋同样的初值*/变量使用前,一般应先对它赋值,各类数值型数据间的混合运算及类型转换,整型、字符型、浮点型数据可混合运算混合运算时,不同类型的数据按照一定的规则先转换为同一类型,然后再运算,运算符(Operator),运算符的种类运算符的优先级运算符的结合方向,运算符的种类(1),算术运算符+-*/%+-关系运算符=|&赋值运算符=+=-=*=/=%=&=|=条件运算符?:,运算符的种类(2),逗号运算符,指针运算符*&求字节数运算符sizeof强制类型转换运算符(type)分量运算符.-下标运算符其他运算符(),运算符的优先级,优先级运算符的运算次序按优先级由高到低执

16、行可以用圆括号()改变运算符的执行次序举例a+b*cd/e 计算顺序:(a+(b*C)-(d/e)/*先算乘除,后算加减*/*乘除比加减优先级高*/(a+b)*(c-d)/e/*先算加减,后算乘除*/,运算符的结合方向,结合方向当一个操作数两侧的运算符优先级相同时,运算次序按照结合方向的规定进行举例a+b-c/*+和-的结合方向都是从左向右*/*b先与+结合计算a+b,然后执行减法*/a=b=1/*=的结合方向是从右向左,先计算b=1*/,运算符的结合方向规则,单目运算符的结合方向都是“从右向左”!、+、-、+(正号)、-(负号)*(指针运算符)、&(地址运算符)sizeof(type)赋值运

17、算符的结合方向是“从右向左”三目运算符的结合方向是“从右向左”唯一的三目运算符:条件运算符?:其他运算符的结合方向都是“从左向右”,优先级与结合方向总结,不同优先级的运算符,运算次序按优先级由高到低执行同一优先级的运算符,运算次序按结合方向的规定执行可以使用圆括号()明确运算次序圆括号()具有最高的优先级,表达式(Expression),表达式的概念表达式的类型表达式求值算术运算符和算术表达式赋值运算符和赋值表达式逗号运算符和逗号表达式,表达式的概念,表达式用运算符把操作数连接起来,并符合C语言语法规则的式子操作数包括常量、变量、函数调用、表达式广义上,常量、变量、函数调用也可以看作属于表达式

18、的范畴举例a+2.5*b-6/c+z-max(x,y)!(a1e-6)&(b=(c+sqrt(f),表达式的类型,表达式的类型表达式的值的类型取决于操作数的类型以及它们所做的运算举例a+2.5*b-6/c+z/*混合类型算术运算,值为double类型*/!(a1e-6)&(b=(c+sqrt(f)/*逻辑判断的结果是逻辑值*/*C语言用整型代表逻辑类型*/,算术运算符(Arithmetic Operators),基本算术运算符+-*/%强制类型转换运算符(类型名)自增、自减运算符+-,基本算术运算符,基本算术运算符的特性,优先级(从高到低)+(正号)(负号)*/%+(加)(减)结合方向+(正号

19、)(负号):从右向左+(加)(减)*/%:从左向右,基本算术运算符的说明,两个整数相除,结果也为整数直接舍去商的小数部分,而不会“四舍五入”负数整数除法,结果的舍入方向没有规定如果需要得到精确的运算结果,可以把其中一个操作数转换为浮点数举例,5/3(=1)、5.0/3(=1.66666)举例,-5/3(=-1?-2?)模运算符的两个操作数都必须是整数负数模运算结果的符号没有规定举例,5%3(=2)、-5%3(=-2?1?),强制类型转换运算符,形式(类型名)操作数说明强制把表达式转换成所需的类型强制类型转换运算符的优先级较高(见378页附录)强制类型转换不会改变操作数自身的类型,只是得到一个所

20、需类型的中间量多用于自动类型转换不能实现的目的强制类型转换后,会影响C语言做类型检查,强制类型转换举例,float x=2.8,y=3.7,z;int a,b,c,d=5,e=2;a=(int)x+y;/*a=5,2+3.7=5*/b=(int)(x+y);/*b=6,(int)(6.5)*/c=(int)x;printf(x=%f,c=%dn,x,c);/*x=2.800000,c=2*/z=(float)d/e;/*z=2.5*/,自增+、自减-运算符,形式+i,-i使用i之前,先使i的值加/减1i+,i-使用i之后,再使i的值加/减1说明+i和-i的值是加/减1之后i的值i+和i-的值是

21、加/减1之前i的值+和-只能用于变量,不能用于常量和表达式+和-的结合方向是“自右向左”,自增、自减运算符举例,int i=3,j,a,b=1,c=2;j=+i;/*i=i+1,j=i,i=4,j=4*/j=i+;/*j=i,i=i+1,i=5,j=4*/j=-i+;/*-(i+),i=6,j=-5*/j=i+*2;/*(i+)*2,i=7,j=12*/a=(b+c)+;/*非法!*/a=34+;/*非法!*/j=+i+;/*非法!*/,有关表达式使用的特殊问题,C的标准中,表达式中子表达式的求值顺序没有统一规定i=3;j=(i+)+(i+)+(i+);/*j=9?=12?*/实验结果9C编译

22、程序自左向右尽可能多的将若干字符组合成一个运算符、标识符、关键字i+j/*(i+)+j?i+(+j)?*/结果解释为(i+)+j调用函数时,实参的求值顺序没有规定i=3;printf(%d,%dn,i,i+);/*3,3?4,3?*/结果 4,3,赋值运算符(Assignment Operators),赋值运算符=把右侧表达式的值赋给左侧的变量一般情况下,赋值运算符左侧只能是变量赋值运算符的优先级较低,“自右向左”结合运算符两侧类型不一致时,要进行类型转换注意“赋值”与“等于”的区别,例如i=i+2;复合赋值运算符=前加上算术运算符或位运算符,如+=、|=举例,z*=x+y;/*z=z*(x+

23、y);*/,赋值表达式,赋值表达式赋值表达式的值就是所赋的值运算符右侧的表达式可以是一个赋值表达式举例a=5;/*表达式的值为5*/a=b=3;/*a=(b=3)*/a=b=c=1;/*a=(b=(c=1)*/a=(b=4)+(c=3);/*b=4,c=3,a=7*/,逗号运算符,逗号运算符,exp1,exp2逗号运算符的优先级最低,“自左向右”结合逗号表达式的值是exp2的值exp1和exp2都可以又是“逗号表达式”把多个表达式组合成一个表达式使用举例x=(a=3,6*a)/*a=3,x=18*/x=a=3,6*a/*a=3,x=3*/,逗号运算符举例,#include int main()

24、int a=2,b=4,c=6,x,y;y=(x=a+b),(b+c);/这里y得到b+c的值 printf(y=%d,x=%d,y,x);,语句类型,C语言包括5类语句:控制类:if().elsefor()while()do.while()continuebreakswitchreturngoto,语句类型(续),C语言包括5类语句:函数调用语句表达式语句空语句复合语句,数据输入输出的概念,(一).所谓输入输出是以计算机主机为主体而言的输出:从计算机向外部输出设备(显示器,打印机)输出数据输入:从输入设备(键盘,鼠标,扫描仪)向计算机 输入数据.(二).C语言本身不提供输入输出语句,输入和输

25、出操作是由C函数库中的函数来实现的例如:字符输入函数:getchar 字符输出函数:putchar格式输入函数:scanf 格式输出函数:printf字符串输入函数:gets 字符串输出函数:puts,(三).在使用系统库函数时,要用预编译命令“#include”将有关的“头文件”包括到用户源文件中.例如:在调用标准输入输出库函数时,文件开头应该有:#include“stdio.h”或:#include,头文件,基本输入输出,头文件#include 输入输出函数字符输出函数putchar字符输入函数getchar格式输出函数printf格式输入函数scanf字符串输出函数puts字符串输入函数

26、gets,字符输出函数putchar,函数说明int putchar(int c);输出一个字符到标准输出设备参数说明int c 要输出的字符,可以是整数或字符,若超出字符型范围,则只使用低字节返回值若成功,返回输出字符的ASCII码值若失败,返回EOF(End of File),函数putchar举例,int c,i;putchar(a);/*输出a*/putchar(n);/*输出换行符*/putchar(101);/*输出e Ascii=101*/putchar(101);/*输出A ascii=65*/c=1000;i=putchar(c);/*输出,i=232*/,字符输入函数get

27、char,函数说明int getchar(void);从标准输入设备输入一个字符需要输入回车后,函数才返回参数说明无参数返回值若成功,返回输入字符的ASCII码值若失败,返回EOF(End of File),函数getchar举例,int c;c=getchar();/*输入a后回车*/putchar(c);/*输出a*/c=getchar();/*是否需要输入?*/printf(c=%dn,c);/*输出c=?10*/c=getchar();/*输入abcd后回车*/putchar(c);/*输出a*/putchar(getchar();/*输出b*/,格式输出函数printf,函数说明in

28、t printf(char*format,args.);格式化输出若干任意类型数据参数说明char*format 格式控制字符串args 需要输出的数据列表,可以多个或没有返回值若成功,返回输出的字节数,包括换行符若失败,返回EOF(End of File),函数printf的参数说明,格式字符串包括“格式说明”和“普通字符”“格式说明”由%和“格式字符”组成,将输出数据按指定格式输出“普通字符”按原样输出输出列表需要输出的数据可以是变量、常量、表达式、函数调用等输出数据按顺序与“格式说明”对应输出,函数printf的格式举例,printf(a=%d b=%d,a,b);,输出结果a=3 b=

29、4,格式字符,常见的格式符的修饰符:,l用于长整型整数,可加在格式符d,o,x,u前面m(代表一个正整数):数据最小宽度n(代表一个正整数):对实数,表示输出n位小数;对字符串,表示截取的字符个数-输出的数字或字符在域内向左靠,函数printf举例(02-03.C),int i=1234;float f=-56.78;printf(i=%+6d,i);/*i=+1234*/printf(%c,i);/*/printf(%10.5E,f);/*-5.67800E+01*/printf(%7.4f%,f);/*-56.7800%*/printf(%+6.3G,f);/*-56.8*/,格式输入函数

30、scanf,函数说明int scanf(char*format,addrs.);格式化输入若干任意类型数据参数说明char*format 格式控制字符串addrs 需要输入的地址列表,可以有多个返回值返回输入并赋值的数据项的个数,函数scanf使用说明,“地址列表”中是变量的地址,而非变量scanf(%d,关于输入格式格式字符串中的普通字符须按相应位置输入除字符型(%c)外,输入项之间用一个或多个空白字符分隔,包括空格、回车、制表符空白字符会作为%c对应的输入,如果需要输入下一个非空白字符,可以用%1s如规定了最大宽度,且输入数据超出宽度,则按宽度截取数据,格式字符,附加格式字符,函数scan

31、f举例,int i,j;char c;scanf(%d%d,/*2 a 3=i=2,c=,j出错*/*2a 3=i=2,c=a,j=3*/,例1:输入球体半径,求球的体积。例2:输入大写字母,转换为小写字母。,简单的C程序设计,例1:球体体积(02-05.C),#include#define PI 3.1415926int main()float r,V;printf(r=);scanf(“%f”,例2:字母大小写转换(02-06.C),#include int main()char cup,clow;cup=getchar();clow=cup+a-A;printf(%cn,clow);,【

32、例】输入三角形的三边长,求三角形面积。,已知三角形的三边长a,b,c,则该三角形的面积公式为:,其中s=(a+b+c)/2。源程序如下:#includemain()float a,b,c,s,area;scanf(“%f,%f,%f”,【例】求ax2+bx+c=0方程的根,a,b,c由键盘输入,设b2-4ac0。求根公式为:令,则x1=p+qx2=p-q源程序如下:,#includemain()float a,b,c,disc,x1,x2,p,q;scanf(“a=%f,b=%f,c=%f”,以上例子都是顺序结构的程序;特点是顺序执行,没有条件分支或者循环,及执行的控制流是流水线式的下一章引入

33、选择结构,作 业,第三章习题:P83:4,5.,注意:书面作业中的程序要上机验证。上机实验用书计算机程序设计学习指导与练习每个同学上机时建立两个目录,homework 和 labwork 其中homework目录下存放书面作业中的程序,labwork 目录下存放上机实验程序,(对西区在windows环境下上机的同学可上传到自己的邮箱“网络硬盘”中),C上机实验内容东区班:阅读计算机程序设计学习指导与练习(下称指导):掌握Unix系统的C程序设计上机过程。重点掌握编译命令cc 和编辑器vi的使用。阅读指导程序范例及其操作步骤。Labwork:上机编程习题:指导page80:上机习题2、3。教材:p84:6,7,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号