二维数组及结构体练习题目

951

在这里插入图片描述

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a[10][10];
    int m ,n;
    while(cin>>n>>m)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                cin>>a[i][j];
            }
        }
        int posi=0,posj=0,maxn=a[0][0];
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(a[i][j]>maxn)
                {
                    posi=i;
                    posj=j;
                    maxn=a[i][j];
                }

            }

        }
        cout<<posi+1<<" "<<posj+1<<" "<<maxn<<endl;
    }
    return 0;
}

注意行数和列数+1!!!

952

在这里插入图片描述

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

弄清楚需要计算的数之间的规律以及行数列数。

953在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a[10][10],b[10][10],c[10][10];
    int m ,n;
    while(cin>>n>>m)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                cin>>a[i][j];
            }
        }
         for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                cin>>b[i][j];
            }
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                c[i][j]=a[i][j]+b[i][j];
                if(j!=m-1)
                {
                    cout<<c[i][j]<<" ";
                }
                else cout<<c[i][j];
            }
           cout<<endl;
        }
    }
    return 0;
}

注意输出格式,注意 j!=m-1。

1031

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a[10][10],b[10][10];
    int m,n;
    while(cin>>n>>m)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                cin>>a[i][j];
            }
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                b[m-1-j][i]=a[i][j];
            }
        }
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(j!=n-1)
               cout<<b[i][j]<<" ";
               else cout<<b[i][j];
               
            }
            cout<<endl;
        }
    }
    return 0;
}

输出格式!!!

1064

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a[10][10];
    int m ,n,sum;
    while(cin>>n>>m)
    {
        sum=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                cin>>a[i][j];
            }
        }
         for(int i=0;i<n;i++)
         {
             for(int j=0;j<m;j++)
            {
                if(i==0||i==n-1)
                {
                   sum=sum+a[i][j];
                }
                if(j==0||j==m-1)
                {
                    sum=sum+a[i][j];
                }
            }
         }
        sum=sum-a[0][0]-a[0][m-1]-a[n-1][0]-a[n-1][m-1];
        cout<<sum<<endl;
    }
    return 0;
}

把第一行,最后一行,第一列,最后一列所有元素加起来再减去四个角的元素。

954

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int a[10][10],b[10][10];
    int m;
    while(cin>>m)
    {
       int c[10][10]={0};
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<m;j++)
            {
                cin>>a[i][j];
            }
        }
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<m;j++)
            {
                cin>>b[i][j];
            }
        }
         for(int i=0;i<m;i++)
         {
             for(int j=0;j<m;j++)
            {
                for(int k=0;k<m;k++)
                {
                    c[i][j]=a[i][k]*b[k][j]+c[i][j];
                }

            }
         }
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(j!=m-1)
                cout<<c[i][j]<<" ";
                else
                cout<<c[i][j];
            }
            cout<<endl;
        }

    }
    return 0;
}

注意初始化的位置
(可以在 int main()之上定义数组,会自动初始化为0。)

955

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
int main()
{

    int m,n,sum;
    while(cin>>n>>m)
    {
        int maxn=0;
       int a[11][11]={0};
        for(int i=1;i<n+1;i++)
        {
            for(int j=1;j<m+1;j++)
            {
                cin>>a[i][j];
            }
        }
         for(int i=1;i<n+1;i++)
         {
             for(int j=1;j<m+1;j++)
            {
                sum=a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1];
                if(sum>maxn)
                {
                    maxn=sum;
                }
            }
         }
            cout<<maxn<<endl;
        }
    return 0;
}

小技巧: 对于不好计算的特殊情况,在外围加一圈0使所有元素拥有上下左右。

1053

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
struct student
{
    char num[10];
    char name[30];
    double score;
};
int main()
{
    int n,i;
    while(scanf("%d",&n)!=-1)
    {
        student stu[100];
        getchar();
        for(i=1;i<=n;i++)
            scanf("%s %[^\n] %lf",stu[i].num,stu[i].name,&stu[i].score);
        for(i=1;i<=n;i++)
            printf("%s  %s  %.2lf\n",stu[i].num,stu[i].name,stu[i].score);
    }
    return 0;
}

*输出之间两个空格!!!
*学号可以定义成字符串,需要计算时定义为int 。
*%[^\n] 避免名字中出现空格 。
*一定注意字符串不用&,其他都用。

1638

在这里插入图片描述

#include<iostream>
#include<stdio.h>
using namespace std;
struct student
{
    char leibie;
    char res[4];
    int jg;
} stu[1001];
int main (void) {
    int n, i = 0;
    int sum1 = 0, sum = 0;
    cin >> n;
    for (i = 0; i < n; i++)
    {
        cin >> &stu[i].leibie;
        if (stu[i].leibie == 'C')
        {
            cin >> stu[i].res;
            sum1 += 1;
        }
        if (stu[i].leibie == 'N')
        {
            cin >> stu[i].jg;
            sum += stu[i].jg;
        }
    }
    cout<<sum1<<" "<<sum / (n-sum1)<<endl;
    return 0;
}

!!输入数字再输入字符 用%c时在其前加空格,否则会将换行 “\n” 读入字符。

1186

## 标题

#include <stdio.h>
#include <stdlib.h>
struct student
{
    char num[8];
    char name[20];
    int score;
}stu[101];
int main()
{
    int n,i,count,a[101];
    while(scanf("%d",&n)>0)
    {
        count=0;
        for(i=0;i<n;i++)
        {
            scanf("%s %s %d",stu[i].num,stu[i].name,&stu[i].score);
            if(stu[i].score>=90)
            {
                count++;
                a[count]=i;
            }
        }

        for(i=1;i<=count;i++)
        {
            int t=a[i];
            printf("%s %s %d\n",stu[t].num,stu[t].name,stu[t].score);
        }
        printf("%d\n",count);
    }

    return 0;

}

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
struct stu
{
    char name[100];
    int num;
    double cj;
}stu[100];
int main()
{
    int n,i,a[100],j,t;
    while(cin>>n)
    {
        int k=0;
        for(i=0;i<n;i++)
        {
            scanf(" %[^\n] %d%lf",stu[i].name,&stu[i].num,&stu[i].cj);
            if(stu[i].cj<60)
            {
                k++;
                a[k]=i;
            }

        }
        if(k==0)
        {
            printf("They are Great!!\n");
        }
        else
        {
            cout<<k<<endl;
            for(j=1;j<=k;j++)
            {
                t=a[j];
                printf("%s\n",stu[t].name);
            }
            for(j=1;j<=k;j++)
            {
                t=a[j];
                printf("%d\n",stu[t].num);
            }
            for(j=1;j<=k;j++)
            {
                t=a[j];
                printf("%.2lf\n",stu[t].cj);
            }
        }
    }
    return 0;
}
发布了9 篇原创文章 · 获赞 0 · 访问量 224

猜你喜欢

转载自blog.csdn.net/zmsjylyf/article/details/103822128