c语言知识点总结

浮点数

float x=123.45e-2F; //x的值为1.2345

123.45e-2 默认为double型

3、常量

整数是以补码的形式转化为二进制代码存储在计算机中的

实数是以IEEE754标准转化为二进制代码存储在计算机中的

字符的本质实际也是与整数的存储方式相同

4、代码规范化

(1)换行原则:

一个程序分为三部分:

定义变量

对变量进行操作

输出值

5、printf的四种用法

printf("字符串");

printf("输出控制符",输出参数);

printf("输出控制符1,输出控制符2,...",输出参数1,输出参数2); printf("输出控制符 非输出控制符",输出参数);

输出控制符包含如下:

%d

%ld //长整型

%f

%lf //双精度浮点型(double型)

%x(或者%X或者%#X)

%o

%s

Printf("%#X\n",i); //输出结果为0X2F

6、字节

内存的最小存储单位:位 bit

硬件能访问到的最小单位:字节 byte

7、ASCII

ASCII不是一个值,而是一种规定

ASCII规定了不同的字符是使用哪个数值去表示

8、运算符

优先级:算数 > 关系 > 逻辑 > 赋值

(1)算数运算符

除法:被除数和除数都为int,则商是int

被除数和除数中只要有一个为浮点型,则结果为浮点型

16/5==3 16/5.0==3.20xx0

取余:

余数的符号与被除数相同

13%-3==1 -13%3==-1 -13%-3==-1

(2)逻辑运算符

非零为真,零为假

int k=20;

m=(2>3)&&(k=5);

结果:m=0,k=20

分析:逻辑与的左边为假,则不再执行右边的表达式

scanf中尽量不要使用非输入控制符

例题:

1 、判断一个数是否为素数

2、 判断一个数是否为回文数

3、 编程实现求一个十进制数字的二进制形式

4、 求一个数字的每位是奇数的数字取出来组合形成的新数字

5、求一个数字倒过来的数字

浮点数的存储所带来的问题:

float和double都不能保证可以精确的存储一个小数

VC文件类型

.dsw Developer Studio Workspace 最高级别的配置文件,

用来把多个工程组织到一个WorkSpace中

记录了整个工作空间的配置信息,是一个纯文本文件,在vc创建新项目时自动生成

.dsp Developer Stdio Project 为配置文件

记录一个项目的所有配置信息,是纯文本文件

.opt 与.dsw和.dsp配合使用的配置文件,

记录了与机器硬件有关的信息,同一个项目在不同的机器上的.opt文件是不同的

.plg 是超文本文件,可以用Internet Explorer打开,

记录了Build的过程,是一个日志型文件

.ncb No Compile Browser 无编译浏览文件,是vc++自动创建的跟踪文件, 其中存放了供Class View 、 Wizard Bar 和 Component Gallery使用的信息, 由VC自动生成,build编译工程后会自动生成

.clw 记录了跟Class Wizard 相关的信息,如果丢失了.clw文件,

那么在Class View 面板里就没有类信息

逗号表达式

从左到右执行

最终表达式的值是最后一项的值

Int i;

Int j = 2;

i = (j++, ++j, j+2, j-3);

Printf("%d\n",i);

输出结果为1

Alt + F8 自动对齐

break 虽然是if内部的语句,但是break终止的却是外部的for循环

e.g

for(i=1; i<=3; ++i)

{

if(3 > 2)

break;

printf("hello");

}

结果: 不输出hello

在多层循环中,break只能终止距离它最近的一个循环

在多层switch嵌套中,break只能终止距离它最近的switch

continue

用于跳过本次循环余下的语句,转去判断是否需要执行下次循环

C-->Java SE-->Java Web

SHIFT + TAB 一次移动多行

对二维数组排序

求每一行的最大值

判断矩阵是否对称

矩阵的相乘

函数

return 用来终止函数

输入一个数,输出1到这个数之间的所有素数

指针

int * p; //p是变量的名字,int * 表示p变量存放的是int类型变量的地址

cpu对内存条的控制,通过3根线:控制线、数据线、地址线

 

第二篇:C语言知识点总结

第一章            C语言的基础知识

l  熟悉Visual C++

l  编辑(.c)——>编译(.obj)——>运行(.exe)

l  函数是构成C程序的基本单位,程序从main函数开始,在main函数结束,一个程序只有一个main函数

l  C语言中用到的函数分:系统函数和用户自定义函数

l  C语言函数体分为两部分,定义部分和执行部分,任何变量必须先定义后使用

l  分号是C语句结束的标志

标识符:1.只能由字母(区分大小写)、数字、下划线组成;2.开头必须是字母或下划线

C语言中标识符分:关键字、预定义标识符,用户标识符(见名之意)。关键字不能用于其它场合,预定义标识符可以做用户标识符用,但不提倡

常量:程序运行过程中不改变的量。(整形常量、实型常量、字符常量、字符串常量),以及用标识符命名的符号常量(宏定义):#define  PI  3.1415926

变量:程序运行过程可改变的量。变量的命名遵守标识符命名规则,变量必须先定义后使用

位Bit,字节  Byte  1B=8bit    1kB=1024B   1MB=1024kB    1GB=1024MB

数制转换:十进制到二进制、八进制、十六进制;二进制、八进制、十六进制到十进制;二进制到八进制、十六进制  8421

整形常量:十进制整形常量:0~9  八进制整型常量:0~7 以数字0开头  十六进制整形常量:0~9,A~F或a~f  以数字0x或0X开头 

内存中的存储形式:有符号正整数:原码存放,最高位为符号位;负整数:补码存放,最高位为符号位;无符号正整数:最高位不是符号位

补码的求法:1.求正整数对应的原码 2.原码求反 3.求反后结果加1

补码求负整数:1.各位求反 2.结果加1  3.所得二进制转化为十进制 4.加负号

整形变量:定义:short(2)、int(4)、long(4)、unsigned short、unsigned、unsigned long

实型常量:表示形式:小数形式(小数点前面或者后面可以没有数据)和指数形式(前后两部分都不可缺,指数为带符号的整数)

实型变量:float、double 实型变量只能存放实型值

算数表达式:算数运算符:+、—、*、/、%,作为运算符时都是双目运算符,%取余运算符要求两边全是整数;+、—做正负号时是单目运算符;算数运算符两边运算对象必须一致才能运算,若不一致先转换在运算,运算结果的类型与运算对象一致(5/2、5/2.5)。优先级:( )  >   +、—正负  >  *、/、%  >  +、—

赋值运算符和赋值表达式:变量名=表达式  1.左边必须是变量;2.赋值表达式的值是赋值号左边变量被赋值后的值;3.赋值号的结合顺序为从右到左;4.不同于数学上的等号;5.赋值号两边的类型不一致,系统会自动进行类型转换;

复合赋值表达式:+=、—=、*=、/= 运算方向:自右向左

强制类型转换:(类型名)表达式 例(int)2.36  转化后为整型值2

自加自减运算符:++、——;1.运算对象只能为变量;2.位置决定运算顺序;3.结合方向为从右到左;4.记住这两个运算符的优先级

逗号运算符和逗号表达式:逗号运算符从左到右结合,逗号运算符的优先级最低,最后一个表达式的值是整个逗号表达式的值

空语句:不做任何动作

复合语句:用花括号括起来的多个语句

C语言中的基本结构:顺序结构、选择结构、循环结构

注释:注释可以加在程序的任何位置说法不对,例:int /*…*/  a;正确  in/*…*/t  a;不对,注释不能嵌套

字符常量:1.字符常量占一个字节,存放的是其对应的ASCII码;2.用当引号括起来;

转义字符:1.一般转义字符:’\’开头;2.八进制转义字符:“\”加一到三位八进制数组成,该八进制数不需要以0开头;3.十六进制转义字符:“\x”加一到两位十六进制数字组成

字符变量:char 变量名;字符型数据可以参与任何整数运算,表示的就是与之相对应的ASCII码的值,记住字符‘A’的ASCII码为65 ‘a‘的ASCII码为97,对应的大小写字母相差32

位运算:~、<<、>>、&、^、|  其中 ~ 为单目运算符结合性自右向左,其余为双目运算符结核性为自左向右;左移时:右端补0,左端溢出部分舍弃,右移时:无符号整数或正整数左端补0,负整数左端补1(移动是其对应的补码的移动);按位与、按位异或、按位或3种运算符满足交换律;位数不同的运算数运算规则:1.右端对其2.往高位扩充,无符号数与正整数补0,负数补1

第二章            数据输出与输入

printf函数:printf(“说明信息+格式转换说明”,输出数据列表);格式转换说明带有%,与输出列表一一对应,要求个数相同,类型匹配,多余的输出项不予输出,多余的格式转换说明输出不定值。%d:有符号的十进制整数;%f:有六位小数的实数;%c:字符;%o:八进制无符号整型数(不带前导0);%x或%X:十六进制无符号整型数;%u:无符号十进制整数等。%md、%m.nf、%o、%#o、%#x:控制输出数据的格式。PS:如果要输出%,应该在格式控制中用两个连续的%。

putchar函数:putchar(c);c可以是字符变量名或字符常量,输出字符型数据。

scanf函数:scanf(“格式说明”,输入数据列表);格式说明与printf函数的格式说明相同,与输入数据列表个数相同,一一对应,输入数据列表时一个或多个合法的地址表达式。‘&’是C语言的求地址运算符。输入数值数据之间用分隔符(空格、制表符、回车)隔开(不包含逗号),可以用一个整数指定输入数据所占的宽度(%md),可以用%*跳过输入的数据,若格式说明部分除了格式转化部分还有其他字符,输入时应一一对应原样输入。

getchar函数:c=getchar();无需任何参数,空格符、回车符都能被读入。

第三章            选择结构

关系运算:关系运算符:>、>=、<、<=以及==、!= 前四个优先级相同,后两个优先级相同,且前四个的优先级高于后两个。算数运算符>关系运算符>赋值运算负  关系运算的结果有两个:0和1 

逻辑运算:C语言中有两个逻辑值:真(非0)、假(0)。逻辑运算符:||、&&、! 优先级逐渐增高。!(逻辑非) > 算数运算符 > 关系运算符 > && > || > 赋值运算符。说明:&&左边的运算对象值为0时,不再对右边对象进行运算,直接的出表达式结果为0,||左边的运算对象值为1时,不再对右边的运算对象进行运算,直接的出表达式结果为1

if语句:1.  if(表达式)语句 2. 含else的if语句 3.if-else-if语句结构4.嵌套的if语句 说明:else总是与前面最近的未配对的if语句配对,组成if-else语句。(易错)

条件表达式:表达式1 表达式2 :表达式3

Switch语句:switch(表达式)

{

case 常量表达式1语句块1;break

case 常量表达式2语句块2;break

case 常量表达式3语句块3;break

……

default:语句块n+1;break

}

注意switch语句的执行顺序。圆括号中表达式的值必须是整型或字符型,不能为实型,常量表达式中不能含有变量。注意break语句的作用。

语句标号、goto语句:非重点

第四章    循环结构

While语句:while(表达式){  循环体语句  }

Do-while语句:do {  } while  注意while语句与do-while语句的区别

for语句:for(表达式1;表达式2;表达式3){  循环体语句  }  1.表达式之间分号隔开,可以缺省 2.循环体语句可以是空语句 3.死循环

循环结构的嵌套:1.内层的循环在语法上是外层循环的循环体的一部分;2.外层循环执行一次,内层循环要完成整个循环过程

第五章            函数

函数的定义:

函数返回值的类型名  函数名(类型名1  形式参数名1,类型名2   形式参数名2,……)

{

说明部分

语句部分

}

  1. 返回值类型缺省时,默认为int,没有返回值时,返回值类型为void
  2. 主函数的函数名必须为main
  3. 函数不能嵌套定义
  4. 函数调用时系统给形参及函数中的变量重新分配内存区域,函数调用结束后释放该空间,这里要注意值传递和地址传递,值传递时无论对形参做任何操作对实参都不会有影响,地址传递时具体情况具体分析
  5. return 语句:  返回值的类型必须与函数首部中的返回值类型相同

库函数:C语言自己提供的函数称为库函数,包含库函数的方式  #include<……>或#include“……”常用的库函数 stdio.h、math.h

函数调用: 函数名(实参列表)

1.       函数调用时不写返回值的类型和实参类型,实参类型、个数、顺序与函数定义时形参一致,实参可以是常量、变量、表达式或函数的调用

2.       函数应先定义后调用,或先声明后调用,最后定义(若函数在后面定义,又想在前面调用函数就需要对函数进行声明),函数声明的形式就是比函数定义时函数首部多一个分号,或者甚至可以省略形参名,只有类型名

3.       函数声明位置,在所有函数外部声明,声明之后的任何位置都可以调用该函数,在函数内部函数体的说明部分声明,只能在该函数中调用

4.       函数可以直接或间接的调用自己(难点、易考点)递归调用

第六章            指针(非常重要、必考)

指针变量:用来存放指针(即地址)的变量,我们称为指针变量

定义形式:类型名  *指针变量名1,*指针变量名2,……

二级指针:  类型名  **指针变量名;

1.       vc6.0系统中,任何指针变量均占用4个字节的内存空间

2.       通过求地址运算符“&”给指针变量赋地址值

3.       相同类型的指针变量之间可以相互赋值

4.       赋值号两边的指针变量的基类型必须相同

5.       C语言中有些函数的返回值就是地址值,如malloc、calloc

6.       可以给指针变量赋空值NULL、0、‘\0’,此时应在程序前加上#include  “stdio.h”

7.       指针变量必须赋值后才能使用,使用时用间接访问运算符“*”,注意指针变量定义时用的“*”与指针访问时用的“*”有本质上区别

8.       记住:间接访问运算符“*”的优先级比 ++、- -运算符的优先级低

9.       可以对指针变量加上火减去一个整数,使其指向相邻的存储单元(数组中用的最多)

传值与传址:通过传送地址值,在被调用函数中可以改变调用函数中的变量值,视情况而定,不是总会改变。

函数返回地址值:函数定义是,函数名前面加上“*”表示函数的返回值的类型是指针类型

第七章            数组(必考)

数组:1.具有相同类型的数据的集合;2.占用连续的存储空间;3.元素的名字由的数组名和下标构成;4.根据下标个数可分为一维数组、二维数组和多维数组

一维数组: 定义形式:  类型名  数组名[常量表达式]1.数组名是用户定义标识符;2.方括号内必须是常量表达式,值必须是正的整形常量;3.数组的下标从0开始

一维数组初始化:1.定义时直接把各个元素放在赋值号后面的花括号中,逗号间隔;2.赋值元素的个数可以少于数组的长度,默认用0补满,或定义时省略数组长度,数组长度由赋值元素的个数确定,赋值元素的个数不允许多余数组的长度,并且类型必须与数组元素类型一致;3.数组名[下标表达式]引用数组元素,其中下标表达式可以是整型的常量或变量构成的表达式;4.引用时注意上下限,不能越界

二维数组:定义形式: 类型名   数组名[常量表达式1][常量表达式2]1.数组名是用户定义标识符;2.方括号内必须是常量表达式,值必须是正的整形常量;3.数组的行下标和列下标都是从0开始;4.内存中按行的顺序依次存放各个元素;5.可把二维数组看做一个特殊的一维数组。

二维数组初始化:1.定义时赋初值,属于同一行的元素放在一对内层花括号中,逗号间隔,或者省略内层花括号,按行的顺序(存储顺序)给数组元素赋值,不足补0;2.类型必须一致;3.数组名[行下标][列下标],引用数组元素;3. 引用时注意上下限,不能越界

第八章            字符串

字符串常量:C语言中没有字符串类型,通过字符数组以及指针来处理字符串,字符串最后自动以’\0’结尾,注:字符串的长度比它在内存中的长度少1;

一维字符数组存放字符串:每个数组元素都是一个字符,最后一个字符是’\0’  1.通过单个数组元素赋值,存放字符串,要求字符数组够大,字符串末尾’\0’结束;2.直接整体赋值 例:char  str[10]={‘h’,’i’,’!’,’\0’};后面元素自动补’\0’;3.直接把字符串常量赋给字符数组 例:char  str[10]={“hello”}或 char  str[10]=”hello”;只能在定义时这样赋值。

使用指针指向字符串:例:char *p=”hello”; 或 char *p; p=”hello”;将字符串“hello”在内存中存放位置的首地址赋给指针p

二维字符数组存放字符串数组:例:char  name[4][20]={“I”,”am”,”a”,”teacher”};或

  char name[][20]= {“I”,”am”,”a”,”teacher”};

  name[0]、name[1]、name[2]、name[3]代表的就是这四个字符串常量的首地址

指针数组处理字符串数组:例:char  *pname[4]= {“I”,”am”,”a”,”teacher”};或

                                                        char  *pname[]= {“I”,”am”,”a”,”teacher”};

可以通过pname[i]来引用上述的字符串,通过pname[i][j]来引用该字符串中的字符

字符串的输入输出:输出:1.printf(“%s”,”hello”);或char str[]=”hello”;printf(“%s”,str); 2.char  str[]=”hello,xiaoyuan”;printf(“%s”,str+6);    3.puts(字符串的首地址);        输入:1.gets(待输入字符串首地址);gets函数可读入空格和回车符,并自动用‘\0’取代最后的回车符,区别于scanf函数

对字符串的操作:#include”string.h”  1.拷贝:strcpy(char *d,char *s);2.求长度:strlen(char *s);长度比实际所占的自己数少1;3.连接:strcat(char *d,char *s);4.比较:strcmp(char *s1,char *s2);

第九章            文件

文件指针:FILE  *fp

打开文件;fopen(文件名,文件打开方式); 记住最常用的几个文件打开方式“r”、“w”、“r+”、“w+”、“rb”、“a”、“a+”等

关闭文件:fclose(文件指针);

文件的操作:1.判断文件是否结束:feof(文件指针);文件结束返回1,否则返回0;2.设置文件的位置指针的位置:fseek(文件指针,位移量,移动起始点);

移动起始点:SEEK_SET 0 文件开始,SEEK_CUR  1 文件当前位置,SEEK_END  2    文件末尾;3.获得文件位置指针的当前位置:ftell(文件指针);4.将文件位置指针移回到文件开头:rewind(文件指针);等价于fseek(fp,0,SEEK_SET);5.cp=getc(fp);  putc(ch,fp);6.fscanf(文件指针,格式控制字符串,输入列表); fprintf(文件指针,格式控制字符串,输出项表);7.fgets(str,n,fp);注:读入的字符长度为n-1;fputs(str,fp);8.fread(buffer,size,count,fp); fwrite(buffer,size,count,fp);

第十章            C语言的深入讨论

用户定义类型:typedef  类型名  标识符;

编译预处理:凡是以“#”开头的行都称为编译预处理命令行,不能直接编译,而是由预处理程序在编译前做出响应处理,这些命令行后不加“;”。

宏:1.不带参数的宏;2.带参数的宏:即宏名后带有参数列表的宏定义;编译预处理阶段宏展开,即替换,宏替换不占运行时间。特别注意括号的使用

文件包含:一个源文件可以将另外一个源文件的全部内容包含进来

存储分类:C语言提供了4个关键字,auto(自动)、register(寄存器)、static(静态)、extern(外部),变量有局部变量和全局变量之分,它们的作用域不同。

动态存储分配:1.分配内存单元:malloc(size);例int *p;p=(int*)malloc(sizeof(int));2.释放内存单元:free(p);3.分配多个同一类型的连续的存储空间:calloc(n,size)例:int *pint;pint=(int*)calloc(10,sizeof(int));

Main函数的参数与函数指针(了解)

函数的递归调用:要求能读懂递归函数;

第十一章  结构体与共用体

结构体:struct  结构体名

                     {

             类型名 1 成员名1

                      类型名 2 成员名2

                      ……

                     }

       结构体变量中成员的引用:1.结构体变量名。成员名;2.结构体指针变量->成员名;3.(*结构体指针变量)。成员名

共用体、链表

第十二章  数组与指针(必考)

一维数组与指针:1.数组名就是数组的首地址,是常量,不可改变;2.通过指针引用一维数组的元素;3.可以通过数组的首地址计算数组其他元素的地址;4.分清指针变量变化时,它所表示的元素是哪一个;

二维数组与指针:1.数组名是数组的首地址,常量不可改变,它是行地址,加1表示的是下一行的地址;2.二维数组可以看成是由一维数组组成的,举例有二维数组a[2][3],它由名为a[0]、a[1]的两个一维数组组成,a[0]、a[1]是地址值,是列地址。它们加1是改行的下一个元素的地址。3.学会通过指针引用数组用的元素,通过指针求数组元素的地址值

指针数组:  类型名  *指针数组名[常量表达式];例 int *p[3]; 这里p加上1,1表示4个字节大小  []的优先级大于*    行指针:  类型名   (*指针数组名)[常量表达式];  例  int (*p)[3];  这里的p加上1,1标识的是3*4个字节的大小,行指针指向的是一行的元素

数组与函数:1.一维数组名作实参时,函数首部可以写成fun(int *a)、fun(int a[])、fun(int a[N]);2.一维数组元素地址作实参相似于一维数组名作实参;3.二维数组名作实参,函数首部可以写成fun(double (*a)[N])、fun(double a[][N])、fun(double a[M][N]);4.指针数组作实参,函数首部可写成 fun(double *a[M])、fun(*a[])、fun(double **a);这些函数不要求会写,但是必须能读懂程序

相关推荐