C语言核心知识点_第1页
C语言核心知识点_第2页
C语言核心知识点_第3页
C语言核心知识点_第4页
C语言核心知识点_第5页
免费预览已结束,剩余4页可下载查看

下载本文档

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

文档简介

1、C语言总结基础知识:1 .常量:定义#define N 30注意不能加分号,同时知道N是符号常量。2 .变量名,数组名,函数名命名都要求只能使用字母、 数字、_(下划线),开头不能是数字。变量类型:int,float,double,charvoid 。有时也用long表示长整型数。临时类型转换, 要在前面写上(),()里写上要转换的类型,如 float x=3.1; 则(int)x 表示将x临时转换为整型 2,但x 仍然是float,还是为3.1.3 .格式控制符:必须了解 d(十进制整型),f (浮点 型,有明double 用,),%c(单个字符),s(字符 串)、%u (无符号数),%o

2、(八进制),%x , %X (十 六进制,小写x表示输出十六进制的 af用小写,大 写X表示输出十六进制的 AF用大写),若要输出八 进制或十六进制的前缀 0和0x ,要用%#o,%#x. 注 意“% ”输出一个。4 .基本输入输出:输入用scanf(注意使用& ,数组则 无需&),getchar()(输入单个字符),gets (输入字符串),gets使用时若是一维数组形式为 gets(str), 若 为二维数组使用形式为 gets(stri).输出使用 printf()输出多个变量时,顺序是自右向左,putchar(),puts()。5 .几个重要的函数x开平方sqrt(x)

3、x的y次方pow(x,y)e的x次方1exp(x)整数绝对值abs(x)小数绝对值fabs(x)6 .三目运算符 ?:(条件)?条件真返回:条件假返回 如返回整数a,b中的较大值表示为 a>b?a:b;7 .运算符的优先级:()!,+,-,-* / % + -<<=> >=!=& |?:=和复合赋值逗号,两个整数相除结果为整数,%要求两个数都必须是整数,同时的结果正负由被除数的正负决定,逗号表 示达按由左到右顺序执行,结果取最右边表达式的值,如(a=b=6,a+b), 结果为 12.8 .以开头为转义字符,如'n'(换行),'t&#

4、39; (8个空 格),特别强调''" '%分别表示,',%;另'ddd ' 表不'八进制,'xdd '表不'十六进制,如 101 '表不''A ' , 'x42 '表示'B 或未定义的转义字符则直接输出后的字符,如A.9 .选择结构:(1 ) if(条件)语句1 ;else 语句2 ;(2) if(条件1) 语句1 ;else if( 条件2)语句2 ;else if( 条件3)语句3 ;else 语句4 ;(3) if嵌套的形式如下if(条件1)

5、if(条件2)语句1 ;else 语句2 ;elseif(条件3) 语句3 ;else 语句4 ;(4) switch 结构执行时只要不遇到break一直向下执行,直到遇到break 或执行到最后一句。表达式的结果只能为整数或单个字符switch(表达式)case判断值1 :语句;break;case判断值2 :语句;break;case判断值3:语句;break;case判断值4:语句;break;default:语句;(5) switch 嵌套switch( 表达式)case 判断值1 : switch( 表达式)case判断值 0:语句;break;case 判断值1 :语句;break

6、;|case 判断值2 :语句;break; default:语句;循环相关知识点:1 .几种循环结构的流程图必须能看明白(见PPT)if(条件)goto 位置通常重复随机数的判断while( 条件)语句;do 语句;while(条件);注意分号不能少for(表达式1;表达式2;表达式3)循环语句;break 和 continue :break :用于循环语句或switch 语句;.跳出当前循 环或当前switch 语句,如发生循环嵌套或switch嵌套,则只能跳出 break所在的层次。Continue :只能用于循环语句;continue的作用是提前结束本轮循环,进入下一轮循环,不是退出循

7、环。2 .累加加乘:最核心的是如何将通项用表达式表达出 来,注意正负跳变情况(f=-f)。用f乘以通项。形女口 s=a+aa+aaa+aaaa+ int i,t=0,s=0;for(i=1;i<=n;i+)t=t*10+a;s=s+t;还有 s=a+aa+aba+abba+abbba+9int ,i,s=a,t=0;for(i=1;i<n;i+)第一项在初值中,所以i<ns+=a*pow(10,i)+t+a;b=b*10;t=t+b;以上两种如遇填空题怎么填?阶乘n!的核心算法:p=1;for(i=1;i<=n;i+)p=p*i;3 .循环次数:把树型图正确的画出来。特

8、别要注意的 是画树型图,必须搞清楚几个内循环之间到底是平行 关系还是嵌套关系,以免出错。若每一层的循环次数 是固定的,嵌套的多个循环次数直接对乘即可得到当 到循环语句循环的次数。做这类题最关键的是千万别 忘记变量的初值。4 .素数:只能被1和自身整除的数。核心算法(判断n是否为素数):1 .假设:flag=1;2 .验证:for(i=2;i<n;i+)if(n%i=0)flag=0;break;3 .判断:if(flag=1) printf( "是); else printf("不是");核心算法第2步可用以下几种方式:for(i=2;i<n;i+)或

9、 for(i=2;i<=n/2;i+)或 for(i=2;i<=sqrt(n);i+)if(n%i=0)flag=0;break;5 .最大公约数:辗转相除法(假设原数为m,n)if(m<n) t=m;m=n;n=t;x=m;y=n;r=x%y;while(r!=0)x=y; y=r; r=x%y;最大公约数为y,最小公倍数为m*n/y或(注意不同之处)while(y!=0)r=x%y; x=y; y=r;最大公约数为x ,最小公倍数为m*n/x;6 .分解质因数:/*乘号在后面*/for(i=2;i<=n;i+)while(n!=i)if(n%i=0) printf(

10、 " %d* ",i);n=n/i;else break;printf( " %d " ,n);/*乘号在前面*/printf( %d=1 ",x);i=2;while(i<=x)while(x%i=0)printf( " *%d " ,i); x=x/i;i=i+1;7 .文本作图(关注各种菱形)外循环控制行数内循环1控制空格数内循环2控制字符及数量换行;8 .正序数与逆序数(回文数也用此算法)正序核心算法:s=0;k=1;while(n)s=s+n%10*k;n=n/10;k=k*10;逆序核心算法:s=0;whi

11、le(n) s=s*10+n%10;n=n/10;9 .水仙花数:一个三位数的每位数字立方之和等于原数。如 153=1 3+5 3+3 3.阿姆斯特朗数:超过三位数也满足上述规律,每位数字之和还是等于原数,相当于水仙花数扩展。10 .两种随机函数1 .rand()用法:rand()% 数字,如 rand()%10函数用之前使用以下声明语句srand(unsigned)time(NULL);2.random()用法:random( 数字),如 random(10)函数使用之前用以下声明语句 randomize();通常使用第一种,有时候这两种也可能混用,但不推荐混用。在m,n区间产生随机数ran

12、dom() 函数格式: random(n-m+1)+m假如要产生50,100之间的随机整数,表达式为:random(100-50+1)+50 即 random(51)+50,rand()函数格式:rand ()%(n-m+1)+m假如要产生50,100之间的随机整数,表达式为:rand()%(100-50+1)+50 即 rand()%51+50典型代码:随机产生n个互不相同的两位数(也可能是三位数,自己变代码)for(i=0;i<n;i+)kk:ai=rand()%90+10;for(j=0;j<i;j+)if(ai=aj) goto kk;11 . “同构数”是指这样的一个数:

13、它出现在它的平 方数的右端。for(x=1;x<=1000;x+) k=10;/* 一位数 10*/ 值或最小值变量。max=ai; 或 min=ai;二维数组的最值问题:最值与平均值算法也一样二维数组中的最大值及最大值所在行号,列号;二维数组中每行的最大值;先行后列循环二维数组中每列的最大值。先列后行循环 以上三种情况只需要调整内外循环即可。数组元素逆序if(x>10) k=100;/* if(x>100)k=1000;/* d=x*x; t=d/k;/*t if(d-t*k=x)printf(二位数 100*/三位数1000*/为整数商*/” %d,%d ",x

14、,d);方for(i=0,j=n-1;i<j;i+,j-)t=ai;ai=aj;aj=t;方法二:for(i=0;i<n/2;i+) t=ai;ai=an-1-i; an-1-i=t;也可写成 for(x=1;x<=1000;x+) d=x*x;if(d%10=x|d%100=x|d%1000=x)printf( " %d,%d ” ,x,d);12 .完数:一个数的它的所有因数(不包括自身)之和等于这个数,即完数典型例题:找出1000以内所有完数for(i=2;i<=1000;i+)s=0; /* 这句不能少哦*/for(j=1;j<i;j+)if(i

15、%j=0) s=s+j;if(ss=i) printf( %d ",i);13 .十进制小数转换为二进制形式。如输入 0.45 ,输出0.450000=0.01110。(二进制小数点后保留五位)main() float num;int d,t=0;scanf("%f ” ,&num);printf( "%f=0. ” ,num);donum=num*2;d=num;printf( "d ”,d); num=num-d;t+;while(num!=0&&t<=4);14 .数组的基本概念,这个必须清楚,自行查看数组最开始的笔记

16、最值问题:假设第一个数为最大值或最小值;max=a0; 或 min=a0;用第一个元素与数组中其余元素进行逐一比较。for(i=1;i<n;i+)if(max<ai) 或 if(min>ai)若后面元素有比假设的大或小,就用该数赋值给最大15 .进制转换R制转十进制(char a4;) n=n*r+ai-0'十进制转R进制核心算法: 用原数除R取余数放在数组; i=0;while(n)ai+=n%R;n=n/R;通过循环再将数组元素逆序输出for(k=i-1;k>=0;k-) printf( "d ",ak);如果要写入原数组中,则可以这样f

17、or(k=0;k<i/2;k+) ak=ai-1-k;16 .四种排序(均以升序说明,降序自行补脑 ) 四种排序若转成while也要注意看懂。顺序比较法(升序)for(i=0;i<n-1;i+)for(j=i+1;j<=n-1;j+)if(ai>aj)t=ai;ai=aj;aj=t;选择法(升序)for(i=0;i<n-1;i+)p=i;for(j=i+1;j<=n-1;j+)if(ap>aj)p=j;if(i!=p)t=ap;ap= ai;ai=t;冒泡法(升序)for(i=0;i<n-1;i+)for(j=0;j<n-1-i;j+)if

18、(aj>aj+1)t=aj;aj=aj+1;aj+1=t;插入法(升序)for(i=1;i<=n-1;i+) t=ai; j=i-1;while(j>=0&&t<aj) aj+1=aj;j=j-1;aj+1=t;17 .对半查找(以升序为例)f=0;while(f=0&&low<=high)mid=(low+high)/2;if(x=amid) f=1;else if(x<amid) high=mid-1;else low=mid+1;if(f=0) printf( " No find ");else pr

19、intf( " a%d=%d” ,mid, amid);或为降序把上面的代码high=mid+1;low=mid-1;18 .二维数组对角线及周边假设数组是nXn主对角线:i=j副对角线:i+j=n-1周边元素:i=0|j=0|i=n-1|j=n-119 .数组元素移动左移:x=a0;右移:x=an-1;for(i=0;i<n-1;i+)for(i=n-1;i>0;i-)ai=ai+1;ai=ai-1;an-1=x;a0=x;注:开始移动的位置不一定在两头20 .数组元素的插入要求数组必须有序方法1 :方法2:for(i=0;i<n;i+)flag=0;if(x&g

20、t;ai)for(i=0;i<n;i+)break;if(x>ai)for(j=n-1;j>=i;j-)for(j=n-1;j>=i;j-)aj+1=aj;aj+1=aj;ai=x;ai=x; flag=1; break; if (flag=0) an=x;21 .数组元素删除方法1;方法2 :intint k=0,i=0,aN=;k=0,i=0,n,aN=;for(i=0;i<N;i+)n=N;if(ai!=x)for(i=0;i<n;i+) if(ai=x) for(j=i;j<n-1;j+) aj=aj+1; n-;i-:ak+=ai;22 .数

21、组元素复制数值型或单个字符:可以直接用=复制字符串型:复制用 strcpy(str1,str2) 形式复制注:二维数组 mXn下标对应一维数组下标的关系是i*m+j(i,j分别代表行标和列标)23 .杨辉三角形#define N 10 main() int i,j,aNN;for (i=0;i<N;i+)ai0=1;a皿i=1;for(i=2;i<n;i+)for(j=1;j<=i-1;j+)aij=ai-1j-1+ai-1j;一维数组处理杨辉三角形void main()int yh11=0,row,col;yh1=1;/*第一个元素为1 */printf("%4d

22、n",yh1);/*打印第一行*/for(row=2;row<=10;row+)/*从第2行到第10行*/yhrow=1;/*最右边的一个数为1*/for (col=row-1;col>=1;col-)/* 从第二行开始从右边第二个元素开始计算,直到第二个元素*/yhcol=yhcol+yhcol-1;/*元素的值是上一行本位置元素值加上上一行前一位 置的值*/for (col=1;col<=row;col+)/*打印这一行*/printf("%4d",yhcol);printf("n");24 .数组元素加密有一行电文,按下

23、面规律加密,字母循环后移 5个位置 后输出,如狂成f',变城bb'main()char a10=" bbBAbabaz" ;int i,n;n=strlen(a);for(i=0;i<n;i+)if(ai>='a'&&ai<='u'11ai>='A' &&ai<='U')ai+=5;else if(ai>='v'&&ai<='z'11ai>='V'&am

24、p;&ai<='Z')ai+=5-26;for (i=0;i<n;i+) printf( " %C ,ai);25 .关于字符串的一些知识求字符串长度函数strlen格式:strlen(数组名);测量数组中不包含0的字符的个数求数组的空间大小sizeof格式:sizeof(数组名)用于测量数组定义时空间大小如:char s20= "computer”;strlen(s) 为 8,sizeof(s) 为 20.字符串的复制函数strcpy 格式:strcpy( 数组名1,数组名2);(2)说明:将数组名2中的内容(连同0 一起)复制到数 组

25、名1中,数组名1中的原有的数据将被清空。 数组1 的空间要大于或等于数组 2的空间。如 char a20="hellow";char b6="china ”;strcpy(a,b) 后 a 中内容为 china字符串连接函数strcat格式:strcat(str1,str2);(2)说明:将str2 中的字符(连同0 一起)连接到str1 的字符后面,并在最后加一个0'。数组stn 必须定义 得够大,使其能存放连接后面的字符串。如 char a20="hellow ";char b6="china ”;strcat(a,b)后

26、a中内容为hellow china字符串比较函数 strcmp(1)格式:strcmp(str1,str2);(2)功能st1str2 相同,函数值=0stn 大于str2,函数值0stn 小于str2,函数值0(3)用途:用于对多个字符串进行排序。26 .函数的基本知识函数的定义(1)无参函数的一般形式类型标识符函数名()声明部分语句部分void p()char a =" hello world! ”printf("%s',a);(2)有参函数的一般形式类型说明符 函数名(类型 形参,类型 形参,)声明部分语句部分int f(int x) return (x=0)

27、?x:-x); 函数调用的一般形式函数名(实际参数表);(1)实参可以是常量、变量、表达式、数组名、函数等, 调用时,实参必须具有确定的值,以便把值传送给形参。(2)实参和形参在数量、类型、顺序上应严格一致。(3)函数调用中值传送是单向的,或地址传送则是双向的。a.值传递将实参的值复制到形参相应的存储单元中,即形参和实参分别占用不同的存储单元,这种传递方式称为值传递”。值传递的特点是单向传递,即只能把实参的内容传递Z形参,形参的变化不能影响实参。b.地址传递将实参的地址彳递到形参,即形参和实参共同占用相 同的存储单元,这种传递方式称为“地址传递”。地址传递的结果是形参和实参都变化。函数声明与函

28、数定义一样,只是多个分号。函数的返回值1 .返回值用return 语句返回主调函数。形式:return 表达式;或为:return ( 表达式);2 .函数返回值应与定义时类型一致。3 .函数类型若为整型,函数定义时可以省去类型说 明。即 int ss(int i) ;可写成这样 ss(int i);4 .无返回值,类型标识符为void 。5 .函数只能有一个返回值。27 .全局变量全局变量在函数外部定义的变量。全局变量的作用域是定义该行向下起作用,若在该行之前使用,必须使用extern进行声明,然后再可使用。(1)全局变量定义:类型说明符变量名,变量名,;定义只对其后代码可用,定义前不能使用

29、(2)全局变量声明:extern类型说明符 变量名,变量名,;(3)全局变量和局部变量可同名,在局部变量的作用域 内,全局变量失效。28 .变量的存储类型自动变量auto寄存器变量register外部变量extern静态变量static(1)静态变量和全局变量未赋以初值,则系统自动赋予0值。若在被调用函数内定义静态变量,当反复调用 该函数时,静态变量则使用上次调用之后的值,而不 是最初的值,这一点要非常清楚。(2)寄存器变量速度快。29 .定义文件指针:FILE*指针变量标识符;注:FILE为大写例如:FILE *fp;表示fp是指向一个文件的指针。文件打开函数fopen文件指针名=fopen

30、(文件名,打开方式) “文件指针名”是FILE 类型指针变量, “文件名”是被打开文件的文件名。“打开方式”见下表(要有双引号)。FILE *fp;fp=fopen( " abc.txt “," r" );意义:打开文件abc.txt,只允许进行“读”操彳,并使fp指向该文件。打开方式含义r只读不能写w只写不能读,清空原内容a追加方式打开t文本文件,不独立使用b二进制文件,不独立使用+添加读或写,不独立使用r+读添加写w+写添加读a+追加添加读rt,wt, at, rt+,wt+,at+ 操作文件文件通常省略trb, wb, ab, rb+, wb+, ab+操作

31、二进制文件b必须指明“文件名”是字符串常量(要双引号)FILE *fzk fzk=fopen( " c: hzk16" ," rb") 意义:打开C盘根目录下的文件 hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜 线“ ”中的第一个表示转义字符,第二个表示根目录。 “文件名”是字符串数组(不能要双引号)。FILE *fz;char filename口 = " abc.txt ”; fz=fopen(filename, "r");打开文件的格式化代码FILE *fp;if (fp=fopen( &quo

32、t; c:hzk" ," rb" )=NULL)/*打开出错返回NULL*/printf( "hzk file! ");getch();/*按任意键继续执行*/exit(1);文件关闭函数fclose fclose( 文件指针名) 如:fclose(fp)功能:关闭文件指针名fp所指向的文件读写单个字符函数1 .读字符函数fgetc形式:字符变量=fgetc(文件指针);功能:从指定的文件中读一个字符变量文 口:ch=fgetc(fp);2 .写字符函数fputc形式:fputc(字符常量或变量,文件指针);功能:把一个字符写入指定的文件中;如:fputc(' a' ,fp);char c= 'a' ; fputc(c,fp);写成fputc

温馨提示

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

评论

0/150

提交评论