c-C语言调用函数实现矩阵自乘

问题描述

C语言调用函数实现矩阵自乘

各位前辈,小弟新学C语言,怎么也调试不过,不知道哪里出了问题,请问我该怎么调试?
调用void SelfMul(int A1[][3],int A2[][3],int n)实现3阶矩阵的乘法

#include
//void SelfMul(int A1[][maxSize],int A2[][maxSize],int n)
void SelfMul(int A1[][3],int A2[][3],int n)
{
int s=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
A2[i][j]=0;
for(int k=0;k<n;k++)
A2[i][j]=A2[i][j]+A1[i][k]*A1[k][j];
printf("%d ",A2[i][j]);
if(++s%3==0)printf("n");
}
}
int main()
{
int A1[][3]={{0,1,0},{0,0,1},{1,1,0}};
int A2[3][3];
// int s=0;
SelfMul(A1[][3],A2[][3],3); //编译问题出错提示所在行
/*
for(int m=0;m<3;m++)
for(int b=0;b<3;b++)
{
printf("%d ",A2[m][b]);
if(++s%3==0)printf("n");
}
*/
return 0;
}

编译不通过,提示error C2059: syntax error : ']'

解决方案

标准的[]里面应该是有值的
你试试这个编译应该不会出错,但是运行就不知道了

enter code here  #include <stdio.h>

void SelfMul(int A1[][3],int A2[][3],int n);
void SelfMul(int A1[][3],int A2[][3],int n)
{
int s=0;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
A2[i][j]=0;
for(int k=0; k<n; k++)
A2[i][j]=A2[i][j]+A1[i][k]*A1[k][j];
printf("%d ",A2[i][j]);
if(++s%3==0)printf("n");
}
}
int main()
{
int A1[][3]= {{0,1,0},{0,0,1},{1,1,0}};
int A2[3][3];
int s = 0;
SelfMul(A1[3][3],A2[3][3],3);
for(int m=0; m<3; m++)
for(int b=0; b<3; b++)
{
printf("%d ",A2[m][b]);
if(++s%3==0)printf("n");
}

return 0;

}

解决方案二:

你好,如上面那面仁兄所回!
就是在调用函数的时候,只需要调用SelfMul(A1, A2, 3);就可以了
解释:
若传递进去的参数为A1[3][3],根据数组的规则,
那么这只是这个数组中的一个元素
而且已经越界了(数组下标从0开始)

而函数只希望传进一个n行3列的二给数组,
所以此时只需传递这两个二维数组的数组名就可以了!

其它并没有检查!

对您的建议,注意缩进和空格!

void SelfMul(int A1[][3], int A2[][3], int n)
{
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
A2[i][j] = 0;
for(int k = 0; k < n; k++)
A2[i][j] = A2[i][j] + A1[i][k] * A1[k][j];
printf("%d ", A2[i][j]);
}
printf("n");
}
}
int main()
{
int A1[][3]= {{0, 1, 0}, {0, 0, 1}, {1, 1, 0}};
int A2[3][3];
SelfMul(A1, A2, 3);
/*
for(int m = 0; m < 3; m++)
{
for(int b = 0; b < 3; b++)
{
printf("%d ", A2[m][b]);
}
printf("n");
}
*/
return 0;
}

代码格式已经改变了!

解决方案三:

SelfMul(A1,A2,3);

时间: 2024-08-03 12:52:05

c-C语言调用函数实现矩阵自乘的相关文章

《R语言编程艺术》——3.3 对矩阵的行和列调用函数

3.3 对矩阵的行和列调用函数 *apply()函数系列是R中最受欢迎同时也是最常用的,该函数系列包括apply().tapply()和lapply().这里我们主要介绍apply().apply()函数允许用户在矩阵的各行或各列上调用指定的函数.3.3.1 使用apply()函数以下是apply()函数的一般形式: 参数解释如下:m 是一个矩阵.dimcode 是维度编号,若取值为1代表对每一行应用函数,若取值为2代表对每一列应用函数.f是应用在行或列上的函数.fargs是f的可选参数集.例如

函数指针 c语言 指针-C语言指向函数的指针的调用

问题描述 C语言指向函数的指针的调用 int *d_bubblesort(int a[]int n)//数组长度为n的冒泡降序排序{int ij;int temp;for(i=0;i {for(j=n-1;j>i;j--){if(a[j]>a[j-1]){temp=a[j-1];a[j-1]=a[j];a[j]=temp;} }}return(a);} void main(){int i;int *p;int a[10]={65412398710};int (*fun)(intint);fun

c语言-C语言在函数中调用指数组的问题

问题描述 C语言在函数中调用指数组的问题 #include <stdio.h> int i=5; void output_array ( int array[] ){ int a; for ( a=0; a<i; a++ ){ printf ( "%i%s", &array[a], "t" ); //warning: format specifies type 'int' but the argument has type 'int *'

c-C语言中函数数组调用问题

问题描述 C语言中函数数组调用问题 5C 定义的二维数组为全局变量,在主函数中有多个子函数要用到它.请问下大家,子函数中计算的此二维数组的值间能传递么?还是也需要调用呢?~~ 解决方案 可以传引用或者指针,或者定义为全局变量.那就直接用不用传了. 解决方案二: 传递数组地址或指针,C中没有引用 解决方案三: 你用全局变量,每个函数里面都可以改啊. 解决方案四: 全局的直接访问就行了,就是要注意不要把里面的数据乱改,导致读取出问题 解决方案五: 你使用全局变量,每个函数都可以去访问它并且修改它,会

api c-怎样用c语言调用wiondowsAPI函数,编写一个文本框,双击可以打开一个图片文件

问题描述 怎样用c语言调用wiondowsAPI函数,编写一个文本框,双击可以打开一个图片文件 怎样用c语言调用wiondowsAPI函数,编写一个文本框,双击可以打开一个图片文件

调用函数-一道C语言的题目,求大神解答

问题描述 一道C语言的题目,求大神解答 输入一个正整数,逐位分割该数的每一位数字,求由数字所构成的最大整数.例如:输入624891,得到最大整数:986421.要求定义和调用函数计算并返回一个x可构成的最大整数. 解决方案 #include #define N 20 int fun(int n) { int x,t,s[N]={0},i,j,len; for(len=0;x!=0;len++) { x=n/10; s[len]=n%10; n=x; } for(i=0;i<len-1;i++)

c语言中函数形参为空指针,调用时可以不用带实参吗?

问题描述 c语言中函数形参为空指针,调用时可以不用带实参吗? 最近在看代码,有地方不太懂 void map_hash_init(void) { map_hash_head = hash_create ((uint32_t (*)(void ))(con_key), (int ()(void *, void *))(Con_comp)); } 这是一个hash表的初始化 hash_creat的原型: hash_create (uint32_t (*hash_key) (), int32_t (*h

Go语言中函数的参数传递与调用的基本方法_Golang

按值传递函数参数,是拷贝参数的实际值到函数的形式参数的方法调用.在这种情况下,参数在函数内变化对参数不会有影响. 默认情况下,Go编程语言使用调用通过值的方法来传递参数.在一般情况下,这意味着,在函数内码不能改变用来调用所述函数的参数.考虑函数swap()的定义如下. 复制代码 代码如下: /* function definition to swap the values */ func swap(int x, int y) int {    var temp int    temp = x /

Lua编程示例(六): C语言调用Lua函数_Lua

C++端: #include "stdafx.h" lua_State *L; void load_lua(lua_State **L,char *filename){ *L=luaL_newstate(); luaL_openlibs(*L); if(luaL_loadfile(*L,filename) || lua_pcall(*L,0,0,0)){ luaL_error(*L,"load file error! %s",lua_tostring(*L,-1))