2018年11月8日 数组及其应用(二)

以下内容仅供娱乐,欢迎随时探讨,请多指教
2018年11月8日
1、定义一个N行N列的二位数组,求二维数组中的最大值和最小值。 输出最大值和最小值以及他们的位置。

#include <stdio.h>
int main()
{
    int a[3][3]={{5,2,13},
                {4,11,6},
                {7,8,9}};
    int min=0,max=0,i,k;
    for(i=0;i<3;i++)
    for(k=0;k<3;k++)
    {
        if(a[i][k]<a[min/10][min%10])min=i*10+k;
        if(a[i][k]>a[max/10][max%10])max=i*10+k;
    }
    printf("min=%d\nmax=%d\n",a[min/10][min%10],a[max/10][max%10]);
    printf("min=%02d\nmax=%02d\n",min,max);
    return 0;
}

2、从键盘输入4个学生3门课程的成绩,求每门课程的平均分。

#include <stdio.h>
int main()
{
    double a[4][3];
    int i,k;
    double sum1,sum2,sum3;
    printf("请输入数组  0  1  2\n0\n1\n2\n3\n\n\n");
    for(i=0;i<4;i++)
    for(k=0;k<3;k++)
    {
        scanf("%lf",&a[i][k]);
    }
    for(i=0;i<4;i++)
    {
        sum1+=a[i][0];
        sum2+=a[i][1];
        sum3+=a[i][2];
    }
    printf("结果是:\n%lf\n%lf\n%lf\n",sum1/4,sum2/4,sum2/4);
    return 0;
}

3、华为上机练习题–比较二维数组列最小值,组成一个新数组返回

#include <stdio.h>
int main()
{
	int a[3][3]={{5,2,13},{4,11,6},{7,8,9}},b[3];
	int i,k,n;
    for(i=0;i<3;i++)//列
    {
        n=0;
        for(k=0;k<3;k++)//行
        {
            if( a[k][i] > a[n][i] )n=k;
            //记录
        }
        b[i]=a[n][i];
    }
    for(i=0;i<3;i++)
        printf("%d ",b[i]);
	return 0;
}

4、Write a program using two-dimensional array f[4][5] to store and print out the following matrix.(使用二维数组f [4] [5]编写程序来存储和打印出以下矩阵)

       *  #  #  #  # 
       *  *  #  #  # 
       *  *  *  #  # 
       *  *  *  *  #  
#include <stdio.h>
int main()
{
	char f[4][5];
	int i,k;
	for(i=0;i<4;i++)
    for(k=0;k<5;k++)
    {
        if(k>i)f[i][k]='#';
        else f[i][k]='*';
    }
    for(i=0;i<4;i++)
    {
        for(k=0;k<5;k++)
            printf(" %c ",f[i][k]);
        printf("\n");
    }

	return 0;
}

5、Write a program using two-dimensional array f[5][5] to store and print out the following matrix. (使用二维数组f [5] 5编写程序来存储和打印出f)

1   0   0   0   1 
0   1   0   1   0 
0   0   1   0   0 
0   1   0   1   0 
1   0   0   0   1  
#include <stdio.h>
int main()
{
	int f[5][5];
	int i,k;
	for(i=0;i<5;i++)
    for(k=0;k<5;k++)
    {
        if( k == i || i==(4-k) ) f[i][k]=1;
        else f[i][k]=0;
    }
    for(i=0;i<5;i++)
    {
        for(k=0;k<5;k++)
            printf(" %d ",f[i][k]);
        printf("\n");
    }

	return 0;
}

6.把1~25的自然数按行顺序存入一个5*5的二位数组中,然后打印出该数组的右上半三角。

#include <stdio.h>
int main()
{
	int f[5][5];
	int i,k,n;
	for(i=0;i<5;i++)
    {
        n=i*5+1;
        for(k=0;k<5;k++)
        {
            f[i][k]=n;
            n++;
        }
    }
    for(i=0;i<5;i++)
    {
        for(k=0;k<5-i;k++)
            printf("%4d ",f[i][k]);
        printf("\n");
    }
	return 0;
}

7、计算n阶方阵两条对角线元素之和并输出。

#include <stdio.h>
int main()
{
	int a[100][100];
	int i,k,n,sum1=0,sum2=0;
	printf("input N:");
	scanf("%d",&n);
	printf("请输入%d*%d的矩阵:\n",n,n);
	for(i=0;i<n;i++)
    for(k=0;k<n;k++)
           scanf("%d",&a[i][k]);
    for(i=0;i<n;i++)
        sum1+=a[i][i],sum2+=a[i][n-1-i];
    printf("sum1=%d\nsum2=%d\n",sum1,sum2);
	return 0;
}

8、通过二维数组实现杨辉三角的前n行并输出。
在这里插入图片a描述

#include <stdio.h>
int main()
{
	int a[100][100];
	int i,j,n;
	printf("input n:");
	scanf("%d",&n);
    for(i=0;i<n;i++)
        a[i][0]=1,a[i][i]=1;
    for(i=2;i<n;i++)
    {
        for(j=1;j<i;j++)
            a[i][j]=a[i-1][j-1]+a[i-1][j];
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<=i;j++)
            printf("%-5d",a[i][j]);
        printf("\n");
    }
	return 0;
}

9、矩阵的转置

#include <stdio.h>
int main()
{
	int a[100][100];
	int b[100][100];
	int i,k,m,n;
	printf("请输入矩阵大小m,n\n");
	scanf("%d%d",&m,&n);
	printf("请输入%d*%d矩阵\n",m,n);
	for(i=0;i<m;i++)
	for(k=0;k<n;k++)
        scanf("%d",&a[i][k]);
    printf("原来的的是:\n");
    for(i=0;i<m;i++)
    {
        for(k=0;k<n;k++)
        printf("%5d",a[i][k]);
        printf("\n");
    }
	for(i=0;i<m;i++)
	for(k=0;k<n;k++)
        b[k][i]=a[i][k];//转置
    printf("变化后的是:\n");
    for(i=0;i<n;i++)
    {
        for(k=0;k<m;k++)
        printf("%5d",b[i][k]);
        printf("\n");
    }
	return 0;
}

10、矩阵的加法

#include <stdio.h>
void output(int a[][4],int m,int n)
{
    int i,k;
    for(i=0;i<m;i++)
    {
        for(k=0;k<n;k++)
            printf("%-5d",a[i][k]);
        printf("\n");
    }
}
int main()
{
	int A[3][4]={{15,10,9,12},
                 {18,14,8,7},
                 {16,13,6,11}};
    printf("矩阵A=\n");
    output(A,3,4);
    int B[3][4]={{4,3,5,2},
                 {0,9,6,1},
                 {5,7,2,6}};
    printf("矩阵B=\n");
    output(B,3,4);
    int C[3][4];
    int i,k;
    /*矩阵相加:两个矩阵必须行数和列数一样才能相加,
    和矩阵的每个元素分别是两个矩阵对应的元素的和*/
    printf("矩阵A+矩阵B=\n");
    for(i=0;i<3;i++)
    {
        for(k=0;k<4;k++)
            C[i][k]=A[i][k]+B[i][k];
    }
    output(C,3,4);
	return 0;
}

11、矩阵的乘法

扫描二维码关注公众号,回复: 4417432 查看本文章
#include <stdio.h>
void output(int a[][4],int m,int n)
{
    int i,k;
    for(i=0;i<m;i++)
    {
        for(k=0;k<n;k++)
            printf("%-5d",a[i][k]);
        printf("\n");
    }
}
int main()
{
	int A[3][4]={{15,10,9,12},
                 {18,14,8,7},
                 {16,13,6,11}};
    printf("矩阵A=\n");
    output(A,3,4);
    int B[3][4]={{4,3,5,2},
                 {0,9,6,1},
                 {5,7,2,6}};
    printf("矩阵B=\n");
    output(B,3,4);
    int C[3][4];
    int i,k;
    /*矩阵相乘:两个矩阵必须行数和列数一样才能相乘,
    和矩阵的每个元素分别是两个矩阵对应的元素的乘*/
    printf("矩阵A*矩阵B=\n");
    for(i=0;i<3;i++)
    {
        for(k=0;k<4;k++)
            C[i][k]=A[i][k]*B[i][k];
    }
    output(C,3,4);
	return 0;
}

12.有一篇文章,共有3行文字,每行有80个字符,分别统计期中英文大写字母、小写字母、数字、空格以及其他字符的个数。

#include <stdio.h>
int main()
{
    char c[3][80];
    int i, j, bl, s1, num, space, others;
    printf("请输入你的文章\n");
    for (i=0; i<3; i++)
        gets(c[i]);
    bl = s1 = num = space = others = 0;
    for (j=0; j<3; j++)
    {
        for (i=0; i<80; i++)
        {
            if (c[j][i]>='A' && c[j][i]<='Z')
                bl++;
            else if (c[j][i]>='a' && c[j][i]<='z')
                s1++;
            else if (c[j][i]>='0' && c[j][i]<='9')
                num++;
            else if (c[j][i]==' ' || c[j][i]=='\t')
                space++;
            else
                others++;
        }
    }
    printf("大写字母 %d  小写字母 %d  数字  %d\n"
               "空格 %d  其他 %d\n",
               bl, s1, num, space, others);
    return 0;
}

13.有一个3×4的矩阵,要求输出其中值最大的元素的值,以及它的行号和列号。

#include <stdio.h>
int main()
{
	int a[3][4];

	int i,k,j,m,n;
	printf("请输入3*4矩阵\n");
	for(i=0;i<3;i++)
	for(k=0;k<4;k++)
        scanf("%d",&a[i][k]);
    m=0,n=0;
        for(i=0;i<3;i++)
        for(k=0;k<4;k++)
            {
                if(a[i][k]>a[m][n])m=i,n=k;
            }
    printf("max=%d\n",a[m][n]);
    printf("行号%d列号%d\n",m,n);
	return 0;
}

14.求矩阵下三角形元素之和

#include <stdio.h>
void output(int a[5][5],int m,int n)
{
    int i,k;
    for(i=0;i<m;i++)
    {
        for(k=0;k<n;k++)
            printf("%-5d",a[i][k]);
        printf("\n");
    }
}
void input(int a[5][5],int m,int n)
{
    int i,k;
    for(i=0;i<m;i++)
    for(k=0;k<n;k++)
    scanf("%d",&a[i][k]);
}
int main()
{
	int b[100][100];
	int m,n,i,j,sum=0;
	printf("请输入数组的行数和列数\n");
	scanf("%d%d",&m,&n);
	printf("请输入%d*%d的数组\n",m,n);
	input(b,m,n);
	output(b,m,n);
	for(i=0;i<m;i++)
        for(j=0;j<i*m/n;j++)
        sum+=b[i][j];
        printf("%d\n",sum);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43310774/article/details/83758432
今日推荐