C语言,n行n列数组,求和,要求进来看,好的加满分

作者&投稿:氐迹 (若有异议请与网页底部的电邮联系)
c语言数组求和~

scanf("%d",&a[1]);
输入的值将被加入到数组第二个元素。
而你后面的语句却是:
for(i=0;i<1;i++)
{s=s+a[i];}

其中a[0] 就是个空值.相加当然产生个错误值。

改成a[5]更错了, a[5]数组长度5 ,索引是0..4 , a[5]越界了.

记住基础的原则:在局部域定义的变量必须手工初始化。
养成好习惯,谢谢。

先获取数组长度,然后用for循环,从数组中获取值进行累加求和。
#include
#include
int main()
{
int n;
int val;
int * a;
int sun = 0, i;
printf("请输入数组的长度:");
scanf("%d", &n);
printf("
");
a = (int *)malloc(n * sizeof(int));//为数组a动态分配内存
for(i = 0; i < n; i++)
{
printf("请输入数组的第%d个元素的值:", i+1);
scanf("%d", &val);
printf("
");
a[i] = val;
}
for (i = 0; i < n; i++)
{
sun+=a[i];//sun+=a[i]相当于sun=sun+a[i];
}
printf("sun = %d
",sun);
free(a);//释放a动态分配的内存
return 0;
}

扩展资料:
一个数组中的所有元素具有相同的数据类型(在C、C++、Java、pascal中都这样。但也并非所有涉及数组的地方都这样,比如在Visual Foxpro中的数组就并没这样的要求)。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、字符串、数值等等)。可以声明任何基本数据类型的数组,包括用户自定义类型和对象变量。
如果要用户输入的是一个数组,一般是用一个循环,但是在输入前也需要固定数组的大小。
compact跟变长数组没有太大的关系,也应该用不到变长数组。因为一般的传数组到函数中就是传数组的地址和元素的个数的,那只是一个提示,不是要求。
参考资料来源:百度百科-数组

//用全排列的方法求解,排除掉全排列中行号和列号相同的即可
//由于每次测试可能输入较多数据,使用freopen进行重定向,这样可以节省调试时间,在工程文件夹中建立一个名为
//t.txt的文件,然后以如下格式输入数据: 
//2    //这个是矩阵的大小
//12  22    //下面是每行的数据
//32 20

//如果需要手动输入测试数据,将freopen 这行代码注释掉即可。

//另外,为了观察结果,输出了较多的提示信息,可以自行修改
#include <stdio.h>

#define MAX 100 

int perm[MAX+1] ;//存放所有的排列数
int data[MAX+1][MAX+1] ; //数据
int count = 1 ;
void permutation(int perm[], int n, int curr)
{
    int i ;
    int sum ;
    if(curr==n)
    {
        sum = 0 ;
        for(i = 1; i <=n ;i++)
        {
            //列号在perm[i]中
            if(i == perm[i])
                return ;
            else
            {
                sum += data[i][perm[i]] ;
            }
        }
        for(i = 1; i <= n; i++)
            printf("A[%d][%d]=%d ", i, perm[i], data[i][perm[i]]) ;
        printf("
S%d=%d

", count++, sum) ;
        return ;
    }
    for(i = curr; i <= n; i++)
    {
        int t ;
        t = perm[curr] ;
        perm[curr] = perm[i] ;
        perm[i] = t ;
        permutation(perm, n, curr+1) ;
        t = perm[curr] ;
        perm[curr] = perm[i] ;
        perm[i] = t ;
    }
}

int main()
{
    freopen("t.txt", "r", stdin) ;
    int i, j ;
    int n ;
    scanf("%d", &n) ;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            scanf("%d", &data[i][j]) ;
    for(i = n; i >= 1; i--)
        perm[i] = i ;
    permutation(perm, n, 1) ;
    return 0 ;
}

//我写的可能有些问题,没时间改了,楼主自己改改看吧。我的结果好像不是(n-1)!个。


#include<stdlib.h>
#include<stdio.h>
int*flag;
int*b;
int*arr;
int sum=0;
int*M;
int n;
void Resort(int s)
{
 int i;
 if(s>n)return ;
 if(s==n)
 {
  for(int j=0;j<n;j++)
  {
   if(j==b[j])return;
  }
 for( j=0;j<n;j++)
 {
        sum+=*(M+j*n+b[j]);
 }
  return;
 }
 for(i=0;i<n;i++)
 {
  if(flag[i]==0)
  {
   b[s]=arr[i];
   flag[i]=1;
   Resort(s+1);
   flag[i]=0;
  }
 }
}

int main()
{
 
 
 printf("输入维数n: ");
 scanf("%d",&n);
 M=(int*)malloc(n*n*sizeof(int));
 printf("输入矩阵: 
");
 for(int i=0;i<n;i++)
 {
  for(int j=0;j<n;j++)
  {
   scanf("%d",M+j+i*n);
  }
 }
 flag=(int*)malloc(n*sizeof(int));
 arr=(int*)malloc(n*sizeof(int));
 b=(int*)malloc(n*sizeof(int));
 for(i=0;i<n;i++)
 {
  arr[i]=i;
  flag[i]=0;
 }
 Resort(0);
 printf("the sum is %d",sum);
 return 0;

}


有点像行列式求值问题,但是是加法...
二维数组的定义是怎样的? n的大小固定吗? c++语言语法行不?

我的思路是递归法,有点类似于代数余子式分解法
先找出一个不重复数字序列如n=5时 2,3,5,4,1就是一个可行数列
则Si= A(1,2)+A(2,3)+A(3,5)+A(4,4)+A(5,1)
现在要做的就是找出所有不重复的数列
设F(1,2,3,4,5)是找出1,2,3,4,5的所有不重复数列
则F(1,2,3,4,5)= 1,F(2,3,4,5) + 2,F(1,3,4,5) +3,F(1,2,4,5)+ 4,F(1,2,3,5) + 5,F(1,2,3,4)
则可将n阶问题分成n个n-1阶子问题

我不知道你具体的数据结构是如何, 算法应该是这样

"每行取一个元素,取出的元素不能在同一列上"

那个数应该是P(n,n),也就是n!个啊,怎么会是(n-1)!


输入一个n行m列(n<=4,m<=4)的数组,c语言
include <stdio.h>const int N = 4;int main() {int a[N][N],i,j,imin,jmin;for(i = 0; i < N; ++i)for(j = 0; j < N; ++j)scanf("%d",&a[i][j]);imin = jmin = 0;for(i = 0; i < N; ++i) {for(j = 0; j < N; ++j) {if(a[imin][jmin] >...

c语言中二维数组哪个是行,哪个是列
6、二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按"行优先顺序"存储时则元素a[i][j]的地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t ...

用c语言为一个数据文件分配动态二维数组
假设数据元素是int型的,m行n列;include <stdio.h> include <stdlib.h> void main(){ int m,n;scanf("%d,%d",&m,&n); \/\/输入行数m和列数n,用逗号隔开 int **p;p=(int**)malloc(sizeof(int*)*m);for(int i=0;i<n;i++)p[i]=(int*)malloc(sizeof(int)*n);} ...

C语言中二维数组的第一维长度是什么意思
二维数组,也就是一组数据,有两个维度行和列。比如 int a[M][N];定义了一个M行N列的数组,总元素个数为M*N。其第一维长度,也就是总的行数,在C语言中,就是定义中的M。类似的,第二维长度,也就是每行元素个数。在C语言中就是定义中的N。

大一c语言作业 找出具有m行n列二维数组Array的“鞍点”
i++)if (a[row][i]>a[row][maxcol]) maxcol=i;return maxcol;}int Minrow(int a[][N],int m,int col){int i,minrow=0;for(i=1;i<m;i++)if (a[i][col]

实现在N行M列的二维数组中,找出每一行上的最大值,且原数组值不变。
include<stdio.h> int main(void){ static int a[3][4]={1, 5, 7, 4 ,2, 6, 4, 3,8, 2, 3, 1 };int i,j;int max;for(i=0;i<3;i++){ max=a[i][0];for(j=0;j<4;j++){ if(max

. 编写程序求解骑士巡游问题:在n行n列的棋盘上(如n=5),假设一位骑士...
接着就走方向最少的一条路。这样难走的路在前面已经走了,后面的路就好走很多了,一般都能找到方向。当然还有递归这种算法,但高维度的递归是没有意议的,电脑是算不出来的或着用很长时间才能算出来。下面是我的算法 include<iostream> using namespace std;\/\/定义棋盘的大小 define N 8 define ...

c语言中怎么定义m行n列的由0和1组成的随机二维数组??
m和n不确定,所以要在输入m和n后动态创建二维数组。举例代码如下:\/\/#include "stdafx.h"\/\/If the vc++6.0, with this line.#include "stdio.h"#include "stdlib.h"#include "time.h"int main(void){ int m,n,i,j; char **p; printf("Input m & n(>0 int)...\\n");...

c语言随机生成一个n*n的100以内的正整数输出矩阵 每列的最小值 存放...
include <stdio.h>#include <stdlib.h>#include int main(){ int n, **a, *b; int i,j; srand(time(NULL)); scanf("%d",&n); if(n<=0) { printf("input error\\n"); return -1; } b=(int *)malloc(sizeof(int)*n); a=(int **)mallo...

C语言中 m行n列 a[i][j]位置为 (i*n+j+1) 什么意思? 详细解释一下_百度...
你说的位置应该是在内存里面的地址位置吧。二维数组有按行和按列的定位读取方法;数组a[m][n]按行,a[i][j]位置就是i*n+j;按列a[i][j]的位置就是j*m+j;画一个矩阵图应该更好理解的,希望对你有帮助

顺河回族区13586853279: C语言数组元素求和的编写程序(具体的步骤) -
桑栏欣奇: 程序如下: #include <stdio.h> int a[4][4]={{1,2,3,4},{4,5,6,1},{7,8,9,1},{10,11,12,1}}; int ahang[4],alie[4]; void main() { int sum=0; for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { sum+=a[i][j]; ahang[i]+=a[i][j]; alie[j]+=a[i][j]; } } printf("%d\n",sum); int k,o; int min...

顺河回族区13586853279: C语言 求矩阵各行各列的和 -
桑栏欣奇: 思路:求矩阵各行的和时,矩阵的行先不变,利用for循环依次遍历该行的每一列元素累加求和;求矩阵各列的和时,矩阵的列先不变,利用for循环依次遍历该列的每一行元素累加求和. 参考代码:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...

顺河回族区13586853279: C语言:分别求各行各列及表中所有数之和 -
桑栏欣奇: #include<stdio.h>int main() {float a[3][3];float sum1,sum2,sum;int i,j;sum=0;float count=1;for(i=0;i<3;i++) //初值{for(j=0;j<3;j++)a[i][j]=count++;}for(i=0;i<3;i++) //输出{for(j=0;j<3;j++)printf("%.2f\t",a[i][j]);printf("\n");}printf("...

顺河回族区13586853279: C语言中求N个数据的的和 -
桑栏欣奇: 思路:直接定义两个变量n和sum,n用于接受键盘输入,sum用于存储累加和,每次输入并累加求和. 参考代码:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16#include "stdio.h" #define N 10 //宏定义N的值 intmain() {intn,i,sum=0;for(i=0;i<N;i++){scanf("%d",&n);sum+=n;}printf("求和为:%d\n",sum); } /* 运行结果:输入N个数求和 8 7 3 4 1 9 2 0 5 6 求和为:45 */

顺河回族区13586853279: c语言数列求和 2/1+3/2+5/3+8/5………求前n项之和 -
桑栏欣奇: #includefloat sum (n) { float sum = 0; int i = 1; for(; i <= n; i++) { sum += ((float)i)/(i+1); } return sum; } main() { printf("%.2f\n", sum(20)); }

顺河回族区13586853279: 用C语言编写一Total函数,求N行M列的二维数组中所有数的和 -
桑栏欣奇: 当行列较多,或元素数值较大时,和可能很大,所以Total函数用double送返.元素数值用 float 型 (允许输入float,int值). N,M不定,所以动态分配数组.假定N,M大于等于2.#include <stdio.h>#include <stdlib.h> double Total(float **a,int N,int M...

顺河回族区13586853279: c语言如何计算二维数组中的每行的数字的和 -
桑栏欣奇: #include void main() { int a[3][3]={{0,2,1},{2.3.4},{7,86,3}}; int max=a[0][0]; printf("二维数组为:\n"); /*打印原数组*/ for(int i = 0;i<3;i++) { for(int j = 0;i<3;j++) { printf(a[i][j]); } printf("\n"); } /*求每行的最大值*/ for(int i = 0;i<;i++) { for(int j=0;j<3;...

顺河回族区13586853279: C语言数组分别求和怎么求?坐着等………… -
桑栏欣奇: 你的程序有点小问题.可以将temp定义成数组,保存每一行的结果.如下:#include <stdio.h>#define ROWSIZE 2#define COLSIZE 3 void main() { int i[ROWSIZE][COLSIZE]={0}; int irow=0; int icol=0; int temp[ROWSIZE]={0}; for(irow=0;irow<...

顺河回族区13586853279: 输入若干数,均在一行内,求和(用C语言写) -
桑栏欣奇: #include<stdio.h> int main() { int sum=0,n; while(scanf("%d",&n)!=EOF)//当ctrl+z为输入截止符 sum+=n; printf("%d\n",sum); return 0; }

顺河回族区13586853279: C语言:求数组中“行号>列号”的元素之和. -
桑栏欣奇: #include "stdio.h" void main() { int a[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; int i,j,sum=0; for(i=0 ;ifor(j=0 ;j sum+=a[i][j]; printf("sum=%d",sum); } 楼上的稍微改下运行速度会快点

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网