关于#C语言#的问题,如何解决?

为什么在两个一维数组的加减乘除运算 除法测试过程中会出现0 0 0的情况

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

void menu(){
    printf("============ 数组综合运算 ============\n");
    printf("1. 一维数组的输入并输出\n");
    printf("2. 在一维数组中查找、插入、删除元素\n");
    printf("3. 合并两个一维数组\n");
    printf("4. 两个一维数组的加减乘除运算\n");
    printf("5. 二维数组的输入并输出\n");
    printf("6. 二维数组的转置\n");
    printf("7. 两个二维数组的加减(指针运算)\n");
    printf("8. 退出程序\n");
}

void input_array(int *arr, int len){
    printf("请输入%d个整数:\n", len);
    for(int i=0; i<len; i++){
        scanf("%d", &arr[i]);
    }
}

void output_array(int *arr, int len){
    printf("数组元素为:[ ");
    for(int i=0; i<len; i++){
        printf("%d ", arr[i]);
    }
    printf("]\n");
}

void sort_array(int *arr, int len){
    int temp;
    for(int i=0; i<len-1; i++){
        for(int j=0; j<len-1-i; j++){
            if(arr[j] > arr[j+1]){
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

void search_array(int *arr, int len, int key){
    int flag = 0;
    for(int i=0; i<len; i++){
        if(arr[i] == key){
            printf("查找到元素%d,下标为%d\n", key, i);
            flag = 1;
            break;
        }
    }
    if(flag == 0){
        printf("未找到元素%d\n", key);
    }
}

void insert_array(int *arr, int *len, int index, int value){
    for(int i=*len; i>index; i--){
        arr[i] = arr[i-1];
    }
    arr[index] = value;
    (*len)++;
}

void delete_array(int *arr, int *len, int index){
    for(int i=index; i<*len-1; i++){
        arr[i] = arr[i+1];
    }
    (*len)--;
}

void merge_array(int *arr1, int len1, int *arr2, int len2, int *arr3){
    int i = 0, j = 0, k = 0;
    while(i < len1 && j < len2){
        if(arr1[i] <= arr2[j]){
            arr3[k++] = arr1[i++];
        }else{
            arr3[k++] = arr2[j++];
        }
    }
    while(i < len1){
        arr3[k++] = arr1[i++];
    }
    while(j < len2){
        arr3[k++] = arr2[j++];
    }
}

void add_array(int *arr1, int len1, int *arr2, int len2, int *arr3){
    for(int i=0; i<len1; i++){
        arr3[i] = arr1[i] + arr2[i];
    }
}

void sub_array(int *arr1, int len1, int *arr2, int len2, int *arr3){
    for(int i=0; i<len1; i++){
        arr3[i] = arr1[i] - arr2[i];
    }
}

void mul_array(int *arr1, int len1, int *arr2, int len2, int *arr3){
    for(int i=0; i<len1; i++){
        arr3[i] = arr1[i] * arr2[i];
    }
}

void div_array(int *arr1, int len1, int *arr2, int len2, int *arr3){
    for(int i=0; i<len1; i++){
        if(arr2[i] == 0){
            printf("数组2中有元素为0,无法进行除法运算。\n");
            return;
        }
        arr3[i] = arr1[i] / arr2[i];
    }
}

void input_matrix(int **matrix, int row, int col){
    printf("请输入%d行%d列的矩阵:\n", row, col);
    for(int i=0; i<row; i++){
        for(int j=0; j<col; j++){
            scanf("%d", &matrix[i][j]);
        }
    }
}

void output_matrix(int **matrix, int row, int col){
    printf("矩阵元素为:\n");
    for(int i=0; i<row; i++){
        for(int j=0; j<col; j++){
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
}

void transpose_matrix(int **matrix, int row, int col){
    int temp;
    for(int i=0; i<row; i++){
        for(int j=i+1; j<col; j++){
            temp = matrix[i][j];
            matrix[i][j] = matrix[j][i];
            matrix[j][i] = temp;
        }
    }
}

void add_matrix(int **matrix1, int row1, int col1, int **matrix2, int row2, int col2, int **matrix3){
    if(row1 != row2 || col1 != col2){
        printf("两个矩阵的行列数不相等,无法进行加法运算。\n");
        return;
    }
    for(int i=0; i<row1; i++){
        for(int j=0; j<col1; j++){
            matrix3[i][j] = matrix1[i][j] + matrix2[i][j];
        }
    }
}

void sub_matrix(int **matrix1, int row1, int col1, int **matrix2, int row2, int col2, int **matrix3){
    if(row1 != row2 || col1 != col2){
        printf("两个矩阵的行列数不相等,无法进行减法运算。\n");
        return;
    }
    for(int i=0; i<row1; i++){
        for(int j=0; j<col1; j++){
            matrix3[i][j] = matrix1[i][j] - matrix2[i][j];
        }
    }
}

int main(){
    int choice;
    int arr1[100], len1 = 0;
    int arr2[100], len2 = 0;
    int arr3[200];
    int **matrix1, **matrix2, **matrix3;
    int row1, col1, row2, col2;
    int value, index, key;

    while(1){
        menu();
        printf("请输入您的选择:");
        scanf("%d", &choice);

        switch(choice){
            case 1:
                printf("请输入数组1的长度:");
                scanf("%d", &len1);
                input_array(arr1, len1);
                output_array(arr1, len1);
                break;
            case 2:
                printf("请输入数组1的长度:");
                scanf("%d", &len1);
                input_array(arr1, len1);
                while(1){
                    printf("请选择要进行的操作:\n");
                    printf("1. 查找元素\n");
                    printf("2. 插入元素\n");
                    printf("3. 删除元素\n");
                    printf("4. 返回上一级菜单\n");
                    printf("请输入您的选择:");
                    scanf("%d", &choice);

                    switch(choice){
                        case 1:
                            printf("请输入要查找的元素:");
                            scanf("%d", &key);
                            search_array(arr1, len1, key);
                            break;
                        case 2:
                            printf("请输入要插入的元素和插入的位置(从0开始):");
                            scanf("%d %d", &value, &index);
                            if(index < 0 || index > len1){
                                printf("插入位置不合法,请重新输入。\n");
                                break;
                            }
                            insert_array(arr1, &len1, index, value);
                            output_array(arr1, len1);
                            break;
                        case 3:
                            printf("请输入要删除的元素的位置(从0开始):");
                            scanf("%d", &index);
                            if(index < 0 || index >= len1){
                                printf("删除位置不合法,请重新输入。\n");
                                break;
                            }
                            delete_array(arr1, &len1, index);
                            output_array(arr1, len1);
                            break;
                        case 4:
                            break;
                        default:
                            printf("输入错误,请重新输入。\n");
                            break;
                    }
                    if(choice == 4){
                        break;
                    }
                }
                break;
            case 3:
                printf("请输入数组1的长度:");
                scanf("%d", &len1);
                input_array(arr1, len1);
                printf("请输入数组2的长度:");
                scanf("%d", &len2);
                input_array(arr2, len2);
                merge_array(arr1, len1, arr2, len2, arr3);
                sort_array(arr3, len1+len2);
                output_array(arr3, len1+len2);
                break;
            case 4:
                printf("请输入数组1的长度:");
                scanf("%d", &len1);
                input_array(arr1, len1);
                printf("请输入数组2的长度:");
                scanf("%d", &len2);
                input_array(arr2, len2);
                if(len1 != len2){
                    printf("两个数组长度不相等,无法进行加减乘除运算。\n");
                    break;
                }
                printf("数组1加数组2的结果为:");
                add_array(arr1, len1, arr2, len2, arr3);
                output_array(arr3, len1);
                printf("数组1减数组2的结果为:");
                sub_array(arr1, len1, arr2, len2, arr3);
                output_array(arr3, len1);
                printf("数组1乘数组2的结果为:");
                mul_array(arr1, len1, arr2, len2, arr3);
                output_array(arr3, len1);
                printf("数组1除以数组2的结果为:");
                div_array(arr1, len1, arr2, len2, arr3);
                output_array(arr3, len1);
                break;
            case 5:
                printf("请输入矩阵1的行数和列数:");
                scanf("%d %d", &row1, &col1);
                matrix1 = (int **)malloc(sizeof(int *) * row1);
                for(int i=0; i<row1; i++){
                    matrix1[i] = (int *)malloc(sizeof(int) * col1);
                }
                input_matrix(matrix1, row1, col1);
                output_matrix(matrix1, row1, col1);
                break;
            case 6:
                printf("请输入矩阵1的行数和列数:");
                scanf("%d %d", &row1, &col1);
                matrix1 = (int **)malloc(sizeof(int *) * row1);
                for(int i=0; i<row1; i++){
                    matrix1[i] = (int *)malloc(sizeof(int) * col1);
                }
                input_matrix(matrix1, row1, col1);
                transpose_matrix(matrix1, row1, col1);
                output_matrix(matrix1, col1, row1);
                break;
            case 7:
                printf("请输入矩阵1的行数和列数:");
                scanf("%d %d", &row1, &col1);
                matrix1 = (int **)malloc(sizeof(int *) * row1);
                for(int i=0; i<row1; i++){
                    matrix1[i] = (int *)malloc(sizeof(int) * col1);
                }
                input_matrix(matrix1, row1, col1);
                printf("请输入矩阵2的行数和列数:");
                scanf("%d %d", &row2, &col2);
                matrix2 = (int **)malloc(sizeof(int *) * row2);
                for(int i=0; i<row2; i++){
                    matrix2[i] = (int *)malloc(sizeof(int) * col2);
                }
                input_matrix(matrix2, row2, col2);
                if(row1 != row2 || col1 != col2){
                    printf("两个矩阵的行列数不相等,无法进行加减运算。\n");
                    break;
                }
                matrix3 = (int **)malloc(sizeof(int *) * row1);
                for(int i=0; i<row1; i++){
                    matrix3[i] = (int *)malloc(sizeof(int) * col1);
                }
                add_matrix(matrix1, row1, col1, matrix2, row2, col2, matrix3);
                output_matrix(matrix3, row1, col1);
                sub_matrix(matrix1, row1, col1, matrix2, row2, col2, matrix3);
                output_matrix(matrix3, row1, col1);
                break;
            case 8:
                printf("程序已退出。\n");
                return 0;
            default:
                printf("输入错误,请重新输入。\n");
                break;
        }
    }
    return 0;
}


img

因为这是整除,1/4 2/5 3/6当然都是0了

void div_array(int *arr1, int len1, int *arr2, int len2, double *arr3){
    for(int i=0; i<len1; i++){
        if(arr2[i] == 0){
            printf("数组2中有元素为0,无法进行除法运算。\n");
            return;
        }
        arr3[i] = arr1[i] / (double)arr2[i];
    }
}

主程序里面也要改(为了不影响别的地方,可以用一个arr4,专门是浮点型)
output也要改

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^