目录

  • 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 章节知识点小结
一维数组


数组是一组有序数据的集合,并且这些数据具有相同的数据类型。即数组用来存放一组相同类型的数据。

1、一维数组的定义

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

类型说明符:表示数组中存放的数据的类型。

数组名:即数组的名称,必须遵循标识符定名规则。

常量表达式:表示数组长度,指定数组元素的个数,可为常量和符号常量,不能为变量。

例如:  int  a[10];

该语句定义了a为整型数组,数组长度为10,即该数组可存放10个整数。

错误的定义形式: int  a[n];

                 int a[0];

                 int a(10);


2、 一维数组元素的引用

引用方式 数组名[下标]  

下标可以是整型常量或整型表达式。

注意:定义数组时的常量和引用数组元素时常量的区别。

例如∶ int a[10];    数组长度为10,可存放10个整数

a[0]=10;      下标

在引用数组元素时,应确保数组的下标在定义的范围内,如写成a[10] =20,虽不报错,但a[10]并非数组中的元素。

 3、 一维数组的初始化

1)定义数组时对数组元素赋初值:将数组元素的初值依次放在一对花括弧内,各数据间用逗号隔开。

例如:int a[10]={0,1,2,3,4,5,6,7,8,9};

可给一部分元素赋值。

例如:  int a[10]={0,1,2,3,4};   

a数组有10个元素,给前面5个元素赋初值,后5个元素值为0。

可不指定数组长度。

:   int a[]={12345};

等价于 int a[5]={1,2,3,4,5}; 

根据大括弧内数据的个数确定数组的长度。

除了在定义时给数组元素赋初值外,还可采用其他方式可以对数组进行初始化。

2)循环结构和赋值语句,给数组元素赋初值;

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

    a[i]=i

3)通过循环结构配合输入函数,给数组元素赋初值。       

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

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


4、一维数组的应用

(1)将a数组中所有数组元素输出。

程序:

#include<stdio.h>

void main()

{ int a[10]={0,1,2,3,4,5,6,7,8,9};   在定义数组时给全部数组元素赋初值

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

      printf(“%d ”,a[i]);

改成printf(“%d ”,&a[i]);输出每个数组元素在内存中的存放地址;

分析得出:1. VC给一个整型数据分配4个字节;

2.编译系统给数组分配的空间是连续的;

3.各数组元素在内存中存放是有顺序的。

(2)用起泡法对一组数由小到大进行排序。

起跑法的思路:每次从第一个元素开始,将相邻的两个数比较,将小的数调到前面。

1)  第一趟将6个数中每相邻的两个数比较:第一次前两个数9和8比较,将8调到前面,然后,将第二和第三个数9和5比较,交换……经过第一趟比较,最大的数9已沉底,小的数上升,共进行5次比较和交换;

代码:for(i=0;i<5;i++)                  

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

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

2)  接下来第二趟对余下的前面5个数做相同操作.从第一个数开始比较,共比较4次,8

沉下来;

   代码:for(i=0;i<5;i++)                  

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

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

   ......

分析:6个数比较5趟,

第一趟比较5次;

第二趟比较4次;

第三趟比较3次;

第四趟比较2次;

第五趟比较1次。

5段代码类似,只比较交换的次数不同,所以,将5段代码整合在一个循环里:

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

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

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

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

 

思考:对10个数进行排序。

*EASY图形编程.一维数组的应用

利用数组,来产生 100 个随机下落的点。并且每个点落到底部后,就回到顶部重新往下落:

#include<graphics.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

void main()
{
    srand( (unsigned)time(NULL) );

   initgraph(640, 480);

    // 定义点的坐标数组
    intx[100];            //
点的 x 坐标
    int y[100];           //
点的 y 坐标
    int i;

    // 初始化点的初始坐标
    for (i=0; i<100; i++)
    {
        x[i] = rand() % 640;
        y[i] = rand() % 480;
    }

   while(!kbhit())
    {
        for(i=0; i<100; i++)
        {
            //
擦掉前一个点
           putpixel(x[i], y[i], BLACK);
            //
计算新坐标
            y[i]+=3;
            if (y[i]>= 480) y[i] = 0;
            //
绘制新点
           putpixel(x[i], y[i], WHITE);
        }

       Sleep(10);
    }

   closegraph();
}

章节测验: