@C语言牛人,求矩阵乘法,为啥不对?

Python031

@C语言牛人,求矩阵乘法,为啥不对?,第1张

你写的这段函数错误太多:

void matrix(int A[imax][maxsize],int B[maxsize][jmax],int C[imax][jmax])

{

 for(i=0i<imaxi++)

  for(j=0j<jmaxj++)

   {

    for(k=0k<maxsizek++)

     x+=A[i][k]*B[k][j]

    C[i][j]=x

      }

}

这一段,等同于

void matrix(int A[][],int B[][],int C[][])

{

 for(i=0i<imaxi++)

  for(j=0j<jmaxj++)

   {

    for(k=0k<maxsizek++)

     x+=A[i][k]*B[k][j]

    C[i][j]=x

      }

}

函数里边用的imax、jmax、maxsize等其实用的是你定义的全局变量

2:C语言不允许用变量来作为数组长度,也就是以下几个语句是错误的

int A[imax][maxsize],B[maxsize][jmax],C[imax][jmax]

printf("input imax,jmax,maxsize:\n")

 scanf("%d%d%d",&imax,&jmax,&maxsize)

3:根据函数matrix(A[][],B[][],C[][])定义模型与函数调用

matrix(A[imax][maxsize],B[maxsize][jmax],C[imax][jmax])可以发现你的函数调用明显不对——函数参数要的是三个二维指针,而你实际参数却是三个数组的最后一个值,抛去前边的错误,这里写成matrix(A,B,C)

其它错误懒得看了,好好努力吧

#include<stdio.h> 

// #include<math.h>     // 不需要这个头文件

#include <string.h>

int main()

{

    /*

    char name[10]      // 这句定义的是一个长度为10的字符数组

    (char*)name[10]    // 这句是把下标为10的元素强转成char*类型

    */

    char name[10][100] // 应该这样定义字符串数组,定义10组字符串,每个字符串可以存放100个字符。

    int i

    void sort(char name[10][100])  // 排序函数应该这样声明,否则不会将参数解释成数组。

    for (i = 0 i < 10 i++)

        gets(name[i])  // 这里应该这样写,给第i个字符串数组赋值

    sort(name)         // 排序字符串数组

    

    for (i = 0 i < 10 i++)

        printf("%s\n", name[i])

    return (0)         // 注意main函数是有返回值的,虽然不写也可以,但应该养成好习惯。

}

void sort(char name[10][100])

{

    // char *t

    char t[100]        // 应该这样定义临时字符串缓冲区

    int i = 0, j = 0/*, k*/    // 不需要k

    for (i = 0 i < 10 i++)

    {

        // k = i

        for (j = i + 1 j < 10 j++)

        {

            if (strcmp(name[j], name[i]) < 0)

                /*   k = j//用排序法处理字符串

               if (k != i)

               {

               t = name[i] name[i] = name[j] name[j] = t

               }*/

            {

                // 这里你需要交换两个字符串,可以用到上面定义的缓冲区t[100]

                // 交换两个字符串应该这样写:

                strcpy(t, name[i])         // 把第i个字符串的内容拷贝到缓冲区

                strcpy(name[i], name[j])   // 把第j个字符串的内容拷贝给第i个

                strcpy(name[j], t)         // 把缓冲区里面的内容拷贝给第j个

            }

        }

    }

}