c语言程序设计知识点总结 01

《c语言程序设计》课程学了些什么?

(1)、程序设计语言的基本知识 字母表,标识符,关键字/保留字,数据相概念关的概念(数据类型、数据结构、数据模型),对数据处理相关的概念(算法、架构)

常量、变量、数据类型、运算符、表达式、优先级、结合性、类型转换、语句、控制流、函数、数组、指针、结构体、共用体、文件、数据结构、算法。

(2)利用c语言进行程序设计

​ c程序开发过程、常见算法设计、库函数的使用、程序设计风格养成、模块化程序设计、软件工程工具与思想。

c程序基本结构:

​ 1、由一个或多个函数构成

​ 2、这些函数分布在一个或多个文件中。

​ 3、每个文件称为一个可编译单元。

​ 4、每个c程序都有且仅有一个main函数

​ 5、main函数是程序的入口,它直接或间接地调用其他函数来完成功能。

​ 6、函数的基本结构:

​ 返回类型 函数名(形式参数列表)

​ {

​ 数据定义;

​ 数据加工处理;

​ return 返回值;
​ }

​ 7、c程序结构中的其它成分:注释,头文件,编译预处理。

函数的分类:

​ 1、库函数:由系统提供,经过精心编写和反复测试及使用,可靠而安全,推荐多使用。

​ 2、用户自定义函数:用户自己编写的函数。

​ 3、main函数:每一个c程序都有且仅有一个。

常量(Constant):

在程序执行过程中不发生变化的量。常量可分为字面常量、符号常量和常变量三种形式。
字面常量:直接写出其值的常量。如:32,3.1415,‘a’ 等。
符号常量:给字面常量命名。如:#define PI 3.1415
常变量:用const关键字修饰的变量,只允许赋值一次。const int x = 0x10;

变量(Variable):

​ 在程序执行过程中会发生变化的量。变量是内存中若干个连续的存储单元的抽象。无论常量还是变量都有相应的数据类型。

数据类型(Data Type) :

	1.  在内存中占几个连续的存储单元。(取值的范围)
	2.  以什么样的存储格式存储。
	3.  允许执行什么样的操作。(允许的操作)

C语言中提供了sizeof运算符来测试某种类型所占的字节数。
注意:sizeof可作用于常量、变量或数据类型。

C程序设计语言中提供的数据类型:基本数据类型、构造数据类型
基本数据类型:整型,浮点型,字符型,空类型,枚举型等。
构造数据类型:指针,数组,结构体,共用体,文件等。

整型:

  1. 采用补码表示,能精确表示与运算。

  2. 取值范围与溢出问题。

  3. 整型常量的书写:前缀:0,0x,0X,后缀:l或L。

  4. 整型变量:short,int,long。

  5. 分为带符号整数signed和无符号整数unsigned。

  6. 数据类型与平台相关。

浮点型:

  1. 采用IEEE754标准存储表示,不能精确表示与运算。

  2. 取值范围与溢出问题。

  3. 浮点型常量的书写:十进制与十六进制形式,指数形式。

  4. 浮点型变量:float,double。

  5. 浮点型常量:默认为double。

字符型:

  1. 英文采用8位ASCII编码,汉字采用16位内码。
    牢记:‘0’——30H,‘A’——41H,‘a’——61H

  2. 字符间的比较本质是ASCII码间的比较。

  3. 字符常量的书写与转义字符。
    (1) ‘A’ , ‘a’,‘?’
    (2) ‘\ddd’ (最多三位八进制数书写的ASCII码)
    (3) ‘\xhh’ (最多两位十六进制数书写的ASCII码)
    (4) ‘\n’ (转义字符)

转义字符形式 意 义

\n	换行
\t	水平制表
\v	垂直制表
\b	退格
\r	回车
\f	走纸换页
\a	报警(如铃声)
\\	反斜杠
\?	问号
\“	双撇号
\’	单撇号
\ddd	1~3位八进制常数
\xhh	1~2位十六进制常数

运算符(Operator):
代表计算机完成某种基本操作的符号。如:+(加),-(减),*(乘),/(除)等。
表达式(Expression):
将常量、变量和函数调用通过各种运算符和圆括号组织在一起,具有唯一确定值
(某种类型)的式子。单独的常量、变量和函数调用都是表达式。
如:a + b,a > b,3 * (x – y )/ 2,sin(x) / 2等。
优先级(Precedence):
当一个表达式中有多个运算符时,先算谁,后算谁。如 3 + 2 / 4 – 5 * 6。
结合性(Associativity):
当一个表达式中有多个优先级相同的运算符时,是由左向右算还是由右向左算。
如 3 + 2 – 5,a = b = c = 3。

运算符的优先级与结合性:

Operator	Associativity
() [] -> .	 left to right
! ~ ++ -- + - *  & (type) sizeof	 right to left
* / % 	 left to right
+ - 	 left to right
<<  >> 	 left to right
< <= > >= 	 left to right
== != 	 left to right
& 	 left to right
^ 	 left to right
| 	 left to right
&&	 left to right
|| 	 left to right
?: 	 right to left
= += -= *= /= %= &= ^= |= <<= >>=	 right to left
, 	 left to right

常见的运算符:

算术运算符: +,-,*,/,%,++,--
关系运算符: >,>=,<,<=,==,!=
赋值运算符: =,op=
逻辑运算符: &&,||,!,&,|
位运算符: &,|,~,<<,>>,^
其它运算符:(类型) , ?: () [ ] . -> sizeof * &

算术运算符:

        +    :加法或正号
        -    :减法或负号
        *    :乘法
        /    :除法  (两数都是整数时做整除,否则做实数除法)
        %    :  求余数(两数必须是整数,结果符号与第一个数相同,数值为两数绝对值做求余)
       ++    :自加1(只能对变量操作,分为前++和后++)
        --   :自减1 (只能对变量操作,分为前--和后--)
      (前++:先加1,再用变量的值;后++:先用变量的值,再加1)

关系运算符:

        >     :大于
        >=    :大于等于或不小于
        <     :小于
        <=    :小于等于或不大于  
        ==    :等于(=是赋值运算符,不是等于符)
        !=    :不等于
注意:1. 有两个符号构成的运算符中间不能加空格,如!=不能写成! =。
      2.  关系运算的结果为:1(逻辑真) 0(逻辑假)

赋值运算符:

        =      :简单赋值
       op=     :复合赋值(op和=之间不能加空格)
            
注意:1.  op可以为+,-,*,/,%,<<,>>,&,|,^之一。
      2.  赋值号左端必须为代表内存单元的变量。
      3.  赋值号右端为表达式。
      4.  i  *=  3 + 2含义是 i = i * (3 + 2)而不是i = i * 3 + 2。
      5.  a = b = c = 3;从右向左算。

逻辑运算符:

        &&    :逻辑短路与      ||  :逻辑短路或
        !    :逻辑非          &   :逻辑与  
        |     :逻辑或
注意:1.   exp1 && exp2,如果exp1已经确定为假,则不再计算exp2。exp1 || exp2,如果exp1已经确定为真,则不再计算exp2。
      2.   exp1 & exp2,无论exp1为真为假,均要计算exp2。exp1 | exp2,无论exp1为真为假,均要计算exp2。
      3.   C语言中任何非0值表示逻辑真,0值表示逻辑假。

位运算符: 
        &       :按位与 (常用于将某些位清0)
        |       :按位或(常用于将某些位置1)
        ^       :按位异或(常用于将某些位取反)
        ~       :按位取反  
        <<      :左移右补0
        >>      :右移补符号位
注意:先将参与运算的两操作数转换为二进制再逐位运算。
            
其它运算符: 
   (类型)    :强制类型转换
      ,      :逗号运算符,从左向右算,表达式的值为最右边的那个表达式的值
     ?:       :条件运算符(三目运算符)
  	()      :函数调用  
     [ ]      :数组下标引用
      .       :结构体成员引用
     -> * &   :指针引用相关
    sizeof    :测试数据或类型在内存中所占的字节数
注意:exp1 ? exp2 :exp3,整个是一个表达式,其值为:如果exp1的值为真,则为exp2
的值,否则为exp3的值。

流程控制三种基本结构:顺序、选择、循环。

顺序结构:

空语句:
	       仅由单独的分号构成:  ;
           空语句含义为什么也不做。
复合语句:
	       用{和}将若干条语句括起来,逻辑上当成一条语句,
           称为复合语句。{ 语句1;…,语句n}
表达式语句:
           单独的表达式加上分号:	表达式;
函数调用语句:
           单独的函数调用加上分号:	函数名(实在参数);
赋值语句:

      1.   变量名 = 表达式;2.  变量名  op=  表达式;
                 将右边表达式的值赋予左边的变量。  

return语句: 
                      返回函数的值。 return 返回值;       

选择结构:

//双分支if语句:

格式1:    if  (条件表达式)
                语句1;
语句逻辑:当条件表达式为真(非0)时,做语句1,否则不做。 

格式2:    if  (条件表达式)
                语句1;
           else
                语句2;
语句逻辑:当条件表达式为真(非0)时,做语句1,否则做语句2。
               
               
//多分支switch语句:
格式:   switch (整型表达式){
                   case  常量表达式1:
                                    语句序列1
                                     break;
                   case  常量表达式2:
                                    语句序列2
                                     break;
                   …
                   case  常量表达式n:
                                    语句序列n
                                     break;
                   default:
                                    语句序列n+1
              }
语句逻辑:计算整型表达式的值,与常量表达式1到n匹配,若与某个匹配,则执行对应的语句序列,若没有匹配的,则执行语句序列n+1。在执行过程中遇到break则退出switch语句,否则不再匹配,顺序往下执行,直到退出为止。 

//if语句的嵌套:
      含义: if语句中的语句又含有if语句。
格式:      if  (条件表达式1)
                语句1;
            else  if (条件表达式2)
                语句2;
            else
                语句3;
语句逻辑:从后向前,else只和相邻的还未配对的if配对。
                

循环结构:

//循环结构:
while循环语句:

格式1:   while (条件表达式)
                 循环体语句序列;

语句逻辑:当条件表达式为真(非0)时,做一次循环体语句序列,然后再次检测条件表达式的值,直到条件表达式的值为假时退出该循环。 
    
//do  while循环语句:

格式  :   do  {
               循环体语句序列;
           }  while (条件表达式);

语句逻辑:先做一次循环体语句序列,然后检测条件表达式的值是否为真,如果为真,继续做循环体,直到条件表达式的值为假时退出该循环。 

//for循环语句:

格式  :   for (exp1; exp2; exp3)
               循环体语句序列;

语句逻辑:先做一次exp1,然后检测exp2的值是否为真,如果为真,做一次循环体,然后做一次exp3,然后再次检测exp2的值,直到exp2的值为假时退出。 
等价于: exp1;
         while (exp2)  {
              循环体语句序列;
              exp3;
         }
注意:1.  三个表达式均可省略,但分号不能省略。
      2.  for (; ; )含义等价于while (1),为永真循环。
      3.  exp1称为初始条件;exp2称为结束条件;exp3称为步进条件。

break语句:含义:退出当前的这一层循环语句或switch语句。

continue语句:含义:跳过当前的这一层循环体中后面的语句,直接进入下一次循环。

函数(function):

 一段代码构成的模块。它对输入的数据(称为参数)进行处理,产生想要的输出(称为返回值)。对函数的调用通过函数名进行。
 使用函数的优点:便于模块化设计;便于软件重用。

//函数的结构与定义(definition):
        返回值类型    函数名(形式参数)
        {
			数据定义语句;
			数据处理语句;
			return  返回值;
        }
//函数声明(declartion):
        如果在定义之前使用函数或者使用别的编译单元中的函数,则必须先声明(告诉编译器函数的返回值类型,函数名和参数信息,以便进行编译检查)。
        如果函数在使用之前已经定义,则无需声明。

//函数的调用(call):
        语法格式: 函数名(实在参数)
注意:实在参数与形式参数必须在个数和类型等方面对应一致。

//参数传递:
        将实在参数传递给形式参数的过程称为参数传递。
        形式参数:在定义函数时的参数,简称形参。
        实在参数:在调用函数时的参数,简称实参。

参数传递方法:
           1.   传值:将实参的值传给形参,然后两者无任何瓜葛。
           2.   传地址:将实参的地址传给形参,对形参的任何修改就是对实参的修改。两者合二为一。
            注意:C语言在传递参数时是从右向左计算参数的值。        
posted @ 2022-06-11 19:40  宣哲  阅读(2906)  评论(0编辑  收藏  举报