




已阅读5页,还剩93页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章C语言概述,计算机科学:信息在计算机内使用数据来表示,研究信息表示和信息处理。,数据:是用以描述客观事物的数值、字符,以及一切可以输入到计算机中并由计算机程序加以处理的符号的集合。数据的基本单位称为数据元素数据的最小单位称为数据项,问题数学模型算法程序测试计算,计算机解题过程,程序设计语言,高级语言程序调试过程,C语言特点1、语言简洁、紧凑,使用方便灵活2、运算符丰富3、数据结构丰富,具有现代化语言的各总数据结构4、具有结构化的控制语句5、语法限制不太严格,程序设计自由度大6、C语言允许直接访问物理地址,能进行位操作可实现汇编语言的大部分功能7、生成目标代码的质量高,程序执行效率高8、程序可执行性好,C语言程序结构C程序是由函数构成的。一个C源程序至少包含一个主函数(main或主程序)和若干个其它函数(子函数或子程序)一个函数由两部分程序组成:说明部分和函数体一个C程序总是从main函数开始执行,不论main函数放在程序中的什么位置。程序的流程是通过主函数main调用其它子函数,或子函数间的相互调用C程序书写格式自由,一行内可以写多条语句,但每一语句必须用分号(“;”)结束C语言本身没有输入/输出语句,而是用函数完成相应操作可以用/*,*/在程序的任何部分做注释,算法(Algorithm)是对特定问题求解步骤的一种描述,它是指令(规则)的有限序列,其中每一条指令表示一个或多个操作。,“好”的算法的标准正确性,算法能满足具体问题的需求可读性,首先方便阅读与交流,其次才是机器执行健壮性,输入错误时,能作出反应,避免异常出错效率与低存储量要求,算法的特征有穷性、确定性、输入、输出、有效性,第2章算法Algorithm,对算法“正确性”的要求不含语法错误;对于几组输入数据能得到满足要求的结果;对精心选择苛刻并带有刁难的数据能得到满足要求的结果;对于一切合法的输入均得到满足要求的结果;,算法描述自然语言;程序设计语言;类语言*;流程图,N.Wirth:Programming=Algorithm+DataStructure程序设计=算法+数据结构,问题总是先于算法,程序设计的四个里程碑子程序、高级语言、结构程序设计、面向对象(OOP),结构程序设计限制使用GOTO语句(基于三种基本结构)逐步求精的设计方法自顶向下的设计、编码与调试主程序员组的组织形式,三种基本结构,顺序结构,选择结构,循环结构,常量,符号常量,#definePRICE30#definePI3.1415926#defineMAX1000,Total=num*PRICE;Area=PI*R*R;IntxMAX;,变量,变量名变量名命名规则变量是有类型的,数据类型:变量的取值范围和所允许操作的集合,第3章数据类型、运算符与表达式,变量的存储类型变量的数据类型变量名,变量说明:先定义,后引用,标识符命名规则,intfloatcharPointertoarraystruct,autostaticregisterextern,变量的:有效范围作用时间,变量的:取值范围操作,数据类型,注意:每种类型数据的取值范围Int:-2bits-1(2bits-1-1)Unsigned:0(2bits-1)Float:10-381038Double:10-30810308,运算符,0、赋值运算:=1、算术运算符:+*/%2、关系运算符:=-|sprintf(str,格式控制,变量列表);,TurboC函数,系统自动打开和关闭三个标准文件,标准输入-键盘stdin,标准输出-显示器stdout,标准出错输出-显示器stderr,fpringtf(stdout,“x=%d,y=%fn”,x,y);,pringtf(“x=%d,y=%fn”,x,y);,第5章选择结构程序设计,算术运算关系运算逻辑运算,逻辑常量,例:,a/return();/return()/return,函数的结构,autostaticregisterextern,Int,float,charPointertoStructvoid,类型变量指针数组结构体函数,存储类型返值类型函数名(形式参数表列),标识符命名规则,intfloatcharpointerarrayStructvoid,autostaticregisterextern,变量的:有效范围作用时间,变量的:取值范围操作,类型变量指针变量数组结构体函数,函数的调用,函数调用的一般形式函数名(实际参数表);,函数表达式例如:z=max(x,y)函数语句例如:printf(%d,a);scanf(%d,常量表达式数组元素类型变量指针变量数组结构体函数,被调用函数的声明和函数原型,其一般形式为:类型说明符被调函数名(类型形参,类型形参);或为:类型说明符被调函数名(类型,类型);原则:先声明,后使用,函数的嵌套调用,函数的递归调用,直接递归和间接递归,关于函数的处理结果:,无数据返回单值返回多值返回批量数据返回,调用函数被调用函数,结果,数组作为函数参数,数组元素作为函数实在参数,形参为变量数组名作为函数参数(指针),形参为指针,但应同时传送数组的长度,例:floataverage(floatarray10,intn)floataverage(floatarray,intn)floataverage(float*array,intn),指针变量作为函数参数,存储类型,变量的数据类型:变量的取值范围和允许的操作,变量的存储类型:变量的有效时间和作用范围,变量的存在时间(1)全局变量(globalvarible)定义在所有函数体之外的变量。定义位置:在程序中所有函数体之外;有效范围:在定义开始之后的所有函数中;使用要求:不能与局部变量重名;存在时间:从程序开始到程序结束。,(2)局部变量(localvarible)定义在所函数体内的变量。定义位置:在某一函数体内定义;有效范围:只在定义变量的函数中有效;存在时间:函数调用时产生,函数结束后消失使用特点:局部变量的存在时间决定了不同函数中的局部变量是互不干涉的,即使同名,也完全相互独立。,(3)外部变量(Externvarible),变量的存储类型:autostaticregisterextern,1、自动存储类型(auto)2、寄存器存储类型(register)3、静态存储类型(static)4、外部存储类型(extern),存储变量的特征,从作用于角度,分为局部变量和全局变量。,变量的作用域存在时间动态存储静态存储,关于作用域和生存期的概念:从前面叙述可以知道,对一个变量的性质可以从两个方面分析,一是从变量的作用域,一是从变量值存在时间的长短,即生存期。作用域:空间的角度生存期:时间的角度如果一个变量在某个文件或函数范围内是有效的,则称该文件或函数为该变量的作用域,在此作用域内可以引用该变量,所以又称变量在此作用域内“可见”,这种性质又称为变量的“可见性”。如果一个变量值i在某一时刻是存在的,则认为这一时刻属于该变量的“生存期”,或称该变量在此时刻“存在”。,内部函数与外部函数,内部函数:一个函数只能被定义它的文件内的其它函数调用。定义函数时加staticstatic类型说明函数名(形参表),外部函数:一个函数可以被其它文件内的函数调用。定义函数时加externextern类型说明函数名(形参表),函数定义的完整格式:存储类型返回值数据类型函数名(形参表),使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。,函数的指针和指向函数的指针变量简介,1、函数指针的概念一个函数在编译时,被分配了一个入口地址,这个地址就称为该函数的指针。可以用一个指针变量指向一个函数,然后通过该指针变量调用此函数。2、指向函数的指针变量(1)定义格式函数返值类型(*指针变量)();注意:“*指针变量”外的括号不能缺,否则成了返回指针值的函数。例如,int(*fp)();/*fp为指向int函数的指针变量*/(2)赋值函数名代表该函数的入口地址。可用函数名给指向函数的指针变量赋值。指向函数的指针变量注意:函数名后不能带括号和参数;函数名前的“,string,string,字符串指针作函数参数:参数是字符串或字符串指针,传递的是地址。在被调函数中改变后,可在主调函数中得到改变后的数据。,用数组名、指针变量作函数参数的几种组合:数组名数组名数组名字符指针变量字符指针变量数组名字符指针变量字符指针变量,虽二者均能实现对字符串的存储和计算,但:字符数组由元素组成,元素中放字符;字符指针变量放地址(如字符串的首地址等);赋初值的方式不同;对字符数组赋初值一般用static,如staticcharstr=“IloveChina!”;而字符指针变量赋初值一般不用static,如:char*p=“IloveChina!”;赋值方式不同;对字符数组要么赋初值(即定义时赋值),要么对元素赋值,下面的赋值方式是错误的:charstr14;str14=“IloveChina!”;字符指针变量赋值一般可赋初值,或先定义后赋值,如char*a;a=“IloveChina!”;等价于:char*a=“IloveChina!”;,字符指针变量与字符数组,1、函数的指针及指向函数的指针变量1)函数指针的概念一个函数在编译时被分配一个入口地址,这个入口地址称为函数的指针。2)指向函数的指针变量定义的一般形式:数据类型标识符(*指针变量名)(),重点:函数指针的概念及指向函数的指针变量用指向函数的指针变量作函数参数,函数的指针和指向函数的指针变量,2、用指向函数的指针变量作函数的参数传递的是函数的入口地址,一般的使用形式::sub(f1,f2);/*主调函数/*:sub(x1,x2)int(*x1)(),(*x2)();inta,b,i,j;:/*次主调函数*/a=(*x1)(i);/*x1、x2为被调函数*/b=(*x2)(i,j);:,存储类别数据类型标识符*函数名(形参表列)形参说明函数体如:int*a(x,y)/*存储类别为外部函数*/intx,y;2、指针函数的应用,返回指针值的函数,1、指针函数的定义,指针数组和指向指针的指针,1、指针数组其元素均为指针型数据的数组,称为指针数组。定义形式:类型标识符*数组名数组长度说明如:int*p4;不能写成int(*p)4指针数组主要用于指向多个字符串,使字符串处理方便。,2、指向指针的指针即指向指针数据的地址。定义形式:类型标识符*变量名如:char*P;p为一个指向字符指针变量的指针变量。一般指向一数组的首地址。如:char*name4,*p;p=name;,间接访问的“单级间址”和“二级间址”用指针访问便是间接访问。若指针变量中存放的是目标变量的地址,称为“单级间址”,指向指针的指针为“二级间址”。还可以有多级间址。见下图。,1、有关指针的数据类型,指针型数据小结,2、指针运算小结1)、指针变量加减一个整数如:p+p-p+ip-ip+=ip-=i等实际含义如p+i代表地址计算:p+c*i,c为字节数,整型c=2、实型c=4、字符型c=1。2)、指针变量赋值如:p=(int*)p;,动态数组的实现在程序运行过程中,数组的大小是不能改变的。这种数组称为静态数组。静态数组的缺点是:对于事先无法准确估计数据量的情况,无法做到既满足处理需要,又不浪费内存空间。所谓动态数组是指,在程序运行过程中,根据实际需要指定数组的大小。在C语言中,可利用内存的申请和释放库函数,以及指向数组的指针变量可当数组名使用的特点,来实现动态数组。,动态数组的本质是:一个指向数组的指针变量。,例动态数组的实现方法实例#include“alloc.h”#include“stdlib.h”main()int*array=NULL,num,i;printf(“Inputthenumberofelement:”);scanf(“%d”,/*释放由malloc()函数申请的内存块*/,Structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;,结构体名,成员项定义(列),第10章结构体与共用体,结构体结构体是一种构造数据类型用途:把不同类型的数据组合成一个整体-自定义数据类型结构体定义,struct结构体名类型标识符成员名;类型标识符成员名;.;,成员类型可以是基本型或构造型,struct是关键字,不能省略,合法标识符可省:无名结构体,结构体类型的变量(三种方法)先声名结构体类型,再用结构体类型定义结构体变量在声名结构体类型的同时定义结构体变量直接定义结构体类型变量,几点说明结构体类型与结构体变量概念不同类型:不分配内存;变量:分配内存类型:不能赋值、存取、运算;变量:可以结构体可嵌套结构体成员名与程序中变量名可相同,不会混淆结构体类型及变量的作用域与生存期,结构体变量的引用引用规则结构体变量不能整体引用,只能引用变量成员引用方式:结构体变量名.成员名可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用,结构体变量的初始化-形式一,struct结构体名类型标识符成员名;类型标识符成员名;.;struct结构体名结构体变量=初始数据;,形式二,struct结构体名类型标识符成员名;类型标识符成员名;.结构体变量=初始数据;,形式三,struct类型标识符成员名;类型标识符成员名;.结构体变量=初始数据;,结构体数组结构体数组的定义,结构体数组初始化,结构体数组引用,引用方式:结构体数组名下标.成员名,结构体和指针指向结构体变量的指针定义形式:struct结构体名*结构体指针名;例structstudent*p;,使用结构体指针变量引用成员形式,指向结构体数组的指针,用指向结构体的指针作函数参数用结构体变量的成员作参数-值传递用指向结构体变量或数组的指针作参数-地址传递用结构体变量作参数-多值传递,效率低,共用体构造数据类型,也叫联合体用途:使几个不同类型的变量共占一段内存(相互覆盖)共用体类型定义定义形式:,union共用体名类型标识符成员名;类型标识符成员名;.;,例uniondatainti;charch;floatf;,类型定义不分配内存,形式一:uniondatainti;charch;floatf;a,b;,形式二:uniondatainti;charch;floatf;uniondataa,b,c,*p,d3;,形式三:unioninti;charch;floatf;a,b,c;,共用体变量的定义,共用体变量定义分配内存,长度=最长成员所占字节数,共用体变量任何时刻只有一个成员存在,共用体变量引用引用方式:,引用规则不能引用共用体变量,只能引用其成员,共用体变量中起作用的成员是最后一次存放的成员,不能在定义共用体变量时初始化,可以用一个共用体变量为另一个变量赋值,结构体与共用体区别:存储方式不同,联系:两者可相互嵌套,typedef定义类型功能:用自定义名字为已有数据类型命名类型定义简单形式:typedeftypename;,typedef定义类型步骤按定义变量方法先写出定义体如inti;将变量名换成新类型名如intINTEGER;最前面加typedef如typedefintINTEGER;用新类型名定义变量如INTEGERi,j;,类型定义可嵌套,第11章文件,文件概述文件类型指针文件的打开与关闭I/O及其重定向文件的读写,Main()FILE*fp;,Sourcefile.c,输入数据原始数据,磁盘/带文件,处理结果输出数据,文件概述,一、文件,存储在外部介质上数据的集合,使用数据文件的目的:,3、长期保存数据,2、数据共享,1、程序与数据分离,普通文件:,设备文件:,存储介质文件(磁盘、磁带等),非存储介质(键盘、显示器、打印机等),2、按存储介质,3、按数据的组织形式,文本文件:,ASCII文件,每个字节存放一个字符的ASCII码,二进制文件:,数据按其在内存中的存储形式原样存放,二、文件分类,1、按文件的逻辑结构,记录文件:,由具有一定结构的记录组成(定长和不定长),流式文件:,由一个个字符(字节)数据顺序组成,三、文件处理,文件变量:指向文件结构体的指针,typedefstructint_fd;/文件号int_cleft;/缓冲区中剩下的字符数int_mode;/文件操作方式char*_next;/文件当前读写位置char*_buff;/文件缓冲区位置FILE;,Stdio.h,打开文件(fopen),FILE*fopen(char*name,char*mode),FILE*fp;if(fp=fopen(infile,r)=NULL)printf(Cannotopeninfile!n);exit(0);,文件关闭(fclose),intfclose(FILE*fp)例:fclose(fp),“r+/rb+”(读写),“a/ab”(追加),“w/wb”(只写),“r/rb”(只读),“w+/wb+”(读写),“a+/ab+”(读写),为输入打开一个文本/二进制文件,为输出打开或建立一个文本/二进制文件,为读/写打开一个文本/二进制文件,为读/写建立一个文本/二进制文件,为读/写打开或建立一个文本/二进制文件,向文本/二进制文件尾追加数据,文件使用方式,含义,文件打开方式:,标准I/O及其重定向,系统自动打开和关闭三个标准文件,标准输入-键盘stdin,标准输出-显示器stdout,标准出错输出-显示器stderr,重定向,输入、输出重新定向,(输入、输出由文件完成),符号:,、,读函数(磁盘缓冲区),1、fgetc函数,Charfgetc(fp);/chargetch();,文件的读/写,2、fgets函数,fgets(str,fp);/gets(str);,3、fscanf函数,fscanf(fp,格式控制,地址表);/scanf(格式控制,地址表);,4、fread函数,fread(buffer,size,count,fp);,写函数(缓冲区磁盘),1、fputc函数,fputc(c,fp);/putch(C);,2、fputs函数,fputs(str,fp);/puts(str);,4、fwrite函数,3、fprintf函数,fwrite(buffer,size,count,fp);,fprintf(文件类型指针,格式控制,地址表);printf(格式控制,变量列表);,charstr20;sprintf(str,格式控制,变量列表);,指针数组作main函数的参数:main(intargc,char*argv),命令行如执行file1.exe文件,且文件中有以上参数,则可输入:file1arg1arg2.使用一般形式:文件名参数1参数2参数n形参的意义(1)argc:intargc(=1+参数个数)(2)argv:char*argv,得到的是命令行各参数字符串的首地址;argv0为命令名,argv1argvn各参数,第12章预处理命令,无参宏一般形式为:#define标识符字符串如要终止其作用域可使用#undef命令。,宏定义,带参数的宏的一般形式为:#define宏名(形参表)字符串带参宏调用的一般形式为:宏名(实参表);例如:#defineM(y)y*y+3*y#defineM(y)(y)*(y)+3*(y)#defineM(y)(y)*(y)+3*(y),文件包含,#includestdio.h“在包含文件目录中去查找(包含目录是由用户在设置环境时设置的),而不在源文件目录去查找;#in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省徐州市鼓楼区2024-2025学年三年级数学第二学期期末调研模拟试题含解析
- 湖南文理学院芙蓉学院《误差理论与数据处理》2023-2024学年第二学期期末试卷
- 浙江省杭州市拱墅区公益中学2024-2025学年初三4月质量检测试题(四)数学试题含解析
- 山东省淄博市临淄区金山中学2024-2025学年下学期初三年级期中考试英语试题试卷含答案
- 山东省青岛第二中学2024-2025学年高考第三次质量调研物理试题试卷含解析
- 重庆外语外事学院《土木工程施工与管理软件应用》2023-2024学年第二学期期末试卷
- 山东省济南历下区2024-2025学年高中毕业班第一次综合质量检查数学试题含解析
- 昆明艺术职业学院《土地管理信息系统》2023-2024学年第二学期期末试卷
- 湛江市高一上学期期末调研考试语文试题
- 乳制品企业良好生产规范
- 2025中国新型储能行业发展白皮书
- 海南省天一大联考2024-2025学年高三学业水平诊断(四)语文试题及答案
- 社会认知力测试题及答案
- 肉鸡供需合同协议网页
- 《机械制图(多学时)》中职全套教学课件
- 骆驼祥子考点单选题100道及答案解析
- 新教科版小学1-6年级科学需做实验目录
- 重症培训重症监测的基本原则和方法
- 人体红外测温仪的设计毕业设计论文
- 球墨铸铁管安装施工方案(完整版)
- 个人档案表(最新整理)
评论
0/150
提交评论