C语言程序设计复习知识总结 孙亚飞

时间:2024.4.21

C语言程序设计复习知识总结     孙亚飞

第一章  软件工程概述及程序设计基础

1、“冯-诺依曼”计算机 “存储程序原理”

  一条计算机指令完成一个基本操作 : 操作码+操作数

软件:程序(一组精心编排的指令)+数据+文档

2、软件工程: 问题定义 可行性研究 需求分析

              总体设计  详细设计

              编码  测试

编码: 编辑→(源程序.c)→ 编译→ (目标程序,二进制代码.obj) →          连接→(可执行程序.exe) →测试运行

3、程序设计语言

 机器语言(二进制代码)          汇编(符号语言)        高级语言

(C  C++  C#  JAVA)

4、程序设计方法(思想)

面向过程的结构化程序设计方法 :“自顶向下,逐步求精”

 三种基本结构:顺序 选择 循环

 程序=算法+数据结构

算法特征:确定性 有穷性 一个或多个输出 零个或多个输入 有效性

面向对象的程序设计方法: 对象 属性 方法 类

5、常用算法

累加 累乘 求最大值或最小值 求两数的最小公倍数或最大公约数(辗转相除法)  交换两个数 查找

第二章C语言概述

1、程序基本单位:函数

2、标识符:变量名、函数名、标号

   只能由字母(大小写敏感)、数字、下划线组成,且第一个字符只能为字母或下划线

第三章  数据类型及表达式

1、标示符:字母、数字或下划线组成,对大小写敏感,且第一个字母只能为字母或下划线,不能使用关键字作为标示符。

    32个关键字:Auto  break  case  char  const  continue  default  do  double  else  enum  extern  float  for  goto  if  int  long  register  return  short  signed  sizeof  static  struct  switch  typedef  union  unsigned  void  volatile  while

2、数据类型:char  int  float  double

     字节:   1    2    4     8

整型数据:?八进制:由数字0开头?十六进制:由数字0和字母x开头

    int short  :2   long :4

   浮点型数据:?十进制小数形式:必须包含小数点和数字 如 .314,0.

       ?指数形式:e(或E)前必须有数字,e之后的指数必须为整数

         如 1E-3  0E0

     float(4B,有效位6~7)double(8B,有效位15~16) 默认为double类型 

  字符型数据:字符常量用单引号括起来表示

      转义字符: \n换行 \b退格  \t水平制表,即横向跳格

\’单引号  \ddd 1-3位八进制数代表的字符  \xhh  1-2位十六进制数代表的字符  \f 换页   \r 回车  \v垂直制表  \”双引号 \0空 ,表示字符串常量的结束 

     字符也可用反斜线加八或十六进制ASCII码表示,如‘\101’同‘A’                              

  字符串常量  双引号

3、/:除法运算,如5/3,整数相除为整数,小数部分舍去

  %求余 只能用于整数相除求余,结果符号和被除数相同 -5%3 //-2

4、强制类型转换

        (类型名)(表达式)   如:a=(double)10

第四章 语句及程序流程控制

1、结构化程序设计三种基本结构:顺序、选择、循环

2、基本输入输出函数:putchar  getchar  printf  scanf

   字符输出函数 putchar(c);  //c为字符型或整型的常量或变量,只能一个

   字符输入函数 getchar();  //括号内不能有内容,输入的字符不能带单引号

   格式输出函数 printf(格式控制,输出表);

     //格式控制为用双引号括起来的格式控制转换字符串,有三种形式?格式说明:由“%”后跟格式字符组成。

   如果想输出字符“%”,应在“格式控制中”用连续两个“%”表示

   格式输入函数  scanf(格式控制,地址表)

//格式控制同printf,地址表由地址组成,&为取地址运算符

格式字符不用u,附加格式说明字符常用形式%[*][m][l]格式字符

*表示本输入项在输入后不赋给相应的变量,即跳过它对应的数据

3、条件表达式

         表达式1?表达式2:表达式3

4、多分支选择语句

      switch(表达式)

      {

        case 常量表达式1:语句1;

        ........

        case 常量表达式n:语句n;

        default:语句n+1;

      }

       break  加在必要的case分支语句后,可跳出switch结构;用在循环体中,可立即终止所在循环

     多case执行相同语句,前面相同语句可省,不加分号,但不能合写为一行

5、循环结构:while  do....while  for

break;  //只能用于switch和循环语句,对于多重循环,只能退出包含该语句的那一层结构

continue;//终止本次执行,继续下一次循环

第五章  数组

1、C语言的数据类型分为基本数据类型(字符型、整型、实型)、构造数据类型(数组类型、结构体类型、公用体类型)、指针类型和空类型。

2、一维数组

       类型名 数组名  [数组长度]

存放字符串的字符数组可简写,如 char str[6]=”hello”

注意:字符串结束标志‘\0’也是一个元素

例:int a[10];//a+i就表示a[i]的地址&a[i]

3、二维数组中a[i][j]地址的表示:

     &a[i][j]   a[i]+j   &a[0][0]+4*i+j  a[0]+4*i+j   //设一行中有4个元素

4、字符数组初始化时,如果初始化表达式少于数组宽度,剩余位自动置为空字符,即是字符串的结束标志。

5、字符串的输入输出

   printf  scanf  gets  puts  getchar  putchar

  gets和puts只有一个参数,就是一个内存地址

6、标准字符串处理函数

  #include <string.h>

(1)strlen(s) 统计字符串s中字符的个数(不含终止符‘\0’),返回字符串s 的长度 

(2)strcpy(s1,s2) 把字符串s2中的内容拷贝到字符串s1 中去,返回s1

     strncpy(s1,s2,n)  把s2中前n个字符拷贝到s1中,返回s1  注:不会自动拷入字符串结束标志,需手动给s1放置字符串结束标志

(3)strcat(s1,s2)  把s2 的内容连接到s1后,s1成为一个新串,返回s1

strncat(s1,s2)  把s2中前n个字符内容连接到s1后,返回s1,如果n超过s2  实际长度,以实际长度为准

(4)strcmp(s1,s2) 比较s1和s2的大小,返回:s1>s2,返回正数;s1=s2,返回0;s1<s2,返回负数。注:大小值比较对应字符的ASCII码值

     strncmp(s1,s2,n)

(5)mencmp(s1,s2,n) 比较s1和s2前n个字节,返回:s1>s2,返回正数;s1=s2,返回0;s1<s2,返回负数。

  注:如果两字符串相同且n大于字符串长度,memcmp会继续比较字符串结束标志后面的内存单元,直到不相等或达到次数n;而strcmp只要比到字符串结束标志就会结束。

(6)memcpy(s1,s2,n)  将s2中前n个字符拷贝到s1中,返回s1

     menmove(s1,s2,n)  将s2中前n个字符拷贝到s1中,返回s1

  区别如:char s[]=”hello,world”;

       memmove(s+2,s,10);  //结果为“hehello,worl” 考虑内存区域重叠问题

      memcpy(s+2,s,10);   // 结果为“hehehehehehe”

      s[12]=’\0’;

(7)Memset(s,c,n)  把字符串s中前n个字节内容设置为c

(8)strlwr(s)  把字符串s中大写字母转换为小写字母

     strupr(s)  把字符串s中小写字母转换为大写字母

补充:sizeof(s)求数组s占用的空间字节数

第六章  函数

1、定义函数的变量注意:形参变量名不能重复,每个变量名必须单独定义;函数内定义的变量名不能与形参列表变量名重名;函数体内变量定义语句必须写在函数体开头部分

函数类型一般默认为int 型

2、形参:定义函数时  实参:调用函数时

 

       主调函数               被调函数

  Return语句: 函数终止执行,并且返回到调用此函数的语句

3、局部变量:在函数内定义的变量,其作用范围局限于此函数内部

   全局变量:定义在任何函数之外的变量,作用范围是从定义处直到文件末尾

   同名时,局部变量优先使用

4、C语言的变量有4种存储类别:

   auto(自动变量) 只能在函数中定义,只有局部变量能定义

   static(静态变量)  从被分配存储空开始,直到程序结束才被释放,局部和全局变量都可定义   如:static int c=3;

   register(寄存器变量)  只允许局部变量和少量形参定义;地址不可访问;类型必须为int、char、和指针型。频繁使用的变量放在寄存器中可以提高程序的执行效率

   extern(外部变量)   只能用于全局变量的声明。在全局变量定义处之前访问该变量,可用extern声明,扩展全局变量的作用域。注:在多文件中使用外部变量时,要考虑该变量的值可能在其他文件中被修改

5、内部函数:一个函数只能在本文件中可见而不能被其他文件调用

      static 类型标识符 函数名(形参表)

   外部函数:可以被其他文件调用,extern可省。在需要调用外部函数的文件中,必须先使用extern关键字声明外部函数的原型

第七章 预处理命令

1、编译预处理命令:放在函数之外,以“#”开头并且末尾不加分号的命令

   预处理:指在编译前所做的处理,由预处理程序负责完成

   C提供多种预处理功能:如宏定义(#define)、文件包含(#include)、条件编译

2、“宏”:用一个标识符来表示一个字符串。被定义为“宏”的标识符称为“宏名”   “宏代换”或“宏展开”:编译预处理时,所有宏名用字符串去代换,分为有参和无参两种

3、#undef M //终止宏M的作用域

  宏定义不占用运行时间,只占用编译时间,而函数则占用运行时间

4、条件编译(3种)  

   #ifdef 标识符        #ifndef 标识符           #ifdef 常量表达式

      程序段1            程序段1                程序段1

   #else                #else                   #else

      程序段2            程序段2                程序段2

  #endif               #endif                   #endif

第八章 指针

1、存储器中的一个字节称为一个内存单元,内存单元的编号称为地址,通常把这个地址称为指针。存放地址的变量称为指针变量,一个指针变量的值就是某个内存单元的地址(指针)。

  指针:一个变量的地址   指针变量:专门存放变量地址的变量

2、指针变量定义    类型说明符 *变量名   //*表示这是一个指针变量,类型说明符表示该指针变量所指向的变量的数据类型。

3、指针变量的赋值只能赋予地址。

& :地址运算符

* :指针运算符(或“间接访问运算符”),表示指针变量所指的变量,其后必须跟指针变量。  注:在指针变量说明中,*是类型说明符,表示其后的变量是指针类型;而表达式中出现的*则是一个运算符,表示指针变量所指的变量。

4、动态存储分配的几个相关函数

  malloc(size)在内存的动态存储区中分配一个长度为size的连续存储空间,返回值是指针(指向字符),值是该分配区域的起始地址。如果此函数未能成功执行,则返回0。

  calloc(n,size)   分配n个长度为size的连续空间,返回分配域的起始地址(指向字符)。

  free(ptr)  释放由ptr指针变量(指向字符型的指针变量)指向的内存区域。

5、移动指针:指针变量加或减一个整数,功能:使指针变量指向相邻的存储单元

  指针比较:两个指针指向同一个对象,可以进行<,<=,>,>=,==,!=等关系运算。

6、字符串常量是在内存中一段连续空间存放,字符串中每个字符占一个字节存放空间。

7、指针可以指向一个函数,一个函数在编译时被分配一个入口地址,这个地址就称为函数的指针。

   指向函数的指针定义: 类型说明符(*指针变量名)(函数形参);//函数形参可省   如 char(*p)()

  返回指针的函数定义    类型名 *函数名(参数表) 如char *m(a,b);

8、指针数组:若干指向同类对象的指针构成的数组

         类型名 *数组名[数组长度]   如:float *p[10]

指向指针的指针:指针变量指向指针变量,其内容为某指针变量的地址

       类型说明符 **指针变量名

第九章 结构体、公用体和枚举类型

1、结构体(struct)把不同类型的数据组织在一起并构造成一种新的数据类型

   共用体(union)又称联合体,使几种不同类型的变量公用一段存储空间

   枚举(enum)列举变量的取值范围,用此类型定义的变量只能取已列举的值

2、结构体类型定义

struct  结构体名       //结构体名可省

{类型名  结构体成员名1;

........

类型名  结构体成员名n;

};

从关键字至右花括号之间的部分称为结构区分符,它是类型区分符的一种,用于指定结构的类型

结构体类型变量的定义

?单独定义                 ?混合定义             ?使用typrdef定义

struct student                struct student             typedef struct

{char sn[10];  \\学号         {char sn[10];             {char sn[10];

 int age;                    int age;                  int age;

};                          }std1,std2 ;              }STUDENT;

struct student std1,std2;   struct student std1,std2;          STUDENT std1,std2;

引用结构体成员:   结构体变量名.结构体成员名

结构体可嵌套使用

结构体数组:将结构体变量名换为数组即可

结构指针:指向结构体类型的指针。应用:通过一种特殊的结构指针(自引用结构)来表示链表、堆栈、树、图等复杂数据结构;用于动态分配结构对象。

             结构体类型名 *指针变量名

访问结构体成员:

?用间接运算符*访问结构成员  如:struct student stu,*p=&stu;

                                (*p).sex=’m’;  // “*”的运算优先级低于“.”

?用指向运算符“—>”访问   //—和>间不能有空格

        如:p—>sex=’m’  //“—>”与“()”、“[]”、“.”具有最高优先级

  注:struct {char *s;

            }x,*p=&x;

*p—>s++  // 在引用了变量x中指针成员s所指存储单元字符之后,使指针s自加1

(*p—>s)++ // 使变量x中指针成员s所指存储单元的字符值加1

3、链表

  Struct link

{int data;

Struct link *next;

}a,b;

如果执行a.next=&b;

则构成链式结构                   

                        a              b                         

     多个同类型的结构变量“链接”到一起,形成“链表”

?输出链表:访问链表,只有通过链表首地址,依次访问各结点

?插入操作:确定插入位置,通过指针的再次赋值。

  如:b—>next=a—>next;

      a—>next=b;

?删除操作:将待删结点的前驱结点指向待删结点的后继结点即可

     a—>next=b—>next;

4、共用体

5、枚举类型 如果一个变量的值只有有限几种可能情况。“枚举”:指定义一组已命名变量,枚举变量的值只限于列举出来的这组常量的范围内。

?三种定义方式

说明与定义分开  enum weekday{sun,mon,tue,wed,thu,fri,sat};

                enum weekday day;

说明与定义合一  enum weekday{sun,mon,tue,wed,thu,fri,sat}day;

无名枚举        enum {sun,mon,tue,wed,thu,fri,sat}day;

?枚举类型中说明的元素师常量,而不是变量名,对这些常量按照元素的说明顺序默认取值为0,1,.....,n-1。实际上枚举类型中说明的元素都是整型常量

也可定义时指定元素值。如  enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat};

      //未指定元素值,顺序加1

?The enum hack 用法

  enum{N=10};等价 #define N 10  等价 const int N=10;

6、ttpedef定义新类型名

     typedef <旧类型名><型类型名>;

如 typedef struct student {int num;

                     }STUDENT;  //  STUDENT即为struct student的别名

第十章 文件

1、“文件”指存储在外部介质(如磁盘)上的数据的集合,即数据是以文件的形式存储在外部介质上的。操作系统以文件为单位对数据进行管理。从用户角度来看,文件分为标准设备文件和磁盘文件。

2、C语言中,文件被看做一个由字符(字节)组成的序列,即文件数据为一连串的字符(字节),称为流式文件。  系统以字符(字节)为单位对文件进行存取。从数据在文件中的组织形式来看,文件可分为文本文件和二进制文件。文本(text)文件又称为ASCII文件,每一个字节存放一个字符的ASCII代码;二进制文件则是把数据按其在内存中的存储形式直接存放在文件中。文件按其存取方式,分为顺序存取和随机存取。

附:优先级法则:

1、()   []    —>    .

2、!  ~  ++  --  -(负号)  *  &   sizeof

3、 *   /   %

4、+   -

5、<<    >>

6、<   <=  >   >=

7、==  !=

8、&

9、^

10、|

更多相关推荐:
c语言程序设计知识点总结

C语言程序设计教学基本知识点第一章C语言基本知识1C源程序的框架尽管各个C源程序的功能千变万化但框架是不变的主要有编译预处理主函数函数n等主函数的位置不一定在最前面可以在程序的中部或后面主函数的名字固定为mai...

《C程序设计》复习资料知识点总结(C语言)

C程序设计知识点第1章C语言概述C程序设计知识点都懂了一定过第1章C语言概述1112C语言属高级语言区分字母的大小写以函数为基本单位采用模块化程序设计可直接访问内存进而对硬件进行操作用C语言编写和程序称作C源程...

C语言程序设计考点知识点

第一章程序设计基本概念11程序和程序设计程序连续执行的一条条指令的集合称为程序对于计算机来说它不能识别由高级语言编写的程序它只能接受和处理由0和1的代码构成的二进制指令或数据由于这种形式的指令是面向机器的因此也...

C语言程序设计知识点

转C语言最重要的知识点复习资料保及格编辑删除权限设置更多更多设置置顶推荐日志转为私密日志转载自校友用户转载于20xx年04月15日2114阅读3评论0分类偶尔收藏权限公开C语言最重要的知识点复习资料要学的都来看...

C语言程序设计知识点

第一章C语言基础知识考点1C程序用C语言编写的程序称为C语言源程序源程序文件的后缀名为c源程序经编译后生成后缀名为obj的目标文件再把目标文件与各种库函数连接起来生成exe可执行文件C语言有三种基本结构顺序结构...

c语言程序设计基本概念考点归纳

第1章程序设计基本概念考点归纳11C语言的特点C语言是近年来非常流行的语言很多人宁愿放弃已经熟悉的其他语言而改用C语言其原因是C语言有优于其他语言的一系列特点下面是C语言的主要特点1语言简洁紧凑并且使用方便灵活...

《C程序设计》复习资料知识点总结(C语言)

C程序设计知识点第1章C语言概述C程序设计知识点都懂了一定过第1章C语言概述1112C语言属高级语言区分字母的大小写以函数为基本单位采用模块化程序设计可直接访问内存进而对硬件进行操作用C语言编写和程序称作C源程...

c语言与程序设计章节小结

第一章本章小结1计算机是由程序控制的要使计算机按照人们的意图工作必须用计算机语言编写程序2机器语言和汇编语言依赖于具体计算机属低级语言难学难用无通用性高级语言接近人类自然语言和数学语言容易学习和推广不依赖于具体...

全国计算机等级考试二级c语言公共基础知识总结

最新20xx年9月二级C语言南开100题全国计算机等级考试二级c语言公共基础知识总结第一章数据结构与算法11算法算法是指解题方案的准确而完整的描述算法不等于程序也不等计算机方法程序的编制不可能优于算法的设计算法...

C语言课程设计报告---很全,包括流程图,课设总结

高级语言程序设计C课程设计报告书目录一设计任务2二系统设计方案3三程序主要代码分析4四程序调试中出现的问题及其解决方法17五改进意见与收获体会18六主要参考资料18附此设计经过多次修改但还存在一些不足的地方希望...

c语言课程设计报告

C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体设计四详细设计五运行结果六课程设计体会一实验目的1通过课程设计加深对结构化程序设...

C语言程序设计第三次(2.5)实验报告

C语言程序设计实验报告专业班级日期11月26日成绩实验组别第327次实验指导教师李开学生姓名学号同组人姓名实验名称数组实验一实验目的1掌握数组的说明初始化和使用2掌握一维数组作为函数参数时实参和形参的用法3掌握...

c语言程序设计知识点总结(27篇)