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

下载本文档

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

文档简介

1、主讲:白玉课程要求课程要求n共共48学时学时n课内上机课内上机10学时学时n作业作业n期末期末 软件工程 数据库 数据结构 计算机网络 操作系统 多媒体软件技术基础 软件工程 :软件研制的全过程 数据结构 :计算机软件的基础知识 操作系统 :计算机系统的核心软件软件技术基础再看看 C C语言语言32个关键字:(auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort signed sizeof static structs

2、witch typedef unsigned union voidvolatile while9种控制语句:if( )elsefor( )while( )dowhile( )continuebreakswitchgotoreturn34种运算符:算术运算符:+ - * / % + -关系运算符: = !=逻辑运算符:! & |位运算符 : | &赋值运算符:= 及其扩展条件运算符:?:逗号运算符:,指针运算符:* &求字节数 :sizeof强制类型转换:(类型)分量运算符:. -下标运算符:其它 :( ) - C程序格式和结构特点例1.1 第一个程序 Hello,World!/* exampl

3、e1.1 The first C Program*/#include main() printf(“Hello,World!”);注释编译预处理函数语句输出:Hello,World!例1.2/* example1.1 calculate the sum of a and b*/#include /* This is the main program */main() int a,b,sum; a=10; b=24; sum=add(a,b); printf(”sum= %dn,sum);/* This function calculates the sum of x and y */int a

4、dd(int x,int y) int z; z=x+y; return(z);运行结果:sum=34函数语句预处理命令注释数据类型数据类型n数据类型总是按照它在计算机内所占据的空间大小定义和区分的。n从最基本的概念上说,计算机可以支持的数据类型为:整数(二进制)n任何其他的数据类型,都是由整数表示和运算获得的。C中的基本数据类型中的基本数据类型n1字节: ( unsigned ) char n( 0-255 )/( -128 127 )n2字节: ( unsinged ) short n( 0-65535)/( -32768 - 32767)n4字节: ( unsinged ) longn(

5、 0 4292967295 ) / n( -2147483648 - 2147483647)C中的基本数据类型中的基本数据类型ninteger: intnint所占据的字节数不定,与操作系统有关:n16位的操作系统,sizeof( int ) = 2;n32位的操作系统,sizeof( int ) = 4;C中的基本数据类型中的基本数据类型n浮点。总是采用小数+指数的方法来表示,无法精确表示一个浮点数。n4字节,floatn1位符号,8位指数,23位尾数n8字节,doublen1位符号,11位指数,52位尾数C中的扩展数据类型中的扩展数据类型_数组数组n由若干个相同类型的数据组成的数据集。把若

6、干个逻辑上有关联的同类型的变量组织在一起(数组变量)nint a5;na = 0 x2000a4a3a0a1a20 x20000 x2002C中的扩展数据类型中的扩展数据类型_数组数组n特征n由多个数据元素构成,且数据有序;n数组的每个元素都属于同一个数据类型。n作为变量使用,数据元素在内存中是按顺序连续存放的。n具有整体性,每个数组要用一个统一的标识符标识(数组名)。n数组名就是数组在内存中占用的地址;字符串字符串n字符串是用一对双引号括起来的字符序列,这些字符可以是一般的可显示字符,也可以是某些特殊的控制字符;n字符串只能用字符数组来处理,没有字符串变量。字符串在内存中存放时,系统将自动在

7、字符串的末尾添加一个字符串的结束标记0 (空字符),碰到第一个0就认为字符串处理结束。字符串字符串nchar szName21;nstrcpy( szName, “NJTU”);nstrlen( szName ) = 4;n占据了5个存贮空间nszName0 = NnszName1 = JnszName2 = TnszName3 = UnszName4 = 0NJTU0 xszNameC中的扩展数据类型中的扩展数据类型_结构体结构体n逻辑上关联,但数据类型不同的变量,组织在一起。 structstruct 结构类型名结构类型名 类型标识符类型标识符 成员名成员名; ;: : 类型标识符类型标识

8、符 成员名成员名; ; ; ;C中的扩展数据类型中的扩展数据类型_结构体结构体structstruct student student char acStdID10;char acStdID10;char szName21;char szName21;char sex;char sex;unsigned char unsigned char ucAgeucAge; ;unsigned short ausScoree20;unsigned short ausScoree20;char szAddr31;char szAddr31; ; ;acStdID10ausScore20ucAgesexsz

9、Name21szAddr31C中的扩展数据类型中的扩展数据类型_结构体结构体struct Student stStud, *pstStud;stStud.ucAge = 21;stStud.ausScr2 = 84;printf( “%s”, pstStud-szName );C中的扩展数据类型中的扩展数据类型_结构体结构体n定义的是一种新的数据类型,而不是一个新的变量。n一个结构内的变量名不能相同。但不同的结构内的变量可以相同。n结构内可以套结构。n成员名可以与程序中的变量名相同,二者代表不同的对象n对结构体中的成员,可以单独使用,它的作用与地位相当于普通变量;n作为输入输出,不可以整体使用

10、,作为函数调用中,可以整体使用C中的扩展数据类型中的扩展数据类型_枚举枚举nenum Sexnnmale,nfemalen;nenum Sex a;na = male; OKna = 1;OKna = 5; X实际上,枚举被定义为整数类型,int且若没有特别说明,从定义的第一个位置开始,依次用0,1, 表示.C中的扩展数据类型中的扩展数据类型_共用体共用体nunion AnnChar c;nInt i;nfloat f;n;nunion A a;na.c = a;na.i = ?na.f = ?a数据类型定义数据类型定义typedefntypedef int A;n在正常的变量说明语句前加ty

11、pedef,表示定义了一种新的数据类型,该数据类型就是变量名。nA a int a;ntypedef struct Student Student;nStudent stWang;数据类型定义数据类型定义typedefntypedef int A10;nA b;nA a5;a09a01a00a49a40a19a10C中的数据类型中的数据类型_指针指针指针就是地址,一个变量的地址称为该变量的指针。如果有一个变量专门用来存放另一个变量的地址(即指针),称为指针变量。int a, *p;p = &a;*p = 10p=0 x2000a = 100 x20000 x1000C中的数据类型中的数据类型_

12、指针和数组指针和数组nint a10, *p;na就是数组的第一个元素的地址;np = a; / p = &a0;np和a就完全相同,因此p也可以看作是一个数组。a2 *( p+2 ) *(a + 2)C中的数据类型中的数据类型n基本类型n 整型:int (unsigned)( short, long) n字符:charn实型:单精度(float)/双精度(double)n枚举:enumn构造类型n数组n结构体structn共用体unionn指针n空类型 变量及其作用域变量及其作用域n局部变量n定义在一个复合语句中;“”n作用范围在该复合语句中;n全局变量n定义在函数之外;n作用范围从定义位置

13、开始的之后的函数应用程序的组织方法应用程序的组织方法n整个应用程序由多个文件构成;n每个文件由多个函数构成;n有且仅有一个主函数,它是整个应用程序的入口:nint main( int agrc, char *argv )n函数可以多级调用;n函数定义:n函数类型 函数名(参数列表);应用程序的组织方法应用程序的组织方法应用程序-|-头文件(.h)-|-头文件1.h | |-头文件2.h | | | |-头文件m.h |-源文件(.c)-|-源文件1.c | -源文件2.c | |-源文件n.c基本控制语句基本控制语句ABPABAP顺序选择循环基本控制语句基本控制语句赋值语句赋值语句函数调用语句

14、函数调用语句复合语句复合语句实现顺序结构的语句实现顺序结构的语句实现选择结构的语句实现选择结构的语句实现循环结构的语句实现循环结构的语句if语句语句switch语句语句while语句语句do-while语句语句for语句语句基本控制语句基本控制语句_选择选择if( P )A;elseB;PAB基本控制语句基本控制语句_选择选择if( P )A;AP基本控制语句基本控制语句_选择选择if( P1 )A;else if ( P2 )B;elseCBAP1P2C基本控制语句基本控制语句_选择选择Switch (exp )case 值1:语句1;break;case 值2:语句1;break;defa

15、ult:语句n+1;exp语句n+1语句2语句1基本控制语句基本控制语句_循环循环while( P )A;AP基本控制语句基本控制语句_循环循环doA;while( P );AP基本控制语句基本控制语句_循环循环for( B; P; C)A;BPCAn函数分类n从用户角度n标准函数(库函数):由系统提供n用户自定义函数n从函数形式n无参函数n有参函数使用库函数应注意:1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型4、需要使用的包含文件 函数函数n 函数的定义n一般格式函数类型 函数名(形参类型说明表)说明部分语句部分现代风格:函数类型 函数名(形参表)形参类型

16、说明说明部分语句部分传统风格:n函数的返回值n返回语句n形式: return(表达式); 或 return 表达式; 或 return;n功能:使程序控制从被调用函数返回到调用函数中,同时把返值带给调用函数n说明:n函数中可有多个return语句n若无return语句,遇时,自动返回调用函数n若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换-函数调用转换nvoid型函数n函数的调用n调用形式 函数名(实参表);说明:n实参与形参个数相等,类型一致,按顺序一一对应n实参表求值顺序,因系统而定(Turbo C 自右向左)函数参数及其传递方式n形参与实参n形式参数:定义函数时

17、函数名后面括号中的变量名n实际参数:调用函数时函数名后面括号中的表达式c=max(a,b);(main 函数)(max 函数)max(int x, int y) int z; z=xy?x:y; return(z); 例 比较两个数并输出大者main() int a,b,c; scanf(%d,%d,&a,&b); c=max(a,b); printf(Max is %d,c);max(int x, int y) int z; z=xy?x:y; return(z);形参实参n说明:n实参必须有确定的值n形参必须指定类型n形参与实参类型一致,个数相同n若形参与实参类型不一致,自动按形参类型转换

18、函数调用转换n形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放n函数参数及其传递方式n形参与实参n形式参数:定义函数时函数名后面括号中的变量名n实际参数:调用函数时函数名后面括号中的表达式例 计算x的立方#include float cube(float x) return(x*x*x);main() float a, product; printf(Please input value of a:); scanf(%f,&a); product=cube(a); printf(”Cube of %.4f is %.4fn,a,product);xaproduct1.2

19、1.21.728n参数传递方式n值传递方式n方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值n特点:n形参与实参占用不同的内存单元n单向传递711x:y:调用前:调用结束:711x:y:例 交换两个数/*ch7_2.c*/#include main() int x=7,y=11; printf(x=%d,ty=%dn,x,y); printf(swapped:n); swap(x,y); printf(x=%d,ty=%dn,x,y);swap(int a,int b) int temp; temp=a; a=b; b=temp;调

20、用:711a:b:711x:y:swap:711x:y:117a:b:tempn地址传递n方式:函数调用时,将数据的存储地址作为参数传递给形参n特点:n形参与实参占用同样的存储单元n“双向”传递n实参和形参必须是地址常量或变量/*ch9_3.c*/swap(p1,p2)int *p1,*p2; int p; p=*p1; *p1=*p2; *p2=p;main() int a,b; scanf(%d,%d,&a,&b); printf(“a=%d,b=%dn”,a,b); printf(“swapped:n”); swap(&a,&b); printf(”a=%d,b=%dn,a,b);例 交

21、换两个数a59b调前:a59b调swap:p1&a&bp2a95b交换:p1&a&bp2a95b返回:n数组作为函数参数n数组元素作函数实参值传递n数组名作函数参数n地址传递n在主调函数与被调函数分别定义数组,且类型应一致n形参数组大小(多维数组第一维)可不指定n形参数组名是地址变量例 求学生的平均成绩 #include float average(int stu10, int n); void main() int score10, i; float av; printf(Input 10 scores:n); for( i=0; i10; i+ ) scanf(%d, &scorei);

22、av=average(score,10); printf(Average is:%.2f, av); float average(int stu10, int n) int i; float av,total=0; for( i=0; in; i+ ) total += stui; av = total/n; return av; 实参用数组名形参用数组定义, int stu .2109score562312.88stu例:一元二次方程的根例:一元二次方程的根n写函数,求一元二次方程的根。n问题:n系数不同,函数的根也不相同,如何把函数执行的情况和函数的根同时表达出来?例:一元二次方程的根例:

23、一元二次方程的根函数定义:int Root( float a, float b, float c,float *x1, float *x2 );nax2 + bx + c = 0;n返回int型变量:n-1, a = 0, 非法输入;n0,两个相等的实根;x1 = x2n1,两个不等的实根;x1, x2n2,一对复根; x1 i x2函数返回值函数返回值数据结构中要用的宏数据结构中要用的宏#define TRUE1#define FALSE0#define OK1#define ERROR0#define INFEASIBLE-1#define OVERFLOW-2 指针指针C程序设计中使用指

24、针可以:n使程序简洁、紧凑、高效n有效地表示复杂的数据结构n动态分配内存n得到多于一个的函数返回值n指针变量指针变量与其所指向的变量之间的关系n指针变量的定义n一般形式: 存储类型 数据类型 *指针名;3变量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=33变量i2000i_pointer*i_pointeri*i_pointer&ii_pointeri=3;*i_pointer=3合法标识符指针变量本身的存储类型指针的目标变量的数据类型表示定义指针变量不是*运算符例 int *p1,*p2; float *q ; s

25、tatic char *name;注意:1、int *p1, *p2; 与 int *p1, p2;2、指针变量名是p1,p2 ,不是*p1,*p23、指针变量只能指向定义时所规定类型的变量4、指针变量定义后,变量值不确定,应用前必须先赋值n指针变量的初始化一般形式:存储类型 数据类型 *指针名=初始地址值;赋给指针变量,不是赋给目标变量例 int i; int *p=&i;变量必须已说明过类型应一致例 int *p=&i; int i;例 int i; int *p=&i; int *q=p;用已初始化指针变量作初值例 main( ) int i=10; int *p; *p=i; prin

26、tf(“%d”,*p); 危险!例 main( ) int i=10,k; int *p; p=&k; *p=i; printf(“%d”,*p); 指针变量必须先赋值,再使用.2000200420062005整型变量i10指针变量p200120022003随机n零指针与空类型指针n零指针:(空指针)n定义:指针变量值为零n表示: int * p=0; p指向地址为0的单元,系统保证该单元不作它用表示指针变量值没有意义#define NULL 0int *p=NULL:np=NULL与未对p赋值不同n用途: n避免指针变量的非法引用n在程序中常作为状态比较 例 int *p; . while(

27、p!=NULL) . nvoid *类型指针n表示: void *p; n使用时要进行强制类型转换例 char *p1; void *p2; p1=(char *)p2; p2=(void *)p1;表示不指定p是指向哪一种类型数据的指针变量例 指针的概念main() int a; int *pa=&a; a=10; printf(a:%dn,a); printf(*pa:%dn,*pa); printf(&a:%x(hex)n,&a); printf(pa:%x(hex)n,pa); printf(&pa:%x(hex)n,&pa);运行结果:a:10*pa:10&a:f86(hex)pa:

28、f86(hex)&pa:f88(hex).f86f8af8cf8b整型变量a10指针变量paf87f88f89f86例 输入两个数,并使其从大到小输出main() int *p1,*p2,*p,a,b; scanf(%d,%d,&a,&b); p1=&a; p2=&b; if(ab) p=p1; p1=p2; p2=p; printf(a=%d,b=%dn,a,b); printf(max=%d,min=%dn,*p1,*p2);运行结果:a=5,b=9 max=9,min=5.指针变量p1 指针变量p20002008200220042006 指针变量p2 整型变量b 整型变量a5200692

29、008200620082006n指针变量作为函数参数地址传递特点:共享内存,“双向”传递swap(int x,int y) int temp; temp=x; x=y; y=temp;main() int a,b; scanf(%d,%d,&a,&b); if(ab) swap(a,b); printf(n%d,%dn,a,b);例 将数从大到小输出.20002008200A2002200420065变量a 变量b(main)9 变量temp 变量y 变量x(swap)559 59COPY值传递运行结果:5, 9swap(int *p1, int *p2) int p; p=*p1; *p1=

30、*p2; *p2=p;main() int a,b; int *pointer_1,*pointer_2; scanf(%d,%d,&a,&b); pointer_1=&a; pointer_2=&b; if(ab)swap(pointer_1,pointer_2); printf(n%d,%dn,a,b);.20002008200A200220042006200C200E2010.59整型变量a 整型变量b(main)指针pointer_1指针pointer_220002002(swap)指针p1指针p2整型p5920002002COPY5例 将数从大到小输出运行结果:9,5地址传递swap(int *p1, int *p2) int *p; *p=*p1; *p1=*p2; *p2=*p;

温馨提示

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

评论

0/150

提交评论