C语言讲义自己归纳笔记_第1页
C语言讲义自己归纳笔记_第2页
C语言讲义自己归纳笔记_第3页
C语言讲义自己归纳笔记_第4页
C语言讲义自己归纳笔记_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、ACM协会C语言讲义知识点1 : c语言的数据类型所谓数据类型是按被定义变量的性质,表示形式,占据存储空间的多少,构造特点来划分的。在c语言中,数据类型可分为:基本数据类型,构造数据类型,指针类型,空类型四大类。整型 字符型浮点型单稱度型 双梢度型f数组类型构造类型结构体类型,共用体类型指针类型 空类型知识点2 :常量对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不能被改变的量称为常量。整型常量:12,0, -3实型常量:0.25,12.345 , -3.4字符常量:','' 知识点3 :符号常量符号常量:用标示符代表一个常量。在C语

2、言中,可以用一个标识符来表示一个常量,称之为符号常量。符号常量在使用之前必须先定义,其一般形式为:#define标识符常量习惯上,符号常量名用大写,变量名用小写,以示区别例#defi ne PRICE 30#i nclude<stdio.h>void mai n()int nu m,total;num=10;total=num*PRICE; printf( "total=%dn" ,total);程序中,用#define命令行定义PRICE代表常量30,此后凡在本程序中出现的PRICE都代表30,可以和常量一样进行运算,程序运行结果为total=300 用标识符

3、代表一个常量,称为符号常量。 符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。 符号常量的好处是:含义清楚; 能做到“一改全改”。知识点 4:标识符在C语言中用来对变量、符号常量、函数、数组、类型等数据对象命名的有效字符序列统称 为标识符。简单的说,标识符就是一个名字。C 语言规定标识符只能由字母、数字和下划线 3 种字符组成,且第一个字符必须为字母或下 划线。知识点 5:字符串常量 字符换常量是一对双撇号括起来的字符序列。“Hello world ”C 规定:在每一个字符串常量的结尾加一个“字符串结束标志” ,以便系统据此判断字符串 是否结束。C规定以字符0 '作为字

4、符串结束标志。知识点 6:强制类型转换(double)a(将 a 转换成 double 类型 )(int)(x+y)(将 x+y 的值转换成整形 )(float)(5%3)(将 5%3 的值转换成 float 型)其一般形式为(类型名)(表达式)知识点 7:自增、自减运算符+i, -I(在使用 i 之前,先使用 i 的值加 (减)1)i+, i-(在使用 i 之后,使用 i 的值加 (减)1)例i=3;printf( "%d",+i);输出“ 4”,若改为printf( "%d",i+);则输出“ 3”。知识点 8:复合的赋值运算符a+=3 等价于 a=

5、a+3a-=b等价于a=a-b常用的复合赋值运算符有+=, -= , *= , /= , %=知识点9 :格式输入与输出1、printf 函数作用是向终端输出若干个任意类型的数据printf的一般格式为printf(格式控制,输出表列)例printf( %d %C',a,b);printf格式字符格式字符说明d以带符号的十进制形式输出整数x,X以十六进制无符号形式输出整数c以自负刑事输出,只输出一个字符s输出字符串2、scanf 函数一般形式scanf (格式控制,地址表列)例scanf( "%d %d",&a,&b);知识点10:关系运算符<

6、,<=,>,>=,=,!=关系运算符的优先级低于算术运算符 关系运算符的优先级高于赋值运算符知识点11:逻辑运算符(1)&&逻辑与(2)|逻辑或(3) !逻辑非知识点12: if语句1、if(表达式)语句例:if(a>b) printf( "%d",a);2、if (表达式)语句1else语句2例: #include <stdio.h>void mai n()int a,b;scanf("%d %d" ,&a,&b); if(a>b)printf( "max=%dn&qu

7、ot; ,a); elseprintf( "max=%dn" ,b);3、if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3 else if (表达式 m)语句 melse 语句 n例:if(number>500) cost=0.15;else if(number>300) cost=0.10;else if(number>100) cost=0.075;else if(number>50) cost=0.05;else cost=0;知识点 13:if 语句的嵌套if()if()else()elseif()els

8、e()知识点 14:条件运算符一般形式:表达式 1?表达式 2:表达式 3max=(a>b)?a:b;其中“(a>b)?a:b”是一个条件表达式。它是这样执行的:如果(a>b)条件为真,则条件表达式取值为a;否则为b。知识点 15:switch 语句C语言还提供了另一种用于多分支选择的switch语句,其一般形式为:switch(表达式)case常量表达式1:语句1;case常量表达式 2:语句 2;case常量表达式 n: 语句 n;default : 语句 n+1;例: #include<stdio.h> void main()int a;printf( &q

9、uot;input integer number:" ); scanf( "%d",&a);switch (a) case 1:printf( case 2:printf( case 3:printf( case 4:printf( case 5:printf( case 6:printf( case 7:printf(default :printf("errorn" );"Mondayn" ); break ; "Tuesdayn" ); break ; "Wednesdayn&quo

10、t; ); break ; "Thursdayn" ); break ; "Fridayn" ); break ; "Saturdayn" ); break ; "Sundayn" ); break ;知识点 16: while 语句循环 一般形式: while( 表达式 ) 语句 例:#include <stdio.h>void main()int i,sum=0;i=1;while (i<=100)sum+=i;i+;printf( "%dn" ,sum);知识点 17:

11、for 语句循环一般形式:for( 表达式 1 ;表达式 2 ;表达式 3) 语句它的执行过程如下:1)先求解表达式 1 。2)求解表达式 2,若其值为真(非 0),则执行 for 语句中指定的内嵌语句,然后执行下面 第 3 )步;若其值为假( 0 ),则结束循环,转到第 5 )步。3)求解表达式 3。4)转回上面第 2)步继续执行。5)循环结束,执行 for 语句下面的一个语句。for 语句最简单的应用形式也是最容易理解的形式如下:for( 循环变量赋初值;循环条件;循环变量增量 ) 语句例:for(i=1;i<=100;i+) sum+=i;for 循环中的 “表达式 1(循环变量赋

12、初值) ”、 “表达式 2(循环条件 )”和 “表达式 3(循环变 量增量 )”都是选择项 , 即可以缺省 ,但 “;”不能缺省。知识点 18:循环的嵌套例: #include <stdio.h>void main()int i,j,k;for(i=0;i<2;i+) for(j=0;j<2;j+)for(k=0;k<2;k+) printf( "%d %d %dn" ,i,j,k);知识点 19: break 语句与 continue 语句执行 break 语句,提前结束循环,即不再继续执行其余的几次循环。 break 语句不能用于循 环语句

13、和 switch 语句之外的任何其他语句。例:float pi=3.14159;for (r=1;r<=10;r+) area=pi*r*r;if (area>100)break ;printf( "r=%f,area=%fn" ,r,area);程序的作用是计算 r=1 到 r=10 时的圆面积,直到面积大于 100 为止。continue 作用是结束本次循环, 即跳过循环体中下面尚未执行的语句, 接着进行下一次是否 执行循环的判定。break 语句与 continue 语句的区别是: continue 语句只结束本次循环,而 break 语句则 是结束整个循

14、环过程。知识点 20:一维数组一维数组的定义 类型说明符 数组名 常量表达式 ;例如:Int a10; 说明:数组下标是从 0 开始的,按上面的定义,不存在数组元素a10 。一维数组的引用 数组必须先定义,然后使用。 数组元素的表示形式为: 数组名 下标 例如: #include <stdio.h> void main()int i,a10;for (i=0;i<10;i+) ai=i;for (i=0;i<10;i+) printf( "%d " ,ai); 运行结果如下:一维数组初始化(1)在定义数组时对数组元素赋予初值。例如: Int a10=

15、0,1,2,3,4,5,6,7,8,9;(2)也可以只给一部分元素赋值int a10=0,1,2,3,4; 这表示只给前面 5 个元素赋值。(3)如果想使一个数组中全部元素值为0;int a10=0,0,0,0,0,0,0,0,0,0;或int a10=0;(4)在对全部数组元素赋初值时,由于数据的个数已经确定。因此可以不指定数组长度, 例如:Int a=0,1,2,3,4,5;知识点 21:冒泡算法 #include <stdio.h> void main()int i,j,t;int a10;/*进行 9次循环,实现 9趟比较 */* 在每一趟中进行 9-i 次比较 */* 相

16、邻两个数比较 */for (i=0;i<10;i+) scanf("%d",&ai);for (i=0;i<9;i+)for (j=0;j<9-i;j+) if(aj>aj+1) t=aj;aj=aj+1;aj+1=t;for (i=0;i<10;i+) printf( "%d ",ai);知识点 22:二维数组 二维数组的定义: 类型说明符 数组名 常量表达式 常量表达式 ;例如:int a34;二维数组的初始化(1) 分行给二维数组赋初值 int a34=(1,2,3,4),(5,6,7,8),(9,10,11,

17、12);(2) 按数组排列的顺序对各个元素赋初值int a34=1,2,3,4,5,6,7,8,9,10,11,12;(3) 可以对部分元素赋初值 int a34=(1),(5),(9);它的作用是只对各行第一列赋初值1 0 0 0.5 0 0 09 0 0 0 也可以对各行某一元素赋初值 int a34=(1),(0,6),(0,0,11);初始化后的数组元素如下:1 0 0 00 6 0 00 0 11 0(4) 如果对全部元素赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度 不能省。int a34=1,2,3,4,5,6,7,8,9,10,11,12;等价于int a4=1,

18、2,3,4,5,6,7,8,9,10,11,12;二维数组的输入int i,j;int a34for (i=0;i<3;i+)for (j=0;j<4;j+) scanf("%d",&aij);输出同输入【知识点23】:字符数组 形式与前面介绍的数值数组相同。例如:char c10;(字符串,就是一串字符,其实就是上面的字符数组) 一维数组初始化:char c5 =“china ”; / 错误因为” china ”存储的时候,会在最后加上0 ',其实是有6个字符,c数组只有能存5 个字符,所以会出错char c6 =“ china ” ; / 正

19、确char c6 =“ good ”; / 正确char c =“we are Chinese ” ;/正确 用于不知道字符串的长度的情况可以改变某个字符数组下标的字符:char c6 =“china ” ;(前面已经讲过,下标从 0开始)c0 =' h'c4 =' b'最后c数组里存的是“hhinb ”;字符数组也可以是二维或多维数组。例如:char c510;和【知识点22】二维数组类似【知识点24】:函数C源程序是由函数构成的,像我们熟悉的main(),也是一个函数,我们叫它主函数。函数可以让我们省去很多重复的代码。看如下一段代码:int f( int x

20、 )return 3*x + 1;/一旦到return 语句,这个函数就退出int mai n()int result = f(3); /这句话是调用f(x)这个函数,让上面的 x等于3/带入f(x),然后求出结果,给result;printf("%dn", result);return 0;就像高中数学的f(x) = 3x+1,f(x)是一个函数,有一个参数x,我们让x等于特定的值,这样就得到了 f(x)的值。上面我们讲到的那个f(x)的值是函数的返回值,x是形式参数,通常简称形参,我们让x等于3,这个3就是实参,通常简称实参。当然函数也可以不用带形参,所以我们调用的也是

21、也可以不用给它实参。函数也可以没有返回值,前面加个 void。比如void f();这个就是没有参数的没有返回值的函数。上面那段代码我们是把int f(int x) 这个函数写在 main()函数上面,所以可以直接调用。如果写在ma in ()函数下面的话,我们在用这个函数之前要在mai n()函数声明下这个函数、声明是这样的:int f(int x);或者int f(int );这样就对f这个函数进行了声明。函数可以嵌套调用:可以再定义一个函数int g(int x);可以把这个函数写在int f(int x) 这个函数里。也可以把intf(int x)这个函数写在自身里面,这样就形成了递归

22、调用。如果你函数里面没有写好终止条件的话,这个函数可能会无止境的运行下去。联系上面讲的数组,int a10 = 0;回到最前面的几个知识点讲的变量,当我们定义一个整形变量的时候,系统会随机给这个变量一块整形大小的 内存空间,比如int x;这样x就在一个地址为随机值的内存空间上,&x是这个地址的值。如果我们定义的类型不同,比如double x;这样开辟的内存空间也不一样大。同理当我们定义数组的时候,我们会在内存中开辟连续的空间 给这个数组,比如这个a数组,里面存的是int型变量内存中就会开始10 * int大小的空间。这个a其实有两层含义:数组名a(地址)a+2 这个数组在内存中开辟的

23、连续空间的首地址0 1 23456789V(上面每1块都一样r匚大的,画i图误差)再回到【知识点 9】的格式输入的scanf()函数如果要输入一个数给a这个数组的第3个元素,我们可以用scanf( “d , &a2);因为scanf函数第2个参数&a2是个地址,那由a的第层含义可知, 我们也可以这样输入:scanf( “ d' , a+2); (a+2所指的位置如上图)现在回到本知识点,函数。函数的参数其实可以用数组比如:void f(int a10) for ( int i = 0; i < 10; i+ ) prin tf("%d ", a

24、i);这个函数的形参是数组,那我们调用这个函数的时候,实参给的是什么呢?可能已经有人想到了,是用a,也就是数组名,同样也是这个数组的首地址。下面是main()函数中的调用方法:int mai n()int num10 = 0;f(num); /这句话就是调用f函数,num这里是实参return 0;【知识点25】变量的作用域当我们在某个函数里定义了一个变量之后,在另一个函数中是否还能用呢?#in clude<stdio.h>int all; /这个变量的作用域是所有函数都可以用,因为他写在所有函数外面void f1()int x; 这2个变量的作用域只在这个函数里,其他函数不能用,

25、下面同理int y; Jvoid f2()int x; int y2;void f3()int x; int y3;int mai n()int x;- 这2个也一样,把 main()函数也是一个函数。int y4;return 0;”有一种用static修饰的变量看下面一段递归调用的代码(函数调用自己本身)void f()static int x = 5;/这个语句只运行一次,下次再用这个函数的时候就不执行这个语句if ( 10 = x ) /终止条件,不然就无止境的调用本身了。return ;x = x + 1;f();【知识点26】预处理C语言很很多预处理功能,如宏定义,文件包含,条件编

26、译,一般都写在源代码的最前面。 条件编译我们暂时不讲。文件包含就是我们常见的#include ; #include用于包含一些文件,这些文件中有我们需要用到的东西。比如 #include<stdio.h>,里面有我们需要是scanf()函数,printf() 函数等等。我们也可以把自己写的函数放到文件里,然后#in clude这个文件,这样就能调用我们自己写的函数了。宏定义是#define比如#define PI 3.14当我们在源代码中遇到PI的时候,我们就用3.14代替试着理解下面这段程序/求圆的面积#in clude<stdio.h>#defi ne PI 3.1

27、4int mai n()double r = 3.0; /定义圆的半径为3.0double s = PI * r * r; /圆的面积为n rA2printf(”圆的面积为:%lfn", s);return 0;仔细看会发现,用宏定义#define能提高程序的可读性,当程序中突然出现一个莫名的数字 的时候,我们会不会很郁闷?所以用一个单词代替数字,不失为一个很好的选择,比如用PI代替3.14。用Sunday代替数字7,如果这里的7代表的是星期,可以用July代替数字7, 如果这里的7代表的是月份。【知识点27】指针指针是C语言很重要的一个内容,也是难点。C语言书本,还要(因为涉及到的

28、内容太多,这里只是很简单的描述下,具体的可以去看 多加实践才能深刻理解) 一个指针就是一个 地址,是一个常量,而一个 指针常量 可以被赋予不同的指针值。我们可以这样定义一个指向整形变量的指针变量:int *p;如果有个int x;可以对指针变量p这样赋值:p = &x ,这样p就指向了 X。如果我们这样操作:*p = 5; 这样x的值就变成5 了。看如下一段程序:#in clude<stdio.h>int mai n() int兀int *p = &x; /p 指向x的地址scanf("%d", p); /这里输入123,其实是在x的地址输入12

29、3,所以x的值变成3prin tf("%dn", x); /输出 123return 0;【知识点28】结构体 定义结构体的一般形式为:struct 结构名一些成员比如定义一个学生结构体类型structstude ntint num;char n ame20;char sex;float score;;这样我们就可以用 student这个类型来描述一个学生,当然,里面的成员可以自己随意改。 这样student就变成一个类型 了,相当于int ,float。如果要定义一个 student类型的变 量,可以这样:student stu; stu就是一个 student类型的变量

30、如果要用到stu变量中sex这个成员,可以用 stu.sex ;即结构变量名.成员名变量初始化可以这样:stude nt stu = 1,"张三”,男,95.0;这样初始化之后stu里面的num, name,sex,score的值就分别为 1, ”张三”,男',95.0 。结构体类型也可以定义数组,和普通数组类似。如果有一个指向 student类型的指针 student *p; p = &stu; /即p指向上面的 stu变量用指针p调用stu里面的成员 应该用-> 操作符,和上面的.不一样,即 p->sex , p->score 。【知识点29】位运算C语言提供了六种位运算符:(1)&按位

温馨提示

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

评论

0/150

提交评论