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


发布评论