第7章 数组

合集下载

《C语言程序设计基础与实训教程》第7章:数组

《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章 数组

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语言数组

大学课件C语言数组
第3趟排序后成为:37, 48, 12, 26, 49, 64, 75, 97 第4趟排序后成为:37, 12, 26, 48, 49, 64, 75, 97 第5趟排序后成为:12, 26, 37, 4 8, 49, 64, 75, 97
第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语言(第七章数组)

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

第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; }

第7章--c++数组

第7章--c++数组

第七章数组数组是相同数据类型数据的集合。

通过数组名和下标可以访问数组中指定的元素。

7.1 一维数组一维数组只有一个下标,它可用于表示一个线性的数据队列。

在程序设计中要先声明数组,对它进行初始化,然后才能使用数组。

7.1.1 一维数组的声明一维数组的声明要解决三个问题。

第一、确定数组的数据类型。

第二、给数组定义一个名字,以便在程序中使用。

第三、指明数组的大小,也就是数组中元素的个数。

声明一维数组的一般形式如下:数据类型数组名[常量表达式]={初值表};7.1.2 一维数组的使用访问一维数组元素的一般形式是:数组名[下标表达式]下标表达式是一个整型表达式。

它是一个由整型常量、整型变量以及运算符组成的式子,也可以是返回值为整型值的函数调用。

C++规定,数组的下标从0开始,因此对于大小为N的一维数组,其下标的取值范围是0到N-1,其中0称为数组的下界,N-1称为数组的上界。

下标表达式的值应该在下标的取值范围之内,否则会产生不可预计的问题。

7.1.3一维数组的初始化通过在初值表中给出初值可以对数组元素进行初始化。

初值用一对花括号界定,初值之间用逗号进行分隔。

例7-4 int y[5]={1,2,3,4,5};1,2,3,4,5为初值表,该语句把y[0]、y[1]、y[2]、y[3]、y[4] 分别初始化为1、2、3、4、5。

通过初值表中初值的个数决定数组的大小,省略常量表达式。

例7-5 double d[]={1.5,2.3,5.6};该声明语句省略了常量表达式,数组的长度由初值表中初值的个数决定。

它说明了有三个元素的双精度数组d。

并且d[0]=1.5, d[1]=2.3, d[2]=5.6。

7.1.4 数组的运算以及数组作为函数参数1 数组的运算数组的运算最终都要归结到对数组元素的操作。

因此,数组的运算与其元素的数据类型以及系统或程序对该数据类型提供何种操作有关。

对于int、float、以及double类型的数组,赋值运算、各种算术运算、++、--等都是允许的,原因是C++提供的这些操作的操作语义支持这些数据类型的运算。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

20
例7-8 拼数字游戏 数组的元素可以成为任何对象,包括窗体控件。 本例把9个label控件放在一个3*3的二维数组中。
22
19
7.2.4 访问二维数组中的元素 为了访问二维数组中的某个元素,需指定数组名称和数 组中该元素的行下标和列下标。 例如:输出数组d的所有元素值。 int[,] d = new int[2,3]{{1,2,3},{4,5,6}}; int i,j; for (i=0;i<2;i++) for (j=0;j<3;j++) Console.Write("{0} ",d[i,j]); Console.WriteLine(); 对于多维数组,也可以使用foreach语句来循环访问每一 个元素 。 例如: int[,] myb = new int[3, 2] { {1, 2}, {3,4}, {5,6}}; foreach (int i in myb) Console.Write("{0} ", i); Console.WriteLine(); 以上两例均输出为:1 2 3 4 5 6。
7
例7-1 冒泡排序法
i
j
10 8 3 15 26 11 30
int[] arr = new int[] { 10, 8, 6, 15, 26, 11, 30 }; for (int j = 1; j < arr.Length; j++) { for (int i = 0; i < arr.Length - j; i++) { if (arr[i] < arr[i + 1]) { int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } } for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i] + " "); }
5
7.1.3 一维数组的静态初始化 静态初始化数组时,必须与数组定义结合在一起,否则 会出错。 静态初始化数组的格式如下: 数据类型[] 数组名={元素值0,元素值1,,元素值n-1}; 用这种方法对数组进行初始化时,无需说明数组元素的 个数,只需按顺序列出数组中的全部元素即可,系统会自 动计算并分配数组所需的内存空间。 例如: 以下是对整型数组myarr的静态初始化: int[] myarr={1,2,3,4,5}; 在这种情况下,不能将数组定义和静态初始化分开。 例如: int[] myarr; myarr={1,2,3,4,5}; //错误的数组的静态初始化
9
//-------------值类型 int i1 = 100; int i2 = i1; i1 = 50; Console.WriteLine("i1=" + i1 + "; i2=" + i2); //------------------引用类型(数组) int[] arr1 = { 1,3,5,7,9 }; int[] arr2 = arr1; arr1[0] = 500; int[] arr2 = new int [arr1.Length]; Console.Write("数组arr1的值为:"); arr1.CopyTo(arr2, 0); foreach (int i in arr1 ) { Console.Write(i + " "); } Console.Write("数组arr2的值为:"); foreach (int i in arr2 ) { Console.Write(i+ " "); } Console.WriteLine("\r"); //-------------引用类型(字符串) string s1 = "john"; string s2 = s1; s1 = "tom"; Console.Write ("s1=" + s1+"; s2="+ s2);
6
7.1.4 访问一维数组中的元素 访问一维数组中的某个元素:名称[下标或索引]。 所有元素下标从0开始,到数组长度减1为止。 例如:输出数组myarr的所有元素值: for (i=0;i<5;i++) Console.Write("{0} ",a[i]); Console.WriteLine(); C#还提供foreach语句。该语句提供一种简单、明了的方 法来循环访问数组的元素。 例如:定义一个名称为mya的数组,并用foreach语句循环 访问该数组。 int[] mya = {1,2,3,4,5,6}; foreach (int i in mya) System.Console.Write("{0} ",i); Console.WriteLine(); 输出为:1 2 3 4 5 6
15
7.2.2 二维数组的动态初始化 动态初始化二维数组的格式如下: 数据类型[,] 数组名=new 数据类型[m][n]{ {元素值0,0,元素值0,1,,元素值0,n-1}, {元素值1,0,元素值1,1,,元素值1,n-1}, {元素值m-1,0,元素值m-1,1,,元素值m-1,n-1} }; 其中,“数组类型”是数组中数据元素的数据类型, m、n分别为行数和列数,即各维的
值类型和引用类型的区别在于,值类型在栈(Stack)上 分配,而引用类型(数组和string)在堆(Heap)上分配。 int[] arr = {1, 3, 5, 7, 9};
栈 堆
arr
1 3 5 7 9
•数组的各个元素在堆中分配,并按顺序依次排列。 •变量arr分配在栈中,它存放的是一个内存地址的指针,指向堆 中数组元素的地址
17
2. 给定初始值的情况 如果给出初始值部分,各元素取相应的初值,而且给出 的初值个数与对应的“数组长度”相等。此时可以省略 “数组长度”,因为后面的大括号中已列出了数组中的全 部元素。 例如: int[,] x = new int[2,3]{{1,2,3},{4,5,6}}; 或 int[,] x = new int[,]{{1,2,3},{4,5,6}};
•字符串类型更像值类型。 •字符串是一种特殊的引用类型,它是不可变的。 •字符串在创建后就不能改变,包括变长、变短和修改 其中的任何字符。 上例中改变字符串就导致产生一个新的字符串
13
14
7.2 二维数组
7.2.1 二维数组的定义 定义二维数组的语法格式如下: 数组类型[,] 数组名; 其中,“数据类型”为C#中合法的数据类型, “数组名”为C#中合法的标识符。 例如:定义了3个二维数组,整型数组x、双精度数 组y和字符串数组z。 int[,] x; double[,] y; string[,] z; 对于多维数组,可以作类似的推广, 例如,以下语句定义了一个三维数组p。 int[,,] p;
C#程序设计基础教程与实训(第2版)
第 7章
数组
1
• 数组(Array),或称为数组数据类型是一种新的数据表 达。 • 数组是具有相同类型的一组数据。数组按照数组名、 数据元素的类型和维数来进行描述。 • 当访问数组中的数据时,可以通过下标来指明。 • 数组具有以下属性: (1) 数组可以是一维、多维或交错的。 (2) 数值数组元素的默认值设置为0或空。 (3) 数组的索引从0开始:具有n个元素的数组的索引是 0~n-1。 (4) 数组元素可以是任何类型,包括数组类型。
arr1把它的值2046赋给了arr2,arr1和arr2表示的是同一个数组
值类型对象之间赋值将复制对象的内容, 引用类型对象之间的赋值则只是复制对象的引用地址, 而不是对象的内容。
12
Stack
Heap
s1
s2
John
Tom
代码
String s1 = “John”; String s2 = s1; s1 = “Tom”;
18
7.2.3 二维数组的静态初始化 静态初始化数组时,必须与数组定义结合在一起,否则会出错。 静态初始化数组的格式如下: 数据类型[,] 数组名={{元素值0,0,元素值0,1,,元素值0,n-1}, {元素值1,0,元素值1,1,,元素值1,n-1}, {元素值m-1,0,元素值m-1,1,,元素值m-1,n-1}}; 例如:对整型数组myarr的静态初始化。 int[,] myarr={{1,2,3},{4,5,6}};
2
7.1 一维数组
7.1.1 一维数组的定义 定义一维数组的语法格式如下: 数组类型[] 数组名; 例如:定义了3个一维数组,即整型数组a、双精度数 组b和字符串数组c。 int[] a; double[] b; string[] c; 在定义数组后,必须对其进行初始化才能使用(声明 数组并不实际创建它们)。初始化数组有两种方法:动 态初始化和静态初始化。
16
1. 不给定初始值的情况 如果不给出初始值部分,各元素取默认值。 例如: int[,] x = new int[3,2]; 该数组各数组元素均取默认值0。 声明创建了一个3行2列的二维数组: arr[0,0] arr[1,0] arr[2,0] arr[0,1] arr[1,1] arr[2,1]
3
7.1.2 一维数组的动态初始化 动态初始化需要借助new运算符,为数组元素分配内存空间,并
为数组元素赋初值,数值类型初始化为0,布尔类型初始化为false, 字符串类型初始化为null。 动态初始化数组的格式如下: 数组类型[] 数组名=new 数据类型[n]{元素值0,元素值1,,元素值n-1}; 其中,“数组类型”是数组中数据元素的数据类型, n为“数组长度”,可以是整型常量或变量, 后面一层大括号里为初始值部分。 1. 不给定初始值的情况 如果不给出初始值部分,各元素取默认值。 例如: int[] a = new int[10]; 4 该数组在内存中各数组元素均取默认值0。
相关文档
最新文档