编程C语言.pdf
《编程C语言.pdf》由会员分享,可在线阅读,更多相关《编程C语言.pdf(240页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C程序设计语言北航软件所 晏海华作业及参考书?教师:晏海华(软件所,逸夫馆505)?参考书:?(1)C程序设计语言,B.W.Kernighan,D.M.Ritchie,清华大学出版社影印;机械工业出版社,徐宝文等译;?(2)C语言教程,孙玉芳,孟庆昌编著;?(3)C程序设计语言,谭浩强,清华大学出版社;?作业:from C Programming Language-P13.1-4;P20 1-8,1-9,1-10;P24 1-13;P31 1-18;P34 1-20,1-22,1-23;P46 2-3;P49 2-6,2-8;P58 3-1;P60 3-2;P63 3-3;P64 3-5,3-
2、6;P71 4-1;P73 4-2;P79 4-4,4-6,4-10;P83 4-11;P88 4-13;P97 5-1,5-2;P107 5-3,5-5;P110 5-7;P118 5-13;P121 5-14;P126 5-19;P143 6-2,6-3共计34题,请选做其中的20道题,作业占总成绩的10分。前言前言前言C语言的产生、发展和它与UNIX系统的关系C语言的产生与UNIX操作系统是密不可分的:?UNIX由Bell Lab的K.Thompson和D.M.Ritchie最先在1969年开发的O.S.(它的前身是MIT和AE开发的Multies)。?1970年,V1,V2版在PDP-
3、7机上用汇编语言实现。?1971年V3 PDP11/23;1972年V4 PDP11/45。?1972年,D.M.Ritchie开发出新语言C。(C?B?BCPL?CPL单数据型语言)?1973年,Ritchie和Thompson用C改写了UNIX核心(90%)即V5前言C语言的发展经历三个阶段:第一阶段:78年以前,C称为UNIX C,即C被看成UNIX的一部分。第二阶段:78年D.Ritchie的C程序设计语言出版到88年ANSI C(标准C)标准出现。此C又称为K&R C。第三阶段:88年ANSI C标准(89年3月批准)。CPL-?BCPL-?B-?C-?C+1968 C.Strach
4、ey 1969 M.Richards 1970 K.Thompson 1972 D.M.Ritchie 1988 B.Stroustrup前言C语言特别适用于编写:?操作系统?编译程序?数据库管理系统?网络软件?图形软件?其它系统软件及软件工具?应用软件第一章C语言导论第一章C语言导论?C语言特点?C语言的一般介绍?C程序的编辑、编译和运行第一章C语言导论11 C语言特点1)表达能力强2)有先进的数据结构和控制结构,支持结构化、模块化程序设计,为大型软件开发提供有力工具。?数据类型第一章C语言导论 数据类型基本类型枚举类型enum构造类型指针类型用户定义类型 typdef整型 int shor
5、t long unsigned 实型 float double字符型char数 组结构 struct 联合union第一章C语言导论?控制流设施复合语句 语句序列 分程序 局部说明;语句序列 条件语句if if else循环语句while,do_while,for开关语句switch转向语句goto,continue,break,return?存贮类auto局部变量(自动变量)static静态存贮分配变量extern外部全程变量register寄存器变量?分块编译功能第一章C语言导论3)可通过预处理程序,进行宏定义,处理包含文件和条件编译4)语言简洁,键入量少(仅有五个基本类型和32个关键字)
6、如,=,+=,*=,+,-5)效率高C编写的程序仅比用汇编语言编写的程序相差20%6)可移植性好?C编译规模较小,用C记述的75%80%的代码相同。此外,C编译几乎在所有的系统上都有。?C语言本身提供某些设施,使C程序移植容易。第一章C语言导论C语言缺点?算符太多,优先级多,不便记忆。?相对来说,C语言类型转换随便,安全性较差(如指针)。?可读性比PASCAL语言差。第一章C语言导论12 C语言的一般介绍121词汇表数字:0,1,9英文字母:a,b,z,A,B,Z(一般用大、小写表示不同字符)连字符:_ 作用同英文字母标识符:以字母(或_)开头的字母(_)数字串。一般不要太长,依赖于实现。运算
7、符和分界符:+,-,*,/,%,.,&,&,|,=,=,!=,=,(,),,,?,:,“,#,第一章C语言导论1.2.2关键字int autogotoiffloatstaticreturnelsecharexternbreakwhileshortregistercontinueforlongdounsignedswitchdoublecasestructdefaultunionvoidenumtypedefsizeofconstsigneddefine,undef,include,ifdef,ifndef,endif,及line,虽不是关键字,但是最好把它们看作关键字,它们主要用于C预处理程序
8、中。第一章C语言导论1.2.3 C语言程序结构C程序由一系列外部说明和函数组成。一个C程序可由一个或多个函数(它们之间不能嵌套)组成,但其中必有一个(也只能有一个)命名为main(主函数),其它函数可由用户任取名字。程序运行时必需从main开始,但main函数在程序中的前后位置没有关系。组成C程序的各个函数可在一个源文件上,也可以分放在多个文件上(函数不能跨文件),每个源文件可单独编译。C源文件必须以.C作后缀(.h为C程序的头文件)。第一章C语言导论例1-1/*file:hello.c*/main()printf(“hello,worldn”);说明:1./*/为注释,不可嵌套2.main(
9、)为主函数定义3.printf为标准I/O库中格式化输出函数4.n为C语言转义字符,常用的有:n换行t制表b退格r回车f换页本身单引号ddd位模式“双引号5.分号(;)为语句的结束符(这与PASCAL语言不同,在PASCAL中分号为语句的分隔符)第一章C语言导论例1-2main()/*simple.c*/int a,b,c,sum;a=1;b=2;scanf(“%d”,&c);/*注意要用地址*/sum=a+b+c;printf(“Sum=%dn”,sum);说明:在scanf和printf中,%号开始的为格式转换字符,用来控制输入/出格式,常用的有:scanf printf%d%d十进制整数
10、%f%f十进制浮点数%c%c单个字符%s%s字符串%o八进制整数%x十六进制整数%本身同时,在%d,%f前还可以加数字,如%4d,%6.2f第一章C语言导论1.3 C程序的编辑、编译和运行编辑编译/连接运行有错?结果正确?有有编译错语法错运行错语义错使用编辑器如:vi(UNIX),edit(DOS)编译=.o 或.obj连接.o(.obj)=.exe第一章C语言导论1)UNIX编译环境Cc-o执行文件名 c 文件名?o:指定执行文件名,缺省为a.out?c:产生.o文件如:s1.c,s2.c s3.c组成一个C程序,则有:cc c s1.ccc c s2.c cc o s s1.o s2.o
11、s3.c2)DOS及Windows环境目前,在DOS和WINDOWS环境下的C编译系统已将C程序的编辑、编绎、连接、调试和运行集成到一起,如VC,BC等开发环境。3)输入/输出重定向?,输出重定向,将标准输出重定向到指定文件,如,C prog outfile?prog prog1|prog2第二章 数据、运算符、表达式第二章 数据、运算符、表达式21标识符和变量211标识符?标识符在C语言中可作为变量名、常量名、函数名、参数名、类型名、枚举名和标号等。?通常定义名用大写,其它名字用小写。?以连字符(_)开始的名字用户最好不用(通常系统取名以_开始)。好的标识符可使程序易读,也可以减少写程序或修
12、改程序时由于疏忽而产生的错误。第二章 数据、运算符、表达式212变量与变量说明在C中,所有变量必须先说明(定义)后使用。说明方式:存贮类存贮类 类型 变量(列)表;类型 变量(列)表;例:int lower,upper,step;char c,line100;extern double x;const double PI=3.1415926;const char msg =“Warning”;第二章 数据、运算符、表达式2.2常量221文字常量(literal)和常量定义例:line 66ci=3.141592*dia;si!=0;又如:#define PAGESIZE 66#define P
13、I 3.141592#define ENDSTRING 0则上面可以写成:line=A&c=0&si=9;i+)n=10*n+si 0;return(n);main()int n;char st100;scanf(“%s”,st);n=atoi(st);printf(“%dn”,n);第二章 数据、运算符、表达式?C语言类型转换通常是自动的-隐式类型转换1)字符与整数可以用整数的地方就可以用字符。而整数转换成字符时,超出8位就将高位丢掉。2)浮点数与整数3)无符号整数一般整数(int)和无符号整数(unsigned)混合使用,则简单整数转换成无符号整数。浮点整数截去小数部分第二章 数据、运算符
14、、表达式4)算术转换如果一个运算符,有不同类型的运算对象,那么“较低”类型会自动转换成“较高”类型。doublefloatlongunsignintshort,char此外,赋值号右边表达式的类型会自动转换为赋值号左边变量类型。第二章 数据、运算符、表达式?强制类型转换(cast)-显式类型转换()如:x=sqrt(double)n);第二章 数据、运算符、表达式2.5表达式和运算符C语言中一个表达式后跟一个分号可构成一条语句,如:;称为表达式语句在C语言中,分号是语句的结束符,而在PASCAL语言中分号是语句的分隔符。在其它语言里常见的赋值语句E1=E2;在C语言中称为赋值表达式语句。在C中
15、,a=b=c=0;是合法的赋值表达式语句。第二章 数据、运算符、表达式251表达式表达式:=即,相当于|:=变量名、常量名等|文字常量|()|(,*)|第二章 数据、运算符、表达式:=被赋变量|数组元素|.结构或联合成员|-同上|()|*指针变量,取指针所指对象作为被赋变量从上可以看出,一般只有变量、数组元素、结构成员才能做为左值。第二章 数据、运算符、表达式1.单目表达式由单目运算符构成的表达式,格式为::=*表达式取指针所指对象内容|&取变量地址|-单目减|+单目加|按位反|!逻辑反|()强制类型转换|sizeof 数据类型的大小,以字节计|sizeof()同上|+|-前置增/减量|+|-
16、后置增/减量第二章 数据、运算符、表达式例1指针和地址int x,y;int*px;x=10;px=&x;y=*px;(间接取,相当于y=x)指针变量用来存放所指对象的地址。注意:-只有才能取地址,即变量或数组元素能取地址。所以,&(3),&(x+5)等非法。-只有才可对它进行+或运算。X:10Y:1001000PX:第二章 数据、运算符、表达式例2前置和后置增(减)量n=5;n=5;x=+n;x=n+;结果:结果:前置运算是先进行增减量,再取其值。后置运算是先取其值,再进行增减量运算。n:6,x:6?x:5,n:6第二章 数据、运算符、表达式例3给出下列程序的输出结果#include mai
17、n()int a,b,c;a=b=c=0;a=+b+c;printf(“%d%d%dn”,a,b,c);a=b+c+;printf(“%d%d%dn”,a,b,c);a=+b+c+;printf(“%d%d%dn”,a,b,c);a=b-+-c;printf(“%d%d%dn”,a,b,c);a=+c+c;printf(“%d%d%dn”,a,b,c);/*2 1 1*/*2 2 2*/*5 3 3*/*5 2 2*/*不确定,取决于机器实现不确定,取决于机器实现*/第二章 数据、运算符、表达式2双目表达式:=:=*|/|%|+|-|=|,=,(p+1 n)&(0 右移,低位移出,对int为算
18、术右移(高位补符号位),对unsigned为逻辑右移(高位补0)。左移,高位移出,低位补0。/注意整除有别于浮点数相除。%整数求余。,逗号表达式,如e1,e2顺序求e1和e2,以e2值作为整个表达式结果的值。如,a=(t=3,t+2);结果为5。(逗号通常还用在变量说明以及函数参数表中,用作分隔符。)第二章 数据、运算符、表达式3三目表达式(条件表达式):=?:先计算表达式1,若其值为非零,则结果是表达式2的值,否则就是表达式3的值。例:if(a b)z=a;elsez=b;等价于:z=(a b)?a:b;第二章 数据、运算符、表达式4赋值表达式:=:=|+=|-=|/=|%=|*=|=|b_
19、back+=2编译程序产生效率高其用一个运算符完成其它语言中须多个运算符才能完成的功能。如:x+=n只有一个运算符,而x=x+n则有两个运算符。注意:y*=n+1;?y=y*(n+1),而不是y=y*n+1第二章 数据、运算符、表达式252 运算符的优先级和结合顺序优先级 运算符 结合律 初等量运算符 初等量运算符 1().-单目运算符 2-!+-&*(类型名)sizeof 右结合 单目运算符 双目运算符 3*/%算术运算符 4+-5 移位运算符 6 =关系运算符 7=!=8&按位运算符 9 10|11&逻辑运算符 12|三目运算符 13?:右结合 赋值运算符 14*=/=%=+=-=&=|=
20、右结合 逗号运算符 15,第三章 语句与控制流第三章 语句与控制流31概述概述C语言语句分成简单语句和构造语句两类。第三章 语句与控制流简单语句1)表达式语句赋值表达式语句,如:*x+=y*=z+3;其它表达式语句,如:+x;-y;函数调用语句等。2)转移语句goto标号;break;间断语句continue;继续语句return;return(表达式);3)空语句;第三章 语句与控制流构造语句1)复合语句(分程序)*注意:后没有分号(;),这与单个语句不同。2)条件语句if语句,if_else语句3)循环语句for语句while语句do_while语句4)开关语句switch语句(包括cas
21、e语句)第三章 语句与控制流32条件语句if(表达式)语句if(表达式)语句1else语句2表达式语句FT表达式语句1FT语句2第三章 语句与控制流注意:在if嵌套中,省略else会产生二义性。如:if(n 0)if(a b)z=a;elsez=b;即else与前面最接近的不带else的if相对应。若要使上面的else与第一个if相匹配,可使用。如:if(n 0)if(a b)z=a;else z=b;第三章 语句与控制流若if语句的else部分嵌套if语句,如:if()else if()else这是实现多路分支的最一般方法。第三章 语句与控制流例3-1:#include main()int
22、a,b;char ch;scanf(“%d%d”,&a,&b);ch=getchar();if(ch=y)int x;x=a;a=b;b=x;printf(“a=%d b=%dn”,a,b);else printf(“no swap!n”);第三章 语句与控制流3.3 while语句while(表达式)语句表达式语句FT计算表达式语句结束第三章 语句与控制流例3-2从键盘读入字符并输出#define EOF 1main()int c;while(c=getchar()!=EOF)putchar(c);第三章 语句与控制流例3-3有一阶梯,每跨2阶余1阶;每跨3阶余2阶;每跨5阶余4阶;每跨6阶
23、余5阶;每跨7阶正好不余,求共有几阶?main()int x=3;while(x%3!=2)x+=2;while(x%5!=4)x+=6;while(x%6!=5)x+=30;while(x%7!=0)x+=30;printf(“x=%dn”,x);第三章 语句与控制流3.4 for语句for(表达式1;表达式2;表达式3)语句其等价于:表达式1;while(表达式2)语句;表达式3;表达式2语句FT计算表达式2语句结束计算表达式1计算表达式3第三章 语句与控制流for特别适合于循环次数固定或有固定步长的循环,如下一个循环十次的循环:for(i=0;i=0&si=9;i+)n=10*n+si
24、0;return(sign*n);第三章 语句与控制流例3-5 将字符串颠倒void reverse(char s)int c,i,j;for(i=0,j=strlen(s)-1;i j;i+,j-)c=si;si=sj;sj=c;int strlen(char s)int i=0;while(si!=0)+i;return(i);第三章 语句与控制流注意注意:从语法上讲,表达式中任一个都允许省略,但分号不能省。:从语法上讲,表达式中任一个都允许省略,但分号不能省。如:for(;(c=getchar()!=EOF;)语句s;for(;)语句s;当表达式2不出现时,则认为条件为真,循环永远下去(
25、无穷循环),退出它只能用break或return语句。所以,一个while(A)B;等价于一个for(;A;)B;第三章 语句与控制流3.5 do_while语句3.5 do_while语句do 语句while(表达式);作用类似于while,但do_while是否终止,其判定条件是在循环体之后,即它总是先执行一次循环体,再判断表达式的值是否为真。表达式语句FT计算表达式语句结束第三章 语句与控制流总的说来,while(for)循环是在顶上测试循环终止条件,而do_while是在每次通过循环体之后,在底部进行测试,所以循环体至少要进行一次。注意注意:do_while与与Pascal语言中的语言
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 语言
限制150内