C语言数组PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
a[i]=a[n-1-i]; a[n-1-i]=t; }
#include "stdio.h" main( ) { int a[50],t,n,i;
scanf("%d",&n); for(i=0;i<n;i++)
{ scanf("%d",&a[i]); printf("%5d",a[i]); }
printf("\n"); for(i=0;i<=(n-1)/2;i++)
for(i=0;i<N;i++)
printf("%5d",a[i]);
选择排序
}
例:5-10 用二分查找法找一个数是否在一个有序的数组中。
#include "stdio.h"
main( )
{ int n=8, key,m,left,right;
int a[]={1,3,5,7,9,15,19,24}; printf("输入待查数据:\n");
产生随机数组、逆序、排序 ➢ 对字符数组的操作:
连接、复制、比较
5.1 一维数组
一、 一维数组的定义和引用 1. 定义
整数或整型 常量表达式
类型标识符 数组名[ 数组长度 ];
int a[10]; 表示数组a共包括10个元素,分别为a[0] ~a[9]。
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
else left=m+1;
} if(left>right) printf("此数不在数组中\n");
}

例5-8 将一维数组中的n(n<=50)个数按逆序存放。
3 45 2 -6 -17 66 50
50 66 -17 -6 2 45 3
for(i=0;i<=(n-1)/2;i++) { t=a[i];
scanf("%d", &a[i]); for(j=1; j<10; j++)
if(a[j]<a[0]) { t=a[0]; a[0]=a[j]; a[j]=t; } printf("最小值是: %d\n", a[0]); }
#include <stdio.h>
main( )
作业4:
{int i,j,t, a[10], k; 求20个数中的最大值和次最大值。
int a[5]={6, 2}; int a[5]={6, 2, 0, 0, 0};
等价
⒊ 定义数组时使数组a中全部元素自动赋以0值。
static int a[5]; int a[5]={0};
等价
⒋ 对全部数组元素赋初值时,可以不指定数组长度。
int a[3]={1, 2, 3}; int a[ ]={1, 2, 3};
作业3: 将10个数(可以随机产生)中所有的偶数除以2 ,奇数乘以2.
作业4:求20个数(可以随机产生)中的最大值和次最大 值。
作业5: 30个元素,赋予从2开始的偶数,每5个求一个平 均值放到另一数组
作业6:数组为20个整数,求其中的素数。 作业7:教材97 5-6 作业8:实验指导45:6
main( ) { int i,a[10],min,max;
float average,s; for(i=0;i<=9;i++) scanf("%d",&a[i]); max=min=a[0]; s=a[0]; for(i=1;i<10;i++) { if(a[i]<min) min=a[i];
if(a[i]>max) max=a[i]; s+=a[i]; } average=s/10;
2. 一维数组的引用
只能逐个引用数组元素,而不能一次引用整个数组。 引用形式: 数组名[ 下标 ]
例5-1 数组元素的引用。
整型表达式,
main( )
从0开始。
{int i, b[10];
for (i=0; i<10; i++)
bsc[ia]n=fi(;"%d", &b[i]);
for (i=0; i1<、10如; 何i+使+)数组元素为:100~109
for(i=1;i<=30;i++)
if(ave<?) k++; 如何保存30个成绩?
数组
➢ 定义:有序数据的集合 ➢ 特点:所有元素类型相同 ➢ 要素:数组名、 下标
t
t[0] t[1]
t[9]
第5章 数 组
➢ 数组的定义和引用 ➢ 对数组元素的操作:
对调、最大值、最小值、平均值、和 ➢ 对整个数组的操作:
{ int i,j,t,a[N],k;
for(i=0;i<N;i++)
{a[i]=rand()%61+40; printf("%5d",a[i]); }
for(i=0;i<N-1;i++)
{ k=i;
for(j=i+1;j<N;j++)
if(a[j]<a[k]) k=j;
if(k!=i) {t=a[i]; a[i]=a[k]; a[k]=t;} }
三12752二维数组二维数组的定义和引用1定义类型标识符数组名第1维的长度第2维的长度可以把二维数组看作是一种特殊的一维数组2引用数组名下标下标28二二维数组的初始化int101112
第8周实验
作业1: 从键盘输入20个数到m数组,将下标为0、2、 4……的元素赋值给数组n,输出n中内容
作业2: 产生10个[50,90]上的随机整数,求其中能被5整 除的所有数的和。
引例: 输入30个学生的成绩,求高于平均成绩的人数。
#include "stdio.h"
main()
变量性质:
{ int i,x,k=0; 能保存多个数据(长度) 通过循环访问数据(有序)
float s=0,ave;
for(i=1;i<=30;i++)
{ scanf("%d",&x);
s+=x; } ave=s/30; printf("aver=%f\n",ave); }
}
例5-6 产生10个[40,100]内的随机数,并按由小 到大的顺序排序后输出。
--13627 45 32 2-6 --617 66 50 ……
for(j=1;j<10;j++) if(a[j]<a[0]) {t=a[0]; a[0]=a[j]; a[j]=t;}
for(j=2;j<10;j++) if(a[j]<a[1]) {t=a[1]; a[1]=a[j]; a[j]=t;} 执行9次
k=3
a[k] a[k] a[k]
k=4
k=0;
for(j=1;j<10;j++)
if(a[j]<a[k]) k=j;
if(k!=0)
执行9次
{t=a[0]; a[0]=a[k]; a[k]=t;}
k=1; for(j=2;j<10;j++)
for(i=0;i<9;i++) { k=i;
if(a[j]<a[k]) k=j;
用当前时间作为随机数的初始种子
#include "time.h"
#include "stdlib.h" main( ) { int i, a[10];
说明: srand函数,可以产生不同的随机数, 此函数包含在"time.h"头文件中。
srand(time(0));
for(i=0; i<10; i++)
数组元素变化较大
无法知道最小值原来的位置
➢ 方法2:
选择法
-1103 12 34 2 6 -1 10 -1103 45 63
3570 1 2 3 4 5 6 7 8 9
#include <stdio.h> main( ) {int i,j,t, a[10], k; for(i=0; i<=9; i++)
a[i]=rand()%11+5;
for(i=0; i<10; i++)
printf("%5d",a[i]);
printf("\n");
}
作业2:产生[50,90]上的随机整数,求能被5整除的数的和。 作业3:将10个数中所有的偶数除以2,奇数乘以2.
5.1.4 一维数组的简单应用
例 5-3、4 求10个学生成绩的最高分、最低分和平均分 。#include "stdio.h"
c
12 3 31 -6 0
a
12 -1 3 2 77 31 -6 0
b
2 -14 77 -1 76
#include "stdio.h" main( ) { int i,j,k=0,a[8],b[5],c[8];
for(i=0;i<=7;i++) scanf("%d",&a[i]); for(i=0;i<=4;i++) scanf("%d",&b[i]); for(i=0;i<=7;i++) {
for(j=i+1;j<10;j++)
if(k!=1)
if(a[j]<a[k]) k=j;
{t=a[1]; a[1]=a[k]; a[k]=t;} if(k!=i)
……
{t=a[i]; a[i]=a[k]; a[k]=t;} }
#define N 10
#include "stdlib.h"
main( )
for(j=0;j<=4;j++) if(a[i]= =b[ j]) break; if(j>=5) { c[k]=a[i];k++;} } for(i=0;i<k;i++) 作业p6r:in数tf(组"%为520d个",整c[数i]),; 求其中的素数。 }
补充2: 打印以下方阵: 1 2 8 3 10 2 8 3 10 1 8 3 10 1 2 3 10 1 2 8 10 1 2 8 3
等价
三、 随机函数random和rand
2. rand函数的用法: 格式: rand ( ) 说明: (1) 该函数包含在头文件"stdlib.h"中。 (2) 该函数产生0到整型最大值之间的一个随机整数。
产生[a,b]区间上任意整数的方法: rand( )%(b-a+1)+a
srand函数 (头文件time.h) srand(time(0))
for(i=0; i<=9; i++)
scanf("%d", &a[i]);
k=0;
for(j=1; j<10; j++)
if(a[j]<a[k]) k=j;
if(k!=0) { t=a[0]; a[0]=a[k]; a[k]=t; }
printf("最小值是: %d\n", a[0]);
printf("最小值的下标为: %d\n", k);
for(i=0;i<N;i++)
{ a[i]=rand()%61+40; printf("%5d",a[i]); }
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if(a[j]<a[i]) {t=a[i]; a[i]=a[j]; a[j]=t;}
for(i=0;i<N;i++)
printf("%5d",a[i]);
顺序排序
}
例5-6 产生10个[40,100]内的随机数,并用选择 排序法按由小到大的顺序排序后输出。
j=1 j=2 j=3 j=4 j=5 j=6
-137 45 2 -6 3-17 66 50 ……
k=0 a[k] a[j] a[j] a[j] a[j] a[j] a[j] k=2
……
for(i=0;i<9;i++) for(j=i+1;j<10;j++) if(a[j]<a[i]){t=a[i]; a[i]=a[j]; a[j]=t;}
#define N 10
#include "stdlib.h"
#include "stdio.h"
main( )
{ int i,j,t,a[N],k;
scanf("%d",&key);
left=0,right=n-1; while(left<=right)
作业7:教材97 5-6
{ m=(left+right)/2;
if(key==a[m])
{ printf("%d\n",m); break; }
else if(key<a[m]) right=m-1;
printf("2%、作5d业",1:b[i] );
printf("\n从"键);盘输入20个数到m数组,将下标为
}
0、2、4……的元素赋值给数组n,输出n中内容。
二、 一维数组的初始化
⒈ 在定义数组时,对全部数组元素赋初值。
int a[5]={6, 2, 7, -3, 5}; ⒉ 只给一部分元素赋值。
printf("作m业ax5=:%3d0,m个i元n=素%,d,a赋ve予=%从72.开2f始", 的ma偶x,数m,in,average);
} 每5个求一个平均值放到另一数组。
例5-5 求10个数的最小的值,并将该最小值 与最前面的元素互换(最小值唯一)。
➢ 方法1:
顺序法
-1-12103 12 34 120 6 -21 10 -13 45 63
{ t=a[i]; a[i]=a[n-1-i]; for(i=0;i<n;i++)
printf("%5d",a[i]); printf("\n"); }
a[n-1-i]=t; }
补充1: 已知数组a中有8个互不相等的元素,数组b 中有 5 个互不相等的元素,而数组c中包含那些在a 中但不在b中的元素,编程产生数组c。(产生新数 组)
相关文档
最新文档