




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言总复习〔64学时〕以考试难度为限.一、C语言的数据表示1.1常量和变量1.2表达式1.3数据类型简单类型、结构类型、指针类型1.4输入、输出.1.1常量和变量1.常量常量是在程序执行中,值不发生改变的数据。其值预先决定,之后不变。有不同的数据类型。〔1〕常数〔有的称直接常量、页面常量〕例如的:整数:+5、-3、017〔八进制〕、0x1f(16进制)实数(浮点数):3.14、-1.2E-3、1E10单个字符:‘A’,占一个字节’\\’,转义字符‘\’‘\’非法’\77’〔八进制ASCII码63,‘?’〕,’\78’非法’\x3f’〔十六进制ASCII码63,‘?’〕‘\x3g’非法字符串:“A〞后面有\0,占两个字节E3,2E3.0不合法不是整型量占一个字节.〔2〕符号常量给常量起标识符名字。C语言的符号常量〔用宏定义〕:#definePI3.14159265好处:提高程序易读性;方便修改常量的值;注意:1.一般用大写字母。2,#defineM3不是C语句,后面没有“;〞。3.可以做M+1,不能做M++.〔3〕地址常量当数组在定义时,其变量名为其首地址,是地址常量。inta[10];可以做a+1,不能做a++..1.1常量和变量2.变量用各种操作来改变值数据。从“名〞和“值〞两个角度认识变量〔1〕变量名每个变量,要在使用前定义变量的名字,遵循标识符命名规那么。只能用字母、数字和下划线组成。不能以数字开头。不能用保存字(int,printf,main…..)。.变量定义就是申请数据的存储空间,登记数据的各种存储特性。例如:intm;2个字节-215~215-1(-32768~32767)longn;4个字节-231~231-1charch;1个字节0~255floatx;4个字节±3.4×
(10-38~1038)
doubley;8个字节±1.7×(10-308~10308)
可以用sizeof获得字长sizeof(char)=1sizeof(int)=2sizeof(double)=8.〔2〕变量的值变量值就是由变量名所指定空间上的存储数据内容。即变量的当前值。数据内容用语言的操作语句来改变。赋值语句;键盘输入语句;charchx;intm;/*变量的定义*/chx=‘A’;m=12*3;/*赋值语句*/scanf(“%d〞,&m);/*键盘输入语句*/在程序运行时,将数据存入制定内存空间。②①变量初始化:定义变量时同时确定变量初值。例如:charchy=‘a’;intweight=2;
③.1.2C语言的表达式1、算术表达式2、关系表达式3、逻辑表达式4、赋值表达式5、逗号表达式6、条件表达式7、其他表达式C语言的表达式:使用规定的运算符,将常量、变量、函数〔调用〕连结的一个有意义的式子。
.1、算术表达式用算术运算符来表示对数据的算术运算求值过程。算术运算符:+-*/%2/3结果是0,2%3结果是2注意不同类型运算问题:doublelongunsignedintfloatcharshort高低.2、关系表达式关系运算符:>>=<<=(优先级较高)!===(优先级较低)关系表达式的结果:1〔真〕,非0〔假〕如:x>0,sin(x)<=0.5,(a+b)==(c*d)注意语法合理与数学逻辑错误问题:分析:10<=a<=15a=9是假10<=a<=1510<=a假00<=15真所以要写成10<=a&&a<=15.3、逻辑表达式用逻辑表达式来表示对数据的逻辑关系判断,运算结果是逻辑值“真〞1或者“假〞0。C逻辑运算符包括:!&&||参加逻辑运算的数据必须是逻辑量,可以是逻辑类型的变量、常量,关系表达式或逻辑表达式。C语言中,没有专门的逻辑量,1是真值,0是假值。也认为非零的值为真值。如:inta=3,b=4,c=-5;(1)!((a<b)&&!c||1)(2)if(a)printf(“\nyes〞);a,c均按非0〔即真〕处理.逻辑运算规律①在&&(与)表达式中,假设&&的左端为假,那么不再计算另一端,该表达式值肯定为0〔假〕。②在||(或)表达式中,假设||的左端为真,那么不再计算另一端,表达式的值必定为1〔真〕。inta=5,b=1k=a<=3&&b-->0k?b?假,后面不算了k=0,b=1.判断闰年的条件是:能被4整除但不能被100整除,或能被400整除。(x%4==0&&x%100!=0)水仙花数是指一个三位正整数,其各位数字的立方和等于该数本身(k*100+m*10+n==k*k*k+m*m*m+n*n*n)三角形的根本条件((a+b)>c)&&((c+b)>a)&&((c+a)>b)).4、赋值表达式=,+=,-=,*=,/=,++〔单目〕,--〔单目〕级别仅高于逗号表达式,右结合inta=3,c=2,ba=b=c;n*=m+2相当于n=n*(m+2)k=i++;先k=i,再i=i+1k=++i;先i=i+1,再k=ic赋值给b,b=2b赋值给a,a=2.5、条件表达式e1?e2:e3假设e1为真,表达式的值为e2,否那么为e3.(--a==b++)?--a:b++5-1==4Ta=4--aa=3表达式的值为3a=5,b=44-1==5Fb=6b++b=7表达式的值为6a=4,b=5条件表达式的值的类型为e2,e3二者中类型较高者。如果y=5;y<3?-1.0:2其值为2.0.6、逗号表达式表达式的值等于最后一个表达式的值,运算等级最低!a=5,b=2,c=3a=7+b+c,
a++
a=(7+b+c,
a++)a=12a=57、强制类型转换表达式〔单目〕intm;sqrt((float)m);并没有改变m的类型和数值.理解记忆运算符表
(高)(低)!++,--,等算数运算符关系运算符逻辑运算符&&||条件运算符赋值运算符
逗号运算符右结合单目运算符赋值运算符.1.3数据类型数据类型:在高级语言的数据表示机制中,数据类型〔datatyPe〕是个核心概念。简单类型构造类型指针类型整型实型字符型数组结构体共用体数值型枚举型空类型.1.3数据类型〔1〕整型〔输入、输出格式“%d〞〕类型名字节数数值范围int2-32768~32767short2-32768~32767long4-2147483648~2147483647还有无符号整型〔输入、输出格式“%u〞〕Unsigned[int]20~65535Unsignedshort20~65535Unsignedlong40~42949672951.简单类型.(2)实型实型〔float〕数据的值集是实数集的一个有限子集.-3.4e38,-3.4e-39,3.4E-38,3.4E381.简单类型类型名字节数输入、输出格式有效数字位float4
%f
7doubule8%lf16longdoubule16%lf19不要以为是长整型E38非法.(3)字符型〔输入、输出格式“%c〞〕ASCII码,一个字符占1字节;charca;ca=‘#’;注意转义字符’\’的使用。〔4〕字符串〔输入、输出格式“%s〞〕所谓“字符串〞是指假设干有效字符的序列。C语言字符串可以包括字母、数字、专用字符、转义字符等。字符串常量:使用双引号"China""BASIC""a+b=c""Li-Li""39.4""%d\n""解放军“字符型的一维数组〔相当于字符串变量〕charst[8],str[10];strcpy(st,"12345");strcpy(str,st);不能st=“12345〞;str=st;.2.结构类型“结构〞一般可以称为数据元素,在不同的结构类型中,数据元素会有特定的名称。结构类型的数据由更加根本的成分组成。这些成分称为“数据项〞,结构的子成员。1.3数据类型.(1)数组
A[0]A[1]A[2]A[3]A[4]A[5]A[6]A[7]1020304050607080一个数组〔array〕是由相同类型的假设干数组元素构成的有限序列。C语言的数定义:intB[8],A[8];charC[10];
2.结构类型.例日期类型的定义〔2〕结构体C语言中实现:structDate{intmonth;/*月*/intday;/*日*/intyear;/*年*/};structDatemyd={12,16,1978};系统分配给它的内存是各成员所需内存量的总和。本例是6.
.〔1〕指针:变量名的在内存中的存储地址。〔2〕指针变量inti=12,*p;P=&i;把存放变量i的地址的变量p称作指针变量。指针变量的存放内容是数据的地址。3.指针类型〔3〕指针引用变量指针变量可以指向各种不同的数据类型,因此指针变量也要有不同的指针类型。如:intm,*p;floatx,*q;inta[],*rm=12;p=&m;x=3.14;q=&x;r=a;注意:是否用&.1.4输入、输出输出:printf(“…….〞,…….)%d,%6d,%ld%c,%s%f,%10.2f,%lf,%20.8lfn=3;printf(“\n%d,%d,%d〞,n,++n,n++);计算从右到左,输出从左到右。%s是输出以指定首地址到第一个\0或空格之间的字符串。chara[]=“abcdefg〞,*p=a;printf(“%s〞,*++p);bcd5,5,3.1.4输入、输出输入:scanf(“…….〞,…….)%d,%ld对应intlong%c,%s对应charcharstr[]%f,%lf对应flaotdouble常见错误inta,b;chard,e[20];scanf("%d,%f\n〞,&a,&b);scanf("%d,%f〞,a,b);scanf("%7.2f",&a);scanf("%s",&e);scanf("%c",d);.(1)表达式语句(2)流程控制语句(3)复合语句C语言语句⒈指令语句⒉非指令语句⑴数据定义语句floatx;intm;⑵编译预处理①宏定义#definePI3.14159②文件包含处理#include<stdio.h>二、C语言的程序结构与相关语句.表达式语句1.表达式语句的组成:由一个表达式后接一个分号组成的。i=i+1〔是表达式,没有构成语句〕i=i+1;〔是语句〕x+y;〔是合法语句,但没有实际意义〕⒉表达式语句的分类:①赋值语句:i=1;c=getchar();②函数调用语句:printf(n\Hello,world!");③空语句。其形式为:;④逗号表达式语句:++a,--b;.完成一定的控制功能。9种控制语句:判断语句条件判断语句if()…else…多分支选择语句switch()…case循环语句
循环次数控制语句for()先判断后执行循环控制语句while()先执行后判断循环控制语句do…while()转移控制语句直接转移语句goto终止语句break(用在循环结构、swicth)跳转语句continue(仅用在循环结构)返回语句return流程控制语句.复合语句⒈一组语句括在一对花括号之中,称复合语句。{c=getchar();putchar(c);}注意,一个复合语句的后花括号之后不应再写分号。⒉在语法上是一个整体,相当于一个语句。但凡能够使用简单语句的地方,都可以使用复合语句。一个复合语句中又可以包含另一个或多个复合语句。.二、C语言的程序结构与相关语句程序的三种根本结构:顺序结构选择结构if()…else…switch()…case循环结构for(){…..;}while(){……;}do{……;}while().选择结构单分支结构if(a==b)printf(“yes〞);双分支结构if(a==b)printf(“yes〞);elseprintf(“no〞);多分支结构switch_case
.多分支选择语句switch〔表达式〕{case常量表达式1:语句序列1;[break;] case常量表达式2:语句序列2;[break;] ……… case常量表达式n:语句序列n;[break;] [default:语句序列n+1;]} 根据“表达式〞的值从上至下去寻找与表达式的值相匹配的“case常量表达式〞,执行一个分支后,再执行下一个分支,直到break结束,然后执行switch结构后面的程序。找不到匹配的入口标号时,执行“语句序列n+1〞,然后结束。顺序向下执行程序。.main(){inta=1,b=1;switch(a){case1:switch(b){case0:printf(“$〞);break;case1:printf(“#〞);break;case2:printf(“*〞);}case2:printf(“^〞);case3:printf(“@〞);break;case4:printf(“&〞);}}a=1case1:swtch(1)b=1printf#,break跳出switch(b)结构进入switch(a)结构case2:printf^case2:printf@break跳出switch(a)结构#^@.for,while,do-while三种结构循环变量初始化,继续循环条件,改变循环变量是不可缺少的三个环节。for常用于循环次数的问题中。括号中的两个“;〞不可省。while与do-while常用于循环次数未知的问题中。.注意在for和while语句之后一般没有分号有分号表示循环体就是分号之前的内容〔空循环体〕while(i<100);
i++;for(i=0;i<100;i++);
printf("%d",i);if,swtich,while,for后面的语句只能是一句,因此,多句时别忘了{}。.在while(e)和for(;e;)中的e是循环继续的条件,不能写其它条件!如果缺省,就是死循环!在if(e),while(e)和for(;e;)中e的值是逻辑值〔0或非0〕e一般是关系表达式,逻辑表达式或变量。if(x=1)if(x==1)main(){inti=1;do{i--;}while(i++);printf(“%d〞,i--);}A)-1B)0C)1D)陷入死循环i=1i--,i=0while(i)终止循环i++,i=1输出i=1i--,i=0.break,coutinuebreak只能用于switch和循环语句中,作用提前终止本层次switch和循环。coutinue是跳过循环体内尚未执行的语句,接着执行下次循环。.常用的循环算法求素数、水仙花数、最小公倍数、最大公约数、分解多位数的数字,累加,累乘,分解质因数等。各种有规律的图案。while(m) { k=m%10;/*求最低位的数字*/ m=m/10;/*除去最低位的数字*/ }分解多位数的数字.判断素数main(){inti,x,flag=0;scanf(“%d〞,&x);for(i=2;i<x;i++)if(x%i==0){flag=1,break;}if(flag)printf(“%disaprime〞,x);elseprintf(“%dis’taprime〞,x);}.求阶乘x!longfacto(intx){longy;for(y=1;x>0;--x)y*=x;return(y);}main(){longy;for(y=1;x>0;--x)y*=x;printf(“%ld〞,y);}main(){intm,n;longcmn,facto();scanf("%d%d",&m,&n);cmn=facto(m)/(facto(n)*facto(m-n));printf("%ld\n",cmn);}求C(m,n)=m!/(n!*(m-n)!).数组的定义类型标识符数组名[常量表达式]错误的定义是:或intn;intn=10;scanf("%d",&n);inta[n];inta[n];
定义inta[5]时,a[0],a[1]…..=?随机数!只有inta[5]={3}后,后面几项自动赋0三数组.数组的初始化合法:inta[]={1,2,3,4,5};inti[][3]={1,2,3,4,5,6};inta[5]={1,2,3};chara[4]=“boy〞chara[3]={‘b’,’o’,’y’}不合法:inta[5]={,2,,4,5};inti[2][]={1,2,3,4,5,6};
inta[5]={};chara[4]={boy}.分别用三种方法(数组元素下标法、数组名地址法、指针变量法)访问数组元素。#include<stdio.h>voidmain(){inta[5]={1,3,5,7,9},i,*p;for(i=0;i<5;i++)printf("%d",a[i]);/*下标法*/printf("\n");for(i=0;i<5;i++)printf("%d",*(a+i));/*地址法*/printf("\n");for(p=a;p<a+5;p++)printf("%d",*p);/*指针变量*/}.数组的操作往往用循环结构.数值数组#defineM10inta[M];for(i=0;i<M;i++)字符数组#defineM10chara[M];for(i=0;a[i]!=‘\0’;i++)数值数组倒序#defineM10main(){inti,j,a[M];for(i=0;i<M;i++)scanf(“%d〞,a[i]);for(i=0,j=M;i<j;i++,i--)交换a[i],a[j]字符数组倒序main(){inti,j;chara[50];gets(a);for(i=0,j=strlen(a);i<j;i++,i--)交换a[i],a[j].用函数实现倒序数值数组voidinv(intx[],intn);#defineM10main(){inti,j,a[M];for(i=0;i<M;i++)scanf(“%d〞,a[i]);inv(a,M);for(i=0;i<M;i++)printf(“%d〞,a[i]);}字符数组voidinv(charx[])main(){inti,j;chara[50];gets(a);inv(a);puts(a);}多一个参数,表示元素个数可以整体输入,输出必须单个输入,输出.数值数组voidinv(intx[],intm){inti,j,k;j=m;for(i=0;i<j;i++,i--){k=x[i];x[i]=x[j];x[j]=k;}}字符数组voidinv(intx[]〕{inti,j,k;j=strlen(x);for(i=0;i<j;i++,i--){k=x[i];x[i]=x[j];x[j]=k;}}.main(){inti,j,s=0,a[3][3];for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++)for(j=0;j<3;j++)if(i==j||i+j==2)s+=a[i][j];printf("s=%d\n",s);}主对角线i==j副对角线i+j==2.累加(积〕#defineM10main(){inti,a[M],s=0;for(i=0;i<M;i++)scanf(“%d〞,&a[i]);for(i=0;i<M;i++)s+=a[i];printf(“s=%d〞,s);}#defineM10main(){inti,a[M],s=1;for(i=0;i<M;i++)scanf(“%d〞,&a[i]);for(i=0;i<M;i++)s*=a[i];printf(“s=%d〞,s);}.求最大〔小〕值#defineM30main(){inti,k,k_i,a[M];for(i=0;i<M;i++)scanf(“%d〞,&a[i]);k=a[0];k_i=0;for(i=1;i<M;i++)if(k<a[i]){k=a[i];k_i=i;}printf(“max=%d,maxi=%d〞,k,k_i);}最小值if(k<a[i])最大值.字符数组charstr[50];inti;for(i=0;str[i]!=‘\0’,i++)构造新的字符数组〔删除,插入,复制,连接,倒序〕。1.用和不用字符串函数实现上述功能。2.用指针实现。3.必须注意最后一项一定是:str[i]=‘\0’;或*p=‘\0’;.二维字符数组二维数组在内存中的排列顺序是“按行优先存放〞二维数组a[m][n]可以视为由n个一维数组a[m]组成的。二维字符数组中m由其中最长的字符串决定。charstu[5][6]={“Tom",“Anne",“Mary",“Peter"};其中stu[0]=“Tom“stu[1]=“Anne".字符串函数要用#include<string.h>字符串拷贝函数strcpy字符串连接函数strcat字符串比较函数strcmp测字符串长度函数strlen函数strlen的值为‘\0’之前的全部字符个数.它与数组长度不是一个概念.chars[6]={‘H’,’o’,’w’,’\0’,’o’,’k’}strlen(s)=3.字符串函数的应用字符串赋值字符串比较s1=s2strcpy(s1,s2)s1==s2strcmp(s1,s2)==0s1>s2strcmp(s1,s2)>0s1<s2strcmp(s1,s2)<0.一函数定义的形式:[存储类型]数据类型函数名(形式参数表)
{变量数据定义语句序列;可执行语句序列;}intfun(intx,inty)
{intz;
z=x+y;
returnz;
}函数首部函数体四函数.非void型intfun(intx,inty);main(){inta,b;scanf(“%d,%d〞,&a,&b);printf(“%d〞,fun(a,b));}intfun(intx,inty)
{intz;
z=x+y;
returnz;
}作为框架记住void型voidfun(intx,inty);main(){inta,b;scanf(“%d,%d〞,&a,&b);fun(a,b);printf(“%d,%d〞,a,b);}voidfun(intx,inty)
{intz;
z=x;x=y;y=z;printf(“%d,%d〞,x,y);}.填main()charfun(intx,inty)
{intz;
z=x+y;
returnz;
}main(){}inta,b;函数实参charc;函数返回值scanf(“%d,%d〞,a,b);实参赋值c=fun(a,b);调用函数printf(“%c〞,c);输出结果注意变量数据类型的对应int%dlong%ldfloat%fdouble%lfchar%c或%s.递归调用的概念在C语言中,一个函数直接或间接地调用自身,便构成了函数的递归调用。前者为直接递归调用,后者称间接递归调用。计算n!的函数rfact()longfac(intn){longp;if(n==0||n==1)p=1;elsep=n*fac(n-1);/*自己调自己*/returnp;}voidmain(){printf(“%ld〞,fac(5));}记住递归调用的框架.数组名作函数实参voidfun(inta[],intn);main(){intarr[10],i;for(i=0;i<10;i++)scanf(“%d〞,&arr[i]);fun(arr,10);for(i=0;i<10;i++)printf(“%d〞,arr[i]);}.main(){inti,a=2;for(i=1;i<=5;i++)f(i);printf(“%d\n〞,a);}f(j)intj;{staticinta=100;autok=1;++k;printf(“%d+%d+%d=%d\n〞,a,k,j,a+k+j);a+=10;}函数调用函数定义函数内定义,值不保存。运行结果:100+2+1=103110+2+2=114120+2+3=125130+2+4=136140+2+5=1472两个函数变量同名,互不影响。静态变量.五指针(1)指针:某变量的地址值称为该变量的指针。(2)指针变量:指针变量是存放普通变量地址的变量。指针变量指向这个普通变量。1112ab地址1010101210101012pq地址100220042006指针变量
整型变量.指针变量的定义<存储类型>数据类型*指针变量名1<=初值1><,…>;double*pd,d1,d2;/*pd为指向double型变量的指针
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国照相器材行业运行动态及发展前景分析报告
- 2025-2030年中国热敏电阻市场运行动态及前景趋势分析报告
- 2025-2030年中国灯饰行业运营状况与发展趋势分析报告
- 2025-2030年中国游乐设备总体行业运营状况及发展趋势分析报告
- 2025-2030年中国汽车用钢市场发展趋势及前景调研分析报告
- 2025-2030年中国木材加工市场竞争格局规划研究报告
- 2025-2030年中国帽子行业十三五规划及发展趋势研究报告
- 2025-2030年中国工业清洁洗涤剂市场前景趋势及发展潜力分析报告
- 2025-2030年中国天然气压缩机市场运行趋势及发展前景分析报告
- 2025-2030年中国四氟丙醇行业市场前景规划及发展潜力研究报告
- 中国垂直起降场地建设行业市场现状及投资态势分析报告(智研咨询)
- 仓库租赁、物资仓储保管服务投标方案(技术方案)
- 2024年内蒙古中考语文试卷五套合卷附答案
- 矫形器装配工(四级)职业技能鉴定考试题库(含答案)
- 2025年全国100所名校高三3月起点调研考试-数学试题含解析
- 小学语文教学评一致性论文
- SF-36生活质量调查表(SF-36-含评分细则)
- 术后镇痛泵的使用与护理
- GB 19522-2024车辆驾驶人员血液、呼气酒精含量阈值与检验
- 2024年成都新都投资集团有限公司招聘笔试冲刺题(带答案解析)
- 危险预知训练表(KYT)
评论
0/150
提交评论