711一维数组的定义定义方式类型说明符数组名整型常量
C语言第六章_数组_2
if (a[i]>a[i+1])
{temp=a[i];a[i]=a[i+1];a[i+1]=temp;14}
#include <stdio.h> main(){ /*对10个整数排序*/
int a[10]={9, 8, 5, 4, 2, 0, 6, 1, 3, 7}, i, k; for (k=1;k<10;k++)
f0=1 (n=0m) ain(){
f1=1
(n=1) int i; long f [20]={1,1};
0 f1n=fn-1f+[0f]n-2 (nfo2r) (i=2;i<20;i++)
1
1
f[1]
2
2
f[2]
f[i]=f[i-2]+f[i-1];
3
3
f[3]
for(i=0;i<20;i++)
4
数组是具有一定顺序的若干同数据类型变 量的集合体。数组要有名称,要有规模。
一.一维数组定义
类型说明符 数组名[常量];
例如:int a[6]; a = = &a[0]
a
内存映象:编译时分配一片连续的内 存空间,数组名为该空间的首地址— —常量地址。
0 a[0]
1 a[1]
2 a[2]
3 a[3]
1
4 a[4]
4
一行一行地存储所有的数组 5
a[0][1] a[0][2] a[0][3] a[1][0] a[1][1]
元素,数组名为该空间的首 6 a[1][2]
地址——地址常量。
7 a[1][3]
8
一维数组的定义(精)
对数组元素的初始化可以用以下方法实现: ⒈ 在定义数组时,对数组元素赋以初值。 如: int a[10]={0,1,2,3,4,5,6,7,8,9}; ⒉ 可以只给一部分元素赋值。 如: int a[10]={0,1,2,3,4}; 表示只给前5个元素赋初值,后5个元素自动赋以0 值。 ⒊ 对static数组不赋初值,系统会对所有元素自动赋 以0值。 即, 如果想使数组a中全部元素值为0,可以这样定 义数组: static int a[5]
a[0] a[2] a[4] a[1] a[3] 0 0 0 0 0
也可以 int a[5]={0};
⒋ 在对全部数组元素赋初值时,可以不指定数组长度。 static int a[5]={1,2,3,4,5};
static int a[ ]={1,2,3,4,5};
例2.用数组来处理求Fibonacci数列问题(求前40项)
b
b[0][0] b[1][0] b[2][0]
b[0][1] b[1][1] b[2][1]
for(i=0;i<=1;i++) for( j=0;j<=2;j++) b[j][i]=a[i][j];
main( ) {static 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]); printf("\n"); } for(i=0;i<=1;i++) for( j=0;j<=2;j++) b[j][i]=a[i][j]; printf("array b:\n"); for(i=0;i<=2;i++) {for(j=0;j<=1;j++) printf("%5d",b[i][j]); printf("\n"); } }
一维数组的定义(精)
§6.1.1
数 组
一维数组的定义和引用
一、一维组的定义
⒈ 定义方式: 类型说明符 数组名[整型常量表达式]; 例:int a[10]; ⒉ 说明: ① 数组名的定名规则和变量名相同,遵循标识符定名规 则。 ② 数组名后的常量表达式用[ ]括起来。 ③ 常量表达式表示数组元素的个数,即数组长度。 例: a[10]表示数组a中包括10个元素,分别为 a[0]~a[9]
例1.1 main( ) {int i,a[10]; 通过赋值语句给 for (i=0;i<=9;i++) 数组元素赋值 a[i]=i; (i=9;i>=0;i-) for (i=0;i<=9;i++) (i=0;i<=9;i++) printf("%4d",a[i] ); a[9-i]); a[i]); }
a[0] a[2] a[4] a[1] a[3] 0 0 0 0 0
也可以 int a[5]={0};
⒋ 在对全部数组元素赋初值时,可以不指定数组长度。 static int a[5]={1,2,3,4,5};
static int a[ ]={1,2,3,4,5};
例2.用数组来处理求Fibonacci数列问题(求前40项)
f[0] f[1] f[2] f[3] f[4] f[5] f[6] f[7] f[8] f[9] .............
1
1
2 0
3 0
5 0
8 0
13 0
21 0
34 0
55 0
.........
main( ) { int i; static long int f[40]={1,1}; for(i=2;i<40;i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<40;i++) { if(i%5= =0) printf("\n"); printf("%12ld",f[i]); } }
在C语言中,一维数组的定义方式为:类型说明符数组名——
在C语言中,一维数组的定义方式为:类型说明符数组名——在C语言中,一维数组的定义方式为:类型说明符数组名——例:int array[10];含义:定义了一个数组,数组名为array,有10个元素,元素的类型均为整型。
这10个元素名分别是:array[0]、array[1]、....、array[9]。
在C语言中,一维数组的定义方式:类型说明符数组名[元素个数]其中,类型名确定所有元素的数据类型,元素个数给定数组要包含的变量个数,它可以使用表达式形式,但该表达式中只能出现变量常量和运算符。
常用的类型:char ,int ,long .float,double.数组元素的一般表示形式是:数组名[下标]其中,下标可以使用表达式形式,但必须是整型而且有确定的值,取值范围是0~元素个数-1.注意:引用数组元素时不应使用超范围的下标,因为对这种情况编译时系统并不报错,所以编写程序时要格外注意。
C语言中一维数组的最长维数是多少?谢谢!ANSI C89标准中规定,一个数组的尺寸(下标)必须是一个整型常量表达式以便于在编译时计算大小,而这里的所谓常量(或者常量表达式的运算结果),一般是指unsigned int。
16位编译器(比如Turbo C)中,unsigned int为16位,因此数组最多32767个数据。
32位编译器(比如Visual C++ 6.0)中,unsigned int为32位,因此数组最多4294967295个数据。
以上结论为理论值。
实际上,在VC++中,我们定义一个259025元素的整型数组,虽然可以编译通过,但是我们仍将得到一个运行时错误(runtime error)。
这主要跟堆和栈的大小有关,详细情况请查阅操作系统相关资料。
错误代码范例:VC++ 6.0 中void main(){int a[259025]; 运行时错误,259024是ok的。
char b[259025]; ok。
char c[1036097]; 运行时错误,1036096是ok的。
C试题-在c语言中文,一维数组的定义方式为:类型
C试题一、选择题:1、以下对一维整型数组a的正确说明是A int a(10);B int n=10,a[n];C int n;D #define SIZE 10scanf(“%d”,&n);int a[SIZE];int [a];2、若有说明:int a[10];则对a数组元素的正确引用是A a[10]B a[3.5]C a (5)D a [10-10]3、在c语言中文,一维数组的定义方式为:类型说明符数组名A[常量表达式] B[整型表达式]C[整型常量]或[整型表达式]D[整型常量]4、以下能对二维数组a进行正确初始化的语句是A int a[2][]={{1,0,1},{5,2,3}};B int a[][3]={{1,2,3},{4,5,6}};C int a[2][4]={{1,2,3},{4,5},{6}}D int a[][3]={{1,0,1},{},{1,1}};5、若有说明:int a[3][4]={0};则下面正确的叙述是A只有元素a[0][0]可得到初值0B 此说明语句不正确C 数组a中文各元素都可得到初值,但其值不一定为0D 数组a 中每个元素均可得到初值06、以下各组选项中,均能正确定义二维实型数组a的选项是A float a[3][4];B float a(3,4);float a[] [4]; float a[3][4];float a[3][]={{1},{0}} float a[][]={{0},{0}};C float a[3][4];D float a[3][4];static float a[][4]={{0},{0}}; float a [3][];auto float a [][4]={{0},{0},{0}}; float a[][4]10、下面程序中文有错误的行是(每行程序前面的数字表示行号)1 main()2 {3 int a[3]={1};4 int i;5 scanf(“%d”,&a);6 for (i=1;i<3;i++) a[0]=a[0]+a[i];7 printf(“a[0]=%d\n”,a[0]);8 }A 3B 6C 7D 511、若二维数组a有m列,则计算机任一元素a[i][j]在数组中文位置的公式为(假设a[0][0]位于数组的第一个位置上。
一维数组
③C程序运行时,编译系统并不检查数组元素的下标是否越界, 需要编程人员自己保证数组元素的下标不要越界。 例如,语句float a[8]; int x=2; 数组元素a[0]、a[6]、a[5+1]、 a[x]、a[3*x]都是合法引用;而a[-5]、a[8]、a[5.2]是非法的引 用方式。注意,a[8]虽然非法,但是编译系统不报错。对a[8]的 操作实际是对内存其他空间的操作,因此可能造成严重后果。
5.1.3 一维数组的初始化
数组的初始化就是给数组元素赋初值。数组的初始化操 作既可以在数组定义之后进行,也可以在数组定义时完成。 如果在数组定义之后进行初始化操作,则只能对每个数 组元素一一赋值。例如, int arr[10],i; for(i=0;i<10;i++) arr[i]=i; 如果在定义数组时完成数组的初始化操作,则需要将数组 元素的初值依次放在一对花括弧中,并用赋值号与数组连接。 定义数组时赋初值的形式为: 类型说明符 数组名[常量表达式]={初值列表};
5.1.4 一维数组应用举例 【例5.1】求10个整数的平均值。 解题思路:输入10个整数→求和→再求平均值→输出结果。 #include “stdio.h” void main( ) { int a[10], i; float ave,sum; printf("\nplease enter 10 numbers:\n"); for(i=0;i<10;i++) /*输入元素*/ scanf("%d",&a[i]); sum=0; for(i=0;i<10;i++) /*求和*/ sum=sum+a[i]; ave=sum/10; /*求平均值*/ for(i=0;i<10;i++) printf("%6d",a[i]); printf("\n average =%7.2f",ave); }
一维数组的定义和引用(精)
6.2
二维数组的定义和引用
6.2.1 二维数组的定义 当数组中的每个元素带有两个下标时,称这样的数组 为二维数组,其中存放的是有规律地按行、列排列 的同一类型数据。所以二维数组中的两个下标,一 个是行下标,一个是列下标。 二维数组的定义格式: 类型说明符 数组名[常量表达式][常量表达式]; 例如:float a[3][4],b[5][10];
int a[n];
6.1.2 一维数组元素的引用
数组元素的引用形式: 数组名[下标];
注意:
1)数组必须先定义,后使用。 2)数组的下标都是从0开始。 3)下标可以是整型常量或整型表达式。 例如:
a[i]=3;
printf( “%d” , a[3] ); scanf ( “%d” , &a[3] );
注意:
1)下标可以是整型常量或整型表达式。 例如: a[2][3]、 a[3-1][2*2-1]、 y[i+k][j+k] 2)在使用数组元素时,注意下标值应在已定义的数组大小的范 围内。 例如: int a[3][4]; … a[3][4]=3; //代表某一个元素 //定义数组的维数和各维的大小
定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组。
说明: (1) 二维数组的行、列下标均从0开始。
(2)二维数组中元素排列的顺序是:按行存放,即在内存 中先顺序存放第一行的元素,再存放第二行的元素。 例:int a[2][3]
a[0][0]
a[0][1]
a[0][2]
a[1][0]
main()
{ int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; 例2将一个二维数组行 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"); array a: for (i=0;i<=2,i++) 1 2 3 4 5 6 { for(j=0;j<=1;j++) array b: printf("%5d",b[i][j]); 1 4 printf("\n"); 2 5 } 3 6
一维数组的定义和引用
• unsigned int *p; p=sing; while (*p) { sound(*p++); delay(*p++);
nosound(); } }
§7.2 二维数组的定义和引用
• 7.2.1 二维数组的定义与引用
类型说明符 数组名[常量表达式][常量表
达式]
说明:元素的排列顺序是
按行存放的,这在数组初始化和指针表
9 8 8 8 8 8 8 5 55 5
8 9 5 5 5 5 5 8 44 4
5 5 9 4 4 4 4 4 82 2
4 4 4 9 2 2 2 2 28 0
2 2 2 2 9 0 0 0 00 8
0 0 0 0 09
输入n个数给a[1]到a[n] For j=1 to n-1
For i=1 to n-j
• 表示形式: 数组名[下标] • 下标可以是整型常量或表达式。例如: • a[0]=a[5]+a[7]-a[2*3]
• EG: main( ) {
• int i, a[10] ; • for (i=0;i<=9;i++) • a[i]=i ; • for (i=9;i>=0;i– –) • printf(“%d”,a[i]); •} • 运行结果: • 9876543210
1 000 5600 0000
•int a[3[4]={{1},{},{6}};
1000 0000 6000
4.若对全部元素赋值,第一维的长度可省略, 但第二维的长度不可省.
static int a[2][2]={1,2,3,4}; 等同于 static int a[ ][2]={1,2,3,4};
C语言数组的定义及引用
引导语:数组是在程序设计中,为了处理⽅便,把具有相同类型的若⼲变量按有序的形式组织起来的⼀种形式。
以下是百分⽹店铺分享给⼤家的数组,希望⼤家喜欢! 1.1 ⼀维数组的定义、初始化和引⽤ 1.⼀维数组的定义⽅式为: 类型说明符数组名[常量表达式] (1)数组名的命名⽅法与变量名相同,遵循标识符命名规则; (2)数组是⽤⽅括号括起来的常量表达式,不能⽤圆括号; (3)常量表达式表⽰数组元素的个数,即数组的长度,数组的下标从0开始,下标的最⼤值为:常量表达式-1; (4)常量表达式中可以包括常量和符号常量,不能包括变量。
可以⽤赋值语句或输⼊语句使数组中的元素得到值,但要占⽤运⾏时间。
可以使数组在运⾏之前初始化,即在编译阶段使之得到初值。
2.对数组初始化可以⽤以下⽅法实现: (1)在定义数组时对数组元素赋以初值。
如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上⾯的定义和初始化后,a[0]=0,a[1]=1,…,a[9]=9。
(2)初始化时可以只对⼀部分元素赋初值。
例如: static int a[10]={0,1,2,3,4}; 定义的数组有10个元素,但只对其中前5个元素赋了初值,后5个元素初值为0。
(3)如果想使⼀个数组的元素值全部为0,可以⽤下⾯的⽅法: static int a[10]={0,0,0,0,0,0,0,0,0,0}; 不能⽤: static int a[10]={0*10}; 如果对static型数组不赋初值,系统会对定义的所有数组元素⾃动赋以0值。
(4)在对全部数组元素赋初值时,可以不指定数组长度。
3.⼀维数组的引⽤⽅法是: C语⾔规定不能⼀次引⽤整个数组,引⽤时只能逐个元素引⽤,数组元素的表⽰形式为: 数组名[下标] 下标可以是整型常量或整型表达式。
如: a[0]=a[5]+a[7]-a[2*3]; 1.2 ⼆维数组的定义、初始化和引⽤ 1.⼆维数组定义的⼀般形式为 类型说明符数组名[常量表达式][常量表达式] C语⾔采⽤上述定义⽅法,我们可以把⼆维数组看做是⼀种特殊的⼀维数组:它的元素⼜是⼀维数组。
第七章c程序
对数组初始化的几点说明: 对数组初始化的几点说明:
(1)可以只给部分数组元素赋初值。
当{ }中值的个数少于数组元素时,则表 示初值只赋于数组开始的若干个元素。 余下的元素为相应类型的缺省值
如: : int data[5]={1,3,5}; 表示data[0]=1,data[1]=3,data[2]=5, /* 表示data[0]=1,data[1]=3,data[2]=5, data[3]=0,data[4]=0 */
2584
第二节 二维数组的定义与引用
1.二维数组的定义 1.二维数组的定义
定义方式: 定义方式: 数组名[常量表达式1][常量表达式2]; 1][常量表达式 类型说明符 数组名[常量表达式1][常量表达式2];
如: int a[5][6]; :
说明: 说明:
1.类型说明符、数组名及常量表达式的命名要求 与一维数组规则相同 2.二维数组的理解:可以把二维数组看作是特 殊的一维数组:即它的元素又是一个一维数组
例: 数组元素引用 : main( ) { int i,a[10]; i<=10 for(i=0;i< 10 ;i++) a[i]=i; i<=10 for(i=0;i< 10 ;i++) printf(“%d %d”,a[i]; printf( %d ,a[i]; }
习题
例1: : main() { int i,a[10]; for(i=0;i<10;i++) { a[i]=2*i+1; printf(“%4d” printf(“%4d”,a[i]); } } 1 3 5 7 9 11 13 15 17 19
也可以只对部分元素赋初值时省略第一维长度, 但应按行分段赋值 1 3 5
C语言第七章
4、strcpy(字符数组1,字符数组2):
例:main()
把“字符串2”的值拷贝到“字符串1”中。
{char str1[10]; char str2[ ]="Chinese"; strcpy(str1,str2); puts(str1); } 输出: Chinese 说明: (1)字符数组1的长度不应小于字符串2的长度。 (2)“字符数组1”必须写成数组名形式,“串2”可以是字符数 组名,也可以是一个字符串常量。如:strcpy(str1,“China”); (3)拷贝是‘\0‟一起拷贝。 (4)不能用赋值语句将一个字符常量或字符数组直接赋给一个 字符数组。 (5)可以用strcpy函数将字符串2中前面若干个字符拷贝到字符 数组1中去。 例如:strcpy(str1,str2,2);
3、部分元素赋值: int a[3][4] = {{1},{5},{9}}; 1 0 0 0 5 0 0 0 9 0 0 0
仅对a[0][0]、a[1][0]、a[2][0]赋值,编译器自动为未赋
值元素指定初值0。
4、如果对全部元素赋初值,则第一维的长度可以 不指定,但必须指定第二维的长度。 int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 与下面定义等价: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12};
[例6.6]: main() { int i; char c1[ ] = {"How are you?"}; char c2[15]; scanf("%s", c2 ); for(i=0;i<12;i++) printf("%c", c2[i] ); printf("%s", c1 ); } 程序运行时:输入:abcdefghijklmno 结果:abcdefghijklHow are you?
第 6 章 数组补充练习
第六章数组资料来源:/一、选择题:1. 在c语言中,一维数组的定义方式为:类型说明符数组名()。
A.常量表达式B.整型表达式 C.整型常量或整型表达式D.整型常量2. 以下对一维整型数组a的正确说明是。
A. int a(10);B. int n=10,a[n];C. int n;D. #define SIZE 10scanf(“%d”,&n); int a[SIZE];int a[n];3. 在C语言中,引用数组元素时,其数组下标的数据类型允许是().A.整型常量或整型表达式B.整型常量C.整型表达式D.任何类型的表达式4. 若有说明:int a[10];则对a数组元素的正确引用是。
A. a[10]B. a[3.5]C. a(5)D. a[10-10]5. 以下能对一维数组a进行不正确初始化的语句是()A.int a[]={0};B.int a[10]={0,0,0,0};C.int a[10]={};D.int a[10]={10*1};6. 对以下说明语句的正确理解是。
int a[10]={6,7,8,9,10};A. 将5个初值依次赋给a[1]至a[5]B. 将5个初值依次赋给a[0]至a[4]C. 将5个初值依次赋给a[6]至a[10]D. 因为数组长度与初值的个数不相同,所以此语句不正确7. 下面程序(每行程序前面的数字表示行号)。
1 main()2 {3 float a[10]={0.0};4 int i;5 for(i=0;i<3;i++) scanf(“%d”,&a[i]);6 for(i=1;i<10;i++) a[0]=a[0]+a[i];7 printf(“%f\n”,a[0]);8 }A. 没有错误B. 第3行有错误C. 第5行有错误D. 第7行有错误8. 下面程序中有错误的行是(每行程序前面的数字表示行号)。
1 main()2 {3 float a[3]={1};4 int i;5 scanf(“%d”,&a) ;6 for(i=1;i<3;i++) a[0]=a[0]+a[i];7 printf(“a[0]=%d\n”,a[0]);8 }A. 3B. 6C. 7D. 59. 定义如下变量和数组:int k;int a[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是。
C语言16-1
[例6.5] 输入10个学生的C语言考试成绩,用选择法将成绩由 高到低排序,即根据考试成绩排出名次。
程序分析:
第一轮
80 83 91 56 83 80 79 91 83 58 64 85 983 85 90 80 56 79 83 80 58 64 85 83 90 85 60
《C语言程序设计》
第6章
数组
6.1
一维数组的定义和引用
类型说明符 数组名[常量表达式];
一、一维数组的定义 定义一维数组的一般形式:
例如: int number[10]; 说明: (1)类型说明符:类型说明符定义了数组的类型。数组的类型也是该 数组中各个元素的类型,在同一数组中,各个数组元素都具有相同的类 型。 (2)数组名:数组名的命名规则与变量名相同,即遵循标识符的命名 规则。 (3)常量表达式:数组名后面用方括号括起来的常量表达式,表示数 组中元素的个数,即数组的长度。需要注意的是,常量表达式中可以包 含常量或符号常量,但不能包含变量,也就是说,C语言中不允许对数 组的大小作动态定义。 (4)如果数组的长度为n,则数组中第一个元素的下标为0,最后一个 元素的下标为n-1。
}
二、一维数组的引用
[例6.3] 输入5个学生的语文成绩、数学成绩和C语言成绩,求每个学生 的总成绩和平均成绩。
#define N 5 main( ){ int mark1[N],mark2[N],mark3[N],sum[N]; /* 数组mark1、mark2、mark3 分别存放三门课程的成绩,数组sum存放总成绩 */ int i; for (i=0;i<N;i++){ printf("输入第%d个学生的三门成绩:",i+1); scanf("%d%d%d",&mark1[i],&mark2[i],&mark3[i]); /* 输入成绩 */ sum[i]=mark1[i]+mark2[i]+mark3[i]; /* 计算总成绩 */ } for (i=0;i<N;i++){ /* 输出总成绩和平均成绩 */ printf("第%d个学生的总成绩和平均成绩分别为:%d, %.2f\n",i+1,sum[i],sum[i]/3.0); } }
C语言 一维数组的定义和引用 数组
3 34 377 4181
5 55 610 68765
例T7-3.c 用起泡法对6个数排序(由小到大) 思路:将相邻两数两两比较,若小则调到前头,不小也要比较
988888 895555 559444 444922 222290
000009
85555 58444 44822 22280 00008
printf (“a[%d]=%d\ n”,i,a[i]=i+1);
printf (“a[5]=%d\t”,a[5]);
printf (“a[6]=%d\ n”,a[6]);
}
运行结果:
a[0]=1
a[1]=2
a[2]=3
a[3]=4
a[4]=5
a[5]=-30
a[6]=285
精选ppt课件
3
4.数组大小的定义只能是常量,而不能是变 量或动态地定义。 例7-0-2. C main( ) { int n=5,a[n];
第一轮大数沉底 第二轮
5444 4522 2250 0005
第三轮
42
24
2
00
0
4
2
第四轮 第五轮
此处:n=6 外层循环j(1~n-1)次
内层循环i (1~n-j)次
精选ppt课件
9
精选ppt课件
10
main( ) {int a[7]; int i, j , t; printf (“input 6 numbers:\ n”); for(i=1;i<7;i++) scanf(“%d”, &a[i ]; printf (“\ n”); for(j=1; j<=5; j++)
C语言C++07-1 一维数组
思考
2013-7-30
33
改进的方向
1. 数据的类型改为数组; 2. 数据的输入改为通过for循环初始化; 3. 数据的比较通过for循环实现。是单循 环实现还是双循环实现呢?
2013-7-30
34
分 析:
共有4个数, i为循环的次数, j为比较的次数; i=1 j=3 i=2 j=2 i=3 j=1
2013-7-30 31
main() 将任意五个数从小到大排序。 { int a,b,c,d,e,t; scanf("%d%d%d%d%d",&a,&b,&c,&d,&e); if(a>b) { t=a;a=b;b=t;} if(b>c) { t=b;b=c;c=t;} if(c>d) { t=c;c=d;d=t;} if(d>e) { t=d;d=e;e=t;} printf("no 1:%d,%d,%d,%d,%d\n",a,b,c,d,e); if(a>b) { t=a;a=b;b=t;} if(b>c) { t=b;b=c;c=t;} if(c>d) { t=c;c=d;d=t;} printf("no 2:%d,%d,%d,%d,%d\n",a,b,c,d,e); if(a>b) { t=a;a=b;b=t;} if(b>c) { t=b;b=c;c=t;} printf("no 3:%d,%d,%d,%d,%d\n",a,b,c,d,e); if(a>b) { t=a;a=b;b=t;} printf("no 4:%d,%d,%d,%d,%d\n",a,b,c,d,e); 2013-7-30 32 getch();}
7.2.1一维数组的定义与初始化
1.一维数组的定义类型说明符数组名[正整型常量表达式] ;说明:●类型说明符:数组的类型。
●数组名同变量名命名规则相同。
●常量表达式指明数组中元素个数,必须大于零。
可以是数值常量、符号常量和字符常量。
例如:float mark[100]; char str[200];int a[10];例如:存储学生成绩用实型数组 mark[100],存储一行文字用字符数组 str[200],存储一个4*6的矩阵用二维整型数组 a[4][6]。
其中:mark、str、a 是数组名。
方括号内是数组的长度。
下标的个数称为数组的维数,mark、str是一维数组、a是二维数组。
数组的成员称为数组元素。
数组元素的类型称为该数组的基类型。
数组mark的基类型是float,数组str的基类型是char。
说明(1)数组名后是用方括号而不是圆括号。
(2)数组定义中的常量表达式表示数组元素个数。
必须是大于零的常量。
如: int a[0],d(6); /*错误*/int b[-8]; /*错误*/int c[2+3]; /*正确*/(3) C语言中不允许使用变量对数组的大小进行定义。
数组的说明语句必须在可执行语句之前。
#define N 5 int a[N];int n;scanf (“%d” , &n );{int a[n];……}int n=10,a[n];2.一维数组的初始化在数组定义时为数组元素赋初值称为数组初始化。
(1)对全部元素初始化。
方法:将初值依次写在花括号{ }内。
如: int a[5]={ 2 , 4 , 6 , 8 , 10 };存储形式:存储单元(2)给数组中部分元素赋初值,其他元素按零值处理。
例 int a[9]={1,2};则 a[0]= 1, a[1]= 2, a[2]~a[8]值全为0。
(3)对数组元素全部赋值可以不指定长度。
例 int a[]={0,1,2,3,5};等价于:int a[5]={0,1,2,3,5};(4)一维数组赋初值的个数不能超过数组总元素的个数。
一维数组如何定义
一维数组如何定义
在C语言中使用数组必须先进行定义,一维数组的定义方式如下:类型说明符数组名[常量表达式];
其中类型说明符是任意一种基本数据类型或构造数据类型,它定义了全体数组成员的数据类型;数组名是用户定义的数组标识符;
方括号中的常量表达式表示数据元素的个数,也称为数组的长度。
例如:
float a[5],b[10];
该语句表示:
(1)定义了浮点型数组a和b,其数组元素的类型都是float。
(2)a 数组有5 个数组元素,b 数组有10 个数组元素。
(3)a数组的数组元素是a[0]、a[1]、a[2]、a[3]和a[4],共5 个数组元素。
所以a 数组元素的下标大于等于0,且小于5。
(4)定义了float型数组a,编译程序将为a 数组在内存中开辟5 个连续的存储单元,用来存放a数组的5 个数组元素,a[0]代表这片存储区的第一个存储单元。
数组名a 代表a数组的首地址,即a[0]的地址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c
12
3
31
a
12
-1
3
b
2
-14 77
-1
76
main( ) { int i,j,k=0,a[8],b[5],c[8]; for(i=0;i<=7;i++) scanf("%d",&a[i]); for(i=0;i<=4;i++) scanf("%d",&b[i]); for(i=0;i<=7;i++) {for(j=0;j<=4;j++) if(a[i]= =b[ j]) break; if(j>4) { c[k]=a[i];k++;} } for(i=0;i<k;i++) printf("%5d",c[i]); printf("\n"); }
第7章
7.1
数 组
一维数组的定义和引用
7.1.1 一维数组的定义 定义方式: 类型说明符 数组名[整型常量表达式]; 例:int a[10]; 说明:①数组名的命名规则和变量名相同,遵循标识 符定名规则。 ②数组名后的常量表达式用[ ]括起来。 ③常量表达式表示元素的个数,即数组长度。 例:a[10]表示数组a中包括10个元素,分别为 a[0]~a[9]
a[0] a[2] a[4] a[6] a[8] a[1] a[3] a[5] a[7] a[9]
④常量表达式中可以包括常量和符号常量,不能包含 变量,即定义时必须确定数组的大小。
7.1.2 一维数组元素的引用 int n; 数组必须先定义,然后使用。C语言规定只能逐个 scanf("%d",&n); 引用数组元素而不能一次引用整个数组。 a[n]; 引用形式为: int 数组名 [下标]
对数组元素的初始化可以用以下方法实现:
⒈在定义数组时,对数组元素赋以初值。 如: static int a[10]={0,1,2,3,4,5,6,7,8,9} ; ⒉可以只给一部分元素赋值。 如: static int a[10]={0,1,2,3,4}; 表示只给前5个元素赋初值,后5个元素自动赋以0值。 ⒊对static数组不赋初值,系统会对所有元素自动赋 以0值。即, 如果想使数组a中全部元素值为0,可以这 样定义数组: static int a[5]
例:用random函数产生10个[20,60]之间的随机整数, 按从小到大排序后输出。
随机函数 random的用法: 1. 格式: random(x) 2. 说明: (1) x为整型常量、整型变量或整型表达式。 (2) 该函数包含在头文件"stdlib.h"中。 (3) 该函数产生[0, x) 区间上的整数。 产生[a,b]区间上任意整数的方法:
引用形式为: 数组名[下标][下标] 注:下标可以是整型表达式,但应在已定义的数 组大小的范围内。
7.2.3 二维数组的初始化
⒈ 分行给二维数组赋初值。如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
例.已知数组a中有8个互不相等的元素,数组b中有 5 个互不相等的元素,而数组c中包含那些在a中但不 在b中的元素,编程产生数组c。
for(i=0;i<=7;i++) -6 0 { for(j=0;j<=4;j++) if(a[i]= =b[ j]) break; if(j>4) { c[k]=a[i];k++;} 2 } 77 31 -6 0
main( ) {int i,j,y; static int x[5]={1,2,8,3,10}; for(i=0;i<=4;i++) printf("%5d",x[i]); printf("\n"); for(i=1;i<=4;i++) { y=x[0]; for( for(j=1;j<=4;j++) j=0;j<4;j++) x[j-1]=x[j]; x[j]=x[j+1]; x[4]=y; for( j=0;j<=4;j++) printf("%5d",x[ j]); printf("\n"); } }
例. 打印以下方阵: 1 2 2 8 8 3 3 10 10 1
8 3 10 1 2
3 10 1 2 8
10 1 2 8 3
8 3 1 2
10 2 8 3 1
10 2 8 3 1
10 2 8 3 1
10 3 1 2 8
10 1 2 8 3
y=x[0]; for( j=1;j<5;j++) x[j-1]=x[j]; x[4]=y;
第二次比较:用 第三次比较:用 a[2] a[3]~a[9] 第一次比较:用a[1] a[0]与它后面的 与它后面的a[2]~a[9] a[1]~a[9]比较,将小的数据 比较,将小的数据 放在a[1]中。 放在a[2] a[0]中。
第一次的比较结果:最小数在 a[0] 中。 第三次的比较结果:第3小的数在 a[2] 中。 第二次的比较结果:次最小数在 a[1] 中。
a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[1][0]
aபைடு நூலகம்1][1]
a[1][2]
a[2][0]
a[1][3]
a[2][2]
a[2][1] a[2][3]
③ 多维数组定义方式与二维数组类似 int x[3][4][2]; float y[4][2][3];
7.2.2 二维数组的引用
依次类推经过九次比较可使数组a升序。
for(i=0;i<9;i++) for(j=i+1;j<=9;j++) if(a[i]>a[j]) {k=a[i]; a[i]=a[j]; a[j]=k;}
#include "stdlib.h" main() { int i,j,k,a[10]; for(i=0;i<10;i++) a[i]=random(41)+20; for(i=0;i<9;i++) for(j=i+1;j<=9;j++) if(a[i]>a[j]) {k=a[i]; a[i]=a[j]; a[j]=k; } for(i=0;i<=9;i++) printf("%5d",a[i]); printf("\n"); }
例.从10个整数中把最小的数找出来,并与最前面的 数对调, 指出最小的数原来的位置。(最小值唯一) 1.用数组a存放10个数据。 int
2.用j记录最小值的位置。 j=0; 3.交换a[0]与a[j]的值。 for(i=1;i<=9;i++)
a[10];
if(a[i]<a[j]) j=i;
j=0 j=1 j=1 j=1 j=1 j=1 j=6 j=6 j=6 12 -14 37 2 76 231 -36 65 -2 j=6 -31
算法2:选择排序 k j j k k
j k
k j k j
jj
k jj
jj
jj
jj
29 21
57 27
42
30
29 21
35
27 57
46
52
39
第二次比较:k=0 第一次比较: k=1,比较a[k] a[k] 与它后面所有的数 与它后面所有的数 a[j] a[j] (j=2,….,9),若a[k]大于a[j],则k=j (j=1,….,9),若a[k]大于a[j],则k=j 第二次比较结果:k为剩余数中最小值的下标,交换 第一次比较结果: k为最小值的下标,交换 a[0]与a[k] a[1] 与a[k], 使a[1]中存放剩余数 中的最小值。 使a[0]中存放最小值。
a[0] a[2] a[4] a[1] a[3] 0 0 0 0 0
等价于 int a[5]={0};
⒋在对全部数组元素赋初值时,可以不指定数组长度。 int a[5]={1,2,3,4,5}; static
static
int a[
]={1,2,3,4,5};
例.用数组来处理求Fibonacci数列问题(求前40项)
random(b-a+1)+a
[0,b-a+1) [a,b+1) [a,b]
算法1:顺序排序
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
25 34 21 25 23 25 21 25 34 34 49 30 25 49 34 30 30 23 25 30 23 41 41 37 30 30 28 28
整型常量或整型表达式
例: main( ) {int i,a[10]; 通过赋值语句给 for (i=0;i<=9;i++) 数组元素赋值 a[i]=i; for (i=0;i<=9;i++) (i=0;i<=9;i++) (i=9;i>=0;i-) printf("%4d",a[i] ); a[i]); a[9-i]); }
依次类推经过九次比较可使数组a升序。
#include "stdlib.h" main() {int i,j,k,m,a[10]; for(i=0;i<=9;i++) a[i]=random(41)+20; for(i=0;i<9;i++) { k=i; for(j=i+1;j<=9;j++) if (a[k]>a[j]) k=j; if(k!=i) {m=a[i];a[i]=a[k];a[k]=m;} } for(i=0;i<=9;i++) printf("%5d",a[i]); printf("\n"); }