C语言入门学习-C第7章_数组
C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组
![C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组](https://img.taocdn.com/s3/m/1b43b6d5bcd126fff6050bc6.png)
第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章:数组](https://img.taocdn.com/s3/m/0ee841136edb6f1aff001fde.png)
/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章 数组](https://img.taocdn.com/s3/m/953d092476a20029bc642db7.png)
一维数组: 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语言程序设计数组](https://img.taocdn.com/s3/m/43b40b44a9114431b90d6c85ec3a87c241288a46.png)
课程名称: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语言数组了解数组的定义和使用](https://img.taocdn.com/s3/m/aa8ab8bffbb069dc5022aaea998fcc22bdd14378.png)
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](https://img.taocdn.com/s3/m/d799cc0ebed5b9f3f90f1c94.png)
如果我们要存取二维数组的任意元素,则需要先确定 该元素所在行地址和列地址,再取该行、列地址所指 向单元的值。为此,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语言(第七章数组)](https://img.taocdn.com/s3/m/72a9ca0e763231126edb1168.png)
对部分元素赋初值(前面的连续元素)。如: 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语言数组学习课件](https://img.taocdn.com/s3/m/7554db0876c66137ee0619ab.png)
选择法排序(由小到大)
基本思想:先选择要参加排序的数和要存放的位置。 具体做法:每一次在某个范围内先找到最小元素,再放到 相应位置。
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);
一维数组的引用
一维数组的引用
数组名[下标] 特别说明: 必须先定义,才能使用数组元素。 数组元素要一个一个地引用。(除字符串) 下标必须为整数,可以是常量,也可以是变量。 下标不许超出数组的长度!! 数组定义后,数组名代表数组的首地址,其中的元素 按照下标依次存放。
《C语言中的数组》课件
![《C语言中的数组》课件](https://img.taocdn.com/s3/m/5b71d1565e0e7cd184254b35eefdc8d376ee14f3.png)
2
返回数组:
函数可以返回指向数组的指针,以便在其他地方使用。
3
数组作为参数:
您可以将数组作为参数传递给函数,使得函数能够处理数组的各种操作。
数组的常见问题和注意事项
虽然数组是强大且常用的数据结构,但在使用数组时也需要注意一些常见问题和注意事项。
1 数组越界
2 数组大小
注意数组索引的范围,避免越界访问数组 元素。
排序算法
通过数组实现的排序算法可以 帮助您对数据进行排序。
搜索算法
您可以使用数组实现各种不同 的搜索算法,如线性搜索、二 分搜索等。
动态规划
动态规划算法通常涉及到对数 组进行填表和计算。
总结和要点
通过这个PPT课件,您已经了解了C语言中数组的定义、基本用法、多维数组、函数应用、问题和注意 事项、与指针的关系,以及在算法中的应用。希望这些知识对您的学习和工作有所帮助。
《C语言中的数组》PPT 课件
通过本课件,您将深入了解C语言中的数组:从基本用法和多维数组,到数组 在函数中的应用和常见问题,再到数组与指针的关系和在算法中的实际应用。
数组的定义和基本用法
数组是一种数据结构,用于存储一组相同类型的数据。学习数组的定义和基本用法将帮助您更好地理解 如何使用数组来存储和处理数据。
确保定义数组时给出正确的数组大小,以 避免内存溢出。
3 组初始化
4 数组排序
在使用数组之前,确保对数组进行正确的 初始化。
了解并实践常用的数组排序算法,以便在 需要时进行数组排序。
数组与指针的关系
数组和指针在C语言中密不可分。了解数组与指针之间的关系将帮助您更好地理解C语言的内存管理和 数组操作。
数组名和指针
数组名可以看作是指向数组 首元素的指针。
C语言-7数组sc
![C语言-7数组sc](https://img.taocdn.com/s3/m/111092f719e8b8f67c1cb9b7.png)
下标越界是大忌! ◦ 定义:int a[10]; 那么数组元素为a[0] ~a[9] ◦ 使用大于最大下标的下标,将访问数组以外的空间。那里的数 据是未知的,系统不做下标越界检查,但可能带来严重后果
注意 数组下标从0开始
sizeof可以用来获得数组大小
C语言程序设计——算法的描述
14
SCS-SWPU
C语言程序设计——算法的描述
输出方法: 输出下标为i的数组元素: printf("%d",a[i]); 输出整个数组元素: for(i=0;i<10;i++) printf("%d",a[i]);
17
SCS-SWPU
以下数组操作格式是否正确??
1、 int n; scanf(“%d″,&n); int a[n]; 2、#define n 5 int a[n]; 3、 float a[0]; 4、 int b(2); 5、int b[4]={0};
6.1 6.2 6.3
一维数组 二维数组 字符数组与字符串
C语言程序设计——第一章 C语言概述
2
SCS-SWPU
float s; • 存放一个学生的学习成绩 • 存放一个班100个学生的成绩呢?
搜索已有知识结构:
C语言程序设计——算法的描述
3
SCS-SWPU
函数:
控制结构: 顺序 基础:
数据类型
C语言程序设计——算法的描述
25
SCS-SWPU
程序流程图如下:
0
C语言程序设计——算法的描述
26
SCS-SWPU
#include <stdio.h> #define N 6 void main( ) { int a[N],temp,i,j; for(i=0;i<N;i++) scanf("%d",&a[i]); for(j=1;j<=N-1;j++) for(i=0;i<=N-j-1;i++) if(a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; } for(i=0;i<N;i++) printf("%4d",a[i]); printf("\n"); }
c语言 第7章 数组(4)
![c语言 第7章 数组(4)](https://img.taocdn.com/s3/m/c3fd0b43b307e87101f696e6.png)
void sort( int b[],int k) {int i,j,t,flag; for (j=0;j<k-1;j++) {flag=0; for (i=0;i<k-j-1;i++) if (b[i]>b[i+1]) { t=b[i]; b[i]=b[i+1]; b[i+1]=t; flag=1; } if (flag==0) break; } }
上一页 下一页
for(i=0;i<26;i++) if(c[i]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'A',c[i]); } printf("\n"); for(i=0;i<26;i++) if(c[i+26]) {if(m%8==0)putchar('\n');m++; printf("%c: %-d ",i+'a',c[i+26]); } }
第四讲:
第 七 章 数组
7.1 7.2 7.3 7.4 7.5 7.6 一维数组 二维数组 数组的应用 字符数组与字符串 数组作为函数的参数 程序举例
7.5 数组作为函数的参数
数组作为函数参数主要有两种情况: 数组元素作为函数的实参:这种情况与普通变量 作实参一样,是将数组元素的值传给形参。形 参的变化不会影响实参数组元素,我们称这种 参数传递方式为“值传递”。 数组名作实参:要求函数形参是相同类型的数 组或指针,这种方式是把实参数组的起始地址 传给形参数组,形参数组的改变也是对实参数 组的改变,称这种参数传递方式为“地址传 递”。
C语言程序设计第七章 利用数组处理数据
![C语言程序设计第七章 利用数组处理数据](https://img.taocdn.com/s3/m/b141dcfe5f0e7cd18525363c.png)
一维数组的存储: 计算机中用连续的内存单元存放各个元素。 如:int a[5];其内存存储为:
保存数组所需内存量与数组元素的基本类型和数组大小有关。 总字节数=sizeof(基本类型)*数组元素个数 如上例:= sizeof(int)*5 第i个元素的地址=第1个元素的地址+i*sizeof(基本类型)
类型说明符 数组名[常量表达式]={值,值……值}; 其中在{ }中的各数据值即为各元素的初值,各值之间用逗号 间隔。 例如:
int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0;a[1]=1...a[9]=9;
整理课件
C语言对数组的初始化赋值还有以下几点规定:
有 5个元素。但是其下标从0开始计算。因此5个元素分别为
a[0],a[1],a[2],a[3],a[4]。
不能在方括号中用变量来表示元素的个数, 但是可以是符
号常数或常量表达式。
例如:
#define FD 5
main( )
{ int a[3+2],b[7+FD];
……
}是合法的。
但是下述说明方式是错误的。
for (i=0; i<=9;i++) a[i]=i;
for(i=9;i>=0; i--) printf("%d ",a[i]);
printf("\n"); return 0; }
使a[0]~a[9]的值为0~9 先输出a[9],最后输出a[0]
整理课件
一维数组的初始化
数组初始化赋值是指在数组定义时给数组元素赋予初值。 初始化赋值的一般形式为:
for(i=0;i<1;i++) if (a[i]>a[i+1]) { ……}
中国矿业大学(北京)《C语言程序设计》课件第7章指针与数组
![中国矿业大学(北京)《C语言程序设计》课件第7章指针与数组](https://img.taocdn.com/s3/m/970103fb3086bceb19e8b8f67c1cfad6195fe9a3.png)
a[1] a[2] a[3]
mmaainn(()) {{iinntt aa[[1100] ],,ii;;
ppuuttss((““pplleeaassee iinnppuutt %%dd ssccoorree::””,,N1)0;);
ffoorr ((ii==00;;i<i1<01;0i;++i+) +) ssccaannff(“(%"%d”d,"a?,+i&a[)i;]);
main()
{
int i = 0;
printf("%c%s\n",*a, b + 1);
while (putchar (*(a + i)))
{ i++;
Program
}
printf("i = %d\n",i);
PROGRAM
while ( -- i)
{ putchar (*(b + i));
i=7
} printf("\n%s\n", &b[3]);
1,2,3,3,2,3,4,4
20
读程序-3
#include <stdio.h>
char b[] = "program";
char *a = “PROGRAM”;
/*定义一个指针变量指向字符串,与上边定义的区别是:前者是先申请内存空间, 后存入字符串,而后者是先将字符串存入在内存的某个地方,然后再用a指向 该字符串所在内存的开始位置。另外。b是常量,a是变量*/
–指针变量指向哪儿?
–所指向的变量里存储的数据是多少?
C语言编程课件数组
![C语言编程课件数组](https://img.taocdn.com/s3/m/7459f6f9700abb68a982fb64.png)
四、二维数组的初始化(按行存放) 1、按存放顺序赋值 如:int x[2][3]={1,2,3,4,5,6}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=3 x[1][0]=4,x[1][1]=5,x[1][2]=6 2、按行赋值 如:int x[2][3]={{1,2,3},{4,5,6}}; 结果同上。 3、部分赋值 如:static int x[2][3]={1,2,4}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=4 x[1][0]=0,x[1][1]=0,x[1][2]=0 如:static int x[2][3]={{1,2},{4}}; 结果为:x[0][0]=1,x[0][1]=2,x[0][2]=0 x[1][0]=4,x[1][1]=0,x[1][2]=0
3、若对全部数组元素赋初值时,可以不指定数组长度。 如:int c[]={1,2,3,4,5}; 自动定义c数组长度为5 注意:若被定义数组长度与提供初值的个数不相同, 则数组长度不能省略。 如:int a[10]={1,2,3,4};
#include <stdio.h> void main() {int a[5]={1,2,3,4,5}; int b[5]={1,2,3}; int c[ ]={1,2,3,4,5}; static int d[5]; int e[5]; int i; for(i=0;i<5;i++)printf(“%d”,a[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,b[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,c[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,d[i]);printf(“\n”); for(i=0;i<5;i++)printf(“%d”,e[i]);printf(“\n”); }
c语言复习题及答案第七章数组
![c语言复习题及答案第七章数组](https://img.taocdn.com/s3/m/9d0cddc701f69e31433294c4.png)
第七章数组(8学时)学习目的与要求:1、 重点掌握一维数组的定义和引用;2、 基本掌握二维数组的定义和引用;3、 重点掌握字符型数组的定义与引用;4、 能正确使用字符串处理函数;5、 学会使用数组解决实际问题。
重点:1、 一维数组的定义与引用;2、 二维数组的定义与引用;3、 字符数组的定义与引用;第1讲知识归纳:1、一维数组的定义:类型说明符数组名[常量表达式];(1) (1)数组名后必须用方括弧[],用其他括弧均错误 ;(2) 方括弧中的常量表达式表示数组的元素个数;(3) 方括弧中的常量表达式,必须是能计算出具体数值,且不改变的常量,不能是变量;二、填空题1、下面fun 函数的功能是将形参 x 的值转换成二进制数,所得二进制数的每一位数放在一维数组中返回,二进制数的最低位放在下标为0的元素中,其它依此类推。
请填空。
fun(int x,int b[]){ int k=0,r;do{ r=x% 2;b[k++]=r;x/= 2j } while(x); }( 1996 年 4 月) 2 22、以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相2、一维数组的引用:数组名[下标r ■」 \ for ( i =0 ; i<7 ; i printf((2)将整个字符串一次输入输出,用格式符 如^ chaLG1f10]; scanf (“ %s ” , c1); int num[N];(2003 年 9 月)25、有以下程序main (){ char a[ ]={ ‘a ' , ‘b ' , ‘c ' , ‘d ',i=sizeof(a); j=strle n( a);printf( “%d,%d b ” i,j);} 程序运行后的输出结果是()。
A ) 9,9B )8,9(2002 年 9 月) 21、C 22、C 23、D 24、B 25、D “ %c , c1[ i ]); %s ; 100]; D) int N=100; e ' , ‘f ' , ‘g ' , ‘h ' , ‘ 0' }; int i,j; C ) 1, 8 D ) 9, 8同字符的ASCII码之差。
C语言7数组课件教程
![C语言7数组课件教程](https://img.taocdn.com/s3/m/f9f399230722192e4536f6ec.png)
a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
13
C 程序设计
第7章 数组
§遍历所有二维数组元素a[n][m] for(i=0;i<n;i++) for(j=0; j<m; j++) {
printf(“%d”,a[i][j]); }
14
C 程序设计
6
a[0]1例[0] ai[n0t]0a[[12]][a3[0]=0][{2{]1a,2[1}4],{[04]}}a;[15][1] a[10][2]
a[0111][0] a[0222][1] a[3034][2] a[4140][0] a[5150][1] a[6100][2]
aaa[[[000]]][[[1000]]] aaa[[[000]]][[2[111]]] aaa[[[000]]][0[[222]]] aaa[[[111]]][4[[000]]] aaa[[[111]]][0[[111]]] aaa[[[111]]]0[[[222]]]
1
3
5
7
a[1] a[210]0[08] a2[10]1[01] a2[10]1[22] a2[10]1[43] 9 11 13 15
a[2] a[2210]71[06] a2[210]91[81] a2[220]12[02] a2[220]32[23]
每个元素a[i]由包含4个元素 的一维数组组成
输出:max和row,colum
colum = j;
}
printf("max=%d,row=%d, \
colum=%d\n",max,row,colum); 16
《C语言程序设计》第7章数组
![《C语言程序设计》第7章数组](https://img.taocdn.com/s3/m/e5e9c63d102de2bd970588ab.png)
{temp=data[j]; data[j]=data[j+1]; data[j+1]=temp; }; printf("\nthe result of sort:\n"); /*输出排序后的数据*/ for(i=0; i<NUM; i++) printf("%d ",data[i]);
}
7.2 2维数组的定义和引用
1 0 0 0
int a[3][4]={{1},{0,6}, {0,0,11}}; 0 6 0 0
0 0 11 0
int a[3][4]={{1},{5,6}};
1 0 0 0 5 6 0 0 0 0 0 0
int a[3][4]={{1},{}, {9}};
1 0 0 0 0 0 0 0 9 0 0 0
(1)首先将相邻的A[1]与A[2]进行比较,如果 A[2]的值小于A[1]的值,则交换两者的位置, 使较小的下沉,较大的上浮;接着比较A[2]与 A[3],同样使小的下沉,大的上浮。依此类推, 直到比较完A[n-1]和A[n]后,A[n]为具有最大排 序码(数值)的元素,称第一趟排序结束。
(2)然后在A[1]~A[n-1]区间内,进行第二趟排
7.3.2 字符数组的初始化
字符数组的初始化,可以通过为每个数 组元素指定初值字符来实现。
如:
char c[10]={‘I’,’□’,’a’,’m’,’□’,’h’,’a’,’p’,’p’,’y’};
char c2[ ]={‘c’,’h’,’i’,’n’,’a’}; char d[2][3]={{‘□’,’*’,’□’},{‘*’,’□’,’*’}};
x x[0] —— x[0][0] x[0][1] x[0][2] x[0][3] x[1] —— x[1][0] x[1][1] x[1][2] x[1][3] x[2] —— x[2][0] x[2][1] x[2][2] x[2][3]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:已知一个升序排列的数组有十个数据,输入一个数,查
找它是否存在。若存在打印该数及其所在位置,否则,输出
“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。