•一个班学生的学习成绩•一行文字•一个矩阵这些数据的特点是:1.具有相同的数据类型2.使用过程中需要保留原始数据C语言为这些数据,提供了一种构造数据类型:数组。所谓数组就是一组具有相同数据类型的数据的有序集合。一维数组及其应用例1:一维数组元素赋值及输出练习.main(){inti,a[10];/*定义数组整型数组a,它含有十个元素。*/for(i=0;i=9;i++)a[i]=i;/*通过for循环依次为数组a中的每个元素赋值。*/for(i=9;i=0;i--)/*通过for循环依次输出数组a中的每个元素的值。*/printf(%3d,a[i]);/*请注意输出元素的顺序*/}运行结果:9876543210总结:程序使a[0]到a[9]的值为0~9,然后按逆序输出。例2:用数组来处理求Fibonacci(菲波那契)数列问题,求出前40个数并以每行4个数输出。Fibonacci数列:F1=1n=1F2=1n=2Fn=Fn-1+Fn-2n≥3即:11235813。。。#includestdio.hmain(){inti;longf[40]={1,1};/*定义长整型数组f存放40个Fibonacci数,对第一个和第二个元素先赋初值1*/for(i=2;i40;i++)/*从第三个元素起分别利用前两个元素求和得到其值*/f[i]=f[i-2]+f[i-1];for(i=0;i40;i++)/*利用循环依次输出40个数*/{if(i%4==0)printf(\n);/*每输出4个数输出一个换行符*/printf(%16ld,f[i]);/*要注意长整型数据的输出格式控制符的写法*/}}运行结果:例3:找一批数中的最大值main(){inti,max,a[10];printf(input10numbers:\n);//输入提示信息“请输入10个数”for(i=0;i10;i++)scanf(%d,&a[i]);//输入10个数到数组中max=a[0];for(i=1;i10;i++)if(a[i]max)max=a[i];//从数组中找最大的数赋值给maxprintf(maxmum=%d\n,max);//输出max的值}运行结果:input10numbers:8294563716maxmum=9例4:冒泡法排序(从小到大排序)思路:将相邻两个数进行比较,将小的调到前头。若n个数比较,要比较n-1趟,用j表示趟数,则第j趟要比较n-j次。main(){inta[11];inti,j,t;printf(“input10numbers:\n”);for(i=1;i11;i++)scanf(“%d”,&a[i]);printf(“\n”);for(j=1;j=9;j++)for(i=1;i=10-j;i++)if(a[i]a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}Printf(“thesortednumbers:\n”);for(i=1;i11;i)printf(″%d″,a[i]);printf(″\n″);}/*程序结束*/运行结果:Input10numbers:10481265-76100-45123Thesortednumbers:-76-4501481281265100123本程序中,第一个for循环,是表示要循环的趟数,第二个for循环,是表示每一趟里面循环的次数。例5:有一个已经排好序的数组,今输入一个整数,要求按原来排序的规律将它插入数组中。为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大进行的。假设排序是从大到小进行的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素i即可。如果被插入数比所有的元素值都小则插入最后位置。main(){inti,j,p,q,s,n,a[11]={320,260,258,154,68,57,45,16,8,2};for(i=0;i=10;i++)printf(%d,a[i]);/*先输出原始排好序的数据序列*/printf(\nInputanumber:\n);scanf(%d,&n);/*输入一个数插入到序列中*/if(na[9])a[10]=n;else{for(i=0;i10;i++)if(na[i]){for(s=9;s=i;s--)a[s+1]=a[s];break;}a[i]=n;}printf(\nresult:\n);for(i=0;i=10;i++)/*输出结果*/printf(%d,a[i]);printf(\n);}运行结果:本程序首先输入要插入的整数n。再用一个for语句把n和数组元素逐个比较,如果发现有na[i]时,则由一个内循环把i以后各元素值顺次后移一个单元。后移应按照从后向前依次进行(从a[9]开始到a[i]为止)。后移结束跳出外循环。插入点为i,把n赋予a[i]即可。如所有的元素均大于被插入数,则并未进行过后移工作。此时i=10,结果是把n赋于a[10]。最后一个循环输出插入数据后的数组各元素值。二维数组及其应用例6:将一个二维数组行和列元素互换,存到另一个二维数组中。例如:arraya:123456arrayb:142536程序如下:#includestdio.hvoidmain(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf(″arraya:\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(″arrayb:\n″);运行结果如下:arraya:123456arrayb:142536for(i=0;i=2;i++){for(j=0;j=1;j++)printf(%5d″,b[i][j]);printf(″\n″);}}/*程序结束*/例7:有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及所在的行号和列号。程序:main(){inti,j,row=0,colum=0,max;staticinta[3][4]={{1,2,3,4},{9,8,7,6},{–10,10,–5,2}}max=a[0][0];for(i=0;i=2;i++)for(j=0;j=3;j++)if(a[i][j]max){max=a[i][j];row=i;colum=j;}printf(max=%d,row=%d,colum=%d\n,max,row,colum);}输出结果为:max=10,row=2,colum=1例8:打印出以下的杨辉三角形(要求打印出10行)1111211331146411510101。。。。。。。。。。。。。。。。。。。。。。。。杨辉三角是(a+b)的n次幂的展开式系数,如:(a+b)0展开后的系数是1(a+b)1展开后的系统数是11(a+b)2展开后的系数是121(a+b)3展开后的系数是1331从而我们得到杨辉三解的系数规律(指数为n):1、各行第一个数都是12、各行最后一个数都是13、若用二维数组存放系数,每行存放一组,则从第二行开始除最后一个数与第一个数外,每个数都是其所在行的上一行同一列与前一列之和。可以这样表示:#defineN11main(){inti,j,a[N][N];for(i=1;iN;i++){a[i][1]=1;a[i][i]=1;}for(i=3;iN;i++)for(j=2;j=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;iN;i++){for(j=1;j=i;j++)printf(%6d,a[i][j]);printf(\n);}printf(\n);}字符数组及其应用例9:输出一个字符串main(){charx[]={‘I’,‘‘,‘a’,‘m’,‘‘,‘a’,‘‘,‘b’,‘o’,‘y’};inti;for(i=0;i10;i++)printf(“%c”c[i]);printf(“%\n”);}运行结果:Iamaboy例10:输出一个钻石图形#includestdio.hvoidmain(){chardiamond[][5]={{′′,′′,′*′},{′′,′*′,′′,′*′},{′*′,′′,′′,′′,′*′},{′′,′*′,′′,′*′},{′′,′′,′*′}};inti,j;for(i=0;i5;i++){for(j=0;j5;j++)printf(″%c″,diamond[i][j]);printf(″\n″);}}运行结果********例11:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。程序如下:#includestdio.hvoidmain(){charstring[81];/*定义一个字符型数组*/inti,num=0,word=0;/*定义几个整型常量,i用来控制循环次数,num表示单词个数,word相当于一个标志*/charc;/*定义一个字符型变量*/gets(string);/*获取用户输入的一句话,在这句话的末尾系统会自动添加一个结束标志'\0'*/for(i=0;(c=string[i])!=′\0′;i++)/*从string[0]开始判断,只要它不是结束标志,就执行下面的语句*/if(c==′′)word=0;/*判断当前字符是不是空格,比如Iamaboy,第一个I不是空格,所以就不执行word=0,而执行下一句*/elseif(word==0)/*判断word是不是等于0(word=0表示把0赋给word,word==0表示判断word等不等于0),显然是的,因为开始时赋给word的值是0*/{word=1;/*所以执行语句:“把1赋给word;num++”,此时num为1。*/num++;}printf(″Thereare%dwordsintheline.\n″,num);}运行情况如下:Iamaboy.↙Thereare4wordsintheline.总结:可以看出word的目的就是防止num重复相加。例12:有3个字符串,要求找出其中最大者.程序如下:#includestdio.h#includestring.hvoidmain(){charstring[20];charstr[3][20];inti;for(i=0;i3;i++)gets(str[i]);if(strcmp(str[0],str[1])0)strcpy(string,str[0])elsestrcpy(string,str[1]);if(strcmp(str[2],string)0)strcpy(string,str[2]);printf(″\nthelargeststringis∶\n%s\n″,string);}运行结果如下:CHINAHOLLANDAMERICA↙thelargeststringis∶HOLLAND