您好,欢迎访问三七文档
1第1章语言提高2概述1.1基本数据类型、操作符、表达式1.2语句1.3数组1.4指针1.5结构和联合体1.6函数1.7存储类型1.8预编译1.9有缓冲方式的文件操作及控制台操作1.10其它库函数操作31.1基本数据类型、操作符、表达式在C语言中,变量的声明格式是:类型变量;例:intx=5;sizeof(int)&xx=5图1.1变量x内存解释41.1基本数据类型、操作符、表达式数据类型构造类型指针类型空类型基本类型字符类型整型枚举类型单精度类型实型双精度类型数组类型结构类型共同体类型51.1基本数据类型、操作符、表达式类型含义大小实例常量int整型sizeof(int)inti;100,0x100,0100shortintshort短整型2shorts;(short)100longintlong长整型4longl;100L,(long)100float单精度类型4floatx;0.1fdoublelongdouble双精度类型8doubled;0.1,0.1dchar字符型1charc;100,’0’,‘\0’,’a’,’\n’61.1基本数据类型、操作符、表达式unsigned、signed修饰十六进制、十进制、八进制表示字符常量表示及编码转义符(\0,\n,\t等)逻辑类型的规定71.1基本数据类型、操作符、表达式1.1.2操作符、表达式1.算术操作符算术操作符含义实例+算术加法4.0+7,4+7-算术减法7-5,7-5.0*算术乘法7*67,7*67.0/算术除法5/6,5.0/6%模运算:整除取余数17%781.1基本数据类型、操作符、表达式1.1.2操作符、表达式2.关系操作符关系操作符含义实例小于xy=小于等于x=y大于xy=大于等于x=y==相等x==y!=不等x!=y91.1基本数据类型、操作符、表达式1.1.2操作符、表达式2.关系操作符“xy2”的含义“x”和“!x”作为逻辑表达式的含义101.1基本数据类型、操作符、表达式1.1.2操作符、表达式3.逻辑操作符逻辑操作符含义实例&&逻辑与y%4==0&&y%100!=0||逻辑或y%4==0&&y%100!=0||y%400==0!逻辑非!(y%4==0&&y%100!=0||y%400==0)111.1基本数据类型、操作符、表达式1.1.2操作符、表达式4.位操作符位操作符含义实例&位与操作6&3,结果为2|位或操作6|3,结果为7^位异或操作6^3,结果为5~按位取反操作~6,结果为0xfffffff9121.1基本数据类型、操作符、表达式1.1.2操作符、表达式5.移位操作符移位操作符含义实例右移操作92,结果为2,相当于9/22左移操作92,结果为36,相当于9*22131.1基本数据类型、操作符、表达式1.1.2操作符、表达式5.移位操作符例1.1:我们可以将x的第3至第7位置为y。intx=0x44444444;inty=7;x=(x&0xffffff07)|(y3);printf(\n%x,x);141.1基本数据类型、操作符、表达式1.1.2操作符、表达式5.移位操作符例1.2:我们可以将x的第3至第7取到y中,代码如下intx=0x44444444;inty;y=(x&0xf8)3;printf(\n%x,y);151.1基本数据类型、操作符、表达式1.1.2操作符、表达式6.条件表达式操作符“?:”表达式例:计算y年的天数:若y是闰年,则366天,否则365天。用C表达如下:isLeap(y)?366:365161.1基本数据类型、操作符、表达式1.1.2操作符、表达式7.赋值操作符=+=-=*=/=%=&=|=^===171.1基本数据类型、操作符、表达式1.1.2操作符、表达式7.赋值操作符应用形式为:左值赋值操作符表达式例:x%=7意义是计算“x%7”的结果,送给x空间,其值是最后x的值。注意:无分号。有分号时是语句。“x=y=6”表达正确吗?181.1基本数据类型、操作符、表达式1.1.2操作符、表达式8.逗号表达式逗号表达式的形式如下:表达式,表达式,…,表达式例:charc='\100';printf(%i,(c+1,c+2,c+3));191.2语句赋值语句文法赋值表达式;x++;++x;x--;--x;201.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);求值加1赋值x++先后++x后先211.2语句条件语句文法if(E)S或if(E)S1elseS2判定条件真语句1假图1.2分支语句流程图判定条件真语句1语句2假图1.3分支语句流程图221.2语句复合语句文法{说明部分语句部分}复合语句书写规范231.2语句循环语句while语句for语句do-while语句241.2语句循环语句while语句while(E)S循环条件语句真假图1.4while循环的流程图251.2语句循环语句while语句intgetSum(intm){intsum=0;inti=1;while(i=m){sum+=i++;}returnsum;}261.2语句循环语句for语句for(S0;E;S1)S图1.5for循环语句的流程图271.2语句循环语句do-while语句doSwhile(E);图1.6do-while循环语句的流程图281.2语句break语句文法break;用于循环和switch语句中,表示中止语句执行。291.2语句continue语句文法continue;用在循环语句中,表示跳至循环控制部分,继续循环。301.2语句空语句文法;例:if(xy);{x++;y--;}例:for(i=0;i10;i++);{…….}311.2语句goto语句文法goto标号;321.2语句switch语句文法switch(表达式){caseI1:S11S12S13…casel2:S21S22S23………default:S01S02S03…}331.2语句switch语句intk=1;charc='A';do{switch(c++){case'A':k*=2;break;case'B':k+=2;continue;case'C':k%=3;default:k++;case'D':k/=3;}k++;}while(c'F');printf(k=%d,k);341.2语句return语句文法return;return表达式;前者所在的函数返回类型应是void;后者所在的函数的返回类型应是非void.351.2语句return语句voidf(){...f1();...}voidf1(){...if(...)return;...}f调用f1f1......图1.8函数调用的过程361.2语句函数调用文法函数名(实参表);37综合训练例1.13:“万年历”程序:给定年y,计算y年的日历,即按星期对齐的方式,将y年的日历打印出来。·问题分析:本问题的求解步骤是S1计算y年第一天的星期;S2计算y年m月第一天的星期;S3打印y年的日历:对y年的每一月,执行打印操作。38综合训练S1计算y年第一天的星期;intgetYearWeekDay(inty){intsum=0;inti;if(y=2000){for(i=2000;iy;i++){sum+=getYearDays(i);}return(sum+6)%7;}else{for(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);}}41voidprintMonth(inty,intm){inti=0;intw;printf(\n*************%d月**************\n,m);w=getMonthWeekDay(y,m);if(w==0){printf(\n%-7d,count);count++;}else{printf();}for(i=0;iw;i++){printf();}for(i=1;i=getMonthDays(y,m);i++){printf(%7i,i);w++;w%=7;if(w==0&&igetMonthDays(y,m)){printf(\n%-7d,count);count++;}}}421.3数组一维数组一维数组的声明形式是:类型数组变量[数组长度];如:inta[10];a+1a[9][1]…a+910*sizeof(int)[0]图1.9inta[10]声明的内存图示&a+1a是缓冲区的开始地址,是常地址。431.3数组一维数组&a+1:表示下一个a[10]空间的地址;a+1:表示下一个整数空间的地址。类型地址大小aint[10]a(等于&a,但类型不同)10*sizeof(int)a[i]inta+i(等价于&a[i])sizeof(int)441.3数组一维数组运算符[]地址[表达式]例:若有声明intx,a[10],从文法上,下式都是正确的。a[-1]a[100](&a[3])[-2](&x)[0]451.3数组二维数组二维数组的说明形式如下:类型数组变量名[长度1][长度2];461.3数组二维数组如:intaa[2][3];图1-10inta[2][3]声明的内存图示aa+1aa[1][1][0][0][0][1]aa[1]+12*3**sizeof(int)aa[1]+2[0][2][1][0][1][2]aa[0]+1&aa+1aa[0]+2471.3数组二维数组类型地址大小aaint[2][3]aa(等于&aa)2*3*sizeof(int)aa[i]int[3]aa+i(等价于&aa[i])3*sizeof(int)aa[i][j]intaa[i]+j(等价于&aa[i][j])sizeof(int)481.3数组多维数组intaaa[2][3][4];类型地址大小aaaint[2][3][4]aaa(等于&aaa)2*3*4*sizeof(int)aaa[i]int[3][4]aaa+i(等价于&aaa[i])3*4*sizeof(int)aaa[i][j]int[4]aaa[i]+j(等价于&aaa[i][j])4*sizeof(int)aaa[i][j][k]intaaa[i][j]+k(等价于&aaa[i][j][k])sizeof(int)491.4指针指针指针的声明形式是:类型*指针变量;例如:int*p;sizeof(int*)&pp:int*图1.11指针变量内存空间501.4指针指针*p表示p所指空间的内容含义类型地址大小p指针变量int*&psizeof(int*)*p所指的内存单元的内容intpsizeof(int)511.4指针指针例1.14:intx=0;int*p;p=&x;*p=6;printf(“\nx=%d”,x);图1.12指针变量引用整型变量空间p:int*sizeof(int)p≡&xx≡*p=
本文标题:1 C语言提高
链接地址:https://www.777doc.com/doc-7028140 .html