c语言中怎样输入一个3*3的二维数组存储到文件中在文件中按顺序输出二维数组 C语言,如何在子函数中写一个3*3二维数组,给主函数调用!!

作者&投稿:宜佩 (若有异议请与网页底部的电邮联系)
#include<stdio.h>
#include <time.h>
#define N 3 //N定义数组的大小
void ShellSort(int a[],int n)
//直接插入排序:对含有n个整数的数组a[]进行从小到大排序
{
    int i,j,t;
    for(i=1;i<n;i++)
        for(j=i-1;j>=0&&a[j]>a[j+1];j--)
        {
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
        }
}

int main()
{     
    int i;
    int a[N*N]={0},b[N*N]={0};//二维数组a[n][n]在内存中就是以连续的一片空间存放的
    //本质上就是一个n*n大小的一维数组,故此处直接采用一维数组存取
    FILE *fp,*fp2;
    srand((unsigned int)time(NULL));//初始化随机数种子
    for(i=0;i<N*N;i++)
    {   
        a[i]=rand()%100+1;//随机生成100以内的整数,为了方便采用随机数
        //实际上可以采取手工输入
        //a[i]=scanf("%d");                 
        printf("%3d",a[i]);//输出该数
        if(i>0&&(i+1)%N==0) //按n*n行格式断行
            printf("
");  
       
    }
    ShellSort(a,N*N);  //数据排序
    if((fp=fopen("d:\mp\\abc.txt","w"))==NULL)  //请自行更改文件存放位置及文件名
    {  
        printf("打开文件出错.
");  
        return 0;  
    }  
    printf("排序结果写入文件
");
     for(i=0;i<N*N;i++)
     {   
                 
         printf("%3d",a[i]);////一起输出排序结果
         fprintf(fp, "%3d ",a[i]); //写到文件
         if(i>0&&(i+1)%N==0) 
            {
                fprintf(fp,"
");//换行
                printf("
");
            }
            
    }
  
    fclose(fp);     

    printf("读取文件
");
    if((fp2=fopen("d:\mp\\abc.txt","r"))==NULL)  
    {  
        printf("打开文件出错.
");  
        return 0;  
    } 
    for(i=0;i<N*N;i++)
     {   
        fscanf(fp2, "%d",&b[i]);  
        printf("%3d",b[i]) ;
        if(i>0&&(i+1)%N==0)//换行
            printf("
");  
        
    }
  
    fclose(fp2);
    return 0;
   
  }


  1. 先输入

  2. 再排序(1个函数)

  3. 然后文件输入(1个函数)



在用C语言中,如何将一个二维数组存储到文本文件中?~

fwrite 用于写 2 进制文件。用 fprintf 就可以了。
int a[4][5]={1 ,2,2,3,4,2,4,7,9,0,5,6,7,8,3,5,8,6,2,1};
FILE *fout;
int i,j;
fout = fopen("abc.txt","w"); // 打开文件,文本输出文件
for (j=0;j<4;j++){
for (i=0;i<5;i++){ fprintf(fout,"%d ",a[j][i]);} // 写
fprintf(fout,"
");
}
fclose(fout); //关闭

在子函数申请二维数组,主函数使用,可以用动态申请。
方法不止一种,我这里用指针的指针实现二维数组。
二维数组除了行列,本身地址也是连续的,从第一行第一列的元素地址++,可以取出所有元素。所以我这里先申请了完整的连续地址。

#include#includeint ** sr(void){ int i,j; int *memory=(int *)malloc(sizeof(int)*9);//申请完整的连续内存地址3*3 int **arr=(int **)malloc(sizeof(int*)*3);//申请二维数组行指针数组(也就是二维数组) if(!memory || !arr){ printf("内存申请错误!
");return NULL;} for(i=0,j=0;i<9;i+=3)//将连续地址按列数,取出每行首地址,赋值给二维数组元素 arr[j++]=&memory[i]; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&arr[i][j]); return arr;}int main(void){ int i,j,**arr=sr(); if(!arr) return 1; printf("---主函数调用子函数定义的二维数组---
"); for(i=0;i<3;i++,printf("
")) for(j=0;j<3;j++) printf("%d ",arr[i][j]); printf("
---实现二维数组地址连续性---
"); int *p=&arr[0][0]; while(p<=&arr[2][2]) printf("%d ",*p++); return 0;}

输入一个3行3列的二维数组,输出二维数组中行列号之和为3的数组元素以及...
答:include<stdio.h> int main(void){ int a[3][3],i,j,k,sum=0,count=0;for(i=0; i<3;i++){ for(j=0; j<3 ;j++)scanf("%d",&a[i][j]);} for(i=0; i<3;i++){ for(j=0;j<3;j++){ //k=i+j;if(i+j == 3){ printf("%d\n",a[i][j]);sum+=a[i...

输入一个三行三列的二维数组,找出最大值并将其与数组的最后一个数交换...
答:include <stdio.h> int main(){ int i,j,i0=0,j0=0,t,a[3][3];for(i=0; i<3; i++)for(j=0; j<3; j++){ scanf("%d",&a[i][j]);if(a[i][j]>a[i0][j0]){ i0=i;j0=j;} } t=a[2][2];a[2][2]=a[i0][j0];a[i0][j0]=t;for(i=0; i<3; ...

用C语言定义一个3*3的二维数组,编写一个程序查找并输出此二
答:include<stdio.h>int main(){ int nums[3][3]={{8,9,3},{6,5,4},{2,1,9}}; int i,j,cloSum[3]={0},rowSum[3]={0},*min=&nums[0][0]; double rowAve[3],cloAve[3]; printf("原数组:\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++...

定义一个3行3列的整型二维数组,从键盘输入数组元素,编程求二维数组所有...
答://#include "stdafx.h"//vc++6.0加上这一行.#include "stdio.h"int main(void){ int a[3][3],sum,i,j; for(sum=i=0;i<3;i++) for(j=0;j<3;j++){ scanf("%d",a[i]+j); sum+=a[i][j]; } printf("The result is %d\n",sum); return...

C语言中,假如定义一个3*3的数组,怎么才能一次输入3个数,然后分别赋值给...
答:int matrix[3][3];scanf("%d %d %d",&matrix[0][0],&matrix[0][1],&matrix[0][2]);//first rowscanf("%d %d %d",&matrix[1][0],&matrix[1][1],&matrix[1][2]);//second rowscanf("%d %d %d",&matrix[2][0],&matrix[2][1],&matrix[2][2]...

C语言。写一个函数,使给定的一个3X3的二维整型数组转置,即行列互换...
答:方法一、include<stdio.h> void main(){ void switchArray(int[3][3]);int array[][3]={{1,2,3},{4,5,6},{7,8,9}};int i,j;switchArray(array);return 0;} void switchArray(int array[][3]){ int newArray[3][3];int i,j;for(i=0;i<3;i++){ for(j=0;j<3;j...

二、定义一个3*3的整型二维数组 1) 让用户从键盘输入9个整数 2)输出3...
答:include <stdio.h>int main(){ int a[3][3]; int i,j; int max; //1 for(i = 0; i<3;i++) for(j = 0; j < 3; j ++) scanf("%d",&a[i][j]); //2 for(i = 0; i<3;i++) { for(j = 0; j < 3; j ++) printf("...

用C语言编写一个3x3的二维数组,求对角线的和
答:这个很简单啊 3x3的二维数组 你自己定义为 int A[x][y]; (你这题x=3,y=3;)对角线你自己看下 是不是有主对角线和副的? 主的好求 在循环里 只有当x = y的时候就把他们的值相加 最后就是主对角线的值 副对角线的话你看下 第一个是不是 x=1 y=2 第二个x=2 y=2 第三...

1、 对一个3*3的二维数组初始化,并求对角线上元素的和。
答:int i,j,sum1=0,sum2=0;for(i=0;i<3;i++){ for(j=0;j<3;j++)if(i==j)sum1=sum1+a[i][j];} cout<<"正对角线和为:"<<sum1<<endl;for(i=0;i<3;i++){ for(j=0;j<3;j++)if(i==2-j)sum2=sum2+a[i][j];} cout<<"反对角线和为:"<<sum2<<endl;}...

C语言 函数调用写一个函数,使给定的一个3*3的二维整型数组转置,即行 ...
答:方法一、include<stdio.h> void main(){ void switchArray(int[3][3]);int array[][3]={{1,2,3},{4,5,6},{7,8,9}};int i,j;switchArray(array);return 0;} void switchArray(int array[][3]){ int newArray[3][3];int i,j;for(i=0;i<3;i++){ for(j=0;j<3;j...