c语言二维数组所有元素之和,急c语言定义二维数组表示一个矩阵求上三角所有元素之和

1,急c语言定义二维数组表示一个矩阵求上三角所有元素之和函数 fun() 计算上三角所有元素之和 。参数1是数组,参数2是n*n数组大小n.返回 上三角元素之和 。调用方法: fun(&a[0][0],n) 程序如下:#include<stdio.h>#include<stdlib.h>float fun(float *a, int n){int i,j;float sum=0;for (j=0;j<n;j++)for (i=j;i<n;i++)sum = sum + a[j*n+i];return sum;}main(){float a[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};int n=4;printf("%g",fun(&a[0][0],n));return 0;}算例输出: 70
2,C编程求二维数组所有元素的和int SunMatrix(int *matrix[],int Column,int Line) //假设列数为Column 行数Line int sum=0; for(int i=0;i<Line;i++) for(int j=0;j<Column;j++) sum+=matrix[i][j]; return sum;}#include <iostream>using namespace std;const int year = 3;const int month = 12;int main(int argc,char **argv)int sales[year][month];int o_total [3] =int t_total = 0;for(int i=0;i<year;i++)for(int j=0;j<month;j++)cout<<"year "<<i+1<<" "<<j+1<<" month ";cin>>sales[i][j];o_total[i] += sales[i][j];t_total += sales[i][j];}//t_total += sales[i][j];cout<<"year "<<i+1<<" "<<o_total[i]<<endl;}cout<<"total of year"<<t_total<<endl;}
3,C语言求二维数组之和for(p=a;p<a+12;p++)1 ,  p = a; 是ok的 。2, p < a + 12; 就不ok了:a是一个二维数组,他的长度是12 * sizeof(int) ,  在32位机上是48,这里的a+12 就是 a 地址后面的12 * 48 的位置 ,  a[0] + 12 是a地址后12 * 4的位置!简单的说:a[0]是一个数组中得一个元素 , 而a是一个变量,两个本质就不一样了 。再详细一点:p=a[0]是指指针p指向数组a[]的第一个元素a[0],而a[0]相当于第1个元素的地址 。p=a,这个本身就有错了撒a是一个变量名,p是指针,将变量值赋给指针??所以就错了撒,应该是把变量地址赋给指针p,所以应该是p=&a;但是你之前没有定义变量a,所以编译的时候还是会报错 , 说没定义变量a.打印了下a的地址是XXXXX1C0a[0]+1的地址是XXXXX1C4a+1的地址是XXXXX 1d0因为在二维数组中,a 相当于 &a[0] ,  a[0] 相当于 &a[0][0];所以 p=a+1 指针p移动4个数(16个字节) a[0]+1 指针p移动1个数(4字节).综上,p<a+12,指针P已经超出了数组范围 。所以S出错 。p=a[0],是把&a[0][0]赋给p,也就是p是指向列的,因此p++操作,是将指针移动一列,也就是从a[i][j]移动到a[i][j+1]如果你把a赋给了p,(先不说正确与否,实际上是错的,但是假定正确)那么实际上是把&a[0]赋给了p,那么p++操作,是将指针移动一行,也就是从a[i][j]移动到a[i+1][j], 。我们再来看看 为什么说p=a本身有错,因为定义中 int *p,a[3][4]; p是指向一个数据的指针 , 而a实际上是指向a[0] 、a[1]、a[2]的,但是a[0] a[1] a[2]他们都是一个一位数组,都包含多个数据 , 因此要想把a赋给p,p应该这样定义 int (*p)[4] ,也就是p也指向一个含有四个元素的地址,这样a+1相当于移动一行,也就是从a[i][j]一定到a[i+1][j],p+1也是一定移动了个元素(就是一行元素的个数) 。因此,指针赋值的时候要注意,指针指向的元素个数究竟匹配不匹配,并不是所有指针都可以互相赋值的 。修改如下:main() int i,s=0,(*p)[4],a[3][4]=for(p=a;p<a+3;p++)for(i=0;i<4;i++)s+=*(*p+i); printf("s=%d\n",s);}这就是关于普通量存到内存后,用指针引用的话,指针的不正确表示带来的,也就是指针其实和普通量(尤其是二维数组)取元素的位置不一致导致的 。相当于他两个的偏移量是不一致的 。想学c的话,建议下载个c语言的chm格式帮助文档,里面都有很详细的讲解二维数组简单的说 , 就好比10只母猪,没只母猪又生n只小猪,组成的数组 。【c语言二维数组所有元素之和,急c语言定义二维数组表示一个矩阵求上三角所有元素之和】
4,c语言设有一个5x5的二维数组编写程序求1所有元素的和#include<stdio.h>#define size 5int main() int det[size][size]= for(i=0;i<size;i++)for(j=0;j<size;j++)scanf(" %d",&det[i][j]);} }//循环赋值 for(i=0;i<size;i++)for(j=0;j<size;j++)sum+=det[i][j];//所有元素之和if(i==j)sum_mdia+=det[i][j];//主对角线之和if(i+j==4)sum_cdia+=det[i][j];//副对角线之和}} } printf("%d %d %d\n",sum,sum_mdia,sum_cdia); return 0;}部分关键代码如下:int a[4][4] = 0, sum1 = 0, sum2 = 0, sum3 = 0; /*声明变量,为方便使用整形*/int i = 0, j = 0;/*在循环中用到的临时变量*//*所有元素求和,使用了两个循环嵌套*/for (i=0;i=4;i++) for(j=0;j=4;j++) sum1 += a[i][j]; }}/*主对角线元素求和*/for (i=0;i=5;i++) sum2 += a[i][i];}/*副对角线元素求和*/for (i=0;i=4;i++) for(j=4;j=0;j--) sum3 += a[i][j]; break; }}只给出了求和的关键代码,其他的部分题主应该会写吧 。(1) for(i=0;i<5;i++)for(j=0;j<5;j++)sum+=a[i][j];}(2) for(i=0;i<5;i++)sum+=a[i][i];(3) for(i=0;i<5;i++) sum+=a[4-i][i];#include<stdio.h>#define a 5int main(void)int array1[a][a];int sum=0;int sum1=0;int sum2=0;int i,j;for(i=0;i<a;++i)for(j=0;j<a;++j)printf("输入数组[%d][%d]元素:",i,j);scanf("%d",&array1[i][j]);sum+=array1[i][j];}}printf("所有元素和sum=%d\n",sum);for(i=1;i<a+1;++i)for(j=1;j<a+1;++j)while(i=j)break;}}}printf("主对角线元素和sum1=%d\n",sum1);for(i=0;i<a;++i)for(j=0;j<a;++j)while(4==i+j)break;}}}printf("副对角线元素和sum2=%d\n",sum2);return 0;}看不见你第四个问题是啥就只做了前三个希望采纳#include #include typedef int elemtype;void main()elemtype **arr;int n,m;int i,j;elemtype sum1=0,sum2=0;printf("请分别输入行数和列数:\n");scanf("%d%d",&n,&m);//动态开辟二维数组arr=(elemtype**)malloc(n*sizeof(elemtype*));for(i=0;i*(arr+i)=(elemtype*)malloc(m*sizeof(elemtype));printf("请输入矩阵元素\n");for(i=0;ifor(j=0;jscanf("%d",(*(arr+i)+j));printf("检查数据\n");for(i=0;ifor(j=0;jprintf("%d ",*(*(arr+i)+j));printf("\n");}printf("\n");for(i=0;ifor(j=0;jif(i==j)sum1+=*(*(arr+i)+j);if(i+j==m-1)sum2+=*(*(arr+i)+j);}printf("主对角线和%d与副对角线和%d差为%d\n",sum1,sum2,sum1-sum2);//销毁动态开辟的二维数组for(i=0;ifree(*(arr+i));free(arr);

    推荐阅读