C语言第六章-数组-2_第1页
C语言第六章-数组-2_第2页
C语言第六章-数组-2_第3页
C语言第六章-数组-2_第4页
C语言第六章-数组-2_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

类型说明符数组名[];内存映象:编译时分配一片连续的内存空间,数组名为该空间的首地址——。aa[5]5a[4]4a[3]3a[2]2a[1]1a[0]0例如:inta[6];一.一维数组定义数组是具有一定顺序的若干同数据类型变量的集合体。数组要有名称,要有规模。a==&a[0]1C语言第六章_数组_2

数组元素变量表示形式:

数组名[下标]

其中:下标可以是整型常量或整型表达式二.一维数组的引用

只能逐个引用数组元素变量,不能一次引用整个数组例:inta[10];

printf(“%d”,a);例:a[0]=a[5]+a[7]-a[2*3];/*常量做下标*/

a[i]=a[i]+1;

/*表达式做下标*/×数组必须先定义,后使用2C语言第六章_数组_2例1:读程序。main(){inti,a[10];

for(i=0;i<=9;i++)a[i]=i;

for(i=9;i>=0;i--)printf(“%d”,a[i]);}9876543210定义数组引用数组3C语言第六章_数组_2例2:读程序,写结果。main(){inti,a[10],k=0;

for(i=0;i<10;i++)a[i]=i;

for(i=1;i<4;i++)k+=a[i]+i;

printf(“%d”,k);}4C语言第六章_数组_2

定义数组的同时,给数组元素变量赋初值。例:inta[5]={2,4,6,8,10};(1)初始数据多于数组规模时语法错误。

例:inta[5]={2,4,6,8,10,12};(×)(2)初始数据少于数组元素个数时,多出的数组元素赋零值。例1:inta[5]={2,4,6};例2:inta[10]={};区别于:inta[10];(3)对[]中的数字可以省,数组元素个数由初始值个数决定。

intb[]={8,21,13,7};[注]:三.一维数组初始化5C语言第六章_数组_2#include<stdio.h>voidmain(void){inta[10],k,sum=0

for(k=0;k<10;k++)scanf(“%d”,&a[k]);

for(k=0;k<10;k++)

sum+=a[k];

printf(“Averageis%f\n”,sum/10.0);}92856875548898456179928568548898457561790123456789a例1:读入10个学生的成绩存于数组,求平均成绩。四.一维数组的应用6C语言第六章_数组_2for(i=0,j=n-1;i<j;i++,j--)

{t=a[i];a[i]=a[j];a[j]=t;}分析:1.a[0]与a[9]交换,

a[1]交换a[8],依此类推。例2:读入10个整数存于数组并输出;将数组中的元素颠倒顺序排放后再输出。2.如何控制循环?92856854889845756179a79614588547568988592或:n=10;for(i=0;i<n/2;i++)

{t=a[i];a[i]=a[n-i-1];a[n-i-1]=t;}ijijij只需循环到一半.ijij7C语言第六章_数组_2#include<stdio.h>main(){inti,j,a[10],t;

for(i=0;i<=9;i++)scanf(“%d”,&a[i]);

for(i=0;i<=9;i++)printf(“%d,”,a[i]);

for(i=0,j=9;i<j;i++,j--)

{t=a[i];a[i]=a[j];a[j]=t;}for(i=0;i<=9;i++)printf(“%d,”,a[i]);}8C语言第六章_数组_2

f0=1(n=0)f1=1(n=1)fn=fn-1+fn-2(n2)f[0]f[1]f[2]f[3]f[4]f[5]f[19]……...11f[19]01452319235#include<stdio.h>main(){inti;

longf[20]={1,1};

for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];

for(i=0;i<20;i++){

if(i%4==0)printf("\n");

printf("%12ld"

,f[i]);

}}例3:用数组求Fibonacci数列前20个数9C语言第六章_数组_2步骤:1.输入:用for循环输入10个整数存于数组2.处理:(a)先令max=min=a[0](b)依次用a[i]和max,min比较(循环)

{若max<a[i],令max=a[i]若min>a[i],令min=a[i]}3.输出:max和min

例4:读10个整数存入数组,找出其中最大值和最小值。#include<stdio.h>voidmain(void){inta[10],max,min,i;

printf(“输入10个整数:\n");

for(i=0;i<10;i++)scanf(“%d”,&a[i]);

max=min=a[0];

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

{if(max<a[i])max=a[i];

if(min>a[i])min=a[i];

}

printf(“最大值为:%d\n”,max);

printf(“最小值为:%d\n”,min);}10C语言第六章_数组_2例5:读入10个整数给数组,找出10个数中最大值所在的位置。#include<stdio.h>main(){inta[10],i,k;

for(i=0;i<=9;i++)scanf(“%d”,&a[i]);

k=0;

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

if(a[i]>a[k])k=i;

for(i=0;i<=9;i++)printf(“%d\t”,a[i]);

printf(“max=%d,locate=%d\n”,a[k],k);}11C语言第六章_数组_2排序过程:(对n个整数排序)比较第一个数与第二个数,把较大的数放后面;然后比较第二个数与第三个数,仍把较大的数放后面;依次类推,直至第n-1个数和第n个数比较完为止——结果最大的数被安置在最后的位置上,这就完成了第一趟冒泡排序。对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置。重复上述过程,共经过n-1趟冒泡排序后,排序结束。例6:用起泡法对8个整数按从小到大的顺序排序.12C语言第六章_数组_24938659776132730第一趟k=13849657613273097第二趟

k=23849651327307697第三趟

k=33849132730657697第四趟

k=43813273049657697第五趟

k=51327303849657697第六趟

k=61327303849657697第七趟

k=73849769713972797137627761365276513492749133827384938659776132730初始值N=8a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]9730a[7]7630a[6]6530a[5]4930a[4]3830a[3]30a[2]27a[1]13C语言第六章_数组_2第1趟排序(k=1):从第1个元素开始两两比较,最大的数被放在最后for(i=0;i<=6

;i++)if(a[i]>a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;}第一次循环后,a[7]是最大的。第2趟排序(k=2)

:for(i=0;i<=5;i++)if(a[i]>a[i+1]){temp=a[i];a[i]=a[i+1];a[i+1]=temp;}i<=8-1-1;i<=8-1-2;在第k趟排序比较时:i<=8-1-k8个数组元素排序:14C语言第六章_数组_2#include<stdio.h>main(){/*对10个整数排序*/inta[10]={9,8,5,4,2,0,6,1,3,7},i,k;

for(k=1;k<10;k++)for(i=0;i<=10-1-k;j++)

if(a[i>a[i+1]){temp=a[i];a[i]=a[i+1];

a[i+1]=temp;}for(i=0;i<10;i++)printf(“%3d”,a[i]);}15C语言第六章_数组_2例7:100名同学被学校食堂邀请来为某一种食品打分,分数分为从1到10的10个等级(1分最低分,10表示最高分),统计调查结果并输出。分析:(1)需要10个计数器用于统计:intcount[11]={0};(2)循环100次(i从1~100),第i次读一个整数n作为第i个同学打的分数,之后将该分数对应下标的数组元素加1。count[n]++n=1count[1]++n=2count[2]++n=10count[10]++3333333333333111111133333333333c[1]c[2]c[3]…c[10]16C语言第六章_数组_2main(){intcount[11]={0};inti,n;

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

{scanf(“%d”,&n);

count[n]++;

}for(i=1;i<=10;i++)printf(“%d:%d\n”,i,count[i]);}问:如何实现读入一串大写字符,以字符’?’结束,统计每个字母出现的次数。intcount[26]={0};intn;charch;while((ch=getchar())!=‘?’)n=ch-‘A’;for(ch=‘A’;ch<=‘Z’;ch++)printf(“%c:%d\n”,ch,count[ch-’A’]);}17C语言第六章_数组_2在数学中我们常常会用到矩阵,它的结构如下:怎样用一种数据结构来表示矩阵呢?6.2多维数组思考问题?18C语言第六章_数组_22.二维数组元素变量的引用:

数组名[行表达式][列表达式]1.

定义方式:

数据类型

数组名[整型常量1][整型常量2];例:floatf[3][4];intmyarray[5][9];一.二维数组的定义和引用行数列数元素个数=行数*列数下标从0开始下标从0开始19C语言第六章_数组_2内存映象:编译时为二维数组分配一片连续的内存空间,一行一行地存储所有的数组元素,数组名为该空间的首地址——地址常量。例inta[3][4];

a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1][1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]014523a[0][1]a[0][0]a[2][3]67101189aa[0][2]a[0][3]a[1][0]a[1][1]a[1][3]a[2][0]a[2][1]a[2][2]a[1][2]a与&a[0][0]相同二.二维数组元素的存放顺序20C语言第六章_数组_2三.二维数组的初始化②按元素排列顺序初始化例inta[2][3]={{1,2,3},{4,5,6}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化例inta[2][3]={{1,2},{4}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]120400部分初始化例inta[][3]={{1},{4,5}};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]100450第一维长度省略初始化例inta[2][3]={1,2,3,4,5,6};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123456全部初始化①分行初始化例inta[][3]={1,2,3,4,5};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]123450第一维长度省略初始化

例inta[2][3]={1,2,4};a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]124000部分初始化21C语言第六章_数组_2

k=1;

for(i=0;i<4;i++)for(j=0;j<4;j++)

a[i][j]=k++;四.二维数组程序举例(3)由循环变量自动赋值

12345678910111213141516如何读入6个数据?例1:在程序中使数组获得值的方法。(1)初始化数组:inta[2][3]={1,2,3,4,5,6};(2)用scanf语句由用户输入

inta[2][3]

for(i=0;i<2;i++)for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);缺点:数据相对固定缺点:当数组规模较大时,需要读入的数据会很多22C语言第六章_数组_2例1:在一个二维数组中,找出最大的元素值以及最大元素的行下标和列下标,并输出该数组#inlcude<stdio.h>main(){inta[3][2],row,col,i,j;for(i=0;i<3;i++)for(j=0;j<2;j++)scanf(“%d”,&a[i][j]);

row=0;col=0;

for(i=0;i<3;i++)for(j=0;j<2;j++)

if(a[row][col]<a[i][j]){row=i;col=j;}printf(“最大值为a[%d][%d]=%d\n”,row,col,a[row][col]);}23C语言第六章_数组_2例2:输出一个二维数组。

inta

温馨提示

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

最新文档

评论

0/150

提交评论