精华内容
下载资源
问答
  • 问题一:二维数组转置问题; 代码如下: #include <stdio.h> #include <stdlib.h> /* run this program using the console pauser or add your ...

    问题一:二维数组转置问题;
    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    void shift(int (*a)[4],int ,int );
    int main(int argc, char *argv[]) {
    /*矩阵的转置,实现将m行n列的矩阵实现转置(通俗点来说就是行列互换)
     1,本题感觉用二维数组更为简便;
     2,设置指针数组,指针数组每一个成员分别直线每一行的起始位置,然后依次累加;
    */ 
     int i,j,m;
     int n=4;
     printf("注意:该转置函数仅适用于4列的二维数组,若要改变列数,可改变以上n的值,以及方法传参中行指针中数组的值;\n");
     printf("请输入二维数组的行数:");
     scanf("%d",&m);
     printf("\n");
     int a[m][n];
     for(j=0;j<m;j++){
      for(i=0;i<n;i++){
       scanf("%d",&a[j][i]);
      }
     }
     printf("输出转置后的数列:\n"); 
     shift(a,m,n);
     return 0;
    }
    void shift(int (*a)[4],int m,int n){             //第一次出错的地方是参数中的int (*a)[4],我写的是int (*a)[3],这
                                                     //是对于二维数组指针传参的不理解;这是行指针的定义格式,每行由多少个元素,后边就由多大的数组;
                 //可以分解成a[0][4],a[1][4],a[2][4]-----a[n][4],方便理解;  
     int i,j,k;
     for(i=0;i<n;i++){
      for(j=0;j<m;j++){
       printf("%d  ",*(a[j]+i));
      }
      printf("\n"); 
     }
    }

    第一次出错原因:出错的地方是参数中的int (*a)[4],我写的是int (*a)[3]这是对于二维数组指针传参的不理解;这是行指针的定义格式,每行有多少个元素,后边就由有大的数组;可以分解成a[0][4],a[1][4],a[2][4]-----a[n][4],方便理解;
    出现问题:如果要实现任意行列的转置,在方法的参数值无法定义列的任意值,设置输入的任意值列为静态变量也不行,这里不知道如何解决;
    但是可以在不用多余函数的情况下,仅仅在main函数中写出所有的代码即可实现;方法代码在以下运行结果后;
    运行结果:

    方法二:
    代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    int main(int argc, char *argv[]) {
    int i,j,m,n;
     printf("请输入二维数组的行数:");
     scanf("%d",&m);
     printf("请输入二维数组的列数:");
     scanf("%d",&n); 
     printf("\n");
     int a[m][n];
     printf("输入数列:\n"); 
     for(j=0;j<m;j++){
      for(i=0;i<n;i++){
       scanf("%d",&a[j][i]);
      }
     }
     int b[n][m];
     int k,l;
     printf("输出转置后的数列:\n"); 
     for(k=0;k<n;k++){
      for(l=0;l<m;l++){
       b[k][l]=a[l][k];
       printf("%d  ",b[k][l]);
      }
      printf("\n");
     }
     return 0;
    }

    运行结果:

    问题二: 矩阵的乘法运算
    矩阵的乘法运算:

    1. 依照于数学的运算法则给定两个矩阵;
    2. 定义一个新的二维数组,新二维数组的行数是第一个矩阵的行数,二维数组的列数是第二个矩阵的列数;
    3. 根据运算法则求值存储;

    详细理解见代码中分析;
    运行代码:

    #include <stdio.h>
    #include <stdlib.h>
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    int main(int argc, char *argv[]) {
    /*矩阵的乘法运算:1,依照于数学的运算法则给定两个矩阵; 
          2,定义一个新的二维数组,新二维数组的行数是第一个矩阵的行数,二维数组的列数是第二个矩阵的列数;
          3,根据运算法则求值存储;
    */
     int a1,a2,a3,a4;
     printf("输入第一个矩阵的行数:");       //输入第一个矩阵 
     scanf("%d",&a1);
     printf("输入第一个矩阵的列数:");
     scanf("%d",&a2);
     int a[a1][a2];
     int i1,j1;
     for(i1=0;i1<a1;i1++){
      for(j1=0;j1<a2;j1++){
       scanf("%d",&a[i1][j1]);
      }
     }
      printf("\n");
     printf("输入第二个矩阵的行数:");       //输入第二个矩阵 
     scanf("%d",&a3);
     printf("输入第二个矩阵的列数:");
     scanf("%d",&a4); 
     int b[a3][a4];
     int i2,j2;
     for(i2=0;i2<a3;i2++){
      for(j2=0;j2<a4;j2++){
       scanf("%d",&b[i2][j2]);
      }
     } 
     if(a2!=a3){
      printf("两矩阵不满足相乘的基本条件;");
     }else{
      printf("输出相乘后的矩阵:\n");
      int c[a1][a4];
      int i,j;
      int m,n;
      int k,l;                                  //数组的每一位赋0 
      for(k=0;k<a1;k++){
       for(l=0;l<a4;l++){
        c[k][l]=0;
       }
      }
      for(i=0;i<a1;i++){
       for(j=0;j<a4;j++){
        for(m=0;m<a2;m++){
        c[i][j]+=a[i][m]*b[m][j];         //超级关键 
        }
        printf("%d  ",c[i][j]); 
       }
       printf("\n");
      }  
     }
     return 0;
    }

    切记关键代码c[i][j]+=a[i][m] * b[m][j];见代码
    运行结果:

    展开全文
  • 算法之二维数组转置

    2018-07-18 15:22:00
    现在有个二维数组:data=[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],每一行都是[0,1,2,3],要求顺时针旋转90度,变成每一列都是[0,1,2,3]。 #首先生成一维数组的语句是: row=[i for i in range(6)] print(row...

    现在有个二维数组:data=[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3],每一行都是[0,1,2,3],要求顺时针旋转90度,变成每一列都是[0,1,2,3]。

    #首先生成一维数组的语句是:
    row=[i for i in range(6)]
    print(row)
    #运行结果:
    #[0, 1, 2, 3, 4, 5]
    #生成二维数组的语句是:
    data=[[i for i in range(4)] for k in range(4)]
    for j in data:
        print(j)
    '''
    相当于是把一维数组的整体作为上面的i
    运行结果是:
    [0, 1, 2, 3]
    [0, 1, 2, 3]
    [0, 1, 2, 3]
    [0, 1, 2, 3]
    '''
    View Code

     数组扩充行和列:

    def trans(m):
        a = [[] for i in m[0]]
        for i in m:
            for j in range(len(i)):
                a[j].append(i[j])
        return a
    m = [[1, 2], [3, 4], [5, 6]]    # 想像第一个列表是原始的,后面的是往里添加的
    print(trans(m))    # result:[[1, 3, 5], [ 2, 4, 6]]
    #来自于https://www.cnblogs.com/anpengapple/p/5427367.html
    View Code

    矩阵转置(含过程):

    m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    def trans(m):
        for i in range(len(m)):
            for j in range(i):
                m[i][j], m[j][i] = m[j][i], m[i][j]
                print(m)
    trans(m)
    '''
    运行结果:
    [[1, 4, 3], [2, 5, 6], [7, 8, 9]]
    [[1, 4, 7], [2, 5, 6], [3, 8, 9]]
    [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
    '''
    View Code

    矩阵转置(不含中间过程):

    m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    def trans(m):
        for i in range(len(m)):
            for j in range(i):
                m[i][j], m[j][i] = m[j][i], m[i][j]
        return m
    print(trans(m))
    #注意:只适合方阵
    View Code

     矩阵的运算参考:https://www.cnblogs.com/chamie/p/4870078.html

     

    转载于:https://www.cnblogs.com/yibeimingyue/p/9329358.html

    展开全文
  • C#二维数组的文件流读写并进行转置 插入链接与图片 链接: link. 图片: 进行转置后的效果 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks...

    C#二维数组的文件流读写并进行转置

    插入链接与图片

    链接: link.

    图片: 在这里插入图片描述 进行转置后的效果

    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    
    namespace 二维数组读写进文件流
    {
        class Program
        {
            public static int ROW = 4;
            public static int COL = 4;
            static int[,] arrayA = new int[ROW, COL];
    
            static void Main(string[] args)
            {
                Write();                          //把二维数组写入文件
                string[,] strArray = Read();        //读出文件流的二维数组
                ArrayNN(ref strArray, ROW, COL);
                Console.ReadKey();   
            }
            static void ArrayNN(ref string[,] a, int row, int col)
            {
                string[,] tmp = new string[row, col];
                for (int i = 0; i < row; i++)
                {
                    for (int j = 0; j < col; j++)
                    {
                        tmp[i, row - j - 1] = a[j, i];
                    }
                }
                Console.Write("\n文件流转置之后:");
                for (int i = 0; i < row; i++)
                {
                    Console.WriteLine();
                    for (int j = 0; j < col; j++)
                    {
                        Console.Write("{0}" + "\t", tmp[i, j]);
                    }
                }
            }
            public static string[,] Read()
            {
                string[,] str = new string[ROW, COL];
                string[] a;
                StreamReader sr = new StreamReader(@"D:\write.txt", Encoding.Default);
                Console.Write("文件流读取出来的数组:\n");
                for (int i = 0; i < ROW; i++)
                {
                    String line = sr.ReadLine();
                    a = line.Split('\t');
                    for (int j = 0; j < COL; j++)
                    {
                        str[i, j] = a[j];  
                        Console.Write(str[i, j]+"\t");
                    }
                    Console.WriteLine();
                }
                return str;
            }
            public static void Write()
            {
                //int[,] arrayA = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 } };
                int[,] arrayA = new int[ROW, COL];
                FileStream fs = new FileStream(@"D:\write.txt", FileMode.Create);
                StreamWriter sw = new StreamWriter(fs);
                Random rd = new Random();
                for (int i = 0; i < ROW; i++)
                {
                    for (int j = 0; j < COL; j++)
                    {
                        arrayA[i, j] = rd.Next(1, 100);
                        sw.Write(arrayA[i,j]+"\t");
                    }
                    sw.WriteLine();
                }
                Console.WriteLine("写入完成");
                //清空缓冲区
                sw.Flush();
                //关闭流
                sw.Close();
                fs.Close();
            }
        }
    }
    
    
    展开全文
  • printf("已转置数组\n"); //打印 printAll(array); system("pause"); return 0; } void inputData(int array[][COL]){ int x,y; for(y=0;y;y++){ for(x=0;x;x++){ printf("请输入第%d行第%d列数据:...

    问题如图

    在这里插入图片描述

    Code

    #include<stdio.h>
    //行列 
    #define COL 3
    #define ROW 3
    void inputData(int array[][COL]);
    void printAll(int array[][COL]);
    void transpositionArray(int array[][COL]);
    int main(){
    	
    	int array[ROW][COL]={0};
    	//输入 
    	inputData(array);
    	printf("原数组\n"); 
    	//打印 
    	printAll(array);
    	//转置 
    	transpositionArray(array);
    	printf("已转置数组\n"); 
    	//打印 
    	printAll(array);
    	
    	system("pause"); 
    	return 0;
    }
    void inputData(int array[][COL]){
    	int x,y;
    	for(y=0;y<ROW;y++){
    		for(x=0;x<COL;x++){
    			printf("请输入第%d行第%d列数据:",y+1,x+1);
    			fflush(stdin);
    			scanf("%d",&array[y][x]);
    			
    		}
    	}
    }
    void transpositionArray(int array[][COL]){
    	int temp=0;
    	int x,y;
    	//沿着对角线对称换一下值就好了。又因为对角线不需要变动,所以有了下面的循环条件。 
    	for(y=1;y<ROW;y++){
    		for(x=0;x<y;x++){
    			temp=array[y][x];
    			array[y][x]=array[x][y];
    			array[x][y]=temp;
    		}
    	}
    }
    void printAll(int array[][COL]){
    	int x,y;
    	for(y=0;y<ROW;y++){
    	
    		for(x=0;x<COL;x++){
    			printf("%d ",array[y][x]);
    		}
    		printf("\n");
    	}
    }
    
    

    演示图

    在这里插入图片描述

    展开全文
  • 首先我们需要理解转置的含义: 就是行变成列,列变成行。 例如: 3*3矩阵的转置: 100 200 300 400 500 600 700 800 900 转置后为: 100 400 700 200 500 800 300 600 900 Java代码实现: public class NewClass6 { ...
  • c# 二维数组

    2011-11-18 18:04:10
    对于二维数组的理解还是很模糊、于是在网上浏览到了下面的例子、特地保存、。...1、二维数组转置 classProgram { publicstaticstring[,]Rotate(string[,]array) { intx=array.GetUpperBound(0);...
  • 刚看到网上一篇博文里用sql实现了行列转置。sqlserver2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现。提到转置,立刻想起还在求学阶段曾经做过的一个...1、二维数组转置 classProgram{p...
  • }//这个指针形式的二维数组的输入可以考虑考虑成三个一维数组。 } ///程序填空,请将该函数填写完整 } void transpose(int *p) { int i,j=0; int t[9]; for(i=0,j=0;i;i++,j++){ t[j]=*(p+j); } *p=t[0]; *(p+1)=t...
  • 刚看到网上一篇文章里用sql实现了行列转置。sql server 2005/2008只用一个pivot函数就可以实现sql server 2000很多行的复杂实现。提到转置,立刻想起还在求学阶段曾经做过的一...1、二维数组转置CodeclassProgram{p...
  • 二维数组转置C语言详解

    千次阅读 多人点赞 2020-03-01 14:48:05
    转置:简单的说就是行列互换 编译环境:vc++6.0 代码 #include <stdio.h> #define M 3 #define N 4 int Transpose(int arry1[][N],int arry2[][M]) //转置函数 { for(int i=0;i<M;i++) for(int j=0;j&...
  • 二维数组实现矩阵转置

    万次阅读 2019-03-18 19:39:35
    实例说明: 这里给出两套源码。 自己写的: /** ... * All rights reserved. ... * 简要描述:二维数组转置 * * 当前版本:1.0 * 作 者: * 完成日期:2016-1-7 * 修订说明: * * 取代版本: * 作 者: ...
  • 在上一个博客中未完成的矩阵转置的问题:韩顺平_轻松搞定网页设计(html+css+javascript)_第28讲_js二维数组_js冒泡排序_二分查找_学习笔记_源代码图解_PPT文档整理 矩阵转置 转置后如下图所示: demo1.html ...
  • 将一个二维数组行和列元素互换,存到另一个二维数组中。 //将二维数组行和列互换,存到另一个二维数组中 public static void CTL(int[,] arr1) { //执行换行 int[,] arr2 = new int[3,3]; for (int i = 0; i ...
  • 1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换Time Limit:1 SecMemory Limit:128 MBSubmit:154Solved:112[Submit][Status][Web Board]Description写一个函数,使给定的一个二维数组(3×3)转置...
  • 二维数组转置矩阵并输出

    千次阅读 2018-05-22 21:01:00
    第一个嵌套for循环实现矩阵转换,把一维和二维一对调然后赋值给一个新的二维数组就行了 : b[i][k]=a[k][i] 第二个嵌套for循环实现输出,整个代码就完成了   转载于:...
  • 如何实现一个二维数组转置

    千次阅读 2016-04-26 15:26:55
    我们知道,如果将二维数组作为函数参数传入,需要指定二维数组的列数,如下所示。但是为了提高程序的可扩展性,我们不希望指定二维数组的行列数,所以我们想到传递给函数的是一维数组,以及数组的行数和列数。 ...
  • 目的:用二维数组输出下面成绩希望你可以成为第五名童鞋!代码:#includeint main(){/* 创建一个带有 4行 5 列的数组 */int a[4][5] = {{80,92,85,86,99},{78,65,89,70,99},{67,78,76,89,99},{88,68,98,90,99}};int ...
  • 无意间看到这个问题,平时对位数组和多维数组接触也比较少,就尝试了一下,挺简单的。O(∩_∩)O~~#includeintmain(void){inti,j;intarr[2][3]={{1,2,3},{4,5,6}};printf("两行三列:\n");for(i=0;i{for(j=0;j{...
  • 创建一个二维数组,将古诗春晓的内容赋值于二维数组,然后分别用横版和竖版两种方式输出 用c语言编程,感谢感谢
  • 二维数 /* bo4-1.c 串采用定长顺序存储结构(由c4-1.h定义)的基本操作(14个) */ /* SString是数组,故不需引用类型。此基本操作包括算法4.2,4.3,4.5 */ Status StrAssign(SString T,char *chars) { /* 生成一个其...
  • 2.输入N*N的矩阵,输出它的转置矩阵。 # include # include int main ( ) { int n , i , j , a [ 100 ] [ 100 ] , t ; scanf ( "%d" , & n ) ; for ( i = 0 ; i < n ; i ++ ) { for...
  • 输入3*4矩阵转置为4*3矩阵,并输出结果。 代码 #include #include #define ROW 3 #define COL 4 void main() { int a[ROW][COL],b[COL][ROW]; int i,j; //输入A矩阵 printf("please enter the element of ...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 379
精华内容 151
关键字:

c#二维数组转置

c# 订阅