C++一维数组的排序

合集下载

C语言第六章_数组_2

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

c语言-数组

c语言-数组

例1.3 选择排序
• 对一组数据{88, 84, 83, 87, 61}按从小到大
的顺序排序后输出。 61 83
i=1 k=2
84
87
88
j=4
i != k:交换a[i]与a[k]
西北农林科技大学
例1.3 选择排序
• 对一组数据{88, 84, 83, 87, 61}按从小到大
的顺序排序后输出。 61 83 84
83
87
61
84 < 88
西北农林科技大学
例1.3 选择排序
• 对一组数据{88, 84, 83, 87, 61}按从小到大
的顺序排序后输出。 88
i=0
84
83
j=2 k=2
87
61
83 < 84
西北农林科技大学
例1.3 选择排序
• 对一组数据{88, 84, 83, 87, 61}按从小到大
• for (i=0; i<10; i++) printf(“%d”, a[i]);
若数组下标<0或>=n,将出现数组下标越界的问题, 此类问题编译器可能不会给出错误提示。
西北农林科技大学
1.3 数组下标
• 为便于修改,采用宏(define)预先定义数组
元素个数。
• #define N 9 • int a[N] = {3,4,1,4,5,6,8,0,2};
的顺序排序后输出。 88
i=0 k=2
84
83
87
j=3
61
87 > 83:k不变
西北农林科技大学
例1.3 选择排序
• 对一组数据{88, 84, 83, 87, 61}按从小到大

《c语言教学资料》4数组

《c语言教学资料》4数组
部分初始化
如果只对部分元素进行初始化,则未初始化的元素将自动赋值为0。例如,`int a[3][4] = {{1},{2}}`,则只有第一行和第二行的第一列被初始化,其余元素为0。
初始化列表
多维数组的初始化
多维数组的引用
引用方式
多维数组的引用方式与一维数组类似,使用索引来访问元素。例如,`a[i][j]`表示第i行第j列的元素。
二维数组在各种算法和数据结构中都有广泛的应用,例如矩阵运算、动态规划等。
详细描述
二维数组可以用于实现各种算法和数据结构,例如矩阵运算、动态规划等。在矩阵运算中,二维数组可以方便地存储和操作矩阵数据。在动态规划中,二维数组可以用于存储子问题的解,以便递归地求解更大规模的问题。
二维数组的应用
04
CHAPTER
动态规划
多维数组的应用
05
CHAPTER
字符数组与字符串
字符数组的定义与声明
了解字符数组的基本定义和声明方式
总结词
字符数组是用于存储字符序列的数据结构,可以通过指定数组大小来声明一个字符数组。例如,char arr[100]表示声明一个能够存储100个字符的字符数组。
详细描述
掌握字符串在C语言中的表示方法
详细描述
在C语言中,二维数组是通过定义一个数组的数组来实现的。通常使用两个方括号[]来声明二维数组,例如int a[3][4]表示一个有3行4列的整型二维数组。
二维数组的定义与声明
二维数组的初始化可以通过多种方式进行,包括分别初始化每个元素和按行初始化。
总结词
在声明二维数组时,可以直接对每个元素进行初始化,例如int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}}。也可以按行对数组进行初始化,例如int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}},这种方式会自动将每行的元素分别赋给对应位置的元素。

C语言上机题参考答案

C语言上机题参考答案
}
20、设有1<=n<=500个人围坐一圈并按顺时针方向从1到n编号,从第s个人开始进
行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始1到m的
报数,如此进行下去直到所有的人都出圈为止。
要求按出圈次序输出编号。
输入格式如下:
n s m
示例:
输入:
6 1 3
输出:
3 6 4 2 5 1
scanf("%d",&n);
for(i=1;i<=n;i++)
{for(j=1;j<=i;j++)
printf("*");
printf("\n");
}
}
8、编程输出n行图形(n值通过键盘输入),
假设n=5,则图形如下:
*
**
***
****
*****
假设n=6,则图形如下:
*
**
***
****
*****
if(x>1) y=6*x+5;
printf("%d",y);
}
三、循环图形
7、编程输出n行图形(n值通过键盘输入)
假设n=5,则图形如下:
*
**
***
****
*****
假设n=6,则图形如下:
*
**
***
****
*****
******
#include<stdio.h>
void main()
{int i,j,n;
printf("%.2f\n",(a+b+c)/3.0);

C语言一维数组

C语言一维数组

6
例题巩固
在C 语言中,引用数组元素时,其数组下标的 数据类型允许是 。 A)整型常量 B)整型表达式 C)整型常量或整型表达式 D)任何类型的表达式
C语言中,数组名代表 A.数组全部元素的值 B.数组首地址 C.数组第一个元素的值 D.数组元素的个数
合法的数组定义是 A.int a[ ]=”string”; B.int a[5]={0,1,2,3,4,5}; C.char a=”string”; D.char a[ ]={0,1,2,3,4,5};
以下程序的输出结果是________。 main( ) { int i,p=0,a[10]={1,5,9,0,-3,8,7,0,1,2}; for(i=1;i<10;i++) if(a[i]<a[p]) p=i; printf("%d,%d\n",a[p],p); } A) -3,4 B) 0,1 C) 9,2 D) 2,9
35
35
int a[5]
a[0] a[1] 第一轮 21 13 13 13 21 21
a[2] 90 90 90
a[3] a[4] 32 32 32 -1 -1 -1
13 13
21 21
32 32
90 -1
-1 90
第一轮的结果: 将最大的数移到了最后一个位置(n-1)。
int a[5]
a[0] a[1]
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] 0 1 2 3 4 5 6 7 8 a[9] 9
数组a
max = a[0];
32
32
定义
main()
{ int i, max, x[10];

C语言 第六章 数组

C语言 第六章 数组
2.
6
6.1 排序问题
3. 初始化
类型名 数组名[数组长度]={初值表}; 初值表中依次放着数组元素的初值。例如: int a[10]={1,2,3,4,5,6,7,8,9,10}; 静态存储的数组如果没有初始化,系统自动给所有的数组元素赋0。 即 static int b[5]; 等价于 static int b[5]={0,0,0,0,0}; 初始化也可以只针对部分元素,如 static int b[5]={1,2,3}; 只对数组b的前3个元素赋初值,其余元素的初值为0。又如 int f[20]={0,1}; 对数组f的前两个元素赋初值,其余元素的值 不确定。
18
6.2 矩阵中最大值的位置
4. 使用二维数组编程
例7:定义一个3*2的二维数组a,数组元素的值由下式给 出,按矩阵的形式输出a。a[i][j]=i+j(0≤i ≤2, 0≤j ≤1), 见文件p131ex7-6.cpp
i
j
第1次 第2次 第3次 第4次 第5次
第6次
0 0 1 1 2
2
0 1 0 1 0
9
6.1 排序问题
4. 使用一维数组编程
例4:输入一个正整数n(1<n≤10), 再输入n个整数,将它们存入 数组a中。 ① 输出最小值和它所对应的下标。 ② 将最小值与第一个数交换,输 出交换后的n个数。 数组的长度在定义时必须确定, 如果无法确定需要处理的数据 数量,至少也要估计其上限, 并将该上限值作为数组长度。 因为n ≤10,数组长度就取上 限10。此外,如果用变量 index记录最小值对应的下标, 则最小值就是a[index]。 见p124ex7-4.cpp
8
6.1 排序问题
4. 使用一维数组编程

C语言 数组

C语言 数组
} for(i=0;i<N;i++){ //计算每门课的平均分
sAverage[i]=0.0; for(j=0;j<M;j++)
sAverage[i]+=score[j][i]; sAverage[i]=sAverage[i]/M; }
C语言程序设计
二维数组的初始化
第4章 数组
(1)按行对二维数组进行初始化: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
C语言程序设计
一维数组的定义
第4章 数组
➢ 要想使用一维数组,必须对一维数组进行定义。定义时,
需要说明两点: (1)数组中元素的类型; (2)数组中元素的个数。
类型标识符 数组名[整型常量表达式];
int x[10]; char name[20]; float score[20];
//定义一个包含10个整数的数组x //定义一个包含20个字符的数组name //定义一个包含20个浮点数的数组score
int arr[Num]={10,8,56,45,31,49,47,50,89,100}; printf("请输入要查找的数据: "); scanf("%d",&a); for(i=0;i<Num;i++){
if (arr[i]==a){ printf("元素%d在数组中的位置是:%d\n", a, i+1); break;
#define N 20 int a[N]={1,1}; //用一维数组表示Fibonacci数列,并对其赋初值 int i, sum=0; for(i=2;i<N;i++)

C语言 排序学生成绩

C语言 排序学生成绩

4.1.3 一维数组
任务1 输入/输出多个学生一门 任务 输入 输出多个学生一门 课程的成绩
练习:一个班50位同学参加了一次C语言 程序设计考试,现要输入全班同学的成 绩,并按逆序输出。
任务2 任务 排序学生成绩
任务1中已经输入了50个同学的成 任务1中已经输入了50个同学的成 50 绩到数组中,现在需要确定如何对学 绩到数组中, 生成绩从低到高进行排序。 生成绩从低到高进行排序。
初始化后: 1 4 2 5 3 6
任务3 任务 处理多位学生多门课程的成绩
4.3.3 二维数组的初始化
(2)按数组排列的顺序初始化
Example
int a[2][3]={1,2,3,4,5,6};
初始化后: 1 4 2 5 3 6
任务3 任务 处理多位学生多门课程的成绩
4.3.3 二维数组的初始化
0 1 2
1 2 3
2 3 4
3 4 5
任务3 任务 处理多位学生多门课程的成绩
4.3.3 二维数组的初始化
二维数组的输入输出
Example
int b[3][4], i, j ; for ( i =0 ; i<3 ; i++) for ( j =0 ; j<4 ; j++) scanf(“%d”, &b[i][j]) ; for ( i =0 ; i<3 ; i++) for ( j =0 ; j<4 ; j++) printf(“%5d”, b[i][j] ) ;
数组名[常量表达式];
数组元素 的数据类型
遵循C语言 标识符规则
例如: a[5]; 例如:int a[5]

6.C语言第四章数组(1)

6.C语言第四章数组(1)

4.1.4 一维数组程序举例
【例4-2】 从键盘输入10个整数,求出它们的平均值 及比平均值大的数。 #include<stdio.h> void main( ) { int i , x[10]; float sum=0,aver=0.0; for (i=0;i<10;i++) {scanf("%d",&x[i]); sum=sum+x[i]; } aver=sum/10.0;
4.2.4 二维数组程序举例
#include<stdio.h> printf("\n array b:\n"); void main( ) for(i=0;i<3;i++) { int a[3][4], b[3]; printf("%5d",b[i]); int i,j,max; printf("\n"); for(i=0;i<3;i++) } for(j=0;j<4;j++) 运行结果: scanf("%d",&a[i][j]); 25 88 69 72↙ for(i=0;i<3;i++) 33 29 78 96↙ { b[i]=a[i][0]; 9 54 48 90↙ for(j=1;j<4;j++) array b: if(a[i][j]>b[i]) 88 96 90 b[i]=a[i][j]; }
4.2.1 二维数组的定义
例如,可以把x看作是一个一维数组,它有3 个元素:x[0]、x[1]、x[2];而x[0]、x[1]、x[2] 又可以看作是三个一维数组的名字。其中,x[0] 由x[0][0]、x[0][1]、x[0][2]三个元素组成;x[1] 由x[1][0]、x[1][1]、x[1][2]三个元素组成;x[2] 由x[2][0]、x[2][1]、x[2][2]三个元素组成。即: x[0]: x[0][0] x[0][1] x[0][2] x x[1]: x[1][0] x[1][1] x[1][2] x[2]: x[2][0] x[2][1] x[2][2] 注意,二维数组和一维数组一样,数组元素 的下标从0开始,因此x的下标最大的元素是 x[2][2],而不是x[3][3]。

c语言复习题(49题)

c语言复习题(49题)

以下作业编程练习,每个主题至少选择4道题作为作业题(各主题中所列题目不足4题的按实际数量选做)。

每次作业计2分,作为平时成绩。

另外,此练习题作为C 语言上机考试的考题来源之一(共49题)。

一、 顺序结构程序设计========================================1 已知三角形的三边长为a ,b ,c ,计算三角形面积的公式为: area = ))()((c s b s a s s ---,s =)(21c b a ++ 要求编写程序,从键盘输入a ,b ,c 的值,计算并输出三角形的面积。

2 编程从键盘输入圆的半径r ,计算并输出圆的周长和面积。

二、 选择结构程序设计==========================================1 从键盘任意输入一个年号,判断它是否是闰年。

若是闰年,输出“Yes ”,否则输出“No ”。

已知符合下列条件之一者是闰年:能被4整除,但不能被100整除。

能被400整除。

2 通过键盘输入一个字符,判断该字符是数字字符、大写字母、小写字母、空格还是其他字符。

3 华氏和摄氏温度的转换公式为C =5/9×(F -32)。

其中,C 表示摄氏温度,F 表示华氏温度。

要求:华氏0℉~300℉,每隔20℉输出一个华氏温度对应的摄氏温度值。

4 编程判断输入整数的正负性和奇偶性。

5 编程计算分段函数e 1exx y -⎧⎪=⎨⎪-⎩ 000x x x >=< 输入x ,打印出y 值。

流程图如图1-2所示。

6 输入三角形的三条边a ,b ,c ,判断它们能否构成三角形。

若能构成三角形,指出是何种三角形(等腰三角形、直角三角形、一般三角形)。

7 在屏幕上显示一张如下所示的时间表:*****Time*****1 morning2 afternoon3 nightPlease enter your choice:操作人员根据提示进行选择,程序根据输入的时间序号显示相应的问候信息,选择1时显示"Good morning", 选择2时显示"Good afternoon", 选择3时显示"Good night",对于其他选择显示"Selection error!",用switch 语句编程实现。

C语言课堂教学大赛课件

C语言课堂教学大赛课件
第1趟,通过9次两两比较,最大值9放到a[9]上。
instructional objectives
2.升序算法演示
第2趟,a[0]与a[1]比较,a[0]>a[1], a[0]与a[1]值交换;a[1]与a[2]比较, a[1]<a[2],a[1]与a[2]不交换;a[2]与 a[3]比较,a[2]<a[3],a[2]与a[3]不交换; a[3]与a[4]比较,a[3]<a[4],a[3]与a[4] 值不交换;a[4]与a[5]比较,a[4]> a[5],a[4]与a[5]值交换;a[5]与a[6]比 较,a[5]>a[6],a[5]与a[6]值交换; a[6]与a[7]比较,a[6]>a[7],a[6]与a[7] 值交换;a[7]与a[8]比较,a[7]>a[8], a[7]与a[8]值交换;
C语言程序设计
冒泡法对一维数组排序
(教学内容1课时)
instructional objectives
知识目标
1.掌握冒泡法排序原理, 能读懂冒泡排序的算法。
2.掌握冒泡法排序的基 本过程,理解冒泡法排 序的C语言程序。
能力目标
1.学会使用冒泡排序 思想设计解决简单排 序问题的算法。
2.进一步理解程序设 计的基本方法,体会 程序设计在现实中的 作用。
instructional objectives
2.升序算法演示
第1趟,a[0]与a[1]比较,a[0]>a[1], a[0]与a[1]值交换;a[1]与a[2]比较, a[1]>a[2],a[1]与a[2]值交换;a[2]与 a[3]比较,a[2]>a[3],a[2]与a[3]值交换; a[3]与a[4]比较,a[3]<a[4],a[3]与a[4] 值不交换;a[4]与a[5]比较,a[4]> a[5],a[4]与a[5]值交换;a[5]与a[6]比 较,a[5]>a[6],a[5]与a[6]值交换; a[6]与a[7]比较,a[6]>a[7],a[6]与a[7] 值交换;a[7]与a[8]比较,a[7]>a[8], a[7]与a[8]值交换;a[8]与a[9]比较, a[8]>a[9],a[8]与a[9]值交换;

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++第八课一维数组课件

a[i]=s % 10; g=s / 10;
4 5 7 1 10 a
}
C++第八课一维数组
输出部分: i=1;
while (a[i]==0 && i<maxn) i++; //防止和是0 for (j=i; j<=maxn;j++) cout<<a[j];
C++第八课一维数组
高精度*单精度
输入时的第一个数用数组存 放,而第二个数直接用一个 整型变量存放。
[1] [2] [97] [98] [99] [100]
a0 0
6789
乘法过程 g=0; {进率初始为0}
for(i=maxn; i>=1;i--) { s=a[i]*b+g;
a[i]=s % 10; g=s /10;
}
C++第八课一维数组
高精度减法
a数组存放被减数,b数组存放减数,结果仍用a数组存放。 for (i=maxn; i>=1;i--) {
第(3)种情况: 在第i位插入X 方法:从后面第n+1位到第i+1位,取前面一位的值。
for (j=n+1;j>=i+1;j--) a[j]=a[j-1]; for (i=1;i<=11;i++) cout<<a[i]<<‘ ‘;
C++第八课一维数组
约瑟夫问题:设有N个人依次围成一圈, 从第1个人起开始报数, 报到M的人出列,下一个人再从1起报数,报到M的人出列, 下一个人 再从1起报数,如此继续, 直到所有人均出列为止. 设N个人的编号 为1,2,...,N, 打印出出列的次序。例如:输入:N=6,M=3,则输

C语言——数组

C语言——数组

活动3:字符数组
字符串与字符数组的区别 字符串也是字符数组,只是要求以’\0’作为结束符。 如: char s[80]={ ‘A’,’B’,’C’,’D’,’E’,’\0’}; 或: char s[80]= “ABCDE”; A
s[0]
B
s[1]
C
s[2]
D
s[3]
E
s[4]
\0
s[5]
……
活动3:字符数组
模块6:数组
活动1:一维数组
1、一维数组的定义及引用 定义方式: 数组名[常量表达式] 类型说明符 数组名[常量表达式]
活动1:一维数组
如:int a[5]; 定义一个具有5个元素 的数组,其下标从0 到4,如右图示。
数组a a[4] a[3] a[2] a[1] a[0]
活动1:一维数组
注意问题: 1、数组名规则与变量名相同; 2、常量表达式中不能包含变量; 3、下标从0开始。
数组a
4
a[0]
8
15
3
10
6
a[1] a[2] a[3] a[4] a[5]
活动1:一维数组
应用举例: 例3:冒泡排序法。 阅教材P101例 6.3
a[3]与a[4]交换 数组a
4
a[0]
8
3
15
10
6
ห้องสมุดไป่ตู้
a[1] a[2] a[3] a[4] a[5]
a[3]与a[4]交换 数组a
4
a[0]
8
3
10
[0] a[0] a[1] [1] [2]
2 6
3 8
5 9
活动2:二维数组
应用举例:教材P106例6.5

CC++语言程序设计案例教程:数组

CC++语言程序设计案例教程:数组
数组是一种构造数据类型,主要是将相同类型的数据集 合起来,用一个名称来代表,案例一中的10个成绩可以 组织成一个数组,用一个数组名代表。数组中的每一个 数据个体称为数组元素,案例一中的每一个成绩可以被 认为是一个数组元素(又称下标变量),它们用同一名字 、不同下标来区分。数组的使用和其他变量的使用一样 ,也需要遵循“先定义,后使用”的原则。
/*表示下标为8的数组元素,即第9
(2) 在引用数组元素时,下标不能越界,否则,可能导致 不可预料的错误。例如在案例一中,数组score的下标 范围是0至9,所以score[-1]和score[10]都属于错误的 引用。
2023/10/7
4.1.4 一维数组的初始化
11
定义后的数组每个数组元素的值都是随机的,需要对每 个数组元素赋值后才能使用。在定义数组的同时可以给 数组元素赋初值,这种操作称为数组的初始化。数组初 始化时可以给全部数组元素都赋初值,也可以只给部分 数组元素赋初值。
2023/10/7
4.1.3 一维数组的引用
9
数组在定义之后就可以使用了,但是数组不能作为一个整体参加各 种运算,只能通过每个数组元素逐个参与运算来完成数组整体的处 理,程序运行时需要引用各个数组元素。
一维数组引用格式: 数组名[下标表达式] 格式说明: (1) 数组名:要引用的数组名,必须是前期已经定义过的数组。 (2) 下标表达式:下标是每个数组元素的编号,对于长度为n的数组
,每个数组元素的下标从头至尾依次是0, 1, 2, 3,…,n-1,即第一 个元素的下标是0,最后一个元素的下标是n-1。下标表达式可以是 任何非负数整型表达式,包括整型常量、整型变量、含运算符的整 型表达式,以及返回值为整数的函数调用,下标为小数时,编译系 统将自动取整。案例一中对score数组的引用如图4.1所示。

C语言第七章

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?

《C语言程序设计》课件 第五章 数组

《C语言程序设计》课件 第五章 数组
若二维数组名a代表的起始地址为5948,则它的三个元 素a[0]、a[1]和a[2]分别对应了起始地址5948、5956和 5964。
a(5948)
a[2](5964) a[1](5956) a[0](5948) 图 5-10
a[2][1] (5968) a[2][0] (5964) a[1][1] (5960) a[1][0] (5956) a[0][1] (5952) a[0][0](5948)
return 0;
}
5.1.4一维数组程序举例
3.用选择法对输入的n个学生的单科成绩进行 从小到大排序。
编程思路: 直接选择排序的过程是:首先在所有数据中找出值 最小(最大)的数据,把它与第1个数据交换,然后 在其余的数据中找出值最小(最大)的数据,与第2 个数据交换......依次类推,这样,n个数据经过n-1轮 交换后可得到有序结果。
printf("%3d ",a[i]); printf("\n"); return 0; }
5.1.3 一维数组的初始化 5.1.3 一维数组的初始化
数组初始化常见的格式:
1.用大括号括起来的常量表达式列表,常量表达式 之间用逗号进行分隔: int a[10]={1,2,3,4,5,6,7,8,9,10};
注意:
不要将a[i][j]写成a[i,j],否则编译系统会将逗号分隔 符作为逗号运算符处理,即将a[i,j]视为a[j]。
5.2.2二维数组元素的引用
可以将二维数组看成是特殊的一维数组。
例如,二维数组a[3][2]可以看成是长度为3的一维数组, 所含的3个数组元素分别为:a[0]、a[1]、a[2]
for(i=0;i<3;i++) for(j=0;j<5;j++)

C语言 数组1

C语言 数组1

程序编写过程: #include <stdio.h> main( ) { int i, x, a[5],flag=0 ; for ( i=0; i<5; i++ )输入数据, 赋给数组元素 scanf("%4d",a[i]); printf("Input x:"); scanf("%d",&x); 输入需查找的数 printf("\n"); for( i=0; i<5; i++ ) 逐个查找数 if ( x==a[i] ) {printf("下标值=%d\n", i); flag=1; 若找到,输出下标 break;}
fib[0]=fib[1]=1
fib 1 1 2 3 5 8 13 21 34 55
+ + + + + + + +
fib[i]=fib[i-1]+ fib[i-2]
程序编写过程: #include <stdio.h> main( ) { int i;
运行结果:
1 1 2 3 5 8 13 21 32 55
第7章

数组


常用于处理大批量数据 数据特点:存在内在联系 数组——具有相同数据类型的变量集合 这些变量都有相同名字,但下标不同 称这些变量为数组元素 数组元素在内存中连续存放 只有一个下标——一维数组 有两个下标——二维数组
本章将介绍的内容

一维数组


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

第三节数值型一维数组的应用一、数值型一维数组在递推中的应用【例5-3】斐波拉契数列:前两项为0和1,从第三项开始,各项均为前相邻两项之和:0,1,1,2,3,5,8,11,19,……。

写C程序,输出该数列前N项。

【简要分析】显然这是一个典型的递推问题,结合数组,从第三个数开始,其递推公式是:x[i]=x[i-1]+x[i-2],其中i=2,3, …,N-1。

利用循环结构,用N-S流程图描述的程序逻辑如图5-2所示。

参考源代码:/* 例5-3,5-3.cpp */#include <stdlib.h>#define N 20void main(){long i, x[N];x[0] = x[1] = 0; /* 赋初值*/for ( i = 2; i < N; i++ ) /* 尚剩18项*/x[i] = x[i - 1] + x[i - 2]; /* 产生各项*/for ( i = 0; i < N; i++ ) /* 输出数列*/cout<< "\t" << x[i];system(“pause”);}【思考验证】如果将x数组定义为整型int,程序是否能正常运行?【模仿训练】某数列前三项为0、1、1,以后各项均为前相邻三项之和,输出该数列前N项。

二、排序【例5-4】键盘输入N个战士的身高,将其升序排列。

【简要分析】排序是数组的经典应用,现实生活中用得太多,请读者务必掌握。

排序的方法很多,《数据结构》中有详细介绍,请读者自己查阅,本例用比较法。

具体实现逻辑是:将数组元素a[i](i=0,1,2…,N-2)与它后边的每一个元素a[j](j=i+1,…,N-1)逐个比较,凡有a[j]<a[i]者则对调之(以保证a[i]比任何a[j]都小)。

重复这个过程N-1次,最后a数组中元素便被升序排列。

用N-S图描述的程序逻辑如图5-3所示。

参考源代码:/* 例5-4,5-4_1.cpp */#include <stdlib.h>#define N 10void main(){int a[N], t, i, j;for ( i = 0; i < N; i++ ) /* 本循环输入N个原始数据*/cin>> a[i];for ( i = 0; i < N -1; i++ ) /* 本循环完成排序*/for ( j = i + 1; j < N; j++ ) /* x[i]与它后边所有元素逐一比较,大则交换*/ if ( a[j] < a[i] ){ temp = a[j]; a[j] = a[i]; a[i] = temp; }for ( i = 0; i < N; i++ ) /* 输出排序后的数组*/cout<< a[i];system(“pause”);}【思考验证】怎样修改本程序以实现降序排列?还有一种排序方法称为冒泡法。

这种方法可形象描述为:使较小的值象水中的空气泡一样逐渐“上浮”到数组的顶部,而较大的值则逐渐“下沉”到数组的底部。

这种技术要排序好几轮,每轮都要比较连续的数组元素对。

如果某一对元素的值本身是升序排的,那就保持原样,否则交换其值。

排序过程的N-S流程如图5-4所示。

参考源代码:/* 例5-4,5-4_2.cpp */ #include <stdlib.h>#define N 10void main(){int a[N], t, i, j;for ( i = 0; i < N; i++ ) /* 输入N个原始数据*/cin>> a[i];for ( i = 0; i < N -1; i++ ) /* 本循环完成排序*/for ( j = 0; j < N - i; j++ ) /* x[i]与它后边所有元素逐一比较,大则交换*/if ( a[j] > a[j + 1] ){ temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; }for ( i = 0; i < N; i++ ) /* 输出排序后的数组*/cout<< " \t" << a[i];system(“pause”);}三、定位与插入【例5-5】输入一个数,插入到某升序一维数组中,使插入后的数组仍然升序。

如设原数组x[6]:-123,-2,2,15,23,45。

假设待插入的新数为 7 ,则该数应插入到数2与15之间,数组长度增加1。

插入后的数列为x[7]:-123,-2,2,7,15,23,45。

【简要分析】先将a置于数组最后,然后将a与它前边的元素逐一比较,如果a小于某元素x[i],则后移x[i]一个位置,否则将a置于x[i+1]的位置,结束。

x[0] x[1] x[2] x[3] x[4] x[5] x[6]-123, -2, 2, 15, 23, 45, 7 /* 设x[6]=7 */-123, -2, 2, 15, 23, 45, 45 /* x[5]后移一个位置 */-123, -2, 2, 15, 23, 23, 45 /* x[4]后移一个位置 */-123, -2, 2, 15, 15, 23, 45 /* x[3]后移一个位置 */-123, -2, 2, 7, 23, 45, 65 /* a>x[2],将a赋给x[3] */用自然语言描述的程序逻辑为:①①设置环境,定义变量。

②②输出原始数组x和待插入的新元素a。

③③先假设新数a是最大的,作为数组的最后一个元素x[N-1]。

④④若a<x[i](i=N-2,N-3,N-4,…,0),则后移x[i]:x[i]→x[i+1],转⑤;否则a到位:a→x[i+1],转⑥。

⑤⑤i自减1,转④。

⑥⑥输出新x数组,结束。

参考源代码:/* 例5-5,5-5.cpp */#include <stdlib.h>#define N 7void main(){int x[N] = {-123, -2, 2, 15, 23, 45}, i, k, a;for ( i = 0; i < N - 1; i++ )cout<< "\t" << x[i];cout<< "\n请输入待插入的新数a:");cin>> a;x[N - 1] = a;for ( i = N - 2; i >= 0; i-- )if ( a < x[i] )x[i + 1] = x[i];else{ x[i + 1] = a; break; }for ( i = 0; i < N; i++ )cout<< "\t" << x[i];system(“pause”);}【思考验证】本例难点有二,其一定位该在什么位置查找;其二插入前怎样腾出一个空位(将指定位置开始的各元素依次后移)。

这个算法与排队类似:设有10名同学已按身高排成一排,现要插入一名新同学进去,办法就是先找好位置,把这个位置以后的同学往后挪动一个位置,再让新同学站进去。

注意最先挪动位置的同学是最后的那个同学!下边的代码能否完成同样的工作?#include <stdlib.h>void main(){int x[11] = { -123, -2, 2, 15, 23, 45, 65, 99, 123, 344};int i, k, a;for ( i = 0; i < 10; i++ )cout<< " " << x[i]; /* 输出原数组*/cout<< "\nPlease a:";cin>> a; /* 输入待插入元素*/k = 9;for ( i = 0; i < 10; i++ )if ( a < x[i] ) { k = i; break; } /* 定位k */if ( k == 9 ) x[10] = a; /* a放在最后*/else /* a不是最后一个元素*/{for ( i = 9; i >= k; i-- )x[i+1] = x[i]; /* 从x[k]开始后移*/x[k] = a; /* a作为第k个元素*/}for ( i = 0; i < 11; i++ ) /* 输出新数组*/cout<< " " << x[i];system(“pause”);}【模仿训练】输入一个数,插入到降序一维数组中,使插入后的数组仍然降序。

四、查找与删除【例5-6】假定某数组已经存放有互不相同的正整数。

现从键盘输入一个数,要求从数组中删除与该值相等的元素,并将其后的元素逐个向前递补,并将最后一个元素置0。

输出删除后的数组。

如原数组中无此数,则输出“无此数”。

【简要分析】从数组中删除一个元素主要做两个工作:定位与移动。

定位指确定被删除元素的位置;移动指某元素被删除后,跟在它后边的元素将逐个“向前递补”。

设一标志变量flag,其作用是表示原数组中是否存在用户要删除的元素。

用N-S流程图描述的程序逻辑如图5-5所示,变量表见表5-3,。

参考源代码:/* 例5-6,5-6.cpp */#include <stdlib.h>void main(){int x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i, a, k, flag;for ( i = 0; i < 10; i++ )cout<< " " << x[i];cout<< "\n请输入要删除的数:");cin>> a;flag = 0; /* 设原数组中不包含被输入的元素*/ for ( i = 0; i < 10; i++ )if ( x[i] == a ) { k = i; flag = 1; break; }if ( flag == 0 ) /* x数组中包含a */{cout<< “\n无此数!“; exit(0);}if ( k == 9 ) x[9] = 0; /* a刚好是x的末尾元素*/else /* a不是x的末尾元素*/{for ( i = k; i < 9; i++ )x[i] = x[i + 1]; /* x各元素向前递补*/x[i] = 0; /* x最后元素置0 */}for ( i = 0; i < 10; i++ )cout<< " " << x[i];system(“pause”);}【思考验证】当要删除的数在数组中多次出现时,要求全部删除之。

相关文档
最新文档