a[10]=n;
else
{for(i=0;i<10;i++)
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]。
最后一个循环输出插入数据后的数组各元素值。
二维数组及其应用
例6:
将一个二维数组行和列元素互换,存到另一个二维数组中。
例如:
程序如下:
#include
voidmain()
{
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]);
运行结果如下:
arraya:
123
456
arrayb:
14
25
3 6
b[j][i]=a[i][j];
}
printf(″\n″);
}
printf(″arrayb:
\n″);
for(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行)
1
11
121
1331
14641
1510101
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
杨辉三角是(a+b)的n次幂的展开式系数,如:
(a+b)0展开后的系数是1
(a+b)1展开后的系统数是11
(a+b)2展开后的系数是121
(a+b)3展开后的系数是1331
从而我们得到杨辉三解的系数规律(指数为n):
1、各行第一个数都是1
2、各行最后一个数都是1
3、若用二维数组存放系数,每行存放一组,则从第二行开始除最后一个数与第一个数外,每个数都是其所在行的上一行同一列与前一列之和。
可以这样表示:
#defineN11
main()
{
inti,j,a[N][N];
for(i=1;i {
a[i][1]=1;
a[i][i]=1;
}
for(i=3;i for(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;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;i<10;i++)
printf(“%c”c[i]);
printf(“%\n”);
}
运行结果:
Iamaboy
例10:
输出一个钻石图形
#include
voidmain()
{chardiamond[][5]={{′′,′′,′*′},{′′,′*′,′′,′*′},{′*′,′′,′′,′′,′*′},{′′,′*′,′′,′*′},{′′,′′,′*′}};
运行结果
*
**
**
**
*
inti,j;
for(i=0;i<5;i++)
{for(j=0;j<5;j++)
printf(″%c″,diamond[i][j]);
printf(″\n″);}
}
例11:
输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
程序如下:
#include
voidmain()
{
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%dwordsinthe
line.\n″,num);
}
运行情况如下:
Iamaboy.↙
Thereare4wordsintheline.
总结:
可以看出word的目的就是防止num重复相加。
例12:
有3个字符串,要求找出其中最大者.
程序如下:
#include
#include
voidmain()
{
charstring[20];
charstr[3][20];
inti;
for(i=0;i<3;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);
}
运行结果如下:
CHINA↙
HOLLAND↙
AMERICA↙
thelargeststringis∶
HOLLAND