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)字符数组与字符串的区别:
定义:
字符数组:存储字符的数组。
字符串数组:一种特殊的字符数组,存放以结尾。
长度:字符数组大小与字符数相同,字符串数组的大小等于字符数加上结束符''。
(3)字符串处理函数:
拷贝
char *strcpy(char* dest, const char *src):拷贝字符串,注意该函数没有限定大小,容易越界,
char *strncpy(char *dest,char *src,size_t n);拷贝字符串,对strcpy进行优化,限制了拷贝长度,注意如果长度size与dest数组大小相等时,会缺少结束符。
int sprintf( char *buffer, const char *format [, argument] … );
建议使用sprintf函数拷贝字符串。
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<文件名>:<>系统只在系统目录中查找该文件。

原文地址:https://www.cnblogs.com/King-Penguin/p/8673303.html