《C语言程序设计》08 数组和循环嵌套写字字帖_第1页
《C语言程序设计》08 数组和循环嵌套写字字帖_第2页
《C语言程序设计》08 数组和循环嵌套写字字帖_第3页
《C语言程序设计》08 数组和循环嵌套写字字帖_第4页
《C语言程序设计》08 数组和循环嵌套写字字帖_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章数组和循环嵌套12回顾C语言中数组的概念一维数组的声明、使用二维数组的概念二维数组的简单使用3目标掌握一维数组和循环的嵌套使用掌握二维数组的简单应用掌握选择和插入排序了解常用算法4数组基本操作数组是一种基本数据结构,经常和循环结合使用。对数组的操作:查找、排序、插入、删除1625990235查找查找数组中的最大值。162599023假设数组中的第一个数是最大数,存放在一个变量max中Max然后max和数组中的所有元素逐个比较2390如果比max大,则将当前元素的值覆盖max如果比max小,则继续访问下一个元素6定义#include<stdio.h>#include<stdlib.h>#include<time.h>voidmain(){ inta[10]; intsum=0; //定义最大值max

printf("一维数组求和演示:\n"); srand((unsigned)time(NULL)); //用当前的时间设置rand函数的种子值

for(inti=0;i<10;i++) 7求和{ a[i]=rand()%101; printf("a[%d]=%d\n",i,a[i]);}

for(intj=0;j<10;j++) //数组元素求和

{ sum+=a[j];

} printf("该一维数组的最大值是:%d\n",sum);}8排序-选择法842098281a[0]a[1]a[2]a[3]a[4]a[5]142098288a[0]a[1]a[2]a[3]a[4]a[5]148202898a[0]a[1]a[2]a[3]a[4]a[5]假定有n个元素的数组,要求按递增的次序排序第一步:从n个数中找到最小数的下标,退出内循环后,最小数与第一个数交换位置,通过这一趟排序,第一个数位置已经确定好。第二步:除已排序的数外,在剩下的n-1个元素中再按步骤一的方法选出第二小的数,与未排序数中的第一个数交换位置。第三步:重复步骤二,最后构成递增数列。待排序数组第一次排序:142098288a[0]a[1]a[2]a[3]a[4]a[5]148982820a[0]a[1]a[2]a[3]a[4]a[5]148202898a[0]a[1]a[2]a[3]a[4]a[5]第二次排序:第五次排序:第三次排序:第四次排序:9#include<stdio.h> voidmain(){intdata[50];inti,j,n,temp,min,k;//min代表数列中的最小值,k代表目前min的位置

printf("输入数值的个数:"); //输入数组n的个数

scanf("%d",&n);printf("\n"); for(i=1;i<=n;i++) //输入n个数值

{printf("请输入数值:"); printf("data[%d]=",i);scanf("%d",&data[i]);}排序-选择法10排序-选择法for(i=1;i<n;i++){ min=data[i]; //记录min为data[i] k=i; //记录min的位置为k for(j=i+1;j<=n;j++){ if(data[j]<min) //比较data[j]是否小于min { min=data[j];//将min记录为data[j] k=j; //将min的位置k改为j } } temp=data[i]; //将min与data[i]互换

data[i]=data[k]; data[k]=temp;}11排序-选择法 printf("\n排序后的数组内容为:\n"); //输出排好序的结果

for(i=1;i<=n;i++)

{printf("%d",data[i]); } printf("\n");}12排序-冒泡法假定有n个元素的数组,要求按递增的次序排序第一步:从第一个元素开始,对数组中两两相邻的元素比较,即a[0]与a[1]比较,若为逆序,则a[0]与a[1]交换,然后a[1]与a[2]比较……直到最后a[n-2]与a[n-1]比较,这时最大数沉底成为数组中的最后一个元素,一些较小的元素如同气泡一样上浮一个位置,这是第一次排序。第二步:然后对a[0]到a[n-2]的n-1个元素进行第一步的操作,次最大数放入a[n-2]元素内,完成第二次排序,依次类推,进行n-1次排序后,所有数均有序。待排序数组324979743213排序-冒泡法

#include<stdio.h> voidmain(void){ intdata[50]; inti,j,n,temp; printf("输入数值的个数:"); //输入n

scanf("%d",&n); printf("\n"); for(i=1;i<=n;i++) //输入n个数值

{printf("请输入数值:"); printf("data[%d]=",i); scanf("%d",&data[i]);

}14排序-冒泡法

for(i=1;i<=n;i++){ for(j=n;j>i;j--) {if(data[j-1]>data[j])//若data[j-1]>data[j],则两个值交换

{ temp=data[j-1]; data[j-1]=data[j];

data[j]=temp; } }}15排序-冒泡法 printf("\n数据排序后为\n"); for(i=1;i<=n;i++) {printf("%d",data[i]); }}提示冒泡法可以改进以提高效率,减少排序次数。若某趟排序中数组没有发生交换,说明数组已有序,不必再继续排序。为了判断其有序性,可以增加一个变量来观察有无交换。若某趟没有发生交换,说明数组已经有序,结束排序。16插入和删除数据在已排序的数组中插入一个元素第一步:要查找待插入数据在数组中的位置k。第二步:从最后一个元素开始往前直到下标为k的元素依次往后移动下一个位置。第二步:从最后一个元素开始往前直到下标为k的元素依次往后移动下一个位置。75314删除数据的过程则恰好与插入的过程相反,如果需要从某个数列中删掉一个值,则先从中找到要删除的元素位置,假设为k,然后依次将该元素后面的元素向前移动一个单元(a[k]=a[k+1],a[k+1]=a[k+2]……,a[n-1]=a[n]),就可以完成删除操作。17#include<stdio.h> voidmain(void){ inta[10],i,k,x=15; for(i=0;i<9;i++) //通过程序自动形成9个元素的有规律数组

a[i]=i*3+2; for(k=0;k<9;k++) //查找欲插入数在数组中的位置

{if(x<a[k]) //找到插入的位置k break;} for(i=8;i>=k;i--) //从最后的元素开始往后移,腾出位置

{a[i+1]=a[i];} a[k]=x; //把数值插入数组

for(i=0;i<=9;i++) //输出数组内容

printf("%d",a[i]);}18二维数组程序事例输入两个矩阵A、B的值,求C=A+B,并显示结果。+=数学意义上的矩阵在计算机世界中可以用二维数组来代表。则对于矩阵C=A+B有:A、B矩阵相加,其实质就是将两矩阵对应元素相加(c[0][0]=a[0][0]+b[0][0]),两个矩阵能相加的条件是有相同的行、列数。19插入和删除数据#include<stdio.h> voidmain(){ intA[4][4],B[4][4],C[4][4]; inti,j; printf("请输入数组A(3x3):\n"); for(i=1;i<=3;i++) { for(j=1;j<=3;j++)

{ printf("a[%d][%d]=",i,j); scanf("%d",&A[i][j]); } }20插入和删除数据printf("请输入数组B(3x3):\n"); for(i=1;i<=3;i++) { for(j=1;j<=3;j++) { printf("a[%d][%d]=",i,j);

scanf("%d",&B[i][j]); } }21插入和删除数据for(i=1;i<=3;i++)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论