C语⾔程序设计基础知识点概括
C语⾔程序设计基础知识点概括
C语⾔程序设计基础知识点
1、函数是C语⾔的基本构成单位。main函数是C语⾔程序的唯⼀⼊⼝。
2、C语⾔程序开发过程。
编译过程:将以.c或.cpp结尾的源程序⽂件经过编译成计算机能识别的⼆进制⽂件⽬标⽂件,编译过程中,编译器会检查每条语句的语法错误。
链接过程:连接器将所⽣成的⽬标⽂件链接⽣成最后可直接运⾏的的执⾏⽂件。
3、算法:解决问题的具体步骤的描述。
算法的特性:
---有穷性:算法必须在有限步骤后结束,⽽且每⼀步都在有限时间内完成。
---确定性:每条指令⽆⼆义性。相同的输⼊只能得到相同的输出。
---可⾏性:算法描述中的操作和功能都可以通过已实现的基本运算执⾏有限次来实现。
---输⼊:算法有零个或多个输⼊。
---输出:算法⾄少有⼀个或多个输出。
4、变量命名规则:
⼤⼩写字母、数字和下划线组成,可以以字母或下划线开头,不能使C语⾔的关键字。
5、数据类型:基本数据类型有int,char,float,double,void
整形: int 占4个字节16位。-32768~32767
⽆符号整形: unsigned int 占4个字节16位。0~65537
短整型: short int 占2个字符8位。
⽆符号短整型:unsigned short 占2个字节8位。
长整型: long int 占4个字节32位。
⽆符号长整型:unsigned long int 占4个字字节32位。
float和double类型的异同:
--同:都是C语⾔的浮点数据类型,带精度的数据类型。
--异:
占⽤内存不同:单精度浮点型占⽤4个字节,双精度浮点型占⽤8个字节。
有效数位不同:float有效数位8个,double有效数位16个。
char类型:内存中以ASCII码存放,在其取值范围内可以与整数⼀起使⽤,如:char c = 'A' + 10;则c为K。
常见的字符对应的ASCII码:'0':48,'A':65,'a':97
⼤⼩写字母ASCII值相差32。
6、运算符
算术运算符:+ - * / % ++ --  (注:%两边的对象都需要是正数)
赋值运算符:= += -= *= /= %=
关系运算符:> < >= <= == !=
逻辑运算符:&& || !
三元运算符:表达式1 ?表达式2 :表达式3
运算符优先级:
():⾃左向右结合
! ++ -- sizeof:⾃右向左结合
* / %:⾃左向右结合
+ - :⾃左向右结合
< > <= >=:⾃左向右结合
== !=:⾃左向右结合
&& ||:⾃左向右结合
= += -= *= /= %= ⾃左向右结合
7、类型转换
⾃动转换:不同数据类型的数据进⾏运算时,由编译器⾃动完成。转换规则:由短整型和字符型向整形转换,整形向⽆符号整形转换,⽆符号整形向长整型转换,长整型和单精度浮点型向双精度浮点型转换。(字节少的向字节多的转换)
强制类型转换:(类型名)变量名或数值。如果是⾼向低转换则会丢失多余的精度。低精度向⾼精度转换,多余的补上0。
8、输⼊输出
(1)printf函数
常见格式控制字符
%d:将参数按整形输出。
%c:按字符输出。
%s:输出字符串。
%f:带⼩数点形式输出。
%md:输出数据占m个位宽,数据长度左补空格,超出按原样输出。
%m.nf:n表⽰⼩数位数。
(2)putchar( ):向终端输出⼀个字符。注意:使⽤没有换⾏符。
(3)puts( ):向终端输出字符串。int puts(const char *string);
(4)scanf( ):输⼊。int scanf(const char * restrict format,...);  注:从终端中输⼊空格,会使scanf获取终端,空格后⾯的舍弃。
(5)getchar( ):向终端接受⼀个字符。getc(stdin)
(6) gets( ):向终端接受⼀个字符串。char *gets(char *string);注意:gets不检测字符串string的⼤⼩,容易造成溢出,且LinuxC不⽀持该
函数,可以使⽤fgets代替。fgets(s, size, stdin)。
9、程序结构设计
(1)程序的三种基本机构:顺序结构,分⽀结构,循环结构。
(2)分⽀结构:if if-else switch-case
注意1:if-else语句的⼆义性,C语⾔规定else永远与最近的if配对。合理的编程规范,if-else每⼀个语句块均使⽤{ }括出。
注意2:switch括号中要求数据类型为整形或字符表达式。注意case后⾯要有break跳出,不然会⼀直往下执⾏,知道到⼀个break跳出或者继续往下执⾏完default。
(3)循环结构:while( ) do-while( ); for( )
(4)continue:只能在循环⾥⾯试⽤,作⽤:结束该次循环,直接执⾏下⼀次循环。
(5)break:结束该层循环。
10、数组
数组的特点:
数组在内存中连续存储多个元素的结构,⼀个数组存放的元素的地址是连续的。
数组的⼤⼩是固定的,所有的元素的数据类型是相同的。
数组的定义和初试化:
定义:数据类型数组名[数组⼤⼩];
⼀维数组初始化:
int array[10] = {10,9,8,7,6,5,4,3,2,1};
int array[10]={10,9,8,7,6,5,4,3,2,1,0};//越界
数组初试化元素个数⼩于数组⼤⼩,后⾯默认为0。⼆维数组初始化:
int array[2][3]={ {1,2,3}, {4,5,6} };
定义⼆维数组可以省略第⼀维的值,但不能省略第⼆维的值。⼆维数组的存放顺序是按⾏存放。
如:int array[][3]={ {1,2,3}, {4,5,6} };//定义2⾏3列数组
int array[2][]={ {1,2,3}, {4,5,6} };//错误,不能省列值。
数组的使⽤:数组的索引是从0开始。
⼀维数组:array[序列号]
⼆维数组:array[⾏序列号][列序列号]
11、字符串
(1)字符串是由双引号括起来的存放在连续内存地址的任意字符。
C语⾔中没有特定的字符串变量,通常使⽤数组存放字符串。
字符串的定义⽅式:
char string = "Hello";//使⽤指针定义⼀个字符串常量
char string[]="Hello";//使⽤数组定义⼀个字符串。
(2)字符数组与字符串的区别:
定义:
字符数组:存储字符的数组。
字符串数组:⼀种特殊的字符数组,存放以\0结尾。
长度:字符数组⼤⼩与字符数相同,字符串数组的⼤⼩等于字符数加上结束符'\0'。
(3)字符串处理函数:
拷贝
char *strcpy(char* dest, const char *src):拷贝字符串,注意该函数没有限定⼤⼩,容易越界,
char *strncpy(char *dest,char *src,size_t n);拷贝字符串,对strcpy进⾏优化,限制了拷贝长度,注意如果长度size与dest数组⼤⼩相等时,会缺少结束符\0。
int sprintf( char *buffer, const char *format [, argument] … );
建议使⽤sprintf函数拷贝字符串。
c语言程序设计知识归纳void memcpy(void *dest, const void *src, size_t n); 内存块拷贝,需要注意的是第⼀第⼆个参数需要是指针。
strcat:字符串连接。
extern char *strcat(char *dest, const char *src);
strcmp(str1, str2):字符串⽐较。相同返回0。
strlen( s1[], s2[]):字符串长度。
12、指针
指针也是⼀个变量,只不过该变量存放的是另外⼀个对象的内存地址。
声明和初始化:指针变量类型 *指针变量名。使⽤指针时,需要在定义的同时进⾏声明,防⽌出现野指针。指针变量名=NULL;
指针的运算:指针变量 = 地址;
int a[5]; int *p = a;定义数组名为a的数组,将数组的⾸地址赋值给p。p指向数组的第⼀个元素。&a[0]
表⽰数组的第⼀个元素的地址。
数组第1个元素的地址: a,&a[0],p
数组第i+1个元素的地址:a+i, &a[i], p+i, &p[i]
数组的第⼀个元素的值: a[0], p[0], *a, *p
数组的第i+1个元素的值: a[i], p[i], *(a+i), *(p+i)
++ -- :使⽤⼀次递增递减,指针就移动⼀个单位,⼀个类型为T的指针的移动。
指针加上或减去某个整数值n:指针将移动n个单位。
13、typedef :typedef 类型名标识符
typedef只是将已经存在的类型⽤⼀个新的名字来代表。typedef可以为各种类型说明⼀个新名,但不能⽤来为变量名说明⼀个新名。
14、枚举:enum 枚举名 {符号1,符号2...}
枚举类型为⼀组在逻辑上密不可分的整形提供便于记忆的符号。默认情况下第⼀个枚举符号值为0,往后⼀个加1。
15、结构
结构是⼀种构造数据类型,它是由若⼲数据项组合⽽成的复杂的数据对象,这些数据项称为结构成员。
定义结构:struct structrename
{
datatype variable1;
datatype variable2;
...
};
声明结构变量:struct 结构名结构变量名;
表⽰结构变量成员:变量名.成员名;
16、预处理命令
宏定义:#define 标识符字符串:在编译时,将⽤字符串替换程序中出现的所有标识符。如:#define PI 3.14⽂件包含处理:
#include“⽂件名”:系统将先在⽤户当前⽬录下查⽂件,不到将在系统⽬录下。
#include<⽂件名>:<>系统只在系统⽬录中查该⽂件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。