函数和数组
-----------------------------------------------------------------------------
【程序35】 题目:求一个3*3矩阵对角线元素之和 1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。 2.程序源代码: main() { float a[3][3],sum=0; int i,j; printf("please input rectangle element:/n"); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%f",&a[i][j]); for(i=0;i<3;i++) sum=sum+a[i][i]; printf("duijiaoxian he is %6.2f",sum); } ----------------------------------------------------------------------------- 【程序36】 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。 1. 程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。 2.程序源代码:
#include void main() { int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; printf("original array is:/n"); for(i=0;i<10;i++) printf("%5d",a[i]); printf("/n"); printf("insert a new number:"); scanf("%d",&number); end=a[9]; if(number>end) a[10]=number; else {for(i=0;i<10;i++) { if(a[i]>number) {temp1=a[i]; a[i]=number; for(j=i+1;j<11;j++) {temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } for(i=0;i<11;i++) printf("%6d",a[i]); } ----------------------------------------------------------------------------- 【程序37】 题目:将一个数组逆序输出。 1.程序分析:用第一个与最后一个交换。 2.程序源代码:
#include #define N 5 void main() { int a[N]={9,6,5,4,1},i,temp; printf("/n original array:/n"); for(i=0;iprintf("%4d",a[i]); for(i=0;i{temp=a[i]; a[i]=a[N-i-1]; a[N-i-1]=temp; } printf("/n sorted array:/n"); for(i=0;iprintf("%4d",a[i]); } -----------------------------------------------------------------------------
【程序38】 题目:有一个3*4的矩阵,要求出其中的最大的那个元素,以及这个元素的行号和列号。 1.程序分析:注意二维数组初始化。注意函数实现方式。 2.程序源代码: #include
void main()
{
int i,j,colum=0,row=0,max;
int a[3][4]={{1,2,3,4},{9,6,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);
}
函数实现方式:
#include
int max_value(int array[3][4])
{
int i,j,max;
max=array[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(array[i][j]>max)max=array[i][j];
return max;
}
void main()
{
int a[3][4]={{1,3,5,7},{2,4,6,8},{15,17,34,12}};
printf("maxvalue %d/n",max_value(a));
}
-----------------------------------------------------------------------------
【程序39】 题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序分析: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 2.程序源代码: main() {int i,j; int a[10][10]; printf("/n"); for(i=0;i<10;i++) {a[i][0]=1; a[i][i]=1;} for(i=2;i<10;i++) for(j=1;ja[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++) {for(j=0;j<=i;j++) printf("%5d",a[i][j]); printf("/n"); } } -----------------------------------------------------------------------------
【程序40】 题目:打印“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行每一列对角线之和均相等 1.程序分析:
8 1 6
3 5 7
4 9 2
将1~n的平方这几个数构成一个n阶魔方阵。
算法:
依以下法则,你可以很快的写出奇数阶幻方!当然,这种写法只是其中一个答案,而不是唯一答案。
1)将1填入第一行中间;
2)将每个数填在前一个数的右上方。
3)若该位置超出最上行,则改填在最下行的对应位置;
4)若该位置超出最上行,则改填在最下行的对应位置;
5)若某元素填在第一行最右列,下一个数填在该数同列的下一行位置;
6)若某数已填好,但其右上角已填了其他数据,则下一个数填在该数同列的下一行位置。 2.程序源代码: #include
void main()
{
int a[15][15]={0};
int i,j,m,n,temp,M;
scanf("%d",&M);
i=0;j=M/2;a[i][j]=1;//将1填入第一行中间;
for(temp=2;temp<=M*M;temp++)
{
m=i;n=j;i--;j++;//将每个数填在前一个数的右上方。
if(i<0)i=M-1;//若该位置超出最上行,则改填在最下行的对应位置;
if(j>M-1)j=0;//若该位置超出最上行,则改填在最下行的对应位置;
if(a[i][j]!=0){i=m+1;j=n;}
a[i][j]=temp;
}
for(i=0;i
{
for(j=0;j
printf("%4d",a[i][j]);
printf("/n");
}
}
-----------------------------------------------------------------------------
【程序41】 题目: 有一字符串,要求分别统计出该文章的英文字母,数字空格以及其他符号的个数。 1.程序分析: 2.程序源代码: #include
void main()
{
char array[100]="hello anyone, They are my 100 programming exercises @@ lol... ";
printf("%s/n",array);
int i;
char c;
int wordnum=0,spacenum=0,othernum=0,num=0;
for(i=0;i<100&&array[i]!='/0';i++)
{
c=array[i];
if(c>='a'&&c<='z')wordnum++;
else if(c>='0'&&c<='9')num++;
else if(c==' ')spacenum++;
else othernum++;
}
printf("%d,%d,%d,%d/n",wordnum,spacenum,num,othernum);
}
-----------------------------------------------------------------------------