




已阅读5页,还剩110页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第1章语言提高,2,概述,1.1基本数据类型、操作符、表达式1.2语句1.3数组1.4指针1.5结构和联合体1.6函数1.7存储类型1.8预编译1.9有缓冲方式的文件操作及控制台操作1.10其它库函数操作,3,1.1基本数据类型、操作符、表达式,在C语言中,变量的声明格式是:类型变量;例:intx=5;,4,1.1基本数据类型、操作符、表达式,5,1.1基本数据类型、操作符、表达式,6,1.1基本数据类型、操作符、表达式,unsigned、signed修饰十六进制、十进制、八进制表示字符常量表示及编码转义符(0,n,t等)逻辑类型的规定,7,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式1算术操作符,8,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式2.关系操作符,9,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式2.关系操作符“xy2”的含义“x”和“!x”作为逻辑表达式的含义,10,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式3.逻辑操作符,11,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式4.位操作符,12,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式5移位操作符,13,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式5移位操作符例1.1:我们可以将x的第3至第7位置为y。intx=0 x44444444;inty=7;x=(x,14,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式5移位操作符例1.2:我们可以将x的第3至第7取到y中,代码如下intx=0 x44444444;inty;y=(x,15,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式6条件表达式操作符“?:”表达式例:计算y年的天数:若y是闰年,则366天,否则365天。用C表达如下:isLeap(y)?366:365,16,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式7.赋值操作符,17,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式7.赋值操作符应用形式为:左值赋值操作符表达式例:x%=7意义是计算“x%7”的结果,送给x空间,其值是最后x的值。注意:无分号。有分号时是语句。“x=y=6”表达正确吗?,18,1.1基本数据类型、操作符、表达式,1.1.2操作符、表达式8逗号表达式逗号表达式的形式如下:表达式,表达式,表达式例:charc=100;printf(%i,(c+1,c+2,c+3);,19,1.2语句,赋值语句文法赋值表达式;x+;+x;x-;-x;,20,1.2语句,赋值语句自加(减)赋值x+;+x;x-;-x;,例:intx=5;inty;y=x+;printf(nx=%d,y=%d,x,y);x=5;y=+x;printf(nx=%d,y=%d,x,y);,21,1.2语句,条件语句文法if(E)S或if(E)S1elseS2,22,1.2语句,复合语句文法说明部分语句部分复合语句书写规范,23,1.2语句,循环语句while语句for语句do-while语句,24,1.2语句,循环语句while语句while(E)S,图1.4while循环的流程图,25,1.2语句,循环语句while语句intgetSum(intm)intsum=0;inti=1;while(iy);x+;y-;例:for(i=0;i10;i+);.,31,1.2语句,goto语句文法goto标号;,32,1.2语句,switch语句文法switch(表达式)caseI1:S11S12S13casel2:S21S22S23default:S01S02S03,33,1.2语句,switch语句intk=1;charc=A;doswitch(c+)caseA:k*=2;break;caseB:k+=2;continue;caseC:k%=3;default:k+;caseD:k/=3;k+;while(c=2000)for(i=2000;iy;i+)sum+=getYearDays(i);return(sum+6)%7;elsefor(i=y;i2000;i+)sum+=getYearDays(i);return(-sum+6)%7;,39,综合训练,S2计算y年m月第一天的星期;intgetMonthWeekDay(inty,intm)intsum=0;inti;for(i=1;im;i+)sum+=getMonthDays(y,i);return(getYearWeekDay(y)+sum)%7;,40,综合训练,S3打印y年的日历:对y年的每一月,执行打印操作。voidprintYear(inty)inti;count=1;for(i=1;i=12;i+)printMonth(y,i);,41,voidprintMonth(inty,intm)inti=0;intw;printf(n*%d月*n,m);w=getMonthWeekDay(y,m);if(w=0)printf(n%-7d,count);count+;elseprintf();for(i=0;iw;i+)printf();for(i=1;i=3)m=atoi(*(argv+2);printMonth(y,m);elseprintYear(y);return1;,58,1.4指针,例1.19:命令行参数的获取,59,1.4指针,字符串C语言中的字符串实质上是这个缓冲区的首地址。一个字符串,它是自标志的,字符串的结束是以0标志的。常字符串,如“hello”,60,1.4指针,字符串操作-拷贝char*strcpy(char*s1,char*s2)inti;for(i=0;*(s2+i)!=0;i+)*(s1+i)=*(s2+i);*(s1+i)=0;returns1;,61,1.4指针,字符串操作-连接char*strcat(char*s1,char*s2)inti,j;for(j=0;*(s1+j)!=0;j+);for(i=0;*(s2+i)!=0;i+)*(s1+j+i)=*(s2+i);*(s1+j+i)=0;returns1;,62,1.4指针,字符串操作-比较intstrcmp(char*s1,char*s2)inti;for(i=0;*(s1+i)!=0,63,1.4指针,字符串操作-计算长度intstrlen(char*s1)inti;for(i=0;*(s1+i)!=0;i+);returni;,64,1.4指针,考虑下面代码的执行结果:charstr25;strcpy(str0,hello);strcpy(str1,hi);,65,1.4指针,指针数组int*pInt8;char*str=“请输入整数”,“x=%d”,“除法错误”;,66,1.4指针,数组指针int*pList4;int(*pItem)4;,67,1.4指针,数组指针intgetTotal(int(*item)4)inti;intsum=0;for(i=0;i4;i+)sum+=*(*item+i);returnsum;,68,1.4指针,数组指针intmain()inti;intitems44=1,3,4,5,2,4,5,3,5,6,3,2,6,4,3,1;for(i=0;i4;i+)printf(n%d:%d,i+1,getTotal(items+i);,69,1.5结构和联合体,结构结构类型定义的一般形式是:struct结构体名类型域变量;类型域变量;,70,1.5结构和联合体,结构例1.21:structstucharid8;charname10;intsex;floatscores7;li;,71,1.5结构和联合体,结构,72,1.5结构和联合体,结构structstu*pStu;structstuli;pStu=,73,1.5结构和联合体,结构,74,1.5结构和联合体,联合体union联合体名类型域变量;类型域变量;,75,1.5结构和联合体,联合体uniontagstructintw,h;rect;intr;intd;uniontagshape;,76,1.5结构和联合体,联合体unioniaddrunsignedlongip;unsignedcharbyte4;sizeof(unioniaddr)=4。,77,1.5结构和联合体,位域structunsignedintf1:3;unsignedintf2:3;unsignedintf3:3;q;,78,1.5结构和联合体,链表结点的定义typedefstructstagintkey;structstag*next;SNODE;/单向链表结点的定义typedefstructdtagintkey;structdtag*previous,*next;DNODE;/双向链表结点的定义,79,1.5结构和联合体,链表结点的操作voidinsertAtHead(SNODE*head,SNODE*);SNODE*createSNode(intkey);voiddeleteAtTail(SNODE*head);voidtraversal(SNODE*head);,80,1.5结构和联合体,二叉树结点的定义typedefstructt2Tagintkey;structt2Tag*left,*right;T2NODE;,81,1.5结构和联合体,树结点的定义typedefstructtTagintkey;structtTag*parent;structtTag*elderBrother,*brother;structtTag*children;TNODE;,82,1.6函数,函数的定义格式是:返回类型函数名(参数表)函数体函数的调用格式是:函数名(实际参数);函数原型声明的格式为:返回类型函数名(参数表);,83,1.6函数,参数传递函数定义时的参数称为形式参数,函数调用时的参数称为实际参数。当函数调用时,首先在栈区内分配形式参数的内存空间,然后计算实际参数的值,并将实际参数的值传给形式参数的空间。(对程序执行效率的影响?),84,1.6函数,参数传递voidf(int);voidf1(int*);intmain()intx=100;f(x);printf(x=%d,x);f1(,voidf(intx)inty=100;x+=100;,voidf1(int*x)inty=100;*x+=y;,85,1.6函数,参数传递voidf2(int);intmain()inta=1,2,3;f2(a);printf(%d-%d-%d,a0,a1,a2);,voidf2(inta3)a0=4;a1=3;a2=2;,在参数传递时,它将数组的地址传给形参,在函数执行时,改变的是同一数组的元素值。,86,1.6函数,函数指针定义形式返回类型(*函数指针变量)(参数表);函数指针是一个指针变量,与一般指针不同的是,它是指向代码区的,而不是指向数据区的指针。例:void(*pf)();,87,1.6函数,函数指针voidopen();/*open的原型声明*/voidprint();/*print的原型声明*/voidexitIt();/*exitIt的原型声明*/void(*pfs)()=open,print,exitIt;/*函数指针数组*/intmain()inti;void(*pf)();pf=open;(*pf)();/*调用open*/for(i=0;i3;i+)(*pfsi)();/*依次调用函数open、print、exitIt*/,88,1.6函数,其中voidopen()printf(open);voidprint()printf(print);voidexitIt()printf(exit);,89,1.6函数,例:以下定义的意义void(*getInterrupt(intno)();voidsetInterrupt(intno,void(*pf)();LRESULT(*lpfnWndProc)(HWND,UINT,WPARM,LPARAM);,90,1.7存储类型,C中变量的完整说明形式是:存储类型数据类型变量;C中存储类型registerauto(默认存储类型)staticextern,91,1.7存储类型,static存储类型在函数内定义时,static作用范围在函数内,但在运行期间一直存在。在函数外定义时,从定义点开始有效,但只限于本文件使用。在程序运行期间一直存在。,92,1.7存储类型,static存储类型-下面代码打印出什么,为什么?intmain()voidprint();print();print();print();voidprint()staticinti=0;printf(%d-,i+);,93,1.7存储类型,extern存储类型在函数内时,引用函数外定义的量。在函数外时,引用其它文件定义的量。总之,extern变量,不分配内存。,94,1.8预编译,宏定义可用于定义值或定义一些功能,其形式是:#define预编译量#define预编译量值#define预编译量(参数,参数.)功能定义,95,1.8预编译,宏定义例子#definePRINT#definePI3.14159265#define子LEN200#defineHIWORD(l)*(short*)#endif#ifndefPRINT/*若未定义PRINT,则下面代码参与编译*/printf(nPRINTisnotdefined.);#endif#ifdefPRINT/*若定义了PRINT,则下面代码参与编译*/printf(nPRINTisdefined.);#else/*否则,即若未定义PRINT,则下面代码参与编译*/printf(nPRINTisnotdefined.);#endifprintf(nend);,99,1.9有缓冲方式的文件操作及控制台操作,控制台操作intprintf(constchar*,.);intscanf(constchar*,.);,100,1.9有缓冲方式的文件操作及控制台操作,控制台操作printf(n%d,%ld,%10d,%10ld,6,6L,6,6L);printf(n%x,%5lx,64,64);printf(n%o,%5o,64,64);printf(n%u,%5u,65,-1);printf(n%c,%5c,65,A);printf(n%s,%10s,hello,hello);printf(n%f,%10.3f,6.0,6.00);printf(n%e,%10.3e,6.0,6.00);printf(n%g,%10.3g,6.0,6.00);,101,1.9有缓冲方式的文件操作及控制台操作,控制台操作intx;longl;scanf(%d,%ld,102,1.9有缓冲方式的文件操作及控制台操作,文件操作读取操作时有三个步骤:打开文件,读写操作,关闭文件,以释放文件所占的各种缓冲区。,103,1.9有缓冲方式的文件操作及控制台操作,打开文件FILE*fopen(constchar*,constchar*);打开文件“c:tttt.txt”。char*path=c:tttt.txt;FILE*stream;if(NULL=(stream=fopen(path,rb)printf(File%sdoesntexist.,path);exit(0);,104,1.9有缓冲方式的文件操作及控制台操作,打开文件方式r:打开文件用于输入文件必须存在,否则无法打开w:打开文件用于输出文件若存在,则删除重新建立a:打开文件用于在文件尾追加数据。文件必须存在,否则无法打开r+:打开文件用于读、写文件必须存在,否则无法打开,105,1.9有缓冲方式的文件操作及控制台操作,读写操作-文件状态函数feof可判定指定的输入流是否结束。其原型定义:intfeof(FILE*);若处于文件尾(endoffile),则返回真(1),否则返回假(0)。函数ferror可判定指定的流是否出错,若有错误,则返回1,否则返回0。其原型定义如下:intferror(FILE*);,106,1.9有缓冲方式的文件操作及控制台操作,读写操作-读写字符函数getc和fgetc都是按字符读入内容,其原型定义如下:intgetc(FILE*);intfgetc(FILE*);例:while(!feof(stream)intch=getc(stream);/这里应是处理代码.,107,1.9有缓冲方式的文件操作及控制台操作,读写操作-格式读写按指定的格式读、写文件流的操作函数是以下两个函数:intfprintf(FILE*,constchar*,.);intfscanf(FILE*,constchar*,.);(有差别吗?),108,1.9有缓冲方式的文件操作及控制台操作,读写操作-块读写函数fwrite将指定缓冲区中的内容写入文件中,函数fread将文件中的内容读到指定的缓冲区中。它们的原型声明如下:size_tfwrite(constvoid*,size_t,size_t,FILE*);size_tfread(void*,size_t,size_t,FILE*);,109,1.9有缓冲方式的文件操作及控制台操作,读写操作-文件指针操作函数fseek改变文件指针的位置。其原型声明为:intfseek(FILE*,long,int);其中第三个参数可选三个值:0、1、2。0表示以文件头为参照,表示以当前位置为参照,2表示以文件尾为参照。第二个参数表示距参照点的距离,类型为长整数。函数ftell可得到文件指针的位置。longftell(FILE*);函数rewind将文件指针返回文件开始位置。voidrewind(FILE*);,110,1.9有缓冲方式的文件操作及控制台操作,读写操作-文件指针操作例:利用文件指针计算文件长度的函数:longgetFileLen(FILE*stream)longold,len;old=ftell(stream);/保留原文件操作地址fseek(stream,0,2);/将文件指针移至文件尾len=ftell(stream);/保留文件位置fseek(stream,old,0);/恢复原文件位置returnlen;,111,1.9有缓冲方式的文件操作及控制台操作,关闭文件的函数是:voidfclose(FILE*f);关闭文件后,所以该文件操作的缓冲区全部释放。,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 堤防工程设计与施工技术方案
- 污水处理厂设备更新项目施工方案
- 室外道路照明智能化改造方案
- 建设工程项目质量考核与评估方案
- 现代农业发展示范项目建设工程方案
- 中心城区雨污分流改造项目建筑工程方案
- 智慧储能制造基地建设项目施工方案
- 运动鞋生产线项目建设工程方案
- 水利水库枢纽工程施工管理方案
- 多种可再生能源联合应用的碳减排效应研究
- 微信工作群规定管理制度
- 甲亢疾病案例分享会
- 2025年高校教师资格证之高等教育学通关题库(附答案)
- 人类简史面试题目及答案
- T/SHBX 007-2023单向拉伸聚乙烯包装膜
- 电子版实习协议书
- 无人机公司人力资源管理方案
- 新华社 校招 笔试题目及答案
- 2025pvsyst v8中文版PVsyst SA小时数据模拟
- 第十二讲民族危亡与民族意识觉醒(1840-1919)-中华民族共同体概论专家大讲堂课件
- 消防风机房管理制度
评论
0/150
提交评论