数组程序举例Word下载.docx
《数组程序举例Word下载.docx》由会员分享,可在线阅读,更多相关《数组程序举例Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
用数组来处理求Fibonacci(菲波那契)数列问题,求出前40个数并以每行4个数输出。
Fibonacci数列:
F1= 1ﻩn=1
ﻩ F2 =1ﻩ n =2
Fn=Fn-1 +Fn—2n≥ 3
即:
11ﻩﻩ2ﻩ3ﻩﻩ5ﻩ8ﻩ13ﻩ。
。
#include〈stdio、h>
main( )
{ﻩinti;
longf[40]= {1,1};
/*定义长整型数组f存放40个Fibonacci数,对第一个与第二个元素先赋初值1*/
ﻩfor (i =2;
i〈40;
i++)/*从第三个元素起分别利用前两个元素求与得到其值*/
ﻩﻩf[i] =f[i—2]+f[i—1];
for( i= 0;
i <
40;
i++) /* 利用循环依次输出40个数*/
ﻩ{ﻩ
if (i%4==0)printf(”\n”);
/*每输出4个数输出一个换行符*/
ﻩ printf ("%16ld",f[i] );
/*要注意长整型数据得输出格式控制符得写法*/
ﻩ}
}
例3:
找一批数中得最大值
main()
inti,max,a[10];
printf(”input 10 numbers:
\n");
//输入提示信息“请输入10个数”
for(i=0;
10;
i++)
scanf(”%d”,&a[i]);
//输入10个数到数组中
max=a[0];
for (i=1;
i〈10;
i++)
if(a[i]>max)max=a[i];
//从数组中找最大得数赋值给max
printf("
maxmum=%d\n”,max);
//输出max得值
运行结果:
input10 numbers:
829 456371 6
maxmum=9
例4:
冒泡法排序(从小到大排序)
思路:
将相邻两个数进行比较,将小得调到前头.若n个数比较,要比较n-1趟,用j表示趟数,则第j趟要比较n—j次。
inta[11];
inti,j,t;
printf(“input10 numbers:
\n"
);
for(i=1;
i〈11;
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;
i〈11;
i)
printf(″%d″,a[i]);
printf(″\n″);
}/*程序结束*/
Input10numbers:
104812 65 —76100—45123
Thesortednumbers:
-76-4501 4812 812 65100123
本程序中,第一个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(”\nInput a number:
\n”);
scanf(”%d”,&
n);
/*输入一个数插入到序列中*/
if(n〈a[9])
a[10]=n;
else
{for(i=0;
i〈10;
if(n〉a[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与数组元素逐个比较,如果发现有n>
a[i]时,则由一个内循环把i以后各元素值顺次后移一个单元。
后移应按照从后向前依次进行(从a[9]开始到a[i]为止)。
后移结束跳出外循环.插入点为i,把n赋予a[i]即可。
如所有得元素均大于被插入数,则并未进行过后移工作。
此时i=10,结果就是把n赋于a[10]。
最后一个循环输出插入数据后得数组各元素值。
二维数组及其应用
arraya:
123
456
arrayb:
14
25
3
6
例6:
将一个二维数组行与列元素互换,存到另一个二维数组中。
例如:
程序如下:
#include<stdio、h〉
voidmain()
{
int a[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
printf(″arraya:
\n″);
for (i=0;
i〈=1;
{
for(j=0;
=2;
j++)
{
printf(″%5d″,a[i][j]);
运行结果如下:
b[j][i]=a[i][j];
}
printf(″\n″);
}
printf(″arrayb:
\n″);
for(i=0;
=2;
i++)
for(j=0;
j〈=1;
j++)
printf(”%5d″,b[i][j]);
printf(″\n″);
}
}/*程序结束*/
例7:
有一个3×
4得矩阵,要求编程序求出其中值最大得那个元素得值,以及所在得行号与列号。
程序:
{inti,j, row=0,colum=0,max;
static int a[3][4]={{1,2,3,4},{9,8,7,6},{–10,10, –5,2}}
max=a[0][0];
for(i=0;
=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行)
1
1 1
1 2 1
1331
146 41
1510101
.。
杨辉三角就是(a+b)得n次幂得展开式系数,如:
(a+b)0展开后得系数就是1
(a+b)1展开后得系统数就是1 1ﻫ (a+b)2展开后得系数就是 121ﻫ (a+b)3展开后得系数就是 1331
从而我们得到杨辉三解得系数规律(指数为n):
ﻫ 1、各行第一个数都就是1
2、各行最后一个数都就是1
3、若用二维数组存放系数,每行存放一组,则从第二行开始除最后一个数与第一个数外,每个数都就是其所在行得上一行同一列与前一列之与.可以这样表示:
#defineN11
main()
{
int i,j,a[N][N];
for(i=1;
N;
{
a[i][1]=1;
a[i][i]=1;
for(i=3;
i〈N;
for(j=2;
j<=i—1;
j++)
a[i][j]=a[i-1][j—1]+a[i—1][j];
for(i=1;
{
for(j=1;
j〈=i;
j++)
printf(”%6d"
,a[i][j]);
printf("
\n"
);
printf(”\n"
字符数组及其应用
例9:
输出一个字符串
{charx[]={‘I'
‘‘,‘a’,‘m’, ‘‘,‘a’,‘‘, ‘b’,‘o'
‘y’};
inti;
for(i=0;
i〈10;
printf(“%c"
c[i]);
printf(“%\n”);
I ama boy
例10:
输出一个钻石图形
#include<
stdio、h>
void main()
{ chardiamond[][5]={{′ ′,′′,′*′},{′′,′*′,′′,′*′},{′*′,′′,′ ′,′′,′*′},{′′,′*′,′′,′*′},{′ ′,′′,′*′}};
运行结果
*
**
**
int i,j;
for (i=0;
i〈5;
{for(j=0;
j〈5;
printf(″%c″,diamond[i][j]);
printf(″\n″);
}
例11:
输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
#include<
stdio、h〉
voidmain()
char string[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;
/*判断当前字符就是不就是空格,比如I amaboy,第一个I不就是空格,所以就不执行word=0,而执行下一句*/
else if(word==0) /*判断word就是不就是等于0(word=0表示把0赋给word,word==0表示判断word等不等于0),显然就是得,因为开始时赋给word得值就是0*/
{ word=1;
/*所以执行语句:
“把1赋给word;
num++"
此时num为1。
*/
num++;
printf(″Thereare%dwordsinthe
line、\n″,num);
}
运行情况如下:
I amaboy、↙
Thereare4 wordsintheline、
总结:
可以瞧出word得目得就就是防止num重复相加。
例12:
有3个字符串,要求找出其中最大者、
#include〈stdio、h>
#include〈string、h>
voidmain ()
{
charstring[20];
charstr[3][20];
inti;
for (i=0;
i〈3;
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);
运行结果如下:
CHINA↙
HOLLAND↙
AMERICA↙
thelargeststringis∶
HOLLAND