C语言数组教程

上传人:m**** 文档编号:593532788 上传时间:2024-09-25 格式:PPT 页数:79 大小:2.37MB
返回 下载 相关 举报
C语言数组教程_第1页
第1页 / 共79页
C语言数组教程_第2页
第2页 / 共79页
C语言数组教程_第3页
第3页 / 共79页
C语言数组教程_第4页
第4页 / 共79页
C语言数组教程_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《C语言数组教程》由会员分享,可在线阅读,更多相关《C语言数组教程(79页珍藏版)》请在金锄头文库上搜索。

1、C C语言数组教程语言数组教程输入理想的程序,输出快乐的人生回顾基本数据类型基本数据类型:int, float/double, char数据的处理数据的处理:根据问题需求,先作几个简单变量的定义,然后对这些变量赋值并作相应的运算即得结果例如:输入10个实数,求其平均值。#include int main() int i; float num, sum=0; printf(input 10 numbers: n); for (i=1; i=10; i+) scanf(%f,&num); sum +=num; printf(average =%.2f n, sum/10.); return 0;各

2、变量各变量各变量各变量独立独立独立独立存储,之间没有任何关系存储,之间没有任何关系存储,之间没有任何关系存储,之间没有任何关系不需要也不可能保留变量的历史值不需要也不可能保留变量的历史值不需要也不可能保留变量的历史值不需要也不可能保留变量的历史值输入理想的程序,输出快乐的人生问题的提出一个人n门课的成绩怎样存储和处理?一个班n门课的成绩怎样存储和处理?如何从键盘输入100个数然后按相反顺序输出?输入10个数,将高于平均值的数输出?.这些数据的特点:1.具有相同的数据类型2.使用过程中需要保留原始数据为了方便的使用这些数据,C语言提供了一种构造数据类型:数组。一定要理解并用好数组!输入理想的程序

3、,输出快乐的人生本章主要内容输入理想的程序,输出快乐的人生C语言中的数组数组是具有相同类型的数据的顺序集合数组可以在内存中连续存储多个元素Rate1.53.20.0945.39870123下标下标下标下标标明了元素在数标明了元素在数标明了元素在数标明了元素在数组中的位置组中的位置组中的位置组中的位置 ,从,从,从,从0 0开始开始开始开始数组元素数组元素下标下标Rate0Rate1Rate2Rate3输入理想的程序,输出快乐的人生数组类型输入理想的程序,输出快乐的人生本章主要内容输入理想的程序,输出快乐的人生定义一维数组datatype arrayNamesize;类型说明符类型说明符int、

4、char、float 数组名数组名常量表达式:常量表达式:数组大小数组大小int num50;char list_of_initials20;double pressure_level6;#define LIMIT 20. . . int emp_codesLIMIT;数组和变量一样,必须数组和变量一样,必须先定义后使用先定义后使用;数组大小定义好后,将不能改变;数组大小定义好后,将不能改变;数组大小最好用数组大小最好用宏宏来定义,以适应未来可能的变化来定义,以适应未来可能的变化输入理想的程序,输出快乐的人生定义一维数组C89:定义数组时不能使用变量定义数组的大小,即使在此之前变量已经赋值,只

5、能使用整形常量定义数组的大小C99:允许用变量定义数组的大小int array(10);int n=5; float scoren;int n;scanf(%d, &n);int datan;char str ;float char10;输入理想的程序,输出快乐的人生一维数组在内存的存放数组下标从0开始数组元素在内存中按顺按顺序连续存放序连续存放数组名代表数组的首地数组名代表数组的首地址址,即score的值与score0的地址值相同内存内存score数组数组高地址高地址低地址低地址12345score0score1score2score3score4数组元素数组元素序号序号intscore5;

6、score输入理想的程序,输出快乐的人生数组元素的引用数组元素就是变量C语言中,不允许引用数组进行运算,只能引用数组元素基本形式:数组名数组名下标表达式下标表达式;说明:p下标表达式的值必须为整型p下标从0开始,最大下标为数组长度减1p 是下标运算符,引用数组元素时根据数组首地址和下标计算出该元素的实际地址,然后取出该地址的内容如引用score2:1.计算2000+2*4=20082.取出地址2008的内容87907786score0score1score2score32000H2004H2008H200CH例如:inta5;a0=20;a4=2*a0;输入理想的程序,输出快乐的人生下标越界是

7、大忌!inta10;scanf(%d,&a10);/*下标越界*/编译程序不检查是否越界下标越界,将访问数组以外的空间,可能带来严重后果#includeintmain()inta=1,c=2,b5=0,i;printf(%p,%p,%pn,b,&c,&a);for(i=0;i=8;i+)bi=i;printf(%d,bi);printf(nc=%d,a=%d,i=%dn,c,a,i);return0;b0b1b2b3b4caib81234560784044484c5054585c6064686c9运行程序或单步执行观察变量变化情况可以看到,变量c和a的值因数组越界而被悄悄破坏了输入理想的程序,

8、输出快乐的人生一维数组的初始化初始化:在定义数组时给数组元素赋初值形式:数据类型数组名称数组长度=数值列表在定义数组时,对全部数组元素赋初值:例如:inta5=0,1,2,3,4;此时也可省略数组长度例如:inta=0,1,2,3,4;/只写inta;是错误的在定义数组时,对部分数组元素赋初值:例如:inta5=0,1,2;/数组其余元素自动赋0当初值的个数多于数组元素个数时,编译出错例如:inta5=0,1,2,3,4,5;输入理想的程序,输出快乐的人生l只能逐个对数组元素进行操作(字符数组例外)l一般一维数组的处理用一重循环来实现,用循环变量的值对应数组元素的下标动态赋值方法:int a1

9、0,i;输入第3个数组元素:scanf( %d ,&a2);输入整个数组元素:for(i=0;i10;i+)scanf( %d ,&ai);输出方法:输出第1个数组元素:printf( %d ,a0);输出整个数组元素:for(i=0;i10;i+)printf( %d ,ai);一维数组的动态赋值和输出输入理想的程序,输出快乐的人生一维数组示例【例1】输入10个整数,输出它们的和,并逆序打印这些数#include #define N 10 /数组程序推荐该用法int main () int i,sum=0,dataN; for( i=0; i=0; i- ) printf( %d, data

10、i ) ; printf(n); return 0; 输入理想的程序,输出快乐的人生一维数组示例【例2】用数组来求Fibonacci数列前20项#include #define N 20int main() int i,fN=1,1; for(i=2;iN;i+) fi=fi-2+fi-1; for (i=0; iN ;i+) if (i%4=0) printf(n); printf(%6d,fi); printf(n); return 0;1(n=1)Fn=1(n=2)Fn-2+Fn-1(n3)Fibonacci数列:数列:1,1,2,3,5,8,13,21,34输入理想的程序,输出快乐的人

11、生总结理解:C语言中的数组数组是一组相同类型的数据组成的有限集合数组是可以在内存中连续存储多个元素的结构数组中的数据称为数组元素,数组元素个数称为数组长度数组元素用数组名和元素下标表示,如score0,score1score859377880123score 4 数组名数组名(首地址首地址)下标下标标明了元素在标明了元素在数组中的位置数组中的位置 ,从,从0开始开始数组元素数组元素下标下标数组大小数组大小输入理想的程序,输出快乐的人生本章主要内容输入理想的程序,输出快乐的人生二维数组的定义思考为何需要二维数组?int num42;4 X 2 = 8数据类型数据类型 数组名数组名常量表达式常量表

12、达式1 常量表达式常量表达式2;为了便于理解,二维数组一般理解为几行几列的矩阵数据类型数据类型 数组名数组名行大小行大小列大小列大小;num00num01num10num11num20num21num30num31错误的定义错误的定义:int a3,4, b(3,4);int c , d(3)(4);输入理想的程序,输出快乐的人生二维数组的存储结构思考该如何存?int a23;a0a1a10a11a12a00a01a02二维数组元素在内存中的二维数组元素在内存中的存放顺序存放顺序:先按行存放,再按列存放先按行存放,再按列存放,即,即先顺序存放第先顺序存放第0行的元素行的元素再存放第再存放第1行

13、的元素,行的元素,a00a01a02a10a11a12输入理想的程序,输出快乐的人生二维数组元素的引用二维数组元素的引用形式:例如:int a34;a00=3;a01=a00+10;a34=5; /*下标越界*/数组名数组名行下标行下标 列下标列下标;输入理想的程序,输出快乐的人生二维数组的初始化按行赋初值:例如:inta23=1,2,3,4,5,6;inta23=1,4,5;按数组元素存放顺序赋初值:例如:inta23=1,2,3,4,5,6;inta23=1,2,3;省略行数(根据初值个数和列声明自动确定行数)例如:intb3=1,2,3,4,5,6,7,8,9,10;intc3=1,2,

14、3;1 2 34 5 61 2 30 0 01 0 04 5 04行行1 2 03 0 0输入理想的程序,输出快乐的人生二维数组的初始化下列二维数组的定义都是错误的:int a, b3, c2;int arr2 = 1,2,3, 4,5,6;int b23=1, 2, 3, 4, 5, 6, 7, 8; 输入理想的程序,输出快乐的人生二维数组值的输入和输出一般二维数组的处理用二重循环来实现,用循环变量的值控制数组元素的下标int a34,i,j;输入方法:输入方法:输入第输入第i i行第行第j j列元素的值:列元素的值:scanf(“%d”, &aij);scanf(“%d”, &aij);输

15、入整个数组元素:输入整个数组元素:for (i=0; i3; i+)for (i=0; i3; i+) for(j=0; j4; j+) for(j=0; j4; j+) scanf(“%d”, scanf(“%d”, &aij&aij); );输出方法:输出方法:输出第输出第i i行第行第j j列列元素的值:元素的值:printf(printf(“ “%d%d“ “, aij);, aij);输出整个数组元素:输出整个数组元素:for (i=0; i3; i+)for (i=0; i3; i+) for(j=0; j4; j+) for(j=0; j4; j+) printf(“%d”, p

16、rintf(“%d”, aijaij ); );输入理想的程序,输出快乐的人生二维数组的输入和输出为一个为一个3行行4列的二维数组输入列的二维数组输入/输出数据输出数据int main() int a34, i, j; for (i=0; i3; i+) for (j=0; j4; j+) scanf(“%d”,&aij); for (i=0; i3; i+) for (j=0; j4; j+) printf(“%5d”, aij); printf(“n”); return 0; 输入理想的程序,输出快乐的人生二维数组示例【例3】将二维数组a转置存到二维数组b中a01b10a12b21设行下标

17、为i,列下标为j,则: bji aij输入理想的程序,输出快乐的人生【例3】将二维数组a转置存到二维数组b中#includeintmain()inta23=1,2,3,4,5,6,b32,i,j;printf(数组a:n);for(i=0;i2;i+)for(j=0;j3;j+)printf(%5d,aij);printf(n);for(i=0;i2;i+)for(j=0;j3;j+)bji=aij;/*转置*/printf(数组b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);return0;输入理想的程序,输出快乐的人

18、生二维数组示例【例4】从键盘上为一个55整型数组赋值,找出其中的最小值和最大值(平均值,上三角),并显示出来分析:设最大值为max,最小值为min.1、令max=a00min=a002、对0=row5,0=col5(显然要用二重循环):如果arowcolmax,则将其存入max中。3、输出min和max。输入理想的程序,输出快乐的人生【例4】55整型数组找最小值和最大值#include int main () int row,col,a55,max,min; printf(请输入5个整数:); for(row=0; row5; row+) for(col=0; col5; col+) scan

19、f(%d,&arowcol); min=a00;max=a00; for(row=0; row5; row+) for(col=0; col5; col+) if (arowcolmax) max=arowcol; printf(min=%d ,min); printf(max=%dn,max); return 0;输入数据输入数据找最小值和最大值找最小值和最大值输入理想的程序,输出快乐的人生总结数组是由同一种数据类型的元素系列构成数组元素按顺序在内存中连续存储,并通过使用数组下标(或索引)来访问,首元素的索引值为0数组必须先声明然后才能使用。声明一个数组只是为该数组留出连续内存空间,并不会为

20、其赋任何值一维数组定义:数据类型数组名数组大小二维数组可以看作是一维数组的数组一维数组可用一个循环动态赋值,而二维数组可用二重嵌套循环动态赋值C把数组名解释为该数组第1个元素(a0)的首地址,并且C编译器不检查所引用的数组元素下标是否越界输入理想的程序,输出快乐的人生本章主要内容输入理想的程序,输出快乐的人生函数参数的传递方式根据实参类型实参类型的不同,有两种传递方式值传递地址传递1、值传递方式类型简单变量(数组之前所学的变量类型)方式调用函数时:将实参值值复制一份传给函数的形参调用结束后:原值不变原值不变(变的只是副本)特点实参与形参占用不同的不同的内存单元输入理想的程序,输出快乐的人生【例

21、】输入两个数,编写函数将它们交换#include void swap ( int x, int y ) int temp; temp = x; x = y; y = temp;int main ( ) int a, b; scanf(%d%d,&a,&b); swap(a, b); printf(n%d,%dn,a,b); .20002010201420042008200C5变量变量a 变量变量b(main)9 变量变量temp 变量变量y 变量变量x(swap)559 59COPY输入:输入:5959输出:输出:5,95,9形参形参形参形参实参实参实参实参值传递值传递输入理想的程序,输出快乐

22、的人生函数参数的传递方式2、地址传递方式类型数组、指针、结构体方式调用函数时:将实参地址地址复制一份传给函数的形参调用结束后:原值改变原值改变特点形参与实参占用相同的相同的内存单元输入理想的程序,输出快乐的人生对比值传递地址传递类型 简单类型数组、指针、结构体方式调用函数时:将实参值复制一份传给函数的形参调用结束后:原值不变(变的只是副本)调用函数时:将实参地址复制一份传给函数的形参调用结束后:原值改变特点实参与形参占用不同的内存单元形参与实参占用相同的内存单元简记为:传递简单类型是值传递;传递其他类型是地址传递输入理想的程序,输出快乐的人生 简单变量和数组作函数参数的区别输入理想的程序,输出

23、快乐的人生数组作函数参数1、一维数组元素作函数参数【例】求5个整数中的最小数#include #define N 5int main( ) int aN,i,m; for(i=0;iN;i+) scanf(%d,&ai); m=a0; for(i=1;iN;i+) m=min(m,ai); printf(min=%dn,m); return 0; int min(int x,int y) return (xy?x:y);传递的是数组元素的值,值,所以是值值传递方式输入理想的程序,输出快乐的人生数组作函数参数2、一维数组名作函数参数重点定义阶段:形参应定义为数组形式,形参数组的长度可以省略,但是

24、不能省略,否则就不是数组形式如voidfun(intmyArray,intlength)调用阶段:实参为数组名如:fun(myArray);数组名表示数组在内存中的起始地址,传递的是数组名,所以是地址传递方式输入理想的程序,输出快乐的人生例:求学生的平均成绩#includefloataverage(intstu10,intn);intmain()intscore10,i;floatav;printf(Input10scores:n);for(i=0;i10;i+)scanf(%d,&scorei);av=average(score,10);printf(Averageis:%.2f,av);r

25、eturn0;floataverage(intstu10,intn)inti;floattotal=0;for(i=0;i0 ? total/n : -1; /更安全更安全输入理想的程序,输出快乐的人生【例8.7】计算最高分#include #define N 40int ReadScore(int score);int FindMax(int score, int n);int main() int scoreN, max, n; n = ReadScore(score);printf(Total students are %dn, n);max = FindMax(score, n);pr

26、intf(The highest score is %dn, max); return 0;输入理想的程序,输出快乐的人生计算最大值算法max(i=0)max(i=2)max(i=3)输入理想的程序,输出快乐的人生【例8.7】计算最高分假设其中的一个学生成绩为最高maxScore = score0;对所有学生成绩进行比较,即 for (i=1; i maxScore 则修改maxScore值为scorei 打印最高分maxScore输入理想的程序,输出快乐的人生数组作函数参数有一个班,30个学生,4门课程成绩,要求:利用函数计算每个学生的平均分并在主函数中输出平均分。思路使用二维数组作为参数输

27、入理想的程序,输出快乐的人生二维数组作为参数不用函数#include #define SN 30#define CN 4int main()int i,j;float scoreSNCN,sum,avgSN;for(i=0;iSN;i+) sum=0;for(j=0;jCN;j+) scanf(%f,&scoreij); sum=sum+scoreij;avgi=sum/CN;for(i=0;iSN;i+)printf(%.2fn,avgi);return 0;输入理想的程序,输出快乐的人生二维数组作为参数使用函数#include#defineSN30#defineCN4intmain()in

28、ti,j;floatscoreSNCN,avgSN;for(i=0;iSN;i+)for(j=0;jCN;j+)scanf(%f,&scoreij);fun(score,avg);for(i=0;iSN;i+)printf(%.2fn,avgi);return0;voidfun(floataCN,floataverage)floatsum;inti,j;for(i=0;iSN;i+)sum=0;for(j=0;jCN;j+)sum=sum+aij;averagei=sum/CN;怎么写?怎么写?怎么写?怎么写?二维数组作函数参数方法与一维数组相同需要注意的是:形参为二维数组时,可以省略第一维长

29、度说明,但是不能省略第二维的长度说明。输入理想的程序,输出快乐的人生本章主要内容输入理想的程序,输出快乐的人生排序算法冒泡排序,BubbleSort选择排序,SelectionSort双向冒泡排序,ShakerSort插入排序,InsertionSort希尔排序,ShellSort,也称缩小增量排序归并排序,MergeSort堆排序,HeapSort快速排序快速排序, Quick Sort猴子排序,BogoSort排序算法动画比较演示http:/jsdo.it/norahiko/oxIy/fullscreenhttp:/www.sorting- (i=0; in-1; i+) for (j=i

30、+1; j scorei) 交换成绩scorej和scorei 输入理想的程序,输出快乐的人生如何实现两数交换?temp = scorej;scorej = scorei; scorei = temp; tempscorejscorei ?7050705070输入理想的程序,输出快乐的人生交换法不用函数#include #define N 10int main () int i, j, t, aN; printf(顺序输入%d个整数: , N) ; for(i=0; iN; i+) scanf(%d, &ai) ; printf(原序列为:n); for(i=0; iN; i+) printf

31、( %d, ai) ; for(i=0; iN-1; i+) /*控制比较的趟数*/ for(j=i+1; jai) t=ai; ai=aj; aj=t; printf(n排序后的序列为:n); for(i=0; iN; i+) printf( %d, ai); printf(n); return 0;输入理想的程序,输出快乐的人生交换法使用函数#include#defineN10voidprintArray(inta);voidsort(inta,intn);intmain()inta=11,22,63,97,58,80,45,32,73,36;printf(Beforesort:n);pr

32、intArray(a);sort(a,N);printf(Aftersort:n);printArray(a);return0;void printArray(int b) int i; for (i=0;iN;i+) printf(%5d,bi); printf(n);void sort(int b, int n) int i,j,t; for (i=0;in-1;i+) for (j=i+1;jbi) t=bi; bi=bj; bj=t; 实参用数组名,相当于:实参用数组名,相当于:把把a的地址传给了形参的地址传给了形参b形参用数组定义形参用数组定义输入理想的程序,输出快乐的人生选择法排序

33、k=1k=2k=0k=1输入理想的程序,输出快乐的人生选择法排序k=3k=4k=3k=4输入理想的程序,输出快乐的人生选择法排序for (i=0; in-1; i+) k = i; for (j=i+1; j scorek)记录此轮比较中最高分的元素下标k=j; 若k中记录的最大数不在位置i,则交换成绩scorek和scorei, 交换学号numk和numi; 输入理想的程序,输出快乐的人生选择法排序void DataSort(int score, long num, int n) int i, j, k, temp1; long temp2; for (i=0; in-1; i+) k =

34、i; for (j=i+1; j scorek) k = j; /*记录最大数下标位置*/ if (k != i) /*若最大数不在下标位置i*/ temp1 = scorek; scorek = scorei; scorei = temp1; temp2 = numk; numk = numi; numi = temp2; 输入理想的程序,输出快乐的人生冒泡法排序【例4】用冒泡法对数组元素进行排序,排序后元素按数值从小到大顺序排列冒泡排序:依次比较相邻的两个数,将大数上升(放右边) 第一趟:首先比较第1个和第2个数,将大数放右边。然后比较第2个数和第3个数,如此继续,直至比较最后两个数,结果

35、是将最大数放最右边。第二趟:重复以上过程,仍从第一对数开始比较,将大数放右边,一直比较到倒数第二对数,第二趟结束,得到一个次大数。如此下去,直至最终完成排序。 由于排序过程如同冒气泡,所以称作冒泡排序 输入理想的程序,输出快乐的人生冒泡法排序for (i=0; in-1; i+) for (j=0; j aj+1) 交换aj和aj+1;for (i=0; in-1; i+)k = i; for (j=i+1; j ak) k = j; /*记录最大数下标位置*/if (k!= i) /*若最大数不在下标位置i*/交换aj和ak;for (i=0; in-1; i+) for (j=i+1; j

36、 ai) 交换aj和ai“; 冒泡法冒泡法冒泡法冒泡法 交换法交换法交换法交换法 选择法选择法选择法选择法输入理想的程序,输出快乐的人生快速排序,QuickSort基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。整个排序过程需要三步:1.寻找一个中心元素(通常为第一个数)2.所有小于中心点的元素,都移到中心点的左边;所有大于中心点的元素,都移到中心点的右边。3.对中心点左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。输入理想的程序,输出快乐的人生快速排序讲解需

37、要解决的问题当已知中心元素的前提下,怎样将其他元素划分好?(即:大于中心点在之后,小于中心点在之前)i012345i=0i=1j=5j=5ji=1j=3i=1j=4i=2j=3i=2j=2算法终止算法终止该算法有没有可以改进的地方?输入理想的程序,输出快乐的人生快速排序讲解通过动画,可以看出每次中心元素都要交换。根据划分的思想最后位置一定是中心元素i012345i=0i=1j=5j=5ji=1j=3i=1j=4i=2j=3i=2j=2算法终止算法终止可以申请一个变量保存中心元素,以避免交换输入理想的程序,输出快乐的人生快速排序函数void QuickSort(int *arr, int lef

38、t, int right) int i,j,temp; if(lefttemp & ij) j-; /从右向左找第1小于中心点的位置j if(ij) /找到了,位置为j arri = arrj; i+; /将第j个元素置于左端并重置i while(arritemp & ij) i+; /从左向右找第1个大于中心点的位置i if(ij) /找到了,位置为i arrj = arri; /将第i个元素置于右端并重置j j-; while(i!=j); arri = temp; /将中心点放入它的最终位置,本次划分结束 QuickSrt(arr, left, i-1); /对中心点左半部递归调用本函数

39、 QuickSort(arr, i+1, right); /对中心点右半部递归调用本函数 *arr为数组指针,下一章讲解 输入理想的程序,输出快乐的人生快速排序函数qsort调用在头文件中,提供了一个快速排序函数qsort,它的函数原型如下:voidqsort(void*base,intnelem,intwidth,int(*fcmp)(constvoid*,constvoid*);四个参数分别是:1待排序数组首地址2数组中待排序元素数量3各元素的占用空间大小4指向函数的指针,用于确定排序的顺序要求学完指针后能熟练调用,有余力的同学可以先学习先用http:/ #define N 5int ma

40、in()int i, x, aN+1 ;printf(Input %d numbers:, N ) ;for( i=0; iN; i+ ) scanf(%d, &ai) ;printf( Before insert: );for( i=0; i0; i- ) ai = ai-1 ;ai = x ; / a0=xprintf(After insert: );for( i=0; iN+1; i+ )printf(%d, ai);printf(n); return 0; 后移并后移并插入数据插入数据输入理想的程序,输出快乐的人生数组应用举例【例2】随机产生20个整数保存在数组中,试用顺序查找方法查找

41、某个整数。分析:产生随机数:使用函数srand()和rand()顺序查找:从数组的第1个元素开始逐一与要查找的数据进行比较,如果有一个元素与之相同,就是找到了,查找过程即可结束。如果所有元素都不同于要查找的数据,则没找到。输入理想的程序,输出快乐的人生数组应用举例#include #include #include #define N 20int main ( ) int i, x, aN,find=0; srand(time(NULL); /*保证每次产生不同的随机数序列*/ for(i=0; iN; i+) /*产生N个小于100的随机数*/ ai = rand( )%100; if(i%

42、10=0) printf(n); printf(%6d,ai); printf(n要查找的整数是? ); scanf(%d, &x ); for(i=0; iN; i+) if(x=ai) find=1; break; if(find)printf(找到了,%d是数组的第%d个元素。n,x,i+1); else printf(没有找到%d。n , x);return 0;一旦找到,设置find=1,通过break语句跳出循环输入理想的程序,输出快乐的人生数组应用举例【例3】设整型数组a10,删去某数x,并使原来的顺序关系不变,试编程实现。问题分析:主要解决两个关键问题:查找某个元素是否等于x:

43、用顺序查找法找到后删除该元素:该元素后的数组元素逐个向前移动一个位置输入理想的程序,输出快乐的人生数组应用举例#include #define N 10int main () int i, k, x, aN, del=0, m=0 ; printf(输入%d个整数:, N) ; for(i=0; iN; i+) scanf(%d, &ai) ; printf(原数组为:); for(i=0; iN; i+) printf( %d, ai) ; printf(n输入要删除的数: ); scanf(%d, &x ); for(i=0; iN; i+) if(ai=x) for(k=i+1;kN;k

44、+) ak-1=ak; del=1; m+ ; if (del) printf(删除%d后的数组为: , x);for(i=0; iN-m; i+) printf( %d, ai);printf(n); else printf(没有找到%d。n, x);查找并删除数据del:删除标识 m:计数器输入理想的程序,输出快乐的人生数组应用举例【例4】用冒泡法对数组元素进行排序,排序后元素按数值从小到大顺序排列#include #define N 10int main () int i, j, t, aN;printf(顺序输入%d个整数: , N) ;for(i=0; iN; i+) scanf(%

45、d, &ai) ;printf(原序列为:n);for(i=0; iN; i+) printf( %d, ai);printf(n);for(i=0; iN-1; i+) /*控制比较的趟数*/ for(j=0; jaj+1) t=aj; aj=aj+1; aj+1=t; printf(n排序后的序列为:n);for(i=0; iN; i+) printf( %d, ai);printf(n); return 0;输入理想的程序,输出快乐的人生数组应用举例【例5】判断n阶方阵A=是否为对称方阵分析:对称方阵的每一个元素aij(1I,jn)都有aij=aji引入一个标志变量flag1对称方阵fl

46、ag=0非对称方阵输入理想的程序,输出快乐的人生数组应用举例#include #define N 100int main()int n, row, col, iFlag=1;float aNN;printf(输入方阵的阶数(1%d)?, N); scanf(%d, &n);printf(按行输入方阵的各元素:);for( row=0; rown; row+ )for(col=0;coln;col+) scanf(%f,&arowcol);for( row=0; rown & iFlag; row+ )for( col=row+1; coln & iFlag; col+) if( arowcol

47、 != acolrow ) iFlag=0;if( iFlag ) printf(该方阵是对称方阵。n);else printf(该方阵不是对称方阵。n); return 0;输入理想的程序,输出快乐的人生数组应用举例【例6】打印10行金字塔杨辉三角。111121133114641151010511615201561172135352171问题分析:第n行的数字个数为n个每行的第一和最后一个值为1,其余每个数字等于上一行的左右两个数字之和使用二维数组存储数据和两重循环输出图形输入理想的程序,输出快乐的人生数组应用举例/*打印金字塔杨辉三角*/#include #define N 10int main() int aNN,i,j; for(i=0;iN;i+)for(j=0;jN-i;j+)printf(%2c, ); /*两个宽度*/for(j=0;j=i;j+) if(i=j|j=0) aij=1; else aij=ai-1j-1+ai-1j; printf(%3d ,aij); /*四个宽度*/ if(i=j) printf(n); return 0;输入理想的程序,输出快乐的人生小结一维数组的定义与使用二维数据的定义与使用数组作函数参数数组元素的排序算法快速排序输入理想的程序,输出快乐的人生Q&A结束语结束语谢谢大家聆听!谢谢大家聆听!79

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号