首页 > 编程语言 >程序设计基础I-实验6 二维数组

程序设计基础I-实验6 二维数组

时间:2024-10-11 09:20:32浏览次数:9  
标签:输出 int 样例 矩阵 二维 数组 格式 程序设计 输入

7-1 sdut-C语言实验-求一个3*3矩阵对角线元素之和

给定一个3*3的矩阵,请你求出对角线元素之和。

输入格式:

按照行优先顺序输入一个3*3矩阵,每个矩阵元素均为整数。

输出格式:

从左下角到右上角这条对角线上的元素之和。

输入样例:

1 2 3
3 4 5
6 0 1

输出样例:

在这里给出相应的输出。例如:

13
#include<stdio.h>
int main()
{
    int i,j,sum=0;
    int a[3][3];
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            scanf("%d",&a[i][j]);
    sum=a[0][2]+a[1][1]+a[2][0];
    printf("%d",sum);
    return 0;
}

 7-2 求矩阵各行元素之和

本题要求编写程序,求一个给定的m×n矩阵各行元素之和。

输入格式:

输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间

以空格分隔。

输出格式:

每行输出对应矩阵行元素之和。

输入样例:

3 2
6 3
1 -8
3 12

输出样例:

9
-7
15
#include<stdio.h>
int main()
{
    int m,n,sum,i,j;
    scanf("%d %d",&m,&n);
    int a[m][n];
    for(i=0;i<m;i++)
        for(j=0;j<n;j++)
            scanf("%d",&a[i][j]);
    for(i=0;i<m;i++)
    {
       sum=0;
        for(j=0;j<n;j++)
    {
        sum=sum+a[i][j];
    }
            printf("%d\n",sum);
    }
    return 0;
}

7-3 sdut-C语言实验- 对称矩阵的判定

对于一个n行n列的矩阵,先输入矩阵的行数,再依次输入矩阵的每行元素,判断该矩阵是否为对称矩阵,若矩阵对称输出“Yes.",不对称输出"No."。

输入格式:

输入有多组,每一组第一行输入一个正整数N(N<=20),表示矩阵的行数(若N=0,表示输入结束)。
下面依次输入N行数据。

输出格式:

若矩阵对称输出“Yes.",不对称输出”No.”。

输入样例:

3
6 3 12
3 18 8
12 8 7
3
6 9 12
3 5 8
12 6 3
0

输出样例:

Yes.
No.
#include<stdio.h>
int main()
{
    int p,i,j;
    while(scanf("%d",&p)!=EOF)
    {
    int a[p][p];
        int count=0;
        if(p==0)
        {
            break;
        }
    for(i=0;i<p;i++)
        for(j=0;j<p;j++)
            scanf("%d",&a[i][j]);
        for(i=0;i<p;i++)
            for(j=0;j<i;j++)
                if(a[i][j]==a[j][i])
                    count++;
        if(count==p)
            printf("Yes.\n");
        else
            printf("No.\n");
    }
}

7-4 sdut-C语言实验- 杨辉三角

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
上面的图形熟悉吗?它就是我们中学时候学过的杨辉三角。
杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

21世纪以来国外也逐渐承认这项成果属于中国,所以有些书上称这是“中国三角形”(Chinese triangle)。

其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而杨辉三角的发现就是十分精彩的一页。

让我们开始做题吧!

输入格式:

输入数据包含多组测试数据。
每组测试数据的输入只有一个正整数n(1≤n≤30),表示将要输出的杨辉三角的层数。
输入以0结束。

输出格式:

对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。

输入样例:

2
3
0

输出样例:

1
1 1

1
1 1
1 2 1

#include<stdio.h>
int main()
{
    int i,j,n;
    int a[30][30];
    while(scanf("%d",&n)!=EOF&&n!=0);
    {
        a[0][0]=1;
        a[1][0]=1;
        a[1][1]=1;
        for(i=2;i<n;i++)
        {
            a[i][0]=1;
            a[i][i]=1;
            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+1;j++)
            {
                if(j==i)
                    printf("%d\n",a[i][j]);
                else
                    printf("%d ",a[i][j]);
            }
            if(i==n-1)
                printf("\n");
        }
    }
    return 0;
}

7-5 sdut-C语言实验- 鞍点计算

找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。同一行和同一列没有相同的数。

输入格式:

输入数据有多行,第一行有两个数m和n,下面有m行,每行有n个数。

输出格式:

按下列格式输出鞍点:

Array[i][j]=x

其中,x代表鞍点,i和j为鞍点所在的数组行和列下标,我们规定数组下标从0开始。

一个二维数组并不一定存在鞍点,此时请输出None。

我们保证不会出现两个鞍点的情况,比如:

3 3
1 2 3
1 2 3
3 6 8

输入样例:

3 3
1 2 3
4 5 6
7 8 9

输出样例:

Array[0][2]=3
#include <stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
    int m, n, i, j, x, y, k, flag, max, min;
//max 的定义以及其他数据的定义都要定义在最外面的括号中,它们的作用域只在其后面的括号
    int a[11][11];
    scanf("%d %d", &m, &n);
    memset(a, 0, sizeof(a));
    for(i = 0; i < m; i++)
    {
        for(j = 0; j < n; j++)
        {
            scanf("%d", &a[i][j]);
        }
    }
    x = y = 0;//定义x和y用于存储每行最大值所在i和j,开始要清零
    for(i = 0; i < m; i++)
    {
        max = a[i][0];//max的重置放在列筛选外面,行筛选里面
        for(j = 0; j < n; j++)
        {
            if(max <= a[i][j])
            {
                max = a[i][j];
                x = i;
                y = j;
            }//筛选每行最大的值并分别记录它的i和j到x和y
        }
        min = a[x][y];//定义min,假设该列的最小数为a[x][y]
        flag = 1;
        for(k = 0; k < m; k++)
        {
            if(min > a[k][y]) flag = 0;
        }//如果a[x][y]不是该列最小的数,则flag = 0,继续循环到下一行
        if(flag)  break;//如果该数就是在该行最大且在该列最小,则结束循环
    }
    if(flag)  printf("Array[%d][%d]=%d\n", x, y, a[x][y]);
    else  printf("None\n");
    return 0;
}

7-6 sdut- C语言实验-矩阵转置

输入N*N的矩阵,输出它的转置矩阵。

输入格式:

第一行为整数N(1≤N≤100)。
接着是一个N*N的矩阵。

输出格式:

转置矩阵。

输入样例:

2
1 2
1 2

输出样例:

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

7-7 矩阵列平移

给定一个 n×n 的整数矩阵。对任一给定的正整数 k<n,我们将矩阵的偶数列的元素整体向下依次平移 1、……、k、1、……、k、…… 个位置,平移空出的位置用整数 x 补。你需要计算出结果矩阵的每一行元素的和。

输入格式:

输入第一行给出 3 个正整数:n(<100)、k(<n)、x(<100),分别如题面所述。

接下来 n 行,每行给出 n 个不超过 100 的正整数,为矩阵元素的值。数字间以空格分隔。

输出格式:

在一行中输出平移后第 1 到 n 行元素的和。数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

7 2 99
11 87 23 67 20 75 89
37 94 27 91 63 50 11
44 38 50 26 40 26 24
73 85 63 28 62 18 68
15 83 27 97 88 25 43
23 78 98 20 30 81 99
77 36 48 59 25 34 22

输出样例:

440 399 369 421 302 386 428

样例解读

需要平移的是第 2、4、6 列。给定 k=2,应该将这三列顺次整体向下平移 1、2、1 位(如果有更多列,就应该按照 1、2、1、2 …… 这个规律顺次向下平移),顶端的空位用 99 来填充。平移后的矩阵变成:

11 99 23 99 20 99 89
37 87 27 99 63 75 11
44 94 50 67 40 50 24
73 38 63 91 62 26 68
15 85 27 26 88 18 43
23 83 98 28 30 25 99
77 78 48 97 25 81 22
#include<stdio.h>
int main(void) {
	int n, k, x;
	scanf("%d%d%d", &n, &k, &x);
	int num[101][101];
	int i, j;
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			scanf("%d", &num[i][j]);
		}
	}
	int m = 1, count = 0;
	for (j = 1; j < n; j += 2) {
		count = m;
		m++;
		if (m > k) {
			m = 1;
		}
		for (i = n - 1; i >= 0; i--) {
			num[i][j] = num[i-count][j];
			if (i < count) {
				num[i][j] = x;
			}
		}
	}
	int sum = 0;
	for (int i = 0; i < n; i++) {
		sum = 0;
		for (int j = 0; j < n; j++) {
			sum += num[i][j];
		}
		printf("%d", sum);
		if (i < n - 1) {
			printf(" ");
		}
	}
	return 0;
}

7-8 方阵循环右移

本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。

输入格式:

输入第一行给出两个正整数m和n(1≤n≤6)。接下来一共n行,每行n个整数,表示一个n阶的方阵。

输出格式:

按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。

输入样例:

2 3
1 2 3
4 5 6
7 8 9

输出样例:

2 3 1 
5 6 4 
8 9 7 
#include<stdio.h>
int main()
{
    int m,n,i,j,k;
    int a[6][6];
    scanf("%d %d",&m,&n);
    m=m%n;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            int t=a[i][n-1];
                for(k=n-2;k>=0;k--)
                {
                    a[i][k+1]=a[i][k];
                }
            a[i][0]=t;
        }
    }
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            if(j==n-1)
                printf("%d \n",a[i][j]);
            else
                printf("%d ",a[i][j]);
        }
    }
    return 0;
}

标签:输出,int,样例,矩阵,二维,数组,格式,程序设计,输入
From: https://blog.csdn.net/r2931887650/article/details/142822782

相关文章

  • 程序设计基础I-实验7 函数(函数题)
    6-1sdut-C语言实验-计算组合数计算组合数。C(n,m),表示从n个数中选择m个的组合数。计算公式如下:若:m=0,C(n,m)=1否则,若n=1,C(n,m)=1否则,若m=n,C(n,m)=1否则C(n,m)=C(n-1,m-1)+C(n-1,m).函数接口定义:在这里描述函数接口。例如:intfun(intn,intm);其中n和m都......
  • 程序设计基础I-实验7 函数(编程题)
    7-1sdut-C语言实验—计算表达式计算下列表达式值:输入格式:输入x和n的值,其中x为非负实数,n为正整数。输出格式:输出f(x,n),保留2位小数。输入样例:32输出样例:在这里给出相应的输出。例如:2.00#include<stdio.h>#include<math.h>doublef(doublex,intn){......
  • 程序设计基础I-实验8 指针(函数题)
    6-1sdut-C语言实验-n个数的排序Qiao当上了体育委员,现在老师让他去给班级里的人排队,Qiao刚学了排序,所以他想以这种方式给班级里的人排队(从矮到高),他想知道排序完成后的结果。函数接口定义:voidsort(int*p,intn);其中p和n都是用户传入的参数。p的值为传递过来的地址;......
  • Java的基本程序设计结构
    以上整理来自《Java核心技术卷I》注释数据类型变量与常量运算符字符串输入输出控制流大数数组**一个简单的Java应用程序**访问修饰符:用于控制程序的其他部分对这段代码的访问级别。类名:以大写字母开头源代码的文件名必须与公共类的名字相同,并用.java作为扩展名......
  • 每日算法 88.合并两个有序数组 - Lcode
    给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了......
  • Boost C++ 库 | 智能指针(共享指针、共享数组、弱指针、介入式指针、指针容器)入门
    点击上方"蓝字"关注我们01、共享指针>>>这是使用率最高的智能指针,但是C++标准的第一版中缺少这种指针。它已经作为技术报告1(TR1)的一部分被添加到标准里了。如果开发环境支持的话,可以使用 memory 中定义的 std::shared_ptr。在BoostC++库里,这个智能指针命名为......
  • 42 C 语言 typedef:为基本数据类型、数组、指针、结构体、共用体起别名
    目录1 typedef介绍2 为某个基本类型起别名2.1为int类型起别名Integer2.2为unsignedchar类型起别名Byte2.3为基本类型一次起多个别名3 为结构体、共用体起别名3.1为结构体起别名3.1.1分开定义结构体和别名3.1.2与结构体定义一起使用typedef3.1.3为......
  • 指针 + 数组 较为复杂凌乱的 【笔试题】
    2024-10-10-笔记-25作者(Author):郑龙浩/仟濹(CSDN账号名)【指针+数组】的各种题型(笔试题)来自于鹏哥的网课,我做一下笔记119.【C语言进阶】笔试题详解(4)_哔哩哔哩_bilibili①题#include<stdio.h>intmain(){inta[5]={1,2,3,4,5};......
  • 二维前缀和 & 二维差分
    二维前缀和求二维前缀和后,能够实现\(O(1)\)求原数组二维区间和,但是不支持修改。lln,m,sum2[N][N],c[N][N];voidSum2_pre(){fr(i,1,n)fr(j,1,m)sum2[i][j]=sum2[i-1][j]+sum2[i][j-1]-sum2[i-1][j-1]+c[i][j];}llSum2(llx......
  • 前端数据结构之数组
    对象允许存储键值集合,这很好。但很多时候我们发现还需要有序集合,里面的元素都是按顺序排列的。例如,我们可能需要存储一些列表,比如用户、商品以及HTML元素等。这里使用对象就不是很方便了,因为对象不能提供能够管理元素顺序的方法。我们不能在已有的元素“之间”插入一个......