2024年6月2日发(作者:)

第九章 数组总结

基本概念

数组 :一组具有相同名字、不同下标、个数固定的同类型变量的集合

数组元素 :数组中的一个变量

数组的类型 :数组元素的类型(基本类型包括:整型(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

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

#include

#define SIZE 10

main()

{ int x[SIZE],i,max;

printf("Enter 10 integers:n");

for(i=0;i

用for出入10个正数

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

max=x[0];

for(i=1;i

if(max

for循环选择最大数

max=x[i];

printf("Maximum value is %dn",max);

}

二维数组的定义方式:数据类型 数组名[常量表达式][常量表

达式] (按行序先)例如:int a[3][4]

1

第九章 数组总结

(有一个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

main()

{ int i,j,k,a[2][3][2];

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

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

用三个for循环写入

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

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

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

用三个for循环写出

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

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

printf("a[%d][%d][%d]=%dn",i,j,k,a[i][j][k]);

}

定义一个二维数组,并输出每一行的最小值。

#include

#define N 4

main()

{ int a[N][N], m[N], i, j;

printf("Input numbers: n");

for (i=0; i

for (j=0; j

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

for (i=0; i

{ m[i]=a[i][0];

for (j=1; j

if (m[i]>a[i][j]) m[i]=a[i][j]; }

printf("Min is: ");

for (i=0; i

printf("%d ", m[i]); }

一看题要知道怎么写出入一个

二维数组,然后在考虑怎么

输出每行最小值 。现在其实不

需要发散思考,基本都是固定

的模式,看懂原理记住格式!

2

第九章 数组总结

应用

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、有以下程序

#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

3

第九章 数组总结

[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+=”123456700”; ,则strlen(s)的值是( )。(全国计算机二

级考试题2008年9月)

[A]7 [B] 8 [C] 9 [D] 10

解析:本题考查的是字符串结束标志’0’。strlen(s)函数的功能是求字符串的长度,字符串的

长度应从第一个字符开始,到第一个结束符’0’为止,注意’0’不占字符串长度。因此,正确

答案为[A]。

看了半天头都大了,说个笑话调节一下!

C语言“死循环”(笑话)

某学院C语言老师讲到死循环,作如下例子:

老总打电话给秘书: 这几天我陪你去北京玩玩,你准备一下

秘书打电话给老公: 这几天我要和老总去北京开会

老公打电话给情人: 这几天我老婆不在家,陪我

情人打电话给辅导学生: 这几天老师有事,停课

学生打电话给爷爷: 这几天不上课,爷爷你陪我玩

爷爷给秘书打电话: 北京去不了了,孙子要我陪

秘书给老公打电话: 老总突然有事不去北京开会了

老公给情人打电话: 老婆不走了,下次再说

情人给辅导学生打电话: 这几天照常上课!!!

学生给爷爷打电话: 555老师说这几天照常上课

爷爷给秘书打电话:还是去北京吧,你准备准备!

这一章说到这我感觉差不多了,还有其他的话大家自己补充一下吧。我感觉数

组就是给一群数发个号,让他们先对号入座,然后再叫号说事。不用像以前那

样,要写入十个数时,要画十个%d,十个变量。希望大家都自有所悟!

4