第7章 数组
JAVA 07 数组
Arrays as Objects (cont’d)
As with other objects, the declaration creates only a reference, initially set to null. An array must be created before it can be used. One way to create an array:
In Java, an array is an object. If the type of its elements is anyType, the type of the array object is anyType[ ]. Array declaration:
• anyType [ ] arrName;
1.39 c[0]
1.69 ቤተ መጻሕፍቲ ባይዱ[1]
1.74 c[2]
0.0 c[3]
c is array’s name
下标 (Subscripts)
In Java, an index is written within square brackets following array’s name (for example, a[k]). Indices start from 0; the first element of an array a is referred to as a[0] and the n-th element as a[n-1]. An index can have any int value from 0 to array’s length - 1.
• 例:
int [ ] scores = new int [10] ; private double [ ] gasPrices = { 3.05, 3.17, 3.59 }; String [ ] words = new String [10000]; String [ ] cities = {"Atlanta", "Boston", "Cincinnati" };
C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组
第7章数组【练习7-1】将例7—3 程序中的break 语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?解答:当去掉break 语句后,一旦找到数据将不跳出循环,而是继续往下找值为x 的元素,因此程序输出会有变化。
当输入数据仍为2 9 8 1 9 时,输出将是index is 1 index is 4。
【练习7—2】将数组中的数逆序存放.输入一个正整数n(1<n<=10),再输入n个整数,存入数组a中,输出最大值及其对应的最小下标,下标从0开始.试编写相应程序。
解答:#include<stdio。
h〉int main(void){int i,n,temp;int a[10];printf("Input n:");scanf(”%d",&n);printf(”Input %d integer:",n);for(i=0;i<n;i++)scanf(”%d”,&a[i]);printf(”After reversed:");for(i=0;i〈n/2;i++){temp=a[i];a[i]=a[n—1—i];a[n-1—i]=temp;}for(i=0;i〈n;i++)printf("%d ”,a[i]);return 0;}【练习7-3】求最大值及其下标.输入一个正整数n(1〈n<=10),再输入n个整数,存入数组a中,将先数组a中的这n个数逆序存放,在按顺序输出数组a中的n各元素.试编写相应程序.解答:#include〈stdio.h>int main(void){int i,index,n;int a[10];printf("Enter n:”);scanf(”%d",&n);printf(”Enter %d integrs:”,n);for(i=0;i〈n;i++)scanf("%d",&a[i]);for(i=n—1;i〉=0;i++)printf("%d ”,a[i]);return 0;}【练习7-4】找出不是两个数组共有的元素。
《C语言程序设计基础与实训教程》第7章:数组
/webnew/
7.1.4 一维数组的应用举例
例7.5 将数组中的数按颠倒的顺序重新存放。要求,在操 作时只能借助一个临时存储单元而不能另外开辟数组。 分析:题目要求是按颠倒的顺序重新存放数据,而不是按 逆序输出。 可以使用两个变量i和j,i和j的初值分别为0和9,将a[i] 与a[j]对调,然后i++,j--,接着再将a[i]与a[j]对调。如些 重复操作,直到i>=j时,对调完成。 程序
分析:该数组元素的值是有规律的序列, ( 从 开始算起 开始算起) 分析 : 该数组元素的值是有规律的序列 , 第 i(i从0开始算起) 个 元素的值为: 元素的值为:10+2*i。 。 输出该数组时,由于该数组有30个元素,在一行中输出不太美观, 输出该数组时,由于该数组有 个元素,在一行中输出不太美观, 个元素 所以,这里我们选择每行输出6个元素。 所以,这里我们选择每行输出 个元素。 个元素
/webnew/
7.1.3 一维数组元素的引用
2.一维数组的输入与输出 一维数组的输入与输出 如何给数组元素赋值以及如何将数组元素的值输出是数 组最基本的操作。下面将讨论一维数组元素的输入与输出。 例7.1 定义一个五个元素的字符型数组,通过键盘给每 个元素赋值,并以相反的顺序的输出。 程序1 程序2 从上面的例子可以看出,一个数组中往往往包含较多的 数组元素,相同的赋值或输出操作将被重复多次进行,所以, 一维数组元素的输入与输出一般通过一重循环来实现。
/webnew/
7.1.3 一维数组元素的引用
注意: (1)数组元素的引用方式与数组说明符的形式非常相近,都是 “数组名[表达式]”形式,但两者的意义完全不同。 出现的位置不同。定义数组时,“数组名[表达式]”出现在 定义语句中,表示的是定义了一个名为“数组名”的数组,表达式的值 表示该数组中所包含元素的个数。作为数组元素的引用方式时,“数组 名[表达式]”出现在其它执行语句中,表示是数组中的下标为“表达式” 值的那个元素。 表达式的格式不同。定义数组时,“表达式”必须为常量表 达式。作为数组元素的引用方式时,表达式可以变量、常量或函数构成 的合法C表达式。 (2)在C语言中,起始下标规定为0,最大值应为:数组长度-1。 如果发生了下标越界的现象,可能破坏了其它存储单元的数据,甚至破 坏程序代码。 (3)下标必须是整型表达式,若为小数,则自动取整。如a[2.6] 系统自动默认为a[2]。
第七章 数组
例题1:求10名同学的平均分。7_2.c
main( ) { int a[10]; int i ,sum=0,ave; for (i=0;i<10;i++) scanf("%d",&a[i]); /*类型说明符 数组名[常量表达式]
数组名为a,此数组有10个整型元素*/
/* a[0], a[1], a[2], a[3], a[4]
3. 如果输入多个字符串,则可用空格隔开
char str1[20],str2[20],str3[20]; scanf(“%s%s%s”,str1,str2,str3); 输入为 How are you str1中为“How”, str2 中为“are”, str3中为 “you”。
7.3.3字符数组举例: 从键盘输入一行字符串(<20),求字符串中 小写字母的个数。7-6.c main() {char str[20],len=0,i; 求这个字符串 scanf ("%s",str); 的长度? for (i=0; str[i]!='\0';i++) if (str[i]>='a'&&str[i]<='z') len++; printf ("\n%d",len); }
1 2 3 4 5 6 7 8 9 a[8] 10 a[9]
a[0] a[1] a[2] a[3] a[4]
a[5] a[6] a[7]
2. 不允许对数组的大小作动态定义,即数组的大 小不能是变量。 例如:下面是不合法的: int n; float a[n]; 3. 数组元素的使用与变量是一样的。可以赋值, 也可作各种运算,还可以输入和输出。 例如:a [0]=1 ; a[1]=a[0]型_char、实 型_float)的数据外, C语言还提供了构造类型 的数据,它们有:数组类型、结构体类型、共用 体类型。构造类型数据是由基本类型数据按一定 规则组成的。
C语言基础 第7章 数组
一维数组: float mark[100];
低地址
每个数据元素占用 的字节数,就是基
类型的字节数 一个元素占4个字节
高地址
86.5 mark[0]
92.0 mark[1]
77.5 mark[2]
52.0 mark[3]
.
.
.
.
.
.
94.0
mark[99]
第7章 数组
7.1.2 一维数组的初始化 ❖ 初始化:在定义时指定初始值,编译器把初值
例:int a[10] = {0,1,2,3,4}; 仅前5个元素赋初值,后5个元素自动赋为0。 3、全部元素均初始化为0,不允许简写。 int a[10] = {0,0,0,0,0,0,0,0,0,0}; 不能写成:int a[10]={0*10};
第7章 数组
❖ 不能简写为:
❖ static int a[10] = {0*10};
第7章 数组
❖ 注意: 2)C语言不允许对数组的大小做动态定义, 如:
❖ int n;
❖ scanf("%d",&n);
❖ int a[n]; ❖ 因为在编译时,C编译器根据已知数组大
小分配内存。//只针对全局变量
❖ 说明:
1)数组名:按标识符规则。本例a就是数 组名。
2)整型常量表达式:表示数组元素个数 (数组的长度)。可以是整型常量或符 号常量,不允许用变量。整型常量表达 式在说明数组元素个数的同时也确定了 数组元素下标的范围,下标从0开始~整 型常量表达式-1(注意不是1~整型常量 表达式)。
7.1.3 数组元素的引用
❖ C语言规定,不能引用整个数组,只能逐 个引用元素,元素引用方式:
南昌大学第七章数组答案
A.int a[]="string";B.int a[5]={0,1,2,3,4,5};C.char a="string";D.char a[]={0,1,2,3,4,5};A.1DB.3C.9D.A. B.\"c:\\abc.dat\" C."c:\abc.dat" D."c:\\abc.dat"A. B.C. D.A. B.C. D.A. a[2][4]B. a[lC. a[l+l][0]D. a(2)(1) 确定A. a[0][2*1]B. a[l][3]C. a[4-2][0]D. a[0][4]A. 2B. 3C. 4D.A. 3 5 7B. 3 6 9C. 1 5 9 D 1 4 7A. j*m+iB. i*m+jC. i*m+j-1D. i*m+j+1 确定A. B.C. D.A.1DB.3C.9D.A. B.\"c:\\abc.dat\" C."c:\abc.dat" D."c:\\abc.dat"A. if(s1>s2)B. if(strcmp(s1,s2))C. if(strcmp(s2,s1)>O)D. if(strcmp(s1A. B.C. D.A. int a[3][ ];B. float a(3C. double a[1][4];D. float a(3)(4);A. a[2][4]B. a[lC. a[l+l][0]D. a(2)(1)A. 2B. 3C. 4D.A. 3 5 7B. 3 6 9C. 1 5 9 D 1 4 7A BC DA BC DA BC DA BC DA BD C整体赋值A BC DA BC DA BC DA BC DA BC DA BCD 值A B C DA B C DA B C DA B C DA) abcdefA) abcdA) abcdA) abcdef确定[C] 教师批改:36、给出以下定义:char x[ ]="abcdefg";char y[ ]={…a…,…b…,…c…,…d…,…e…,…f…,…g…};则正确的叙述为A)数组X和数组Y等价B)数组x和数组Y的长度相同C)数组X的长度大于数组Y的长度D)数组X的长度小于数组Y的长度确定[C] 教师批改:37、设有static char str[ ]="Beijing";则执行printf("%d\n", strlen(strcpy(str,"China")));后的输出结果为A) 5 B) 7C) 12 D) 14确定[A] 教师批改:38、请选出以下程序段的输出结果#include<stdio.h>main(){ char sl[10], s2[10], s3[10], s4[10];scanf("%s%s",s1,s2); gets(s3); gets(s4);puts(s1); puts(s2); puts(s3); puts(s4);}输入数据如下:(此处<CR>代表回车符)aaaa bbbb<CR>A bbbbB bbbbC) aaaa bbbbD ccccA BC DA不可以直接用数组名对数组进行整体输入或输出BC数组元素的下标超出所定义的下标范围时,系统将给出DA BC DA B C DA B C DA B C DA BC DA B C D。
大学课件C语言数组
第6趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f",&value); x[i]=value; } total=0.0; for(i=0;i<10;i++) total=total+x[i]*x[i];
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
number[0] number[1] number[2] number[3] number[4]
C语言中,数组元素的序号(下标)从0开始。
对数组的引用超过了所声明的范围,会导致不可预知的结果.
9
数组的作用
数组元素的作用相当于简单变量 数组名代表的是数组在内存中的首地址 同一个数组中的元素在内存中是按顺 序连续存放的
/*.....PRINTING OF x[i] VALUES AND TOTAL......*/
printf("ENTER 10 REAL NUMBERS\n"); for(i=0;i<10;i++) { scanf("%f", &x[i]); total=total+x[i]*x[i]; } printf("\n"); for(i=0;i<10;i++) printf("x[%2d]=%5.2f\n", i, x[i]); printf("\ntotal=%.2f\n", total);
C语言(第七章数组)
对部分元素赋初值(前面的连续元素)。如: int b[10]={0,1,2,3,4};
表示数组元素的值为:
b[0]=0; b[1]=1; b[2]=2; b[3]=3; b[4]=4; 后5个元素的初值为0。
注意:不能只对不连续部分元素或后面的连续
元素赋初值。 语句: int a[10]={, , , , ,1,2,3,4,5};
main ( ) { int a[2] [3]={{1, 2,3},{4, 5,6}}; int b[3] [2], i, j; printf("array a: \n"); for (i=0; i<=1; i++) { for (j=0; j<=2; j++) { printf("%5d", a[i][j]); b[j][i]=a[i][j]; } printf("\n"); } printf("array b:\n"); for (i=0; i<=2; i++) { for (j=0; j<=1; j++) printf("%5d", b[i]j]); printf("\n"); } }
运行结果如下:
1
1
2
3
5
8
89
13
144
21
133
34
377
55
610
987
1597
1584
4181
6765
四、简单预处理指令
1. 指令格式:
#define 符号常量
2. 指令作用
文本串
用整型表达式替换程序中所有的符号常量。
第7章 一维数组应用 1
第七章 数组
4、程序设计 、 功能:求小于lim的所有素数并放在 数组中, 的所有素数并放在aa数组中 功能:求小于 的所有素数并放在 数组中,该函数返回 所求出素数的个数。 所求出素数的个数。 # include <stdio.h> # inculde <conio.h> # define MAX 100 int fun (int lim,int aa[MAX]) { int n=0,i,j; /***************program**************/
第七章 数组
一维数组的应用: 一维数组的应用:
1、读程序写结果: 、读程序写结果:
一维数组的应用即对元素的引用有哪些? 一维数组的应用即对元素的引用有哪些? void main () 1、通常与 循环结合使用。 循环结合使用。 、通常与for循环结合使用 {、一维数组的输出。 int x,y,z; 2、一维数组的输出。 int ( ]={-4,0,10,2,7,-1,19,-22,33,0}; a[ 正序、逆序) 正序、逆序) 3、数组元素赋值。 、数组元素赋值。 x=y=z=0; 通过键盘赋值, for通过键盘赋值, (i=0;i<10;i++) 通过程序运行中获取值 { if (a[i]<0) 利用rand()函数获取值,等办法。 ()函数获取值 利用 ()函数获取值,等办法。
第七章 数组
3、程序 、 题目:函数main()首先从键盘接受 个整数,依次放在数组 首先从键盘接受10个整数 题目:函数 首先从键盘接受 个整数, a中;其次,调用 函数在这10个整数中找出第一个奇数 中 其次,调用fun()函数在这 个整数中找出第一个奇数, 函数在这 个整数中找出第一个奇数, 并返回该数的下标值,如果在这10个数中无奇数 则返回-1 个数中无奇数, 并返回该数的下标值,如果在这 个数中无奇数,则返回 第三,如果fun()函数返回值不等于 ,则把找到的数与第 函数返回值不等于-1, ;第三,如果 函数返回值不等于 一个数交换。 一个数交换。 # include <stdio.h> # define N 20 int fun (int a[20]) { int i; for (i=0;i<10;i++) {/*************FOUND***************/ (a[i]%2==1)或(a[i]%2) 或 if (a[i]&1==0) break;} /***************FOUND***************/ i if (i<10) return 1; else return -1; }
VB6教程第7章 数组
浙江蜗牛网络-VB论坛:/cto.asp 说明: 说明: (1)"说明符"为保留字,可以为Dim,Public, 说明符"为保留字,可以为Dim,Public, Private,Static中的任意一个. Private,Static中的任意一个.在使用过程中可以根据 中的任意一个 实际情况进行选用.本章主要讲述用Dim声明数组 声明数组, 实际情况进行选用.本章主要讲述用Dim声明数组, 其它参数的意义在8.4节介绍 定义数组后, 节介绍. 其它参数的意义在8.4节介绍.定义数组后,数值数组 中的全部元素都初始化为0 中的全部元素都初始化为0,字符串数组中的全部元素 都初始化为空字符串. 都初始化为空字符串. (2)"数组名"的命名遵守标识符规则. 数组名"的命名遵守标识符规则. (3)"下标"的一般形式为"[下界 to] 上界". 下标"的一般形式为" 上界" 下标的上界,下界为整数,不得超过Long数据类型的 下标的上界,下界为整数,不得超过Long数据类型的 范围,并且下界应该小于上界.如果不指定下界, 范围,并且下界应该小于上界.如果不指定下界,下 界默认为0 界默认为0.
浙江蜗牛网络-VB论坛:/cto.asp
第7章 数组
从存储角度看,前面使用的变量都是相互独立的, 从存储角度看 , 前面使用的变量都是相互独立的 , 无关的,通常称它们为简单变量.但如果处理将200个 无关的,通常称它们为简单变量.但如果处理将200个 学生的成绩按大小顺序排序这类问题, 学生的成绩按大小顺序排序这类问题 , 只使用简单变 量将会非常麻烦,而利用数组却很容易实现. 量将会非常麻烦 , 而利用数组却很容易实现 . 本章讲 述VB数组的基本概念和使用方法,主要内容有:数组 VB数组的基本概念和使用方法 主要内容有: 数组的基本概念和使用方法, 的概念,数组的定义及应用,可调数组的概念及应用, 的概念 ,数组的定义及应用 , 可调数组的概念及应用 , 控件数组的概念及应用. 控件数组的概念及应用.
java课件 第七章 数组
7.3 数组访问
数组是一种数据结构,它由一组数组元素组 成。 数组是一种对象,它也有自己的成员变量和 方法。 数组一旦创建,就可以通过数组对象的引用 访问数组中的每一个元素,或者访问数组的 成员变量和方法。
14
7.3.1 对数组元素的访问
访问数组元素可以使用以下表达式: <数组对象引用>[<下标>] 数组访问表达式的类型是数组元素的类型,值是对 应数组元素的值。数组访问表达式的计算结果是变 量,可以出现在赋值操作符的左边。 <下标>是一个表达式,其类型可以是byte、char、 short或int型,但最终都会自动单目算术提升为int 型。<下标>的类型不能是long型。 <下标>的取值从0开始,一直到数组的长度减1。如 果<下标>值超出了允许的取值范围,将引发运行时 例外ArrayIndexOutOfBoundsException。
18
7.4 二维数组
在Java语言中,所谓二维数组是指数组的嵌套,即 数组的数组。 一个数组的数组元素类型既可以是基本类型,也可 以是引用类型。其中,引用类型就包括数组类型。 当一个数组的数组元素类型本身是数组类型时,就 形成了二维数组,甚至三维数组、四维数组等。 int[][] 表示一个int型的二维数组。其中: 第1个方括号可 以理解为第一维(外层)数组,其元素类型为int[] 型;第2个方括号可以理解为第二维(被嵌套的内 层)数组,其元素类型为int型。
4
7.1.2 数组变量
数组对象也需要通过变量来引用和操纵,这种变量 称为数组变量。 数组变量是指那些类型为数组类型的变量。 数组变量是引用型变量,其中存储着指向某个数组 对象的一个引用值。定义数组变量的例子:
第7章 数组
注意:key是个占位符,读者可以选择个人习惯的名称。由 于for…in是遍历数组的键名,所以key的类型为String。
7.10.2
for…in与for each…in遍历
for each…in循环的语法如下。
注意:element是个占位符,读者可以选择个人习惯的名称 。由于for each…in是遍历数组的键值,而键值的类型可 以是很多种类型(甚至可以是对象或数组),所以key的 类型使用*号,指定为无类型。
7.11
关联数组
ActionScript 3.0中所定义的数组类(Array)所指的都是数 字索引数组。数字索引数组的键是数字数据类型的。关 联数组也属于数组的范畴,但它的键可以为任何数组类 型(甚至是Object)。关联数组体现的是键与键值的一一 对应关系,这种关系称为“值对”。 ActionScript 3.0中使用关联数组时,已经超出了Array类的 范围。要使用字符串作为键的关联数组时,可以使用对 象(Object)来定义;若要使用对象作为键的关联数组时 ,则可以使用预定义的字典类(Dictionary)。
7.6.1
sort方法
2.排序方法参数 如果需要字义其它类型的排序,sort方法有两个参数供选择 :一个是排序方法,另一个是排序类型。 排序方法是一个函数,在定义时它包含两个参数(A,B) ,并要求返回一个值。当返回-1时则把参数A放在B之前 ,返回0时则A和B相等(随机放),返回1时参数A放在B 之后。
7.4.2
二维数组与多维数组
table[0]中存储的值是一个一维数组["张三",73]。要访问这个数组 的第一个元素时则使用table[0][0]。 多维数组与二维数组类似,按照键名/值一层一层对应下去。不过 二维数组以上就已经比较复杂了,一般不再使用“[ ]”直接定 义。下例创建三维数组,并对数组中的数据进行访问。
Fortran教程第七章数组
7.1 数组的概念
在许多应用中,我们需要存储和处理大量数据。在我们迄今涉及的程序设计问 题中,我们能够利用少量的存储单元,处理大量的数据。这是因为我们能够处 理每一个单独的数据,然后再重复使用存储该数据的存储单元。在有些应用中, 为了其后的处理,需要保存所处理的数据。例如,要计算和打印一个班学生的 平均成绩以及每个成绩与平均成绩的差。在这种情况下,在计算每个成绩与平 均成绩的差之前,首先计算平均成绩,然后计算每个成绩与这个平均成绩的差。 因此必须能够两次考查学生成绩。由于我们不愿意两次重复输入学生成绩,我 们希望在第一步时,将每个学生的成绩保存于单独的存储单元中,以便在第二 步时重新使用它们。在输入数据时,用不同的名字引用每一个存储单元将是烦 琐的。如果有100个成绩要处理,我们将需要一个长的输入语句,其中每个变量 名被列出一次。我们也需要100个赋值语句。
(接上页) DO I=1,2 DO J=1,3 WRITE(*,10)MAT(I,J) END DO END DO 10 FORMAT(1X,F6.2) END 程序运行时,输入数据的方法如下: 45 76 56 78 -67 56
第七章 数组
7.1 数组的概念 7.2 数组的说明与引用 7.3 数组元素的存储结构 7.4 数组的输入输出 7.5 给数组赋初值 7.6 数组的应用
在迄今所涉及的程序设计问题中,我们都是采用FORTRAN的基本数据类型(整型、 实型、复型、逻辑型和字符型)定义单个的变量来对数据进行描述。在科学计算中, 常常需要保存具有相同类型的一批数据,这时如果仍然用单个变量来表示,不但十 分麻烦,有时根本无法处理。为了描述现实问题中的各种复杂的数据,FORTRAN 语言还提供了由基本数据类型按某种机制组成的结构数据类型。数组是一种结构数 据类型,本章介绍它的定义与应用。
第07章-C++程序设计教程(第3版)(通用版)-钱能-清华大学出版社
数组是一定元素个数的连续空间整体
为了性能,C/C++拒绝传递数组整体
传递数组需传两个参数:数组首址和元素个数
int a[100],b[100]; void f(int* x, int* y, int n){
for(int i=0; i<n; i++)
x[i]=y[i];
}
void g(){
f(a,b,100);
if(grade[i]>max) max=grade[i];
return max; //返回最大成绩 } int main(){
int sg[3][4]={{68,77,73,86},{87,96,78,89},{90,70,81,86}}; cout<<"the max grade is "<<maxi(*sg,12)<<“\n”; }
int b[3][3]={ 1,2,3,4,5,6,7,8,9 }; //亦可
int b[2][3]={ {1,2},{4} };
//缺处补0
int b[3][3]={ 1,2,3,4,5,6 }; //缺处补0
int b[3][3]={ {1,2},{4} };
//亦可,缺处补0
int b[3][3]={ 1,2,3,{4,5,6} }; //不可
if(grade[i][j]>max) max=grade[i][j];
return max; //返回最大成绩 } int main(){
int sg[3][4]={{68,77,73,86},{87,96,78,89},{90,70,81,86}}; cout<<"the max grade is "<<maxi(sg,3,4)<<“\n”; }
C语言第7章 数组
第7章数组17.以下能正确定义二维数组的是____。
A、int a[][3];B、int a[][3]={2*3};C、int a[][3]={};D、int a[2][3]={{1},{2},{3,4}};答案:B难易程度:初级章节:7.3.2 二维数组的定义21.s1和s2已正确定义并分别指向两个字符串。
若要求:当s1 所指串大于 s2所指串时,执行语句S;则以下选项中正确的是____。
A、if(s1>s2)S;B、if(strcmp(s1,s2))S);C、if(strcmp(s2,s1)>0)S;D、if(strcmp(s1,s2)>0)S;答案:D难易程度:初级章节:7.4 字符数组60.有以下程序main( ){ char a[]="abcdefg",b[10]="abcdefg";printf("%d %d\n",sizeof(a),sizeof(b));}执行后输出结果是____。
A、7 7B、8 8C、8 10D、10 10答案:C难易程度:初级章节:7.4字符数组64.有以下定义#include <stdio.h>char a[10],*b=a;不能给a数组输入字符串的语句是____。
A、gets(a)B、gets(a[0])C、gets(&a[0]);D、gets(b);答案:B难易程度:初级章节:7.5 字符数组73.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是____。
A、char s[10]="abcdefg";B、char t[]="abcdefg",*s=t;C、char s[10];s="abcdefg";D、char s[10];strcpy(s,"abcdefg");答案:C难易程度:初级章节:7.5 字符数组101.以下不能正确定义二维数组的选项是____。
第七章数组1
图
二维数组的存储
三维数组:可把它看成是由多个二维数组构成的。 例如: int i[2][3][4];
i [0] [0] [0] i [0] [0] [1] i [0] [0] [2] i [0] [0] [3] i [0] [1] [0] i [0] [1] [1] i [0] [1] [2] i [0] [1] [3] i [0] [2] [0] i [0] [2] [1] i [0] [2] [2] i [0] [2] [3] i [1] [0] [0] i [1] [0] [1] i [1] [0] [2] i [1] [0] [3] i [1] [1] [0] i [1] [1] [1] i [1] [1] [2] i [1] [1] [3] i [1] [2] [0] i [1] [2] [1] i [1] [2] [2] i [1] [2] [3] 图 三维数组的存储
注
对于全部元素都被初始化的情况,还有如下声明形式: int i[]={1,2,3,4,5}; 实例:ch7_2.txt
在声明时可不说明数组元素的个数。元素的个数与初始化数据的个数相同。
多维数组的初始化与一维数组相似,需要注意的是必须按照前 面所讲的存储顺序列出数组元素的值。
例如: int i[2][3]={1,2,3,4,5,6}; 等价 int i[2][3]={ {1,2,3}, {4,5,6}};
常量表达式n表示 的是第n维的大小。
数据类型
数组名[常量表达式1][常量表达式2]…[常量表达式n];
“[]”的个数代表着 数组的维数。一个方括 号表示一维数组,两个 表示二维数组,…,n 个表示表示n维数组。
是一个标识符, 代表着数组元素 在内存中的起始 地址,是一个常 量,不能给它素 的个数。
C++程序设计教程修订版_第07章_数组
2、访问数组元素
•数组中特定的元素通过下标访问。 •为整个数组赋值时,必须一个一个元素逐个访问。
int main() { int iArray[10]; iArray[0] = 1; iArray[1] = 1; iArray[2] = 2; //........ iArray[9] = 55;
}
在定义时也可以只对部分元素赋初值而省略第一维的长度,但 应分行赋初值。如 0 0 3 0 int a[ ][4]={{0,0,3},{ },{0,10}}; 0 0 0 0 0 10 0 0
5、二维数组
作为参数传递一个二维数组给函数,其意义也为内存地址:
//********************* //** ch7_7.cpp ** //********************* #include <iostream.h> int maximum(int[ ][4],int,int); void main() { int sg[3][4]={{68,77,73,86}, {87,96,78,89}, {90,70,81,86}}; int maximum(int grade[][4],int pupils,int tests) { int max=0; for(int i=0; i<pupils; i++) for(int j=0; j<tests; j++) if(grade[i][j]>max) max=grade[i][j];
– int a[500]; – memset(a,0,500*sizeof(int));
• 数组名称 a 代表整个数组的起始(第一个元素)的地址
4、向函数传递参数
• 传给自定义函数
第七章数组1、一维数组1、整形数组的说明例如inta[10]
例 int i=15; 例 int data[5]; int data[i]; (不能用变量定义数组维数) data[5]=10; //C语言对数组不作越界检查,使用时要 注意
一维数组的引用
数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组 数组元素表示形式: 数组名[下标] 其中:下标可以是常量或整型表达式 例 int a[10]; printf(“%d”,a); ( ) 必须 for(j=0;j<10;j++) printf(“%d\t”,a[j]);
()
3
一维数组的初始化
初始化方式
int a[5]={1,2,3,4,5}; 在定义数组时,为数组元素赋初值 等价于:a[0]=1; (在编译阶段使之得到初值) a[1]=2; a[2]=3; a[3]=4; a[4]=5;
说明: 数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值 只给部分数组元素赋初值 当全部数组元素赋初值时,可不指定数组长度
23
4、常用的字符串处理函数
1、 include <stdio.h> char *gets(char s[ ]); 功能:从键盘上读一行字符串,并以’\0’取代换行符。 注意:与scanf( )的区别? gets()可以读取空字符 #include <stdio.h> main( ) { char string[80]; printf(“请输入一个字符串:"); gets(string); printf(“您输入的字符串是: %s\n", string); }
元素个数=行数*列数
数组元素的存放顺序 例 int a[3][4]; float b[2][5]; 原因:内存是一维的 int c[2][3][4]; 二维数组:按行序优先 int a[3,4]; ( ) 多维数组:最右下标变化最快
C语言7数组课件教程
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
13
C 程序设计
第7章 数组
§遍历所有二维数组元素a[n][m] for(i=0;i<n;i++) for(j=0; j<m; j++) {
printf(“%d”,a[i][j]); }
14
C 程序设计
6
a[0]1例[0] ai[n0t]0a[[12]][a3[0]=0][{2{]1a,2[1}4],{[04]}}a;[15][1] a[10][2]
a[0111][0] a[0222][1] a[3034][2] a[4140][0] a[5150][1] a[6100][2]
aaa[[[000]]][[[1000]]] aaa[[[000]]][[2[111]]] aaa[[[000]]][0[[222]]] aaa[[[111]]][4[[000]]] aaa[[[111]]][0[[111]]] aaa[[[111]]]0[[[222]]]
1
3
5
7
a[1] a[210]0[08] a2[10]1[01] a2[10]1[22] a2[10]1[43] 9 11 13 15
a[2] a[2210]71[06] a2[210]91[81] a2[220]12[02] a2[220]32[23]
每个元素a[i]由包含4个元素 的一维数组组成
输出:max和row,colum
colum = j;
}
printf("max=%d,row=%d, \
colum=%d\n",max,row,colum); 16
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
24
冒泡法排序中的核心程序段:
for(i=0;i<10;i++) for(j=0;j<10-i;j++) if(num[j]>num[j+1]) { temp=num[j]; num[j]=num[j+1]; num[j+1]=temp; }
25
7.2.1 二维数组的定义
• 二维数组定义的一般形式:
5 4 4 4 4 2 0 8 5 2 0 8 2 5 0 8 2 0 5 8
0 0 0 0 9
第一轮
9 9 9 9 9
第二轮 循环4次
9 9 9 9
第三轮 循环3次
21
循环5次
4 2 2 2 0 5 8 4 0 5 8 0 4 5 8
2 0 0 4 5 8 2 4 5 8 轮数 次数
总结:
n 共有6个数 1 2 3 4 5 j(1~n-1) 5 4 3 2 1 n-j
for (j=0; j<n-1; j++)
for (i=0; i<n-j ; i++)
{ if (a[i]>a[i+1])
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
} }
23
源程序清单如下:
main() { int num[10];int i,j,temp; printf("Please input 10 numbers:\n"); for(i=0;i<10;i++) scanf("%d",&num[i]); for(i=0;i<10;i++) for(j=0;j<10-i;j++) if(num[j]>num[j+1]) {temp=num[j]; num[j]=num[j+1]; num[j+1]=temp; } printf("The sorted numbers:\n"); for(i=0;i<10;i++) printf("%4d",num[i]); }
5
定义一维数组时,说明几点:
1.“数据类型名”可以是任意的数据类型。 2.“数组名”必须是合法的标识符。 3.“常量表达式”表示数组长度(即数组中的 元素个数),一定要用方括号括起来,且里 面不允许包含变量。 4. 一维数组中每个元素只有一个下标,并且第 一个元素的下标为“0”,最后一个元素的下 标为“数组长度减1”。
12
允许以赋值方式为数组各元素赋初值。
例如: float var[4]; var[0]=0.1*5;var[1]=5.5; var[2]=3.5;var[3]=5.5;
也可以使用控制语句为数组元素赋初值。
static float var[4]; int i; for(i=0;i<4;i++) scanf(“%f”,&var[i]); ……
说明:
• 多维数组中的元素在内存中的存放顺 序为按行存放,即最左边的下标变化 最慢,最右边的下标变化最快。 注意:二维数组的几 点说明对多维数组同 样适用!
28
7.2.2
二维数组的引用
• 引用的一般形式: 数组名[下标表达式1][下标表达式2] • 例如: f[2][2],f[2*4][3],f[2+1][4%2] 下标表达式的值必须是一个整型的 量,可以是整型常量、整型变量或者 结果为整型的表达式。
6
注意:
• 若在程序编译或运行时再给数组 长度赋值,程序将在编译时出错。 • 例如:
main() { int n; scanf("%d",&n); char ch[n]; …… }
变量说明部分 一定放在main() 函数的开头!
7
7.1.2 一维数组的引用
• 引用格式:数组名[下标表达式] • 说明:
29
说明:
• 二维数组中的元素地址可表示为: &数组名[下标表达式1][下标表达式2] • 可以把二维数组或多维数组中的元素看成 是普通的变量。基本数据类型的变量所能 进行的各种操作,同样适用于二维数组或 多维数组中的元素。 • 例如: f[2][3]=f[2][2]/2+1; f[2][2]=f[1][2]*f[2][1];
31
方法2:分行为二维数组赋值。适用于 每一行的初始值个数少于每一行中的 数组元素个数时。 • 例如: int num[3][4]={{11,2}, {51,6,7}, {92,10,0,12}};
每一行中后面的剩余元素被自动赋值为0 !
32
二维数组的长度不能随意省略,必须遵 守如下规则: • 使用第一种方式,只有当为二维数组 的所有元素赋初值时,所定义数组的 第一维的长度才可以省略。 • 例如:
系统将认为数组的元素个数就是后面初始 化时所提供的数据的个数。
11
为数组中若干元素赋相同初值时,要注意不能
随意简化。 例如: float var[8]={ 0.1,0.1,0.1,0.1,0.1, 5.5,3.5,5.5}; 不能简化为: float var[8]={ 0.1*5,5.5,3.5,5.5}; 否则,系统将认为数组中的各元素的值分别为: var[0]=0.1*5 , var[1]=5.5 , var[2]=3.5 , var[3]=5.5,var[4]=0,……,var[7]=0。
– ‚下标表达式‛的值必须是一个整型的量。 –对于所引用的数组元素,使用方法和前面学 过的简单数据类型变量使用方法相同,包括 取地址等运算。 –C语言没有语法结构能同时引用数组的所有 元素,只能一个一个的引用每一个数组元素。
8
【例7.1】从键盘输入5个整数,将它们反序输出。 main() { int i; int nums[5]; for(i=0;i<5;i++) scanf("%d",&nums[i]); for(i=4;i>=0;i--) printf("%5d",nums[i]); } 运行情况: 12 34 5 7 89 89 7 5 34 12
13
【例7.2】计算从键盘上任意键入的10个数的和。
main() 不使用数组, 程序怎么写? { int i; float num[10],sum=0.0; printf(“Input 10 numbers:\n”); for(i=0;i<10;i++) scanf("%f",&num[i]); for(i=0;i<10;i++) sum=sum+num[i]; printf("The sum is %8.3f\n",sum); }
int num[ ][4]={11,2,0,0,51, 6,7,0,92,10,0,12};
33
• 使用第二种方式,无论是为二维数组 的所有元素赋初值,还是为二维数组 的部分元素赋初值,定义数组时都可 以省略第一维的长度。 • 无论采用上述哪一种方式为二维数组 元素赋初值,在定义数组时第二维的 长度都绝对不可以省略。
9
7.1.3 一维数组的初始化
初始化,即赋初值。C语言允许定义数组时直接
对数组进行初始化。 一般形式: 类型说明符 数组名[常量表达式]={数值表}; 举例:
float var[8]={0.1,1.2,2.6,3.5, 4.3,5.5,3.5,5.5}; int a[5]={2,3,4,5,6};
3
数组举例:
int a[6]; 上面定义了一个整型数组。
–数组名称为a –数组中有6个整型变量 –数组中的6个基本元素为: a[0],a[1],a[2],a[3],a[4],a[5]。 –上面方括号中的0~5是数组下标,表 明各个元素在数组中的位置。
4
7.1.1 一维数组的定义
• 一维数组的定义: 当数组中每个元素都只带有一个下标时, 这个数组就被称为一维数组。 • 定义一维数组的一般形式: 数据类型名 数组名[常量表达式]; • 例如: int num[5]; float score[10];
9 9 9
第四轮 循环2次
9 9
第五轮 循环1次
for (j=1; j<=n-1; j++) for (i=1; i<=n-j ; i++) { if (a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } }
22
一般,元素的序号从0开始,因此,程序可以变动如下:
14
关于排序
---程序设计中的常见算法
选择法 冒泡法 插入法 ……
15
【例7.4】 用选择法对10个整数按照从小到大 的顺序排列。
从所有的数中找出最小的一个,将其放 思 在最前面;接着在余下的数中找出最小 路 的一个,将其放在第二位,依次类推, 数列由前往后逐渐成型。
16
源程序清单如下:
19
ቤተ መጻሕፍቲ ባይዱ
• 冒泡法的核心:小数上浮,大数下沉。 • 冒泡法第一轮:使最大的数放在最后一个位置上
20
用冒泡法对6个数排序(由小到大)
将相邻的两个数两两比较,将小的调到前头。
9 8 5 4 2 0
8 8 8 8 8 9 5 4 2 5 9 4 2 5 4 9 2 5 4 2 9 5 4 2 0
8 5 5 5 5 5 8 4 4 4 4 8 2 2 2 2 8 0 0 0 0 4 2 0 8
第7章
数组
1