C语言入门学习-C第7章_数组

合集下载

C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组

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

《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]。

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语言规定,不能引用整个数组,只能逐 个引用元素,元素引用方式:

C语言程序设计数组

C语言程序设计数组
第七章 数组
课程名称:C语言程序设计 课型与教法:讲授,经过程序扩展,进行对比学习 课时:2课时 讲课题目:
第7章 数组 基本教材:C语言程序设计(高等教育出版社)廖雷主编 教学目旳与要求:经过本章旳学习使学生了解数组旳意义和 基本概念,掌握数组旳定义和元素旳引用,掌握数组在实际 问题处理中旳应用。 教学难点:二维数组概念旳了解 教学要点:数组旳定义和元素旳引用、数据旳排序
例 int data[5a][;1]=7p8r.0in; tf(“%d”,a);
()
data[5]必=1p须0ri;nt/f/f(没o“r%p有(jrl=fi错n\n0t”;f误(j,<a“提[%120]醒d);;\j,t+使”,+a用)[j]时);要注意 () 5
第七章 数组
一维数组
一维数组旳初始化
int a[N]={7,3,2,5,9,1,6,10,4,8}; for(i=0;i<N-1;i++)
for(j=N-1;j>i;j--) if(a[j-1]>a[j]) { k=a[j-1]; a[j-1]=a[j]; a[j]=k; }
printf(“\n”); for(i=0;i<N;i++)
❖数组元素旳存储顺序
原二因维:数内组存例:是按i一nt行维a[序3旳]优[4]先; float b[2][5];
元素个数=行数*列数
例:int a[3]i[n2t]a[3,4];
a[0][0] a[0][1]
0 () a[0][0]
1
a[0][1]
2
a[1][0]
a[1][0] a[1][1] a[2][0] a[2][1]
一维数组旳引用

C语言数组了解数组的定义和使用

C语言数组了解数组的定义和使用

C语言数组了解数组的定义和使用C语言数组:了解数组的定义和使用数组是C语言中一种重要的数据结构,它可以用于存储一系列相同类型的元素。

在本篇文章中,将详细介绍C语言数组的定义和使用方法。

一、数组的定义数组的定义需要指定元素类型和数组的大小。

以下是一个基本的数组定义的语法:```c数据类型数组名[数组大小];```其中,数据类型表示数组中元素的类型,数组名是数组的标识符,而数组大小指定了数组中元素的个数。

例如,下面的代码展示了一个包含5个整数的数组的定义:```cint numbers[5];```这样就定义了一个名为numbers的整型数组,它可以存储5个整数。

二、数组的使用1. 初始化数组在定义数组的同时,可以对数组进行初始化。

对数组进行初始化可以通过多种方式实现。

1.1 直接初始化可以使用花括号{}来直接初始化数组元素,每个元素之间使用逗号分隔。

例如:```cint numbers[5] = {1, 2, 3, 4, 5};```这样就将数组numbers的前5个元素分别初始化为1、2、3、4、5。

1.2 部分初始化也可以只对数组的部分元素进行初始化。

未初始化的元素将被自动设置为0。

例如:```cint numbers[5] = {1, 2, 3};```这样就将数组numbers的前3个元素分别初始化为1、2、3,而后面两个元素将被设置为0。

1.3 不初始化数组也可以不进行初始化,此时数组的元素将是未知的随机值。

例如:```cint numbers[5];```这样就创建了一个名为numbers的整型数组,但它的元素值是未知的。

2. 访问数组元素可以使用数组名和索引来访问数组中的元素。

数组索引从0开始,依次递增。

例如:```cint number = numbers[2];```这样就将数组numbers中索引为2的元素的值赋给了整型变量number。

3. 修改数组元素通过使用数组名和索引,可以修改数组中的元素的值。

C语言第7章(顾元刚)-4

C语言第7章(顾元刚)-4

如果我们要存取二维数组的任意元素,则需要先确定 该元素所在行地址和列地址,再取该行、列地址所指 向单元的值。为此,C语言规定了若干表示二维数组 行、列地址的方法。仍以上述3行4列的二维整型数组a 为例,说明如下(假设数组首地址为2000):
表 7.1 二维数组地址和元素的表示方法
表示形式 a 含义 数组首地址 地址 2000
上一张
下一张
对指针变量进行的运算大致可分为如下几种:
① *p++ 等价于先得到*p,然后p=p+1。*p--同理。 ② ( *p ) ++ 等价于先得到 *p ,然后将其值加 1 ( p 指向元素的值加1)。(*p)--同理。 ③ *(++p) 等价于先p=p+1,然后得到*p。*(--p)同 理。 ④ p+j ( p 指向数组的某一个元素)得到当前地址基 础上向后偏移j个元素的地址。p-j同理。 ⑤ p1-p2(p1和p2指向同一数组)得到p1和p2指向元 素的下标差值。
② 用数组名加上编移量存取元素 main() { int t[10],j; printf("\nInput 10 numbers:\n"); for(j=0;j<10;j++) scanf("%d",t+j); printf("The 10 numbers are:\n"); for(j=0;j<10;j++) printf("%d ",*(t+j)); }
上一张 下一张
③ 用指向数组元素的指针存取元素 main() { int t[10],j; int *p; p=t; printf("\nInput 10 numbers:\n"); for(j=0;j<10;j++,p++) scanf("%d",p); p=t; printf("The 10 numbers are:\n"); for(j=0;j<10;j++,p++) printf("%d ",*p); } 三个程序运行情况均如下:

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. 指令作用
文本串
用整型表达式替换程序中所有的符号常量。

C语言数组学习课件

C语言数组学习课件

选择法排序(由小到大)
基本思想:先选择要参加排序的数和要存放的位置。 具体做法:每一次在某个范围内先找到最小元素,再放到 相应位置。
for ( i = 0 ; i < n – 1 ; i ++ ) 在 a[i] ~ a[n-1] 范围内找 最小元素 a[mini] , 与 a[i] 互换 注意:要记下最小值 的位置mini。 1 a[0] a[1] a[2] a[3] a[4] 4 3 4
插入法排序
上网查资料,了解排序思想 写出程序 还有其他的排序法吗?上网查资料
一维数组编程举例
用“折半查找法”在有序数组中找某数。可能找得到,也可能找 不到。(sz_4End.c)
思路:与中间的数比较,决定是向上找还是向下找。 向上找就修改下限,向下找就修改上限。 算法 上下限赋初值: low=0; high=n-1; while(low<high) { 求出中间的位置mid = (low + high )/2; 与中间的数比较: if( n < a[mid] ) 向上找 else if ( n > a[mid] ) 向下找 else break ; (找到了,mid 就是对应的位置) } 输出信息
存放10个学生的成绩 int score[10]; 存放 n 个数,n 不多于10
int a[10]; scanf("%d",&n); int a[n]; scanf(“%d”, &n);
一维数组的引用
一维数组的引用
数组名[下标] 特别说明: 必须先定义,才能使用数组元素。 数组元素要一个一个地引用。(除字符串) 下标必须为整数,可以是常量,也可以是变量。 下标不许超出数组的长度!! 数组定义后,数组名代表数组的首地址,其中的元素 按照下标依次存放。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 15
例:已知一个升序排列的数组有十个数据,输入一个数,查
找它是否存在。若存在打印该数及其所在位置,否则,输出
“n算o fo法un:d!”.
a[i] i
假定:数组为a[10],待查找的数为 x
15
设三个位置指针 top(顶),bot(中),mid(底) 21
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 6
4. 在对全部数组元素赋初值时,由于数据的个数已 经确定,因此可以不指定数组长度。
例如:int a[5]={1,2,3,4,5}; 也可以写成 int a[]={1,2,3,4,5};
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 7
第一个和第二个元素值比较,记住较大的元素值,刚才 比较得出的较大的元素值再和第三个元素值比较,记住两个 数中的较大值,依此类推,直到最后一个元素。 第三步:输出数组中的最大值
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 12
习题讲解
数组中找出最大值元素的位置 命名为zuidazhiweizhi.c
例如: int a[10];
它表示定义了一个整形数组,数组名为a,此数组 有10个元素。
数组名定名规则和变量名相同,遵循标识符定名规则。
数组说明中其他常见的错误: ① float a[0]; /* 数组大小为0没有意义 */ ② int k, a[k]; /* 不能用变量说明数组大小*/
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 3
7.1.2一维数组元素的引用
1.数组元素的引用方式 数组名[下标] 下标可以是整型常量或整型表达式。 例如: a[0]=a[2*3]
注意:
定义数组时用到的“数组名[常量表达式]” 和引用数组元 素时用到的“数组名[下标]” 是有区别的。
例如: int a[10]; 下标为0,1,2,3,4,5,6,7,8,9
第七章
7.1 一维数组的定义和引用
数据的特点: 1.具有相同的数据类型 2.使用过程中需要保留原始数据
C语言为这些数据,提供了一种构造数据类型: 数组。所谓数组就是一组具有相同数据类型的数据 的有序集合。
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 2
7.1.1一维数组的定义
1.一维数组的定义格式为: 类型说明符 数组名[常量表达式];
7.1.4一维数组程序举例
例7-1:用数组来处理,求解Fibonacci数列。 Fibonacci数列公式:已知: a1=a2=1an=an-1+an-2
即:1,1,2,3,5,8,13……
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 8
程序举例2:用起泡法对10个数排序(由小到大)。
找出最大值位置的思想: 第一个和第二个元素值比较,记住较大的元素值位置,
刚才比较得出的较大的元素值再和第三个元素值比较,记住 两个数中的较大元素值位置,依此类推,直到最后一个元素 。
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 13
习题讲解
选择法对数组元素排序,文件名xuanzefapaixu.c
使:top=0,bot=9,mid=(top+bot)/2=4.
1、 若x = a [mid],则 已找到
30Biblioteka 退2、出否循则,环判条断件x <为a :[m两id]成种立状否态。其一:
第 一 趟 比 较
经过第一趟(共5次比较与交换)后,最大的数9已“沉 底” 。然后进行对余下的前面5个数第二趟比较,
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 9
第 二 趟 比 较
如果有n个数,则要进行n-1趟比较。在第1趟比较 中要进行n-1次两两比较,在第j趟比较中要进行 n-j次两两比较。
选择法排序的思想: 第一趟:找出数组中最大值和最后位置上的元素值交换 第二趟:最后元素值除外,剩余元素中找最大值和倒数第二 个位置上的元素值交换 第三趟:最后2个元素值除外,剩余元素中找最大值和倒数 第三个位置上的值交换 依此类推……
思考:如果仅知道最大值,然后和不同位置上的值交换,是否会造成
数组元素值的丢失
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 10
文件命名重要性 起泡排序程序命名为:qipaopaixu.c
流程图和程序参见书上内容
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 11
习题讲解
输出数组中的最大值,文件名为zuidazhi.c
第一步:定义一个数组,并赋予相应的值 第二步:找出最大值 找出最大值思想:
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 14
习题讲解
查找一个数据值是否存在于数组中
方法一:顺序查找 文件名shunxuchazhao.c
方法二:折半查找 文件名zhebanchazhao.c 目的:为了提高查找速度 前提条件:数组元素已经排好序
思考方法:首先,假设数组中元素是按升序排列,将数组中 间位置的值与查找关键字比较,如果两者相等,则查找成功 ;否则利用中间位置将数组分成前、后两个子数组部分,如 果中间位置的值大于查找关键字,则在前面部分进一步查找 ,否则进一步在后面部分查找。重复以上过程,直到查找成 功,或直到子数组部分不存在为止,此时查找不成功。
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 5
2. 可以只给一部分元素赋值。 例如: int a[10]={0,1,2,3,4}; 定义a数组有10个元素,但花括弧内只提供5个初值, 这表示只给前面5个元素赋初值,后5个元素值为0。 3. 如果想使一个数组中全部元素值为0,可以写成: int a[10]={0};
C程序设计(第三版) 江苏大学 计算机科学与通信工程学院 4
7.1.3一维数组的初始化
对数组元素初始化的实现方法: 1.在定义数组时对数组元素赋以初值。 例如: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。
相关文档
最新文档