第六章 数组和指向数组的指针
bigC语言第12讲

WANGJINLING
指针是特殊类型的变量,其内容是变 合 量的地址。在使用前必须说明,说明某标 肥 识符是指针类型,并可指向某种类型的变 工 量或数据结构。
业 大 学
1、指针变量的定义 格式: type *pname1,…*pnamen;
标识符命名的指 针变量名
WANGJINLING
合 肥 指针指向对象的类型 工 int *p, *q; /* p、q是指向整型变量的指针业 */ 大 float *pfValue ,*pf; 学 /* pfValue和pf是指向浮点型的指针 */
类型长度
p1++; /*指向a后的整型单元*/ p1- -; /*指向a前的整型单元*/ p1+n; /*指向a后的n个整型单元*/
6.2 指针与数组
数组中的各元素按下标的顺序占据一段连续 的内存空间,数组名是这段连续内存的首地址, 指针访问数组元素非常方便。
WANGJINLING
6.2.1 指针与一维数组 通过指针引用数组元素有三个步骤:
指针标志
2、指针变量的赋值
① int a, *p=&a;
WANGJINLING
初始化
② int a=10,*p,*q; 注:*p=&a p=&a; 赋值语句 q=p; p=NULL
合 /*Error!*/ 肥 工 业 大 学
例:
#include <stdio.h> void main (void ) { int x ,*p; x=55; p=&x; printf ( “ %d, %u ”, x, *p) ; *p=65; printf ( “ %d, %u”, x, *p) ; }
WANGJINLING
《C++语言程序设计》第6章 数组 指针与字符串

• 可以只对部分元素初始化
• 例如:static int a[3][4]={{1},{0,6},{0,0,11}};
• 列出全部初始值时,第1维下标个数可以省略
• 例如:static int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; • 或:static int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
其中数组a的存储顺序为:
a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23
12
二维数组的初始化
• 将所有初值写在一个{}内,按顺序初始化
• 例如:static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
• 分行列出二维数组元素的初值
cout << "Moving the point to (" << newX << ", " << newY << ")" << endl; x = newX; y = newY; }
例6-3 对象数组应用举例
//6-3.cpp #include "Point.h" #include <iostream> using namespace std;
int main() {
cout << "Entering main..." << endl;
专升本C语言考试大纲

专升本C语言考试大纲第一章 C语言概述(一)课程内容1 C语言的简史与特点2 一个简单的C程序3 程序的编辑,编译,链接和运行(二)考核知识点与考核要求1.程序设计,要求达到“识记”层次。
2.C语言的字符集,要求达到“领会”层次。
第二章数据类型,运算符与表达式(一)课程内容1 C数据类型2 常量与变量3运算符与表达式(二)考核知识点与考核要求1.C数据类型,要求达到“识记”层次。
2.常量与变量,要求达到“领会”层次。
3.运算符与表达式,要求达到“简单应用”层次。
第三章顺序程序设计(一)课程内容1 C语句的概述2 赋值语句3 数据输入输出的概念及在C语言中的实现4 字符数据的输入输出5 格式输入与输出(二)考核知识点与考核要求1.C语句的概述,要求达到“识记”层次。
2.赋值语句,要求达到“简单应用”层次。
3.格式输入与输出,要求达到“综合应用”层次。
第四章选择结构程序设计(一)课程内容1 if语句2 switch语句(二)考核知识点与考核要求if语句、switch语句,要求达到“综合应用”层次。
第五章循环控制(一)课程内容1 while语句2 do—while语句3 for语句4 循环的嵌套5 break语句和continue语句(二)考核知识点与考核要求1.while语句、do—while语句、for语句、break语句和continue语句,要求达到“综合应用”层次。
2. 循环的嵌套,要求达到“简单应用”层次。
第六章数组(一)课程内容1 一维数组2 多维数组3 字符数组(二)考核知识点与考核要求1一维数组的定义、元素的引用和初始化,要求达到“综合应用”层次。
2. 多维数组的定义、元素的引用和初始化,要求达到“简单应用”层次。
3字符数组的定义、元素的引用和初始化,要求达到“综合应用”层次。
4.字符数组的输入输出、字符串处理函数,要求达到“简单应用”层次。
第七章函数(一)课程内容1 概述2 函数定义的一般形式3 函数参数和函数值4 函数的调用5 函数的嵌套调用6 函数的递归调用7 数组作为函数参数8 局部变量和全局变量9 变量的存储类别(二)考核知识点与考核要求1.函数的定义和调用方法,要求达到“领会”层次。
C语言各章节知识点总结

C语言各章节知识点总结C语言是一种常用的编程语言,广泛应用于操作系统、嵌入式系统、网络设备等领域。
下面是C语言各章节的知识点总结。
第一章:C语言概述1.C语言的起源和发展历史。
2.C语言的特点和优势。
3.C语言的应用领域和重要性。
4.C语言的编译过程和基本语法规则。
第二章:基本数据类型和运算符1.C语言的基本数据类型,如整型、浮点型、字符型等。
2.基本数据类型的存储范围和格式化输出。
3.C语言的运算符和运算符优先级。
4.表达式和赋值语句。
第三章:控制语句1. 条件语句,如if语句、switch语句。
2. 循环语句,如for循环、while循环、do-while循环。
3. 循环控制语句,如break语句、continue语句。
第四章:数组和指针1.数组的定义和初始化。
2.一维数组和二维数组的使用。
3.字符数组和字符串的处理。
4.指针的定义和操作。
5.数组和指针的关系。
第五章:函数1.函数的定义和调用。
2.函数的参数传递和返回值。
3.局部变量和全局变量。
4.递归函数和函数指针。
5.函数库的使用。
第六章:结构体和共用体1.结构体的定义和初始化。
2.结构体的访问和操作。
3.结构体数组和结构体指针。
4.共用体的定义和使用。
第七章:文件操作1.文件的打开和关闭。
2.文件的读写操作。
3.文件指针和文件的定位。
4.随机访问文件。
5.文件的错误处理和异常处理。
第八章:预处理和编译1.C语言的预处理指令和宏定义。
2.头文件的引用和包含。
3.条件编译和预处理器的工作过程。
4.编译和链接的过程。
第九章:动态内存管理1.动态内存分配和释放。
2. malloc函数和free函数的使用。
3.内存泄漏和内存溢出的问题。
4.堆和栈的区别和管理。
第十章:指针的高级应用1.指针数组和指向指针的指针。
2.函数指针和回调函数。
3.结构体指针和链表的操作。
4.动态内存分配和指针的应用。
第十一章:位运算和位域1.位运算的基本操作,如与、或、非、移位等。
第06章 指针

17
高 级 语 言 程 序 设 计 与 应 用 教 程
6.3 指针和地址运算
1、指针变量的加、减运算(移动运算) 将指针变量的原值加上n个
它指向的变量所占用的内存 指针可以参与加法和减法运算,但其加、减的含义绝对 单元字节数。 不同于一般数值的加减运算。如果指针p是这样定义的: ptype *p;,并且p当前的值是ADDR,那么:
第 六 章
指 针
学习指针是学习C语言中最重要的一环, 能否正确理解 和使用指针是我们是否掌握C语言的一个标志,可以说不懂 C语言中的指针就不懂什么是C语言。
2
高 级 语 言 程 序 设 计 与 应 用 教 程
本章学习重点
指针的概念 指针变量的定义、初始化和引用 指针的运算 指针与一维数组 指针与二维数组 指针与字符串 指针作为函数的参数
第 六 章
指 针
3
高 级 语 言 程 序 设 计 与 应 用 教 程
6.1 指针与地址
1、内存地址──内存中存储单元的编号 教学楼
存储地址
内存
存储 单元
0 …... 2000 2001
601 501
602 502
50
2002 注意:内存单元的地址与内存单元中的数据是 401 402 两个完全不同的概念。 2003 存储单元有
指针变量p 2000 指针变量q 2000
第 六 章
…...
指 针
12
高 级 语 言 程 序 设 计 与 应 用 教 程
指针变量赋值的几种错误方法: 例 int *p = &a; int a;
变量a的定义在后,对a的引 用超出了a的作用域
第 六 章
注意:一个指针变量只能指向同类型的变量如果给指针赋 例 int a; 值时,=号右边的指针类型与左边的指针类型不同,则需要 int *pi = &a; pc不能指向非字符型变量 进行类型强制转换。 char *pc = &a; int a; 赋值语句中,被赋值的指针 例 int int *pi; a; 变量p的前面不能再加“*” int *p; 说明符 char *pc; *p = &a; pi = &a; //pi指向a 不允许直接把一个数(或任 pc = (char *)pi; //pc也指向了a,即pi和pc的值都是a的地址 例 int *p; 何其他非地址类型的数据) p = 2000; 赋值给指针变量
《软件工程专业基础综合(840)》考试大纲

《软件工程专业基础综合(840)》考试大纲江西财经大学软件与通信工程学院第一部分《C程序设计》(占总分30%)参考书目:谭浩强,《C程序设计》(第3版),清华大学出版社2005年第2章数据类型、运算符与表达式【内容】1、C的数据类型2、常量和变量3、整型数据、实型数据、字符型数据4、变量赋初值5、各类数值型数据间的混合运算6、算术运算符和算术表达式7、赋值运算符和赋值表达式8、逗号运算符和逗号表达式【要求】1、掌握C语言的数据类型、常量与变量的概念,掌握标识符的命名规则2、掌握整型数据、实型数据和字符型数据的特点和使用3、掌握变量赋初值的方法4、掌握算术表达式、赋值表达式和逗号表达式的使用方法5、了解各类数值型数据间混合运算时类型转换的方法第3章最简单的C程序设计【内容】1、C语句概述2、程序的三种基本结构3、赋值语句4、数据输入输出的概念及在C语言中的实现5、字符数据的输入输出【要求】1、掌握C语言的分类、三种基本程序结构和赋值语句的使用方法2、掌握printf函数和scanf函数的格式和使用3、掌握字符数据的输入输出函数第4章逻辑运算和判断选取控制【内容】1、关系运算符和关系表达式2、逻辑运算符和逻辑表达式3、if语句和switch语句【要求】1、掌握关系运算符、关系表达式、逻辑运算符和逻辑表达式的使用2、掌握if语句和switch语句的格式和使用3、掌握条件运算符的格式和使用第5章循环控制【内容】1、while、do-while和for语句2、循环的嵌套3、break语句和continue语句【要求】1、掌握while、do-while和for语句的格式和使用2、掌握循环结构程序设计方法第6章数组【内容】1、一维数组的定义和引用2、二维数组的定义和引用3、字符数组、常用字符串处理函数【要求】1、掌握一维数组以及二维数组的定义和使用2、掌握字符串的使用和字符串函数的应用第7章函数【内容】1、函数定义的一般形式2、函数参数和函数的值3、函数的调用4、函数的嵌套调用5、变量的存储类别:自动变量、静态变量、外部变量、寄存器变量【要求】1、掌握函数定义的格式2、掌握函数的形式参数和实际参数以及函数调用时的参数传递3、掌握函数嵌套调用的方法4、掌握自动变量、静态变量、外部变量、寄存器变量的概念和作用域第8章预处理命令【内容】1、宏定义2、文件包含处理【要求】1、掌握宏定义和文件包含处理的使用第9章指针【内容】1、地址和指针的概念2、变量的指针和指向变量的指针变量3、数组的指针和指向数组的指针变量4、字符串的指针和指向字符串的指针变量【要求】1、了解地址和指针的概念2、掌握指针变量的定义及指向简单变量指针的使用方法第10章结构体和共同体【内容】1、结构体变量的定义、引用和初始化2、结构体数组的定义和使用3、指向结构体类型数据的指针4、共用体【要求】1、掌握结构体变量的定义、引用和初始化2、掌握结构体数组的定义和使用3、掌握指向结构体类型数据的指针第二部分《数据结构》(占总分40%)参考书目:严蔚敏,《数据结构》(C语言版),清华大学出版社2007年【考查目标】1. 理解数据结构的基本概念;掌握数据的逻辑结构、存储结构及其差异;实现各种基本操作。
C语言程序设计课件 .ppt
定义C为字符数组,包含10个元素。在赋值以后数组的状态 如图所示: c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] c[8] c[9]
I
am
happ y
2020/4/12
24
2、字符数组的初始化
与一般数组的初始化方法类似。
例如char c[ ]={‘I’,’ ’,’a’,’m’,’ ’,’a’,’ ’,’s’,’t’,’u’,’d’,’e’, ’n’,’t’}
a[0] ---------------------- a 00 a 01 a 02 a 03
a
a[1] ---------------------- a 10
a 11
a 12
a 13
a[2] ---------------------- a 20 a 21 a 22 a 23
上面定义的二维数组可以理解为定义了3个一维数组,即 相当于 float a[0][4],a[1][4],a[2][4]
85 555 58 444 44 822 22 280 00 008
第第 第 第结 一二三 四 次次 次 次果
2020/4/12
11
根据流程图写出程序(今设n=10),定义数组长度为11, 本例中对a[0]不用,只用 a[1]到a[10],以符合人们的习惯。
流程图如下:
输入n个数给a[1]到a[n] for j=1 to n-1
for (i=1;i<=10-j;i++) if (a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf(“the sorted numbers :\n”); for (i=1;i<11;i++)
C语言数组名及指向数组指针的小结
C语言数组名及指向数组指针的小结C语言的数组名和对数组名取地址转自: /zdcsky123/article/details/6517811相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针,指向函数的入口地址。
现在有这样一个问题,如果对数组名取地址,那得到的会是什么呢?很多人立刻会想到:给指针取地址,就是指针的指针,即二级指针嘛!当然这样的结论是错误的,不然这篇笔记也就没有意义了。
下面我们来逐步分析,下面是一段验证这个问题的代码Code:1.#include<stdio.h>2.int main()3.{4.int a[10];5.6.printf("a:/t%p/n", a);7.printf("&a:/t%p/n", &a);8.printf("a+1:/t%p/n", a+1);9.printf("&a+1:/t%p/n", &a+1);10.11.return 0;12.}大家可以编译运行一下,我的输出的结果是:Code:1./*2.a: 0012FF203.&a: 0012FF204.a+1: 0012FF245.&a+1: 0012FF486.*/a和&a指向的是同一块地址,但他们+1后的效果不同,a+1是一个元素的内存大小(增加4),而&a+1增加的是整个数组的内存大小(增加40)。
既a和&a的指向和&a[0]是相同的,但性质不同!读到这里,有很多朋友已经明白其中的机制了,如果还是有些模糊,请继续往下看Code:1.int main()2.{3.int a[10];4.printf("%d/n",sizeof(a));5.return 0;6.}这段代码会输出整个数组的内存大小,而不是首元素的大小,由此我们是否联系到,sizeof(a)这里的a和&a有些相同之处呢?!是的,没错,&a取都得是整个数组的地址!既数组名取地址等价于对数组取地址。
指针与数组
3.通过一个行指针变量引用二维数组的元素
定义一个由m个元素组成的一维数组的指 针变量的一般形式:
类型标识符 (*指针变量名)[m];
注意:*p两侧的圆括号不可缺少。 例如:假若有语句 int a[2][3], (*p)[3]; p=a;
则:⑴ p是一个指向由3个整型元素组成的一 维数 组的指针变量。
方法ain() { int a[10]={54,65,8,2,3,56,8,21,57,98},i;
for(printf("\n"),i=0;i<10;i++) printf("%4d",*(a+i)); }
方法三:用指针变量指向数组元素
main() { int a[10]={54,65,8,2,3,56,8,21,57,98},*p,i;
⑵ p指向a数组,p+1指向数组a的下一行首地 址,a和p的基类型相同,则a数组中任意元 素a[i][j]还可以如下表示: *(p[i]+j) 、*(*(p+i)+j) 、(*(p+i))[j] 、p[i][j]
例:使用行指针变量访问数组元素。
main() {
float fa[5][10], (*pf)[10]=fa; int i,j; for(i=0; i<5; i++)
C语言程序设计
指针与数组
1.1 一维数组的指针
数组的指针 :是数组的起始地址。
数组元素的指针 :是数组元素的地址。 当指针变量指向数组或数组元素时,它就是指 向数组的指针变量。
C规定: ⑴数组名代表数组的首地址(起始地址),
也就是第一个元素的地址。
⑵当指针变量p指向数组时,p+1指向数组 的下一个元素。假设一个整型元素占两 个字节,p+1是使p的地址加2个字节。
C语言指针
设中的整数
#include <stdio.h> void swap(int *p, int *q) { int t; t = *p; *p = *q; } main( ) { int x, y; scanf( “%d%d”, &x, &y ); swap( &x, &y ); printf( “%d %d\n”, x, y ); }
问题
char *p; scanf(“%s”,p); ERROR char *p; p=(char *) malloc(10); scanf(“%s”,p);
动态空间分配
申请存储单元的函数
void *malloc( long size ); 给定所需字节数,取得系统分配的存储单元, 给定所需字节数,取得系统分配的存储单元,返回首 地址 如果分配失败, 如果分配失败,返回空指针 NULL
main() { int i,a[N]; for(i=0;i<N;i++) i scanf(“%d”,a+____); a invert( ____,0,N-1); for(i=0;i<N;i++) printf(“%d ”,a[i]); printf(“\n”); }
字符指针
char *p; p=“student”; 字符串常量存放在常量存储区中,可用字 符指针指向它的第一个字符 char *p =“student”;
字符串输入
char s[5]; for(i=0;i<5;i++)
scanf("%c",&s[i]);
scanf(“%s”,s);
空格、回车都作为分隔符不能被读入
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二维数组
说明: 常量表达式1设置二维数组的行数,常量表达式2设置二维数组的 列数。 例如:float a[3][4];图6-1 a[3][4]的存储结构图 在C语言中,二维数组中元素的下标也是从零开始,排列的顺序 是按行存放,即在内存中先顺序存放第一行的元素,再顺序存放第二 行的元素…,即先存放a[0][0],再存放a[0][1]、a[0][2]/a[0][3],然后 再存放a[1][0]、a[1][1]等。如图6-1所示。
大连理工大学出版社
二维数组
结果为 1000 5000 9000 也可以对各行中的某一元素赋初值: 例如:int a[3][4]={{1},{0,6},{0,0,9}}; 结果为 1000 0600 0090 还可以对某几行元素赋初值: 例如: int a[3][4]={{1},{5,6}};
程序代码: 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(“%4d”,a[i][j]); /* 打印a数组的元素 */ b[j][i]=a[i][j]; /*把a 数组的行元素赋给b 数组的列元素*/
大连理工大学出版社
二维数组
for(i=0;i<20;i++) { if(i%5= =0)printf(“\n”); printf(“%10d”,f[i]); } } 运行结果为: /*每行输出5个数据*/
6.3 二维数组
6.3.1 二维数组的定义 格式: 类型说明符 数组名[常量表达式1][常量表达式2]
大连理工大学出版社
一维数组
6.2.4一维数组应用举例 【例6.2】建立一个数组,数组元素a[0]到a[9]的值为 0~9,然后按逆序输出。 程序代码: main() { int i,a[10]; for(i=0;i<=9;i++) a[i]=i; /*给数组a的10个元素,用循环变量i的 值分别赋值*/ for(i=9;i>=0;i--) printf(“%4d”,a[i]); } 运行结果为: 9 8 7 6 5 4 3 2 1 0
大连理工大学出版社
பைடு நூலகம்
一维数组
例如: (1)给数组a所有元素赋初值。 例如:int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始化之后,数组各个元素值为: a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4 a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9 (2)给部分元素赋初值。 例如:int a[10]={0,1,2,3,4}; 初始化之后: a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,其余元 素自动赋0值。 (3)设置一个数组中全部元素值为0。 例如:int a[10]={0,0,0,0,0,0,0,0,0,0}; 或int a[10];系统会对所有数组元素自动赋0值。
大连理工大学出版社
一维数组
【例6.4】用数组编程,求Fibonacci数列问题的前20个数据。 分析:定义一个一维数组f[20]用来存放20个数据, i为循环变量, 我们从下面的数据找一下规律: f[0]=1;f[1]=1;f[2]=f[0]+f[1];f[3]=f[2]+f[1];依次类推找出 公式为: f[i]=f[i-1]+f[i-2]; 循环语句为:for(i=2;i<20;i++) 程序代码: main() { int i; static int f[20]={1,1}; /*定义20个元素的数组 f[0]=f[1]=1 */ for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; /*生成20个数据存放在f[i] 数组中 */
大连理工大学出版社
二维数组
结果为
0010 0000 0600
6.3.3 二维数组的引用 格式: 数组名[行下标][列下标] 说明: (1)下标可以是整型常量或表达式。例如: a[2][3],a[2-1][2*2-1]。 (2)数组元素可以出现在表达式中,也可以被赋值。例如: b[1][2]=a[1][2]/3; (3)在使用数组元素时,因为下标从零开始,要注意下标值应 在已定义的数组大小范围内。 例如: int a[3][4];
C语言程序设计(第五版)
第6章 数组和指向数组的指针
本章要点: ■ 数组的定义及数组元素 ■ 数组与指针 ■ 数组的应用
大连理工大学出版社
数组的概念
6.1 数组的概念
数组是相同性质类型的数据按照一定有序顺序组成的集合。数 组属于构造类型,又称导出类型。 在程序设计中,数组是十分有用的。例如:输入100名学生的 成绩,要求输出高于平均分的那些成绩。这个问题本身的算法很简 单,但不用数组,解决起来十分繁琐,平均分可以在读入数据的同 时,用边累加成绩边统计数据个数的方法最后求出,但只有读入最 后一个学生的分数之后才能求出平均分,因此,必须把100个学生 的分数全部保留下来,然后逐个与平均分比较,才能把高于平均分 的成绩打印出来。为了保存学生的成绩,就需要有100个变量(假 定为a1、a2、…、a100)来存放,且用变量与平均分average一 一比较如下:
大连理工大学出版社
一维数组
(4)在对全部数组元素赋初值时,可以不指定数组长度。 例如:int a[5]={1,2,3,4,5}; 或 int a[ ]={1,2,3,4,5}; 若定义数组长度大于元素赋初值的个数时,不能省略数组长度的 定义,而必须写成: int a[10]={1,2,3,4,5}; 若定义数组长度小于元素赋初值的个数时,语法错误不能执行。 6.2.3 一维数组元素的引用 C语言规定,数组必须先定义后使用;而且只能逐个引用数组元 素,不能一次引用整个数组。 格式:数组名[下标] 说明: 下标可以是整型常量或整型表达式。例如:a[1],a[2*2]。 若要对一维数组的连续多个元素引用或操作,可用一重循环实现。
6.3.4 二维数组应用举例 【例6.5】将一个二维数组行和列元素互换,存储到另一个二维 数组中。 提示:二维数组的操作,一般用二重循环配合。外循环处理数组 中的行数,内循环处理数组中的列数。
大连理工大学出版社
二维数组
如: a= 123 456
a行列互换存储到b
1 4 b= 2 5 3 6
大连理工大学出版社
一维数组
(5)常量表达式表示元素个数,即数组的长度。如:int a [10];中10表示a数组有10个元素。 例如:以下定义是合法的。 int a[10]; 或: # define N 10 int a[N]; 6.2.2 一维数组的初始化 格式: 类型说明符 数组名[下标]={常量列表}; 说明: 常量列表可以是数值、字符常量或字符串,数组元素的初值必须依 次放在一对花括号内。
大连理工大学出版社
数组的概念
if(a1>average)printf(“%f\n”,al); if(a2>average)printf(“%f\n”,a2); …… if(a100>average)printf(“%f\n”,a100); 这样的程序是无法让人接受的。如果使用数组元素a[1]、 a[2]、…、a[100]来代替a1、…、a2、…、a100,则程序就会简单 得多,只需要用一个for循环就能完成100次比较: for(i=1;i<=100;i++) if(a[i]>average) printf(“%f\n”,a[i]); 在这里,a代表数组名,a[i]代表a数组中的一个元素,i是数组元 素的下标,当i的值为1时,a[i]代表a[1];当i的值为2时,a[i]代表a[2]。 在循环中当i从1变化到100时,a[i]也就逐个代表a[1]到a[100]。由 此可见,引用数组可以使十分繁琐的程序变得非常简单。
大连理工大学出版社
二维数组
6.3.2 二维数组的初始化 格式: 类型说明符 二维数组名[行下标][列下标]={{常量列 表},…}; 说明: (1)分行给二维数组所有元素赋初值。 例如:int a[3][4]={{1,2,3,4},{5,6,7, 8},{9,10,11,12}}; 把第一个花括弧内的数据赋给第一行元素,第二个花括弧内的 数据赋给第二行数据…,即按行赋初值,这种方法比较直观。 (2)将所有数据写在一个花括弧内,按数组排列的顺序对各元 素赋初值。 例如:int a[3][4]={1,2,3,4,5,6,7,8,9, 10,11,12}; (3)可以对部分元素赋初值。 例如:int a[3][4]={{1},{5},{9}}; 对各行第1列的元素赋初值,其余元素值自动为0。
大连理工大学出版社
二维数组
结果为 1000 5600 0000
(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以 不指定,但第二维的长度不能省略。 例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10, 1112}; 等价于: int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 在定义时也可以只对部分元素赋初值,而省略第一维的长度,但 应分行赋初值。 例如:int a[][4]={{0,0,1},{0},{0,6}}; 这样的写法,能通知编译系统,数组共有3行。
大连理工大学出版社
一维数组
【例6.1】随机输入10个数并输出。 程序代码: main() { int a[10],i; printf(“input 10 numbers:\n”); for(i=0;i<10;i++) /*运用一重循环连续给数组元素赋值*/ scanf(“%d”,&a[i]); printf(“\n”); for(i=0;i<10;i++) printf(“%d,”,a[i]); /*输出数组中的10个元素*/ }