第六章利用数组处理批量数据

合集下载

第6章 利用数组处理批量数据_16Jul2013

第6章 利用数组处理批量数据_16Jul2013

#include <stdio.h> int main() { int f1=1,f2=1,f3; int i; printf("%12d\n%12d\n",f1,f2); for(i=1; i<=38; i++) { f3=f1+f2; printf("%12d\n",f3); f1=f2; f2=f3; 代码可改进 } return 0; }
6.1.1怎样定义一维数组
定义一维数组的一般形式为: 定义一维数组的一般形式为: 类型符 数组名[常量表达式]; 数组名的命名规则和变量名相同 如 int a[10]; 数组名
6.1.1怎样定义一维数组
定义一维数组的一般形式为: 定义一维数组的一般形式为: 类型符 数组名[常量表达式]; 数组名的命名规则和变量名相同 如 int a[10]; 数组长度 数组长度
6.1.1怎样定义一维数组
定义一维数组的一般形式为: 定义一维数组的一般形式为: 类型符 数组名[常量表达式]; int a[4+6]; 合法 int n=10; int a[n]; 不合法
6.1.2 怎样引用一维数组元素
如果有1000名学生, 名学生,每个学生有一 个成绩, 个成绩,需要求这1000名学生的平 均成绩。 均成绩。 用s1,s2,s3,……,s1000表示每个学生 的成绩, ,能体现内在联系 的成绩 能体现内在联系。 内在联系。 数组名 C语言用方括号中的数字表示下标, 语言用方括号中的数字表示下标, 如用s[15]表示
解题思路: 解题思路:问题的关键有两个: 问题的关键有两个:
(2) 怎样使c改变为所指定的字母? 改变为所指定的字母? 办法是改变它的ASCII值 例如字符变量c的原值是大写字母’A’,想使c 的值改变为’E’,只需执行“ 只需执行“c=c+4”即可, 即可, 因为’A’的ASCII值为65,而’E’ 的ASCII值 为69,二者相差4

第06章利用数组处理批量数据zb

第06章利用数组处理批量数据zb

6.3.4 二维数组程序举例
将二维数组a转置后存放到 数组中并输出。 转置后存放到b数组中并输出 例6.4 将二维数组 转置后存放到 数组中并输出。 #include <stdio.h> void main() { int i,j,b[3][2],a[2][3]={1,2,3,4,5,6}; for(i=0;i<2;i++) for(j=0;j<3;j++) b[j][i]=a[i][j]; for(i=0;i<3;i++) {for(j=0;j<2;j++) printf(“%4d”, b[i][j]); /*输出 数组 输出b数组 输出 数组*/ printf(“\n”); } } [Return]
6.2.2 引用一维数组的元素
对已经定义的一维数组,只能逐个引用数组元素, 对已经定义的一维数组, 只能逐个引用数组元素 , 不能一次引用整个数组中的全部元素。 不能一次引用整个数组中的全部元素。 如:a[3]=10; t=a[3]+6; 引用数组元素的一般式为: 引用数组元素的一般式为:数组名 [ 下标表达式 ] 注意: 下标表达式应为整型常量或整型表达式。 注意: 1 下标表达式应为整型常量或整型表达式。 2 定义数组时的数组名 [ 常量表达式 ]和引用数 定义数组时的数组名 和引用数 虽然在形式上相似, 组元素的数组名 组元素的数组名 [ 下标表达式 ]虽然在形式上相似,但含 虽然在形式上相似 义和用法上是不同的。 义和用法上是不同的。如: int a[10]; /*定义数组长度为 定义数组长度为10*/ 定义数组长度为 a[8]=4; t=a[8]+6; /*引用数组元素 引用数组元素a[8]*/ 引用数组元素 思考: 可以吗? 思考: a[10]=4; 可以吗? [Return]

第6章 利用数组处理批量数据

第6章 利用数组处理批量数据

一维数组的定义和引用
0 a[0] 例:#include〈stdio.h〉 1 a[1] void main( ) 2 a[2] { int i,a[10]; 3 a[3] 4 a[4] for(i=0;i<=9;i++) 5 a[5] a[i]=i; 6 a[6] for(i=9;i>=0;i--) 7 a[7] 8 printf("%d ",a[i]); a[8] 9 a[9] } •注意:输入和输出数值型数组元素必须使用循环语句逐个 输入输出各下标变量,而不能用一个语句输出整个数组。 下面的写法是错误的: scanf("%d",a); printf("%d",a);
}
一维数组程序举例
例:求Fibonacci数列的前N项的值。 a1=a2=1 an=an-1+an-2 #include <stdio.h> #define NUM 20 void main( ) { int a[NUM]={ 1, 1 }; int j; for (j=2; j<NUM; ++j) a[j] = a[j-1]+a[j-2]; for ( j=0; j<NUM; j++) printf("%d\t", a[j]); }
二维数组的定义和引用

二维数组可被看作是一种特殊的一维数组: 它的元素又是一个一维数组 例如,把a看作是一个一维数组,它有3个元素: a[0]、a[1]、a[2] 每个元素又是一个包含4个元素的一维数组
a[0] a[1] a[2]
a[0][0] a[1][0] a[2][0]
a[0][1] a[1][1] a[2][1]

第6章利用数组处理批量数据(1)汇编

第6章利用数组处理批量数据(1)汇编
Chapter 6 Arrays
Why arrays
In previous chapters, we have learned basic data types, e.g. int, char, float. In this chapter, we will learn one of the derived data types, called array.
Length is the length of the array and must have a constant value
Why index2nd floor 1st floor 0th ground floor
It is like the building floors, it starts from ground floor (0) to the first floor (1), and then the second (2) floor, so on.
How to use array element
We can array element in any legal expressions (or statement)
int a[10]; int k;
a[k] = expression (has a value)
a[5]= ((x/y+3)%2)*4;
a[0] a[1] a[2] a[3] a[4]
How to define an array
Examples of legal and illegal definitions:
int a[n+6]; (n is a variable)
int _x[10];
int a[k+2]; (k is constant variable) int b[(x>y)+3]; int a[34%3+7];

C语言程序设计课件第6章 利用数组处理批量数据

C语言程序设计课件第6章 利用数组处理批量数据

void main()
{ int i,a[10];
for(i=0;i<=9;i++)
a[i]=i;
for(i=9;i>=0; i--)
printf("%d ",a[i]);
printf("\n"); }
先输出a[9],最 后输出a[0]
6.2.3 一维数组的初始化 P141
对数组元素的赋值既可以通过赋值语 句来实现,也可以在定义数组时同时 给予初值,这就称为数组的初始化
数组名的命名规则和变量名相同 常量表达式给出元素的个数 下标从0开始,如 int a[10];
a[0],a[1],a[2],…,a[9]
6.2.2 引用一维数组的元素 P140
必须先定义数组,才能引用数组中的 元素
只能逐个引用数组元素而不能一次引 用整个数组中的全部元素
6.2.2 引用一维数组的元素 P140
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int a[3][4]={{1},{5},{9}};等价于 int a[3][4]={{1,0,0,0},{5,0,0,0},
{9,0,0,0}}; int a[3][4]={{1},{5,6}};相当于 int a[3][4]={{1},{5,6},{0}};
6.2.1 定义一维数组 P140
定义一维数组的方式为: 类型符 数组名[常量表达式];
数组名的命名规则和变量名相同 常量表达式给出元素的个数 下标从0开始,如 int a[10];
a[0],a[1],a[2],…,a[9]
6.2.1 定义一维数组 P140
定义一维数组的方式为: 类型符 数组名[常量表达式];

C语言-第6章 利用数组处理批量数据

C语言-第6章 利用数组处理批量数据

第6章利用数组处理批量数据一、单项选择题1. 以下对一维数组a的正确说明是:A) char a(10); B) int a[]; C)int k=5,a[k]; D)char a[]={…a‟,‟b‟,‟c‟};2. 以下能对一维数组a进行初始化的语句是: ( C )A) int a[5]=(0,1,2,3,4,); B) int a(5)={}; C) int a[ ]={0,1,2}; D) int a{5}={10*1};3.在C语言中对一维整型数组的正确定义为。

A)int a(10); B)int n=10,a[n];C)int n;a[n]; D) #define N 10int a[N];4、已知:int a[10]; 则对a数组元素的正确引用是()。

A、a[10]B、a[3.5]C、a(5)D、a[10-10]5. 执行下面的程序段后,变量k中的值为int k=3, s[2];s[0]=k; k=s[0]*10;A) 不定值B) 33 C) 30 D) 106. 下列说法中错误的是A 构成数组的所有元素的数据类型必须是相同的B 用指针法引用数组元素允许数组元素的下标越界C 一维数组元素的下标依次是1、2、3……D 定义数组时的长度可以是整型常量表达式7. 若有以下数组说明,则数值最小的和最大的元素下标分别是()。

int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};A)1,12 B)0,11C)1,11 D)0,128. 若有以下数组说明,则i=10;a[a[i]]元素数值是()。

int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};A)10 B)9 C)6D)59. 假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是A) 3 B) 6 C) 10 D) 2010. 若有说明:int a[][3]={1,2,3,4,5,6,7}; 则数组a的第一维的大小为: ( )A) 2 B) 3C) 4 D)无确定值11. 若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( )A) 2 B) 3 C) 4 D)无确定值12. 以下定义语句中,错误的是A) int a[]={1,2}; B) char *a[3]; C) char s[10]=“test”; D) int n=5,a[n];13.下面程序段的输出结果是:int i;int 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 7D) 3 6 914. 对二维数组的正确定义是()A)int a[ ] [ ]={1,2,3,4,5,6}; B)int a[2] [ ]={1,2,3,4,5,6};C)int a[ ] [3]={1,2,3,4,5,6}; D)int a[2,3]={1,2,3,4,5,6};15.已知int a[3][4];则对数组元素引用正确的是______.A)a[2][4] B)a[1,3] C)a[2][0]D)a(2)(1)17.下面程序的输出结果是____。

chap06 利用数组处理批量数据

chap06 利用数组处理批量数据
把题目抽象为:“对n个数按升序排序” 采用起泡法排序
6.1怎样定fo义r(i和=0引;i<5用;i+一+)维数组—举例起泡法
if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
a[0] 9 8 8 8 8 8 a[1] 8 9 5 5 5 5 a[2] 5 5 9 4 4 4 a[3] 4 4 4 9 2 2 a[4] 2 2 2 2 9 0 a[5] 0 0 0 0 0 9
数组元素由数组名和下标唯一确定 数组中元素都属于同一个数据类型
6.1怎样定义和引用一维数组
6.1.1 怎样定义一维数组 6.1.2 怎样引用一维数组元素 6.1.3 一维数组的初始化 6.1.4 一维数组程序举例
6.1怎样定义和引用一维数组—定义 一般形式为:
类型符 数组名[常量表达式];
数组名的命名规则和变量名相同
a[0] a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[1] a[1][0]
a[1][1]
a[1][2]
a[1][3]
a[2] a[2][0]
a[2][1]
a[2][2]
a[2][3]
6.2 怎样定义和引用二维数组—定义
逻辑存储
a[0][0]
a[0][1]
a[0][2]
a[0][3]
printf("the sorted numbers :\n"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\n");
6.1怎样定义和引用一维数组—sizeof

c语言程序设计第五版课后答案谭浩强第六章习题答案

c语言程序设计第五版课后答案谭浩强第六章习题答案

c语⾔程序设计第五版课后答案谭浩强第六章习题答案第六章:利⽤数组处理批量数据1. ⽤筛选法求100之内的素数【答案解析】素数:约数为1和该数本⾝的数字称为素数,即质数筛选法:⼜称为筛法。

先把N个⾃然数按次序排列起来。

1不是质数,也不是合数,要划去。

第⼆个数2是质数留下来,⽽把2后⾯所有能被2整除的数都划去。

2后⾯第⼀个没划去的数是3,把3留下,再把3后⾯所有能被3整除的数都划去。

3后⾯第⼀个没划去的数是5,把5留下,再把5后⾯所有能被5整除的数都划去。

这样⼀直做下去,就会把不超过N 的全部合数都筛掉,留下的就是不超过N的全部质数。

因为希腊⼈是把数写在涂腊的板上,每要划去⼀个数,就在上⾯记以⼩点,寻求质数的⼯作完毕后,这许多⼩点就像⼀个筛⼦,所以就把埃拉托斯特尼的⽅法叫做“埃拉托斯特尼筛”,简称“筛法”。

(另⼀种解释是当时的数写在纸草上,每要划去⼀个数,就把这个数挖去,寻求质数的⼯作完毕后,这许多⼩洞就像⼀个筛⼦。

)【代码实现】//⽤筛选法求100以内的素数#include<stdio.h>int main(){int i, j, k = 0;// 将数组汇总每个元素设置为:1~100int a[100];for (i = 0; i < 100; i++)a[i] = i+1;// 因为1不是素数,把a[0]⽤0标记// 最后⼀个位置数字是100,100不是素数,因此循环可以少循环⼀次a[0] = 0;for (i = 0; i < 99; i++){// ⽤a[i]位置的数字去模i位置之后的所有数据// 如果能够整除则⼀定不是素数,该位置数据⽤0填充for (j = i + 1; j < 100; j++){if (a[i] != 0 && a[j] != 0){//把不是素数的都赋值为0if (a[j] % a[i] == 0)a[j] = 0;}}}printf(" 筛选法求出100以内的素数为:\n");for (i = 0; i < 100; i++){//数组中不为0的数即为素数if (a[i] != 0)printf("%3d", a[i]);}printf("\n");return 0;}【运⾏结果】2. ⽤选择法对10个整数排序【答案解析】选择排序原理:总共两个循环,外循环控制选择的趟数,内循环控制具体选择的⽅式。

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

4)中括号叫下标运算符。
5)数组的下标从0开始计算,如int a[10],表示的是 a[0],a[1]……a[9];
整理课件
二、一维数组定义举例
4
int a(10);——错误
int a[n];
——错误
int a[10];
——正确
int a[5.5];——错误
int a[‘a’]; ——正确
4、数组的每个元素就相当于一个普通的变量。 5、数组的使用一般与for循环配合使用。(一维数
组与一重for循环配合)
整理课件
三、引用举例
6
例1:从键盘输入十个整数,然后反序输出这十个数。 分析:
1、要将十个个数输入,就必须存储在十个变量中,因此应 该定义一个整型数组int a[10];
2、要连续输入这十个数,需要用十个scanf函数,而且每 个scanf函数的形式都是一样的,scanf(“%d”,&a[k]);既然如 此,我们就可以用循环,而且循环次数已知,用for。
3、最后输出也是一样。
整理课件
例题6_1 一维数组的赋值
7
void main() { int a[10],k; for(k=0;k<10;k++) /*注意k的变化范围*/
scanf("%d",&a[k]); for(k=9;k>=0;k--) /*注意k的初始值*/
printf("%7d",a[k]); printf(“\n”); }
整理课件
四、一维数组的初始化
8
数组初始化的一般形式: type Array_Name[size]={……};
1、初始化所有元素 int a[5]={1,2,3,4,5};
2、初始化部分(只能是前部分)元素 int a[5]={1,2};
3、给数组的每个元素初始化相同的值,也必须完全写出 int a[5]={1,1,1,1,1}不能是int a[5]={1*5};
4、如果给数组的每个元素都赋了初始值,则可以不写数组 的长度(size) int a[]={1,2,3,4,5}int a[5]={1,2,3,4,5}
整理课件
五、一维数组应用举例
9
例6_2,求Fibonacci数列的前20项
1
(n=1)
1
(n=0)
Fn= 1
(n=2) F[n]= 1
(n=1)
示第二维的长度(列) 如:int a[3][4]——定义了一个3行4列的整型数组 注意:数组的下标从0开始
整理课件
七、二维数组的存储
14
存储——按行存取(先存取行,
再存取列)
如int a[3][4]在内存中的存储是: int a[3][4]的形式图:
A[0][0] A[0][1] A[0][2] A[0][3] A[1][0] A[1][1] A[1][2] A[1][3] A[2][0] A[2][1] A[0]
3
A[1]
1、定义:
……
type Array_Name[size];
A[n-2]
注 1意):type表示数组数据的类型(可以是任何合法的类型)A[n-1]
2)Array_Name表示数组名,其命名规则与变量名的命名规则相同
3)size——是整型(字符型)常量或常量表达式,(绝对不允许是 变量或变量表达式)其含义是表示:数组的长度——数组包含的数 据(元素)的个数。
第六章
1
利用数组处理批量数据
整理课件
一、数组的概念
2
数组——将多个同类型的数据组合在一起 如:在一个程序中需要使用1000个整型变量,用原来
的方法,只能:
int a1,a2,a3……,a1000;这样做显然不能实现。
如果用数组,只需要
int a[1000];它就表示同时定义了1000个整型变量。
}
}
整理课件
例题6_3 将十个数按序输出
11
基本思想:相邻两个数比较,小的放在前面。(起泡法, 冒泡法)
98888555 89555844 5 5 9 4 4 4 8 2…… 44492228 22229999
整理课件
例6_3
12
void main()
{
int a[11]; /*一种技术处理,为了习惯,下标从1开始*/
int i,j,t;
for(i=1;i<11;i++) /*输入10个数*/
scanf("%d",&a[i]);
for(j=1;j<=9;j++) /*需要比较的轮数*/
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;}
/*f[0]=1,f[1]=1*/
int i;
for(i=2;i<20;i++) /*因为f[0],f[1]已知,因此I从2开始*/
f[i]=f[i-1]+f[i-2];
for(i=0;i<20;i++)
{
if(i%5==0) /*这个if的作用在于控制每行输出5个数*/
printf("\n");
printf("%12d",f[i]);
int a[“a”];
——错误
#define N 5 ——正确
int a[N];
整理课件
三、一维数组的引用
5
1、数组和变量一样,必须先定义,再使用(定义必 须放在所有执行语句之前,数组名不能与其它变量 名同名)
2、数组的使用——只能一次使用一个元素,数组不 能作为一个整体被使用。
3、引用方式——Array_Name[下标],其中下标可 以是整型(字符型)常量或变量表达式(注意,与 定义时候区别)
分析:Fn-1+Fn-2(n>=3)
F[n-1]+F[n-2] (n>=2)
1、要求前20项,应该定义数组 int a[20]
2、从图中知道,数组的前两个元素已知,int a[20]={1,1}
3、根据公式进行计算
整理课件
例题6_2
10
void main()
{
int f[20]={1,1};
/*交换顺序*/
for(i=1;i<11;i++) /*输出10个数*/
printf("%8d",a[i]);
printf("\n");
}
整理课件
六、二维数组的定义
13
1、定义:
type Array_Name[size1][size2]; 要求与一维数组一样,其中size1表示第一维的长度(行),size2表
相关文档
最新文档