基本概念
数组 :一组具有相同名字、不同下标、个数固定的同类型变量的集合
数组元素 :数组中的一个变量
数组的类型 :数组元素的类型(基本类型包括:整型(int)浮点型(float)双精度浮点型(double)字符型(char)无值型(void))
数组的维数 :确定数组中各元素之间相对位置的下标个数(1.下标必须是正数常数或整形表达式 2.下标的取值从0开始,最大下标值为数组元素个数减一 3.下标不要越界)
例如:int a[6];int是类型,a[6]是一维数组说明符 为a开辟a[0] a[1]a[2]a[3]a[4]a[5] 六个连续的存储单元。
一维数组的初始化:1.数组不初始化,其元素值为随机值 2.所赋初值少于定义个数系统为后面元素自动补零 3.当全部数组元素赋初值时,可不指定数组长度
例如:int a[5]={1,2,3,4,5} 等价于a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;
应用:例如:定义一个数组,使a[0]到a[7]的值为0~7,然后输出。
#include <stdio.h>
main()
{
    int i,a[8];                    /*一维数组的定义*/
    for(i=0;i<=7;i++)
        a[i]=i;                    /*一维数组的初始化*/
    for(i=0;i<=7;i++)
        printf("%d ",a[i]);    /*一维数组的引用*/
}
例如:读十个正数存入数组,到其中最大值和最小值。
思路:1.用for循环出入10个正数 2.处理:(a)先令max=x[0] (b)依次用x[i]和max比较(循环)若max<x[i],令max=x[i] 3.输出:max
#include <stdio.h>
#define SIZE 10
main()
{  int x[SIZE],i,max;
    printf("Enter 10 integers:\n");
    for(i=0;i<SIZE;i++)
    scanf("%d",&x[i]);         
    max=x[0];
    for(i=1;i<SIZE;i++)
      if(max<x[i])               
      max=x[i];
    printf("Maximum value is %d\n",max);
}
二维数组的定义方式:数据类型 数组名[常量表达式][常量表达式] (按行序先)例如:int a[3][4]
(有一个m*n的二维数组a,其中i行j列元素a[i][j]在数组中
的位置计算公式是:i*n+j+1)
可把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组
例如:把 a[3][4] 看作是一个一维数组,有3个组元素:a[0]、a[1]、a[2],每个组元素中又包含 4 个元素的一维数组。见下图:
二维数组的初始化:1) 按行存放 例如:int a[2][3]={{ 1,2,3},{4,5,6}}; 2) 按存放顺序 例如:int b[2][3]={1,2,3,4,5,6}; 3) 只给部分元素赋初值 例如:int c[2][3]={{1,2},{4}} (未赋值的默认为0)
4)省略第一维长度 例如:int e[][3]={1,2,3,4,5,6}
应用:例如:a[2][3][2]的写入和写出。
#include <stdio.h>
main()
{  int i,j,k,a[2][3][2];
    for(i=0;i<2;i++)
      for(j=0;j<3;j++)
    for(k=0;k<2;k++)
        scanf("%d",&a[i][j][k]);
    for(i=0;i<2;i++)
      for(j=0;j<3;j++)
    for(k=0;k<2;k++)
        printf("a[%d][%d][%d]=%d\n",i,j,k,a[i][j][k]);
}
定义一个二维数组,并输出每一行的最小值。
#include <stdio.h>
#define N 4
main()
{ int  a[N][N], m[N], i, j;
  printf("Input numbers: \n");
  for (i=0; i<N; i++)
    for (j=0; j<N; j++)
      scanf("%d", &a[i][j]); 
for (i=0; i<N; i++)
{ m[i]=a[i][0];               
    for (j=1; j<N; j++)
      if (m[i]>a[i][j])  m[i]=a[i][j]; }
printf("Min is: ");
for (i=0; i<N; i++) 
      printf("%d ", m[i]); }
应用
1、要说明一个有10个int元素的数组,应当选择语句(    )。
[A] int a[10];  [B] int a[2, 5];  [C] int a[  ];  [D] int a[9];
解析:本题考查的是数组的定义问题。根据数组的定义格式要求中括号中给出数的长度,即数组元素的个数,必须以整数形式表示,且不能省略,因此选项BC错误。本题要求有10个数组元素,选项A正确,选项D定义了9个元素错误。因此,正确答案为[A]。
2、若有定义语句:int m[ ]={5,4,3,2,1},i=4;则下面对m数组元素的引用错误的是(    )。(全国计算机二级考试题2008年9月)
[A]m[--i]    [B]m[2*2]  [C]m[m[0]]    [D]m[m[i]]
解析:本题考查的是数组的下标不能越界数组长度由{ }中的数据个数默认为5,含有的5个数组元素分别为m[0]、m[1]、m[2]、m[3]、m[4],选项C为m[5]下标越界。选项A对应m[3]选项B对应m[4]选项D对应m[1]。因此,正确答案为[C]。
3、有以下程序 scanf输入整型数组
#include “stdio.h”
void main()
{
int s[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++) c[s[i]]++;
for(i=1;i<5;i++) printf(“%d”,c[i]);
printf(“\n”);
}
程序的运行结果是(    )。(全国计算机二级考试题2008年4月)
[A]1 2 3 4   [B]2 3 4 4   [C]4 3 3 2   [D]1 1 2 3
解析:本题考查的是数组元素的输入输出问题。第一个for循环作用是给c数组赋值,c[s[i]]++;表示对应c数组下标在s数组中出现的个数,如s数组中1的个数为4,则c[1]=4。因此,正确答案为[C]。
4、以下错误的定义语句是(    )。(全国计算机二级考试题2008年4月)
[A]int x[][3]={{0},{1},{1,2,3}};
[B]int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; 
[C]int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; 
[D]int x[][3]={1,2,3,4};
解析:本题考查的是二维数组的定义及初始化问题。C语言规定二维数组定义初始化时,数组长度行可省略,列不可省略。因此,选项C错误。正确答案为[C]。
5、若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a数组的第10个元素是(    )。(全国计算机二级考试题2007年9月)
[A]a[0][4]   [B]a[1][3]  [C]a[0][3]  [D]a[1][4]
解析:本题考查的是二维数组的存放顺序问题。C语言规定二维数组是按行存放的,即先存第一行,再存第二行,且数组的下标从0开始的。因此,正确答案为[B]。
6、已知:int i, x[3] [3]={1, 2, 3, 4, 5, 6, 7, 8, 9};则下面语句的输出结果是(    )。
for(i=0; i<3; i++)
printf(“%d”, x[i] [2-i]);
[A] 1  5  9
[B] 1  4  7
[C] 3  5  7
[D] 3  6  9
解析:本题考查的是二维数组的输出问题。注意数组元素的下标是从0开始的,本题要输出的x[0] [2]x[1] [1]x[2] [0]分别为3、5、7。因此,正确答案为[C]。
7、以下关于字符串的叙述中正确的是(    )。(全国计算机二级考试题2007年9月)
[A]C语言中有字符串类型的常量和变量
[B]两个字符串中的字符个数相同时才能进行字符串大小的比较
[C]可以用关系运算符对字符串的大小进行比较
[D]空串一定比空格打头的字符串小
解析:本题考查的是字符串问题。C语言中有字符串常量,没有字符串变量,选项A错误。两个字符串能比较大小,对于字符个数没有要求,只要到第一个不相等的字符整个字符串的大小就确定了,选项B错误。不能用关系运算符对字符串的大小进行比较,要用字符串比较函数strcmp比较字符串的大小,选项C错误。因为任何字符的ASCII码值都大于空格的ASCII值,所以空串一定比空格打头的字符串小。因此,正确答案为[D]。
8、若有定义语句: char s[10]=”1234567\0\0”; 则strlen(s)的值是(    )。(全国计算机二级考试题2008年9月)
[A]7  [B] 8  [C] 9  [D] 10

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。