EX: Matriz e vetores - Diagonal principal

 Algoritmo que recebe a matriz A mxn, armazenada em um vetor e retorna os elementos da diagonal principal.

#include <stdio.h>
#include <stdlib.h>

void ler_matriz(int *v,int m,int n){
     int i,j,k,aux;
     for(i=0;i<m;i++){
       for(j=0;j<n;j++){
             printf("digite a%d%d  ",i,j);          
             scanf("%d",&aux);
             k=i*n+j;
             v[k]=aux;
       }
  }
}
void imprimir_matriz(int *v,int m,int n){
     int i,j,k;
     for(i=0;i<m;i++){
       for(j=0;j<n;j++){
           k=i*n+j;
           printf("%d ",v[k]);
       }
       printf("\n");
     }
}
int *diagonalprincipal(int*v,int m, int n){
     int i,j,*vetor,k,p=0;
     vetor=(int*)calloc(sizeof(int),n);
     for(i=0;i<m;i++){
       for(j=0;j<n;j++){
            k=i*n+j;           
            if(i==j){
              vetor[p]=v[k];
              p++;   
            }      
       }
     }
     return vetor;
 
}
void imprimir_vetor(int *v,int n){
     int i,k;
     printf("\na diagonal eh:\n"); 
     for(i=0;i<n;i++){
                
       printf("%d ",v[i]);
     }
}

int main(){
    int m,n,*v,*k;
    printf("digite a qntd de linha\n");
    scanf("%d",&m);
    printf("digite a qntd de coluna\n");
    scanf("%d",&n);
    v=(int*)calloc(sizeof(int),m*n);
    ler_matriz(v,m,n);
    k= diagonalprincipal(v, m,n);
    imprimir_matriz(v,m,n);
    imprimir_vetor(k, n);
    system("pause");
    return 0;
}