目录

  • 1 第一章 C语言简介
    • 1.1 C语言前世今生
    • 1.2 主流开发环境介绍
    • 1.3 第一个小程序解析
    • 1.4 常见编译错误
    • 1.5 章节知识点小结
  • 2 算法基础
    • 2.1 算法-程序的灵魂
    • 2.2 算法的描述-流程图
  • 3 数据类型与运算符
    • 3.1 数据描述
    • 3.2 运算符和表达式1
    • 3.3 运算符和表达式2
    • 3.4 章节知识点小结
  • 4 顺序结构程序设计
    • 4.1 输入和输出
    • 4.2 顺序结构程序设计
    • 4.3 章节知识点小结
  • 5 选择结构程序设计
    • 5.1 关系运算符和关系表达式
    • 5.2 逻辑运算符和逻辑表达式
    • 5.3 if语句
    • 5.4 条件运算符
    • 5.5 switch语句
    • 5.6 章节知识点小结
  • 6 循环结构程序设计
    • 6.1 while循环结构
    • 6.2 do_while循环结构
    • 6.3 for循环结构
    • 6.4 循环的嵌套
    • 6.5 break语句和continue语句
    • 6.6 章节知识点小结
  • 7 数组
    • 7.1 一维数组
    • 7.2 二维数组
    • 7.3 字符数组
    • 7.4 章节知识点小结
  • 8 函数
    • 8.1 子程序设计
    • 8.2 函数定义
    • 8.3 函数的调用
    • 8.4 局部变量和全局变量
    • 8.5 参数传递
    • 8.6 函数递归调用
    • 8.7 章节知识点小结
  • 9 指针
    • 9.1 指针的基本概念
    • 9.2 指针变量的定义及引用
    • 9.3 通过指针引用数组元素
    • 9.4 指向多维数组的指针和指针变量
    • 9.5 用指向数组的指针作函数参数
    • 9.6 指针与字符串
    • 9.7 函数指针和指针函数
    • 9.8 章节知识点小结
  • 10 用户自己建立数据类型
    • 10.1 定义和使用结构体变量
    • 10.2 使用结构体数组
    • 10.3 结构体指针
    • 10.4 章节知识点小结
  • 11 编译预处理
    • 11.1 宏定义预处理
    • 11.2 文件包含预处理
    • 11.3 条件编译预处理
    • 11.4 章节知识点小结
  • 12 文件
    • 12.1 文件的基本知识
    • 12.2 文件的基本操作
    • 12.3 章节知识点小结
章节知识点小结


知识点

精讲文档

第八章数组

8.1 一维数组

一维数组的定义

定义形式:

   类型名  数组名[常量表达式];

其中:常量表达式表示元素的个数,即长度。

一维数组下标

数组下标从0开始,定义的n个元素分别为a[0]a[1]a[2]……a[n-1]

数组名的含义

数组名代表数组的首地址,也就是第一个元素的地址。

 

一维数组初始化

数组的初始化:在定义数组时直接给数组元素赋初值。

初始化方法:从数组的第一个元素开始依次给出初始值表,表中各值之间用逗号分开,并用一对花括号将它们括起来。

一维数组元素的引用

引用方式:

        数组名[下标]

求最大值算法

题目:求一维数组中所有元素的最大值及该元素的下标。

解题思路:采用打擂台算法

l   先找出任一人站在台上,第2人上去与之比武,胜者留在台上

l   3人与台上的人比武,胜者留台上,败者下台

l   以后每一个人都是与当时留在台上的人比武,直到所有人都上台比为止,最后留在台上的是冠军

主要程序段如下:

……

int i,  k=0,max;

  int  a[10]={1,5,3,7,8,9,-2,4,1,-1};

   max=a[0];                    

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

     if (a[i]>max)

        {  max=a[i];  k=i;}

   printf("max=%d\nk=%d\n",max,k);

……

冒泡法排序

题目:从键盘任意输入10个数,按从小到大的顺序重新排列,然后输出。

Ø  算法总体思想:

   将每相邻的两个数进行两两比较,将小的数调到前面。

主要程序段如下:

……

int a[10];   int i,j,t;

printf("input  10 numbers :\n");

for  (i=0;i<10;i++) 

scanf("%d",&a[i]); 

for(j=0;j<9;j++)

       for(i=0;i<9-j;i++)  

         if (a[i]>a[i+1])

            {t=a[i];a[i]=a[i+1];a[i+1]=t;}

……

选择法排序

题目:从键盘任意输入10个数,按从小到大的顺序重新排列,然后输出。

方法二:选择法

算法思想是:(考虑10 个数)

先将10个数中最小的数与a[0]对换;再将a[1]a[9]中最小的数与a[1]对换……每比较一轮,找出一个未经排序的数中最小的一个

共比较9

主要程序段如下:

……

int a[10];   int i,j,t;

printf("input  10 numbers :\n");

for  (i=0;i<10;i++) 

scanf("%d",&a[i]); 

for(i=0;i<n-1;i++)

    { k=i;

        for(j=i+1;j<n;j++)

         if(a[j]<a[k])    k=j;

            t=a[k];

       a[k]=a[i];

       a[i]=t;

          }

……

8.2 多维数组

二维数组定义

二维数组的定义

 类型说明符  数组名[常量表达式1][常量表达式2];

二维数组元素的引用

二维数组元素的引用形式:

      数组名 [下标][下标]

二维数组初始化

类型说明符数组名[常量1][常量2]={初始化数据}

 

二维数组元素在内存中的存储

二维数组元素在内存中按行序优先存储,即当按照存储顺序存取元素时,最右边的下标变化最快

矩阵操作

题目:将一个23列二维数组行和列元素互换,存到另一个二维数组中。(矩阵转置)

解题思路:

l   a数组中的元素a[i][j]存放到b数组中的b[j][i]元素中

l   用嵌套的for循环完成

主要程序段如下:

……

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

   for (j=0;j<=2;j++)

     b[j][i]=a[i][j];

……

8.3 字符数组

字符数组定义

字符数组:用来存放字符的数组称为字符数组。

用一个一维字符数组可以存放一个字符串;

用一个二维字符数组可以存放多个字符串,

字符数组定义的一般格式:

     char  数组名[字符串数量][字符串最大长度]

说明:  [字符串数量]部分如果没有,则表示只定义了一个一维字符数组。

字符数组初始化

字符数组的初始化可按行进行。例如:

char str[4][10]={“Turbo C” , “Microsoft”,  "PASCAL" ,                  "Visual Basic" }

字符串处理函数:puts函数

形式:puts (字符数组/字符串常量)

作用:将一个字符串('0'结束的字符序列)输出到显示器。

字符串处理函数:gets函数

形式:gets(字符数组)

作用:从终端输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址。

字符串处理函数:strcat函数

形式:strcat(字符数组1,字符数组2/字符串)

作用:连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。

字符串处理函数:strcpy函数

形式:strcpy(字符数组1,字符数组2/字符串)

作用:将字符串2复制到字符数组1中。

字符串处理函数:strcmp函数

形式:strcmp  (字符串1,字符串2)

作用:比较两个字符串的大小。

字符串处理函数:strlen函数

形式:strlen  (字符数组/字符串常量)

作用:测试字符串的长度。

函数值:字符串的实际字符个数(不包括′\0)

字符串处理函数:strlwr函数、strupr函数

strlwr函数:

形式:strlwr (字符串)

作用:将字符串中大写字母换成小写字母。

strupr函数:

形式:strupr (字符串)

作用:将字符串中小写字母换成大写字母。

8.4 数组作函数参数

数组元素作函数参数

用数组元素作实参时,向形参变量传递的是数组元素的值,在使用时同普通变量作参数一样。

一维数组名作函数参数

用数组名作函数实参时,向形参传递的是数组首元素的地址。

形参数组可以不指定大小,在定义数组时在数组名后面跟一个空的方括号,可再设一个形参,传递数组元素的个数。形式如下:

int  main()                  

{ void  fun(int arr[],int n];

   int array[10];        

                                   

   fun (array,10);                     

   return 0;

}

void  fun(int arr[ ],int n)      

{   }

 

二维数组名作函数参数

实参为二维数组名,形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明。